cd ../blog
MITRE

NPM 패키지 위조 공격: 개발 도구가 백도어가 되는 원리 | T1195.001

읽는 시간 약 8분
조회수 0
MITRE ATT&CKT1195.001공급망 보안개발자 보안

북한 APT가 NPM 패키지로 개발자를 노리는 이유. BeaverTail, XCSSET 실제 사례와 탐지 우회 원리, 공급망 보안 대책까지. 지금 확인하세요.

share:
NPM 패키지 위조 공격: 개발 도구가 백도어가 되는 원리 | T1195.001

MITRE ATT&CK: T1195.001 (Compromise Software Dependencies and Development Tools) | 전술: Initial Access | 플랫폼: PRE, Linux, macOS, Windows

도입: 왜 이 공격이 중요한가

개발자가 npm install을 실행하는 순간, 북한 해커들이 시스템에 침투할 수 있습니다. 2024년 Lazarus 그룹이 가짜 NPM 패키지로 암호화폐 개발자들을 노린 사건이 바로 그 예시죠.

공격자들은 더 이상 복잡한 제로데이 취약점을 찾지 않아도 됩니다. 개발자들이 매일 사용하는 패키지 매니저와 개발 도구 자체를 악용하거든요. 정상적인 개발 과정에서 자연스럽게 악성코드가 설치되니까 탐지도 어렵고요.

💡 쉬운 비유: 마트에서 파는 우유에 독을 넣는 것과 같습니다. 소비자는 정상적인 구매 행위를 했을 뿐인데 피해를 당하게 되죠.


1. 공격자 관점

왜 이 기법을 사용하는가

  • 대규모 감염 가능: 하나의 인기 패키지를 침해하면 수천 개의 프로젝트가 동시에 감염됨
  • 신뢰성 악용: 개발자들은 패키지 매니저를 통한 설치를 당연하게 여기므로 의심하지 않음
  • 지속적 접근: CI/CD 파이프라인에 포함되면 새로운 빌드마다 자동으로 악성코드가 실행됨

동작 흐름

공격자는 개발자의 일상적인 작업 흐름을 악용합니다.

단계공격자 행동피해자(개발자) 행동
1. 준비인기 패키지와 유사한 이름의 가짜 패키지 생성 (typosquatting)평상시 개발 작업
2. 배포NPM, PyPI 등 공개 저장소에 악성 패키지 업로드프로젝트 의존성 설치 시도
3. 감염개발자가 오타로 가짜 패키지 설치 시 악성코드 실행npm install 또는 pip install 실행
4. 확산CI/CD 파이프라인을 통해 프로덕션 환경까지 전파코드 빌드 및 배포

2. 실제 공격 사례

📌 Lazarus (APT38) - Contagious Interview Campaign (2024)

배경: 북한 Lazarus 그룹이 암호화폐 업계 개발자들을 표적으로 삼아 가짜 채용 면접을 빌미로 공격을 시도했습니다. 이들의 목표는 암호화폐 관련 기업의 내부 정보와 자산 탈취였죠.

공격 과정:

  1. 가짜 채용공고: LinkedIn 등에서 매력적인 개발자 채용 공고를 올려 표적을 유인
  2. NPM 패키지 유포: BeaverTail 악성코드가 포함된 NPM 패키지를 면접 과제로 제공
  3. 시스템 침해: 개발자가 패키지를 설치하면 정보 수집 도구(InvisibleFerret)가 자동 실행되어 민감한 데이터 탈취

피해 규모: 암호화폐 시장 메이킹 회사, 온라인 카지노, 소프트웨어 개발 회사 등 최소 3개 조직이 2024년 10-11월 사이 피해를 당했습니다.

출처: eSentire - Bored BeaverTail & InvisibleFerret Yacht Club


📌 XCSSET - Xcode 프로젝트 감염 (2020)

배경: macOS를 표적으로 한 XCSSET 악성코드는 개발자들의 Xcode 프로젝트를 직접 감염시키는 방식을 사용했습니다. iOS 앱 개발자들의 개발 환경 자체를 공격 벡터로 활용한 사례죠.

공격 과정:

  1. CocoaPods 탐색: 시스템의 /Library/Ruby/Gems 폴더에서 CocoaPods 관련 파일들을 열거
  2. Xcode 프로젝트 감염: .xcodeproj 폴더를 찾아 악성 스크립트와 Mach-O 파일을 주입
  3. 백도어 설치: Safari 브라우저에 UXSS(Universal Cross-Site Scripting) 백도어를 심어 웹 트래픽 조작

피해 규모: macOS 개발자 커뮤니티 전반에 영향을 미쳤으며, 감염된 앱이 App Store에 배포될 위험까지 있었습니다.

출처: Trend Micro - XCSSET Technical Brief


3. 왜 탐지가 어려운가?

공식 탐지 방법

MITRE에서 제시하는 탐지 방법은 다음과 같습니다:

DET0009 공급망 변조 탐지: 패키지 매니저(npm/yarn/pip 등)가 콘텐츠를 다운로드하거나 복원할 때, 프로젝트 경로와 실행 경로(node_modules, packages 등)에 파일이 작성되는 것을 모니터링합니다. 새로 작성된 컴포넌트가 처음 실행될 때 스크립트(preinstall/postinstall), 셸/PowerShell 실행, 또는 로더 DLL이 트리거되고, 이후 승인되지 않은 레지스트리/CDN으로의 네트워크 송신이 발생하는 패턴을 탐지합니다.

공격자가 이 기법을 선호하는 이유

정상 행위로 위장: 패키지 설치는 개발자의 일상적인 작업이라 보안팀이 의심하지 않습니다. npm install 명령어 자체는 완전히 정상적이거든요.

광범위한 영향: 하나의 패키지가 수많은 프로젝트에서 사용되므로, 한 번의 침해로 엄청난 파급효과를 낼 수 있어요.

자동화된 확산: CI/CD 파이프라인에 포함되면 사람의 개입 없이도 자동으로 악성코드가 실행됩니다.

탐지의 현실적 한계

패키지 설치는 너무 빈번함: 개발팀에서는 하루에도 수십 번의 패키지 설치가 일어나는데, 이를 모두 모니터링하기엔 너무 많은 이벤트가 발생해요.

False Positive 문제: 정상적인 postinstall 스크립트와 악성 스크립트를 구분하기가 쉽지 않습니다. 많은 정상 패키지도 설치 후 추가 작업을 수행하거든요.

네트워크 활동의 모호성: 패키지들이 CDN이나 외부 저장소에서 추가 리소스를 다운로드하는 것은 일반적인 행위라 악성 통신과 구분이 어렵습니다.


4. 나도 위험할까? 자가 진단

이 공격이 나와 관련 있는지 확인해보세요.

이런 환경이라면 주의가 필요합니다

  • 개발팀에서 NPM, PyPI, NuGet 등 공개 패키지 저장소를 자주 사용하는 경우
  • CI/CD 파이프라인이 외부 저장소에서 직접 의존성을 다운로드하도록 설정된 경우
  • 패키지 설치 시 의존성 버전을 고정하지 않고 최신 버전을 자동으로 받아오는 경우
  • GitHub Actions 등 써드파티 CI/CD 컴포넌트를 검증 없이 사용하는 경우

공식 대응 방안

M1013 애플리케이션 개발자 가이드: 애플리케이션 개발자들은 써드파티 라이브러리를 선택할 때 신중해야 합니다. 가능한 경우 소프트웨어 의존성을 빌드 시 최신 버전을 가져오는 것보다 특정 버전으로 고정해야 합니다. GitHub Actions는 태그나 브랜치보다는 특정 커밋 해시로 고정하는 것이 좋습니다.

M1033 소프트웨어 설치 제한: 가능한 경우 개발자들이 외부 저장소보다는 검증되고 승인된 패키지가 포함된 내부 저장소에서 가져오도록 요구하는 것을 고려해보세요.

M1051 소프트웨어 업데이트: 사용하지 않는 의존성, 유지보수되지 않거나 이전에 취약했던 의존성, 불필요한 기능, 컴포넌트, 파일, 문서를 확인하는 패치 관리 프로세스를 구현해야 합니다.

M1016 취약점 스캐닝: 취약점 소스에 대한 지속적인 모니터링과 자동/수동 코드 리뷰 도구의 사용도 구현되어야 합니다.

당장 할 수 있는 것

  • 패키지 설치 전 패키지명 철자를 꼼꼼히 확인하고, 다운로드 수와 최근 업데이트 날짜를 체크하기
  • 개인 프로젝트에서도 package-lock.json이나 requirements.txt로 의존성 버전을 고정하는 습관 기르기
  • 🏢 보안 담당자: 내부 패키지 저장소(Nexus, Artifactory 등) 구축하여 검증된 패키지만 사용하도록 정책 수립

5. 관련 기술

기법설명링크
T1195 Supply Chain Compromise전체적인 공급망 침해 공격의 3가지 세부 기법을 다루며, 개발 도구 외에도 소프트웨어 공급망과 하드웨어 공급망 침해 방법을 설명합니다상세 분석 보기
T1059.007 JavaScript침해된 NPM 패키지에서 자주 사용되는 JavaScript 기반 악성코드 실행 기법으로, Node.js 환경에서 시스템 명령을 실행하는 데 활용됩니다상세 분석 보기
T1562.001 Disable or Modify Tools패키지 설치 과정에서 보안 도구를 무력화하여 탐지를 우회하는 기법으로, 공급망 공격과 함께 자주 사용됩니다상세 분석 보기

참고 자료


관련 글 더 보기


안내 및 법적 고지

AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었으며, MITRE ATT&CK (최신 버전) 기준 정보를 포함합니다. 기술적 내용은 MITRE ATT&CK 공식 데이터를 기반으로 하며, 보안 교육 목적으로 제공됩니다.

면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.

COMMENTS (0)

댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.