
464,650
불과 2026년 2분기, 단 세 달 만에 새롭게 발견된 악성 오픈소스 패키지의 수입니다. 소나타입 연구팀이 지난 10년간 누적으로 집계한 악성 패키지가 이미 180만 개를 넘어섰다는 이 통계는 개발자의 신뢰를 악용하는 위협이 더 이상 일회성 해프닝이 아닌 '산업화된 공격 패턴'으로 자리 잡았음을 시사합니다.
"우리 회사의 보안팀은 '시프트 레프트(Shift-Left)'를 실천하고 있으니 안전하다"고 믿고 계시나요? 안타깝게도 최신 소프트웨어 공급망 환경에서는 기존의 시프트 레프트만으로는 충분하지 않습니다. 공격자들은 코드가 커밋되거나 빌드되기도 전, 즉 개발자나 AI 어시스턴트가 어떤 패키지를 사용할지 선택하는 바로 그 순간을 노리고 있습니다.
기존 취약점 스캐너는 위협이 파이프라인 내부에 침투하고 실행된 뒤에야 경고를 보냅니다. 그 결과 릴리스는 지연되고, 팀은 끝없는 재작업에 시달리게 되죠. 보안 위협 때문에 밤새워 코드를 롤백해 본 경험이 있다면 이 문제가 얼마나 심각한지 잘 아실 겁니다.
이제는 '어셈블리 타임(Assembly-Time)' 보안으로 방어의 무게 중심을 옮겨야 할 때입니다. 코드가 조립되는 그 순간에 지능적인 통제를 즉각 적용해, 위험한 컴포넌트의 진입 자체를 원천 차단하는 전략입니다.
1. 180만 개의 경고: 무너지는 개발자의 신뢰
이번 2분기에 발견된 신규 악성 패키지의 96.6%는 npm 생태계에서 쏟아졌습니다. 공격자들은 대규모 저장소 남용, 웜(Worm)형 멀웨어, 의존성 혼란, 메인테이너 계정 탈취 등을 동시다발적으로 일으키며 신뢰받던 배포 채널을 직접적인 공격 경로로 바꿔놓았습니다.

npm의 비중이 압도적이긴 하지만, 다른 생태계 역시 안전지대는 아닙니다. npm을 제외한 나머지 생태계의 악성 활동 분포를 보면 공격이 얼마나 다각화되고 있는지 알 수 있습니다.
| 생태계 | 점유율 (npm 제외 시) | 주요 위협 패턴 |
| PyPI | 48.5% | PUA(잠재적 원치 않는 앱), 기밀(Secrets) 유출, 드로퍼 |
| NuGet | 38.0% | PUA, 기밀 유출, 자격증명 탈취 |
| Hugging Face | 6.8% | AI/ML 모델 취약점 및 악성 아티팩트 |
| RubyGems | 3.0% | 페이로드 전달형 공격 |
npm이 무차별적인 물량 공세를 펼쳤다면, PyPI와 NuGet은 정교한 자격증명 탈취와 페이로드 전달에 집중하며 빈틈을 파고들었습니다.
진화하는 공격 기법: 자가 증식부터 신뢰 탈취까지
올해 확인된 공격들은 과거보다 한층 더 교묘해졌습니다. 단순한 악성 코드 삽입을 넘어, 공격 사이클을 자동화하고 개발자의 신뢰를 무기화하고 있습니다.
- Shai-Hulud Miasma 캠페인: 일반적인 설치 스크립트 대신 binding.gyp를 악용해 패키지 설치 과정에서 은밀하게 실행됩니다. CI/CD 환경의 데이터를 수집하고 토큰을 탈취한 뒤, 이를 이용해 또 다른 악성 아티팩트를 배포합니다.
- 자가 증식형 공격 (CanisterSprawl): 개발자 머신에서 탈취한 민감 데이터와 자격증명을 바탕으로 추가 악성 패키지를 자동 게시합니다. 자격증명 탈취가 공격의 끝이 아닌 새로운 시작점이 된 셈입니다.
- 의존성 혼란 악용: 비정상적으로 높은 버전 번호를 부여해 내부 시스템이 정상 패키지 대신 악성 패키지를 다운로드하도록 유도합니다. 환경 변수, CI/CD 시크릿, 인증 토큰 등을 무단으로 빼냅니다.
- 공급망 계정 탈취 및 브랜드재킹: PyTorch Lightning 퍼블리셔 계정 탈취 사건이나 Lazarus Group의 브랜드재킹처럼, 유명 패키지의 이름과 패턴을 교묘하게 흉내 내어 개발자가 스스로 함정에 빠지도록 유도합니다.
AI 개발 시대, 시프트 레프트가 놓치고 있는 것
문제를 초기에 발견하자는 시프트 레프트의 철학은 여전히 옳습니다. 하지만 AI가 코드를 짜고 라이브러리를 추천하는 시대에는 이것만으로는 너무 부족합니다.
위험은 스캐너가 작동하기 한참 전, 다음과 같은 순간에 이미 파이프라인에 스며듭니다.
- 개발자가 무심코 패키지를 선택할 때
- 알지 못하는 전이 의존성(Transitive dependency)이 딸려 올 때
- AI 코딩 어시스턴트가 단 1초 만에 낯선 라이브러리를 추천할 때
파이프라인 후반부에서 스캐너가 문제를 잡아낸다 해도, 개발자는 이미 다른 작업을 하고 있고 보안팀은 알람을 분석하느라 지쳐갑니다. 이 격차를 해결하는 방법은 AI 도입을 늦추는 것이 아니라, 위험이 SDLC(소프트웨어 개발 수명 주기)에 들어오기 전에 안전한 선택을 하도록 실시간으로 가이드하는 것입니다.
차세대 해답: 어셈블리 타임(Assembly-Time) 보안
완벽한 방어를 위해서는 '어셈블리 타임 보안'이 필수적입니다. 개발자나 AI가 패키지를 요청하고 선택하는 찰나의 순간에 지능적인 통제가 개입해, 악성 컴포넌트가 내부에 발을 들이지 못하게 원천 차단하는 방식입니다.
단순히 CVE 취약점 목록을 띄워주는 것으로는 부족합니다. 해당 패키지가 정상적으로 유지보수되고 있는지, 악성 행위의 징후는 없는지, 조직의 보안 정책에 부합하는지, 더 안전한 대체재는 없는지를 즉각적으로 판단할 수 있는 실시간 인텔리전스가 필요합니다.
완벽한 데브섹옵스 구축을 위한 실무 가이드
어셈블리 타임 거버넌스를 실무에 성공적으로 안착시키려면 다음 6가지 핵심 역량이 유기적으로 맞물려야 합니다.
- 저장소 제어: 컴포넌트가 조직 내부에 진입하는 관문을 엄격히 통제합니다.
- 멀웨어 보호: 사용 전 의심스럽거나 확인된 악성 패키지를 즉시 차단합니다.
- 의존성 인텔리전스: 더 안전한 오픈소스 대안을 선제적으로 안내합니다.
- 개발자 가이던스: 재작업을 줄이고 안전한 컴포넌트 채택률을 높입니다.
- SBOM 관리: 소프트웨어 수명주기 전반에 걸쳐 구성 요소의 가시성을 확보합니다.
- AI 거버넌스: AI가 추천한 의존성과 생성 코드를 안전하게 사용할 수 있도록 가드레일을 제공합니다.
이러한 제어 요소를 하나로 묶는 통합 플랫폼의 도입도 고려해 볼 만합니다. 예를 들어 '소나타입 넥서스 원(Nexus One)'은 저장소 관리(Repository), 방화벽(Firewall), 취약점 관리(Lifecycle), SBOM 매니저 등을 단일 체계로 통합하여 개발 경험을 해치지 않고 안전한 코드 배포를 지원합니다. (소나타입은 이를 바탕으로 2026년 가트너 소프트웨어 공급망 보안 부문 리더로 선정되기도 했습니다.)
💡 조직 차원의 체크리스트
- 알려진 악성 컴포넌트가 내부 저장소에 유입되기 전 자동 차단되고 있는가?
- 직접 의존성뿐만 아니라 전이 의존성까지 악성 행위 탐지가 가능한가?
- 내부 네임스페이스가 의존성 혼란 공격으로부터 보호받고 있는가?
- AI/ML 아티팩트(모델 등)까지 공급망 보안 거버넌스 범위에 포함되어 있는가?
보안의 패러다임을 바꿀 시간입니다.
개발 속도와 보안은 더 이상 타협의 대상이 아닙니다. AI와 자동화는 개발의 혁신을 가져왔지만, 역으로 공격자에게도 강력한 자동화 무기를 쥐여주었습니다. 신뢰받던 배포 경로마저 위협받는 지금, 파이프라인의 가장 앞단인 '어셈블리 타임'부터 보안을 촘촘히 엮어내는 것은 선택이 아닌 생존을 위한 필수 전략입니다.
지금 바로 우리 조직의 소프트웨어 공급망을 점검해 보세요. 안전한 데브섹옵스(DevSecOps)의 첫걸음은 현재의 취약점을 정확히 직시하는 것에서 시작됩니다.
더 자세한 인사이트와 구체적인 통계 자료가 필요하시다면 소나타입의 「Q2 2026 Open Source Malware Index」 리포트를 참고해 보시길 권장합니다.
원문 출처:
Q2 2026 Open Source Malware Index: Attackers Abuse Developer Trust
Shift Left Is No Longer Early Enough: Software Security Has to Start at Assembly
참고 링크: