공격 개요
2026년 3월 31일, JavaScript 생태계의 가장 인기 있는 HTTP 클라이언트 라이브러리인 Axios가 공급망 공격의 표적이 되었습니다. 이 공격은 북한 소재의 위협 액터 UNC1069로 귀속되었으며, 주당 1억 회 이상 다운로드되는 라이브러리를 악성 원격 접속 트로이목마(RAT) 배포 도구로 전환시켰습니다.
핵심 사항
- 공격 일시: 2026년 3월 31일 00:21 UTC ~ 03:15 UTC (노출 시간: 약 2~3시간)
- 영향 버전: axios@1.14.1, axios@0.30.4
- 악성 의존성: plain-crypto-js@4.2.1
- C2 서버: sfrclak.com:8000 (IP: 142.11.206.73)
- 페이로드: 크로스 플랫폼 RAT (macOS, Windows, Linux)
- 공격자: UNC1069 (북한 연계, BlueNoroff 관련)
공격 타임라인
| 시간 (UTC) | 이벤트 |
|---|---|
| 3월 30일 23:59 | plain-crypto-js@4.2.1 악성 페이로드 게시 |
| 3월 31일 00:05 | npm 자동 스캐너가 plain-crypto-js 감지 (6분 만에 발견) |
| 3월 31일 00:21 | axios@1.14.1 악성 버전 게시 |
| 3월 31일 01:00 | axios@0.30.4 악성 버전 게시 (39분 후) |
| 3월 31일 03:15 | npm 관리자가 악성 버전 삭제 |
기술적 분석
1. 계정 탈취 및 배포 방법
공격자는 Axios 유지 관리자(jasonsaayman)의 npm 계정을 탈취하여 공격을 수행했습니다. 주요 특징은 다음과 같습니다.
- 이메일 변경: 원본 이메일(jasonsaayman@gmail.com)이 ifstap@proton.me(공격자 통제)로 변경
- OIDC 우회: 정상적인 Axios 릴리스는 GitHub Actions와 npm의 OIDC Trusted Publisher 메커니즘을 통해 발행되지만, 이 공격은 도난당한 npm 액세스 토큰으로 수동 게시
- GitHub 흔적 부재: 1.14.1과 0.30.4에 해당하는 커밋, 태그, 릴리스가 GitHub 저장소에 존재하지 않음
2. 팬텀 의존성 공격 (Phantom Dependency)
공격자는 Axios 소스 코드를 직접 수정하지 않고, package.json에 plain-crypto-js@^4.2.1을 새로운 의존성으로 추가했습니다.
- 사용되지 않는 패키지: plain-crypto-js는 Axios 소스 코드 어디에서도 import되지 않음
- 목적: postinstall 훅 실행만을 위한 패키지
- 스텔스 설계: 소스 코드 변조를 최소화하여 코드 리뷰 우회
3. RAT 드로퍼 (setup.js) 상세 분석
악성 페이로드는 다층 난독화 기술을 사용했습니다.
난독화 기법
- XOR 암호화: 키 "OrDeR_7077"을 사용하여 문자열 암호화
- Base64 인코딩: 사용자 지정 치환과 결합
- 런타임 전용 디코딩: 정적 분석 스캐너 우회
플랫폼별 페이로드
| 플랫폼 | 배포 방식 | 아티팩트 위치 |
|---|---|---|
| macOS | AppleScript 템플릿 사용 | /Library/Caches/com.apple.act.mond |
| Windows | PowerShell 복사 및 숨김 실행 | %PROGRAMDATA%\wt.exe |
| Linux | Python 스크립트 | /tmp/ld.py |
C2 통신
모든 페이로드는 동일한 C2 서버와 통신하지만, 플랫폼별로 다른 식별자를 사용합니다.
- 기본 URL: http://sfrclak.com:8000/6202033
- macOS 식별자: packages.npm.org/product0
- Windows 식별자: packages.npm.org/product1
- Linux 식별자: packages.npm.org/product2
4. 포렌식 대응 (Anti-Forensics)
악성코드는 실행 후 스스로 흔적을 지웁니다.
- 악성 setup.js 삭제
- 오염된 package.json 제거
- 깨끗한 package.md를 package.json으로 이름 변경
- node_modules/plain-crypto-js 디렉토리를 정상 패키지처럼 보이게 함
영향 범위
수치로 보는 영향력
- 주간 다운로드: 1억 회 이상 (npm에서 가장 많이 사용되는 HTTP 클라이언트)
- 생태계 침투율: 약 80%의 클라우드 및 코드 환경에 존재
- 실행 관찰: Wiz 분석에 따르면 영향을 받은 환경의 3%에서 실행 확인
- 다운스트림 오염: 공격 윈도우 동안 Axios를 의존성으로 갖는 패키지들이 악성 버전 포함
영향을 받은 조직 유형
Google Threat Intelligence Group의 관찰에 따르면 다음과 같은 산업군에서 활동이 확인되었습니다:
- 정부 기관
- 금융 서비스
- 소매업
- 컨설팅
- 엔터테인먼트
- 제조업
- 기술 기업
- 헬스케어
- 유틸리티
실제 위험
이 공격의 실제 위험은 프로덕션 서버가 아닌 개발자 머신과 CI/CD 파이프라인입니다.
- npm install을 실행하는 시스템이 주 표적
- SSH 키, 클라우드 자격 증명, API 토큰 탈취
- 단일 개발자 머신 침해로부터 전 조직 유출 가능
대응 전략
즉시 대응 (24시간 이내)
-
영향 버전 확인
# lockfile 확인 grep -E "axios@1\.14\.1|axios@0\.30\.4" package-lock.json yarn.lock pnpm-lock.yaml # 설치된 버전 확인 npm list axios | grep -E "1\.14\.1|0\.30\.4" # 악성 의존성 확인 ls node_modules/plain-crypto-js -
버전 롤백
- axios@1.14.0 또는 axios@0.30.3으로 다운그레이드
-
node_modules/plain-crypto-js 디렉토리 삭제
-
자격 증명 교체
- NPM 토큰
- AWS, Azure, GCP 클라우드 액세스 키
- SSH 키
- 데이터베이스 자격 증명
- API 토큰
단기 대응 (72시간 이내)
- C2 인프라 차단
- 도메인: sfrclak.com
- IP: 142.11.206.73
-
포트: 8000
-
시스템 아티팩트 검사
- macOS: /Library/Caches/com.apple.act.mond
- Windows: %PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1
-
Linux: /tmp/ld.py
-
프로필 파일 검토
- .bashrc, .zshrc에서 비인가 수정 사항 확인
-
영구성 확보 시도 탐지
-
네트워크 로그 모니터링
- 포트 8000으로의 아웃바운드 연결
- packages.npm.org/product[0|1|2]로의 POST 요청
장기 대응 (1주 이내)
- CI/CD 파이프라인 감사
- 자동 설치 스크립트 억제 정책 도입
- 의존성 고정(Pinning) 강화
-
보안 스캐너 통합
-
SBOM(Software Bill of Materials) 구축
- 의존성 트리 시각화
-
공급망 위험 식별
-
의존성 관리 강화
- npm audit, npm verify 정기 실행
-
Supply chain security tool 도입 (예: Socket, Snyk)
-
인시던트 대응 절차 개선
- 공급망 공격 시나리오 연습
- 유지 관리자 계정 보안 강화
위협 액터 분석: UNC1069
Google Threat Intelligence Group은 이 공격을 UNC1069로 귀속했습니다.
특징
- 소속: 북한 연계, BlueNoroff 관련
- 동기: 재정적 이익
- 주요 활동: 클라우드 자격 증명, SSH 키, Kubernetes 토큰 탈취
WAVESHAPER.V2 백도어
이 공격에 사용된 백도어는 WAVESHAPER.V2로, UNC1069의 이전 캠페인(RustBucket)과 연결됩니다.
- 기능: 4가지 명령 지원
- 비콘 주기: 60초 간격으로 C2 서버와 통신
- 명령 유형: kill(프로세스 종료) 등
TeamPCP 캠페인 연관성
이 공격은 TeamPCP 공급망 캠페인의 일부로 추정됩니다. 2026년 3월 19일~27일 사이에 다음 프로젝트가 연속으로 탈취되었습니다.
- Trivy 취약점 스캐너 (3월 19일)
- KICS 인프라스트럭처-코드 스캐너 (3월 23일)
- LiteLLM AI 프록시 라이브러리 (3월 24일)
- Telnyx 통신 라이브러리 (3월 27일)
각 케이스에서 악성코드는 클라우드 자격 증명, SSH 키, Kubernetes 구성 파일, CI/CD 시크릿을 수집했습니다.
벤치마킹 사례: 유사 공급망 공격
1. EventStream (2018)
- 타겟: event-stream npm 패키지
- 기법: flatmap-stream 악성 의존성 주입
- 영향: CoinHive 암호화폐 채굴기 배포
- 교훈: 유지 관리자 이전 시 신원 확인 필요
2. ua-parser-js (2021)
- 타겟: ua-parser-js npm 패키지
- 기법: 8분 동안 3개의 악성 버전 게시
- 영향: 코인마이너 및 데이터 탈취 페이로드
- 특징: 2주간 수백만 다운로드 기록 이용 후 악성 버전 게시
3. CanisterWorm (2025)
- 타겟: 다중 npm 패키지
- 기법: 자기 전파 웜 개발자 자격 증명 악용
- 특징: 탈중앙화된 서버 사용하여 생존
- 의의: 이론적인 자기 전파 웜을 실제로 구현
4. Chalk & Debug 공격 (2025년 9월)
- 타겟: debug(357M 주간 다운로드), chalk(299M 주간 다운로드)
- 의존성: ansi-styles, supports-color, strip-ansi 등
- 영향: 다중 의존성 오염
공통 패턴
| 공통 특징 | 설명 |
|---|---|
| 사전 준비 | 악성 패키지 사전 게시하여 "신규 패키지" 경보 회피 |
| 의존성 무기화 | 소스 코드 수정 대신 의존성 추가 방식 선호 |
| 난독화 | 다층 난독화로 정적 분석 우회 |
| 포렌식 대응 | 실행 후 자가 삭제로 증거 소멸 |
| 빠른 노출 | 짧은 시간 동안 최대한 많은 시스템 감염 |
방어 전략: 미래 대비
1. 의존성 고정 (Dependency Pinning)
{
"dependencies": {
"axios": "1.14.0" // ^1.14.0 대신 정확한 버전 명시
}
}
2. 자동 스크립트 억제
# npm의 postinstall 스크립트 비활성화
npm set ignore-scripts true
# 또는 .npmrc 파일에 추가
echo "ignore-scripts=true" >> .npmrc
3. SBOM 및 공급망 가시성
- CycloneDX 또는 SPDX 형식으로 SBOM 생성
- 정기적인 의존성 감사
- Supply chain security tool 도입
4. 개발자 교육
- 공급망 공격 인식
- 패키지 업데이트 프로세스 강화
- 2단계 인증 필수화
결론
Axios 공급망 공격은 현대 소프트웨어 개발 생태계의 취약성을 적나라하게 보여주었습니다. 단일 유지 관리자 계정의 탈취가 수백만 시스템에 영향을 미칠 수 있으며, 공급망 보안은 선택이 아닌 필수입니다.
이 공격의 핵심 교훈은 다음과 같습니다:
- 신뢰할 수 있는 게시자(TOIDC) 메커니즘 강화
- 의존성 고정 및 자동 스크립트 억제
- 개발자 머신의 보안 강화 (프로덕션 서버뿐만 아니라)
- 신속한 공급망 위협 탐지 및 대응
보안 책임은 개별 개발자나 유지 관리자에게만 있는 것이 아닙니다. 전체 생태계가 협력하여 신뢰할 수 있는 소프트웨어 공급망을 구축해야 합니다.
참고문헌
-
SecurityWeek, "Axios NPM Package Breached in North Korean Supply Chain Attack", https://www.securityweek.com/axios-npm-package-breached-in-north-korean-supply-chain-attack/
-
Trend Micro, "Axios NPM Package Compromised: Supply Chain Attack Hits JavaScript HTTP Clients with 100M+ Weekly Downloads", https://www.trendmicro.com/en_us/research/26/c/axios-npm-package-compromised.html
-
Google via Cybernews, "Google: North Korea behind axios NPM supply chain attack", https://cybernews.com/security/axios-npm-supply-chain-attack-north-korea/
-
Bastion, "Axios npm Supply Chain Attack: What Happened & How to Respond", https://bastion.tech/blog/axios-npm-supply-chain-attack
-
Axios, "North Korean hackers linked to Axios npm package compromise", https://www.axios.com/2026/03/31/north-korean-hackers-implicated-in-major-supply-chain-attack
-
SANS, "Axios NPM Supply Chain Compromise: Malicious Packages Deliver Remote Access Trojan", https://www.sans.org/blog/axios-npm-supply-chain-compromise-malicious-packages-remote-access-trojan
-
The Hacker News, "Google Attributes Axios npm Supply Chain Attack to North Korean Group UNC1069", https://thehackernews.com/2026/04/google-attributes-axios-npm-supply.html
-
Wiz, "Tracking TeamPCP: Investigating Post-Compromise Attacks Seen in the Wild", https://www.wiz.io/blog/tracking-teampcp-investigating-post-compromise-attacks-seen-in-the-wild
본 콘텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!