Skip to main content
공개 노트

Microsoft 패키지 침해가 말하는 것: 이제 "설치"보다 "개발 환경"이 표적이다

Views 2약 4분생성형 AI 활용
Summary

Microsoft 패키지 침해가 말하는 것: 이제 "설치"보다 "개발 환경"이 표적이다

지난주 말 Microsoft와 관련된 암호학적으로 검증된 오픈소스 패키지 수십 개가 침해됐고, GitHub 자동화 시스템은 73개 패키지를 악성으로 표시해 차단했다. Microsoft는 이후 일부 저장소를 임시 제거했다고 밝혔다.1

이 사건의 핵심은 “악성 패키지가 올라왔다”는 사실 자체보다 더 크다. 개발자가 신뢰한 패키지를 설치하고, CI/CD에서 실행하는 순간 자격 증명과 배포 권한이 빠져나갈 수 있다는 점이다.

공격의 표적은 패키지가 아니라 개발 흐름이다

Mini Shai-Hulud 계열 공격은 npm, GitHub 저장소, PyPI 등 여러 공급망 경로를 이용해 자격 증명 탈취 페이로드를 배포했다.1 공격자는 단일 취약점보다 개발자가 평소처럼 의존성을 설치하고 빌드하는 과정을 노렸다.

이 변화가 중요한 이유는 명확하다. 패키지 설치는 더 이상 단순한 준비 단계가 아니다. 설치 스크립트, 빌드 워크플로, CI/CD 런너는 모두 코드가 실행되는 지점이며, 동시에 민감한 토큰과 클라우드 권한이 모이는 지점이다.

탈취 대상은 비밀번호보다 위험한 배포 권한이다

Microsoft가 분석한 @antv npm 공격에서는 유지관리자 계정이 침해됐고, 악성 버전의 데이터 시각화 패키지가 게시됐다. 악성 페이로드는 약 499KB 크기의 난독화된 JavaScript 파일이었으며, npm install 중 preinstall 훅을 통해 자동 실행됐다.2

이 공격은 하위 의존성을 통해서도 전파됐다. 예를 들어 echarts-for-react 같은 패키지가 영향을 받았고, 이 라이브러리는 주간 다운로드가 100만 건을 넘는 규모였다.2 한 유지관리자 계정의 침해가 넓은 의존성 그래프를 타고 확산될 수 있음을 보여준다.

페이로드는 아무 환경에서나 실행되지 않았다. GitHub Actions의 Linux 환경이 아니면 즉시 종료하는 조건 검사를 수행했다.2 이는 공격자가 일반 사용자 PC보다 CI/CD 환경을 더 가치 있는 표적으로 봤다는 뜻이다.

표적이 된 자격 증명도 개발·배포 권한에 집중됐다. GitHub, AWS, HashiCorp Vault, npm, Kubernetes, 1Password 자격 증명이 수집 대상이었다.2 특히 GitHub Personal Access Token, 설치 토큰, 저장소 시크릿, 조직 시크릿을 찾았고, AWS Instance Metadata Service와 ECS 메타데이터 엔드포인트를 조회해 클라우드 자격 증명도 수집했다.2

가장 우려되는 부분은 GitHub Actions Runner.Worker 프로세스 메모리 스캔이다. 페이로드는 런너 메모리에서 마스킹된 시크릿을 우회적으로 추출했다.2 로그에서 가려진 값도 실행 중인 환경 안에서는 노출될 수 있다는 점을 찌른 것이다.

“검증된 패키지”만으로는 충분하지 않다

이번 사건이 불편한 이유는 침해 대상이 낯선 개인 패키지가 아니라 Microsoft와 관련된 검증된 오픈소스 패키지였다는 점이다. 서명이나 출처 증명은 중요한 방어선이지만, 그 자체가 모든 위험을 제거하지는 않는다.

서명은 “이 패키지가 어떤 절차로 만들어졌는가”를 설명할 수 있다. 그러나 유지관리자 계정이 탈취됐는지, 설치 훅이 안전한지, CI/CD 런너가 필요한 최소 권한만 갖고 있는지까지 자동으로 보장하지는 않는다.

이미 2024년 5월에도 StepSecurity는 PyPI의 Microsoft durabletask Python SDK 침해를 문서화한 바 있다. 당시 침해된 durabletask 패키지는 월 40만 건의 다운로드를 기록했다. 널리 쓰이는 패키지일수록 공격자에게는 더 매력적인 배포 채널이 된다.

지금 점검해야 할 것

영향 가능성이 있는 팀은 먼저 의존성 잠금 파일과 빌드 로그를 확인해야 한다. 의심 기간에 설치된 패키지, 실행된 설치 스크립트, 예상치 못한 네트워크 연결, 변경된 워크플로를 우선적으로 살펴봐야 한다.

자격 증명은 노출됐다고 가정하고 대응하는 편이 안전하다. GitHub, npm, PyPI, AWS 등 클라우드 계정, Kubernetes, Vault, 1Password와 연결된 토큰은 사용 범위와 생성 시점을 확인하고 필요한 경우 즉시 교체해야 한다.

운영 측면에서는 패키지 설치 중 자동 스크립트 실행을 제한하고, CI/CD 토큰의 권한을 최소화해야 한다. GitHub Actions에서는 불필요한 시크릿 주입을 줄이고, 외부 액션이나 의존성은 가능한 한 태그보다 커밋 SHA로 고정하는 습관이 필요하다.

이번 사건의 결론은 단순하다. 개발 환경은 더 이상 내부 도구가 아니다. 공격자가 가장 먼저 노리는 배포 관문이며, 패키지 신뢰는 이제 저장소 이름이나 서명 여부만이 아니라 계정 보안, 설치 훅, 런너 권한, 시크릿 관리까지 함께 평가해야 한다.

1Miasma Worm Reaches Microsoft Azure and PyPI: 73 Repositories Disabled, Hades Wave Drops 37 Malicious Python Wheels

2Mini Shai Hulud: Compromised @antv npm packages enable CI/CD credential theft | Microsoft Security Blog

3Preinstall to persistence: Inside the Red Hat npm Miasma credential-stealing campaign

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기