마이크로소프트 패키지, 자격증명 탈취 악성코드에 또 감염
최근 몇 주 새 두 번째로 마이크로소프트 공식 오픈소스 패키지 저장소가 해킹당해 자격증명을 탈취하는 악성코드가 유포되었습니다. 공격자는 개발자의 인증 정보를 탈취해 정상적인 것으로 위장한 빌드를 게시하는 방식으로 공급망을 감염시켰습니다. 이 사건은 최신 보안 인증 모델의 맹점을 드러내고 클라우드 인프라 전체로 악영향을 미칠 수 있어 매우 심각한 보안 위협으로 평가됩니다.
지난주 후반, 암호화로 검증된 수십 개의 마이크로소프트 오픈소스 패키지에 악성코드가 심어졌습니다. 개발자가 AI 코딩 에이전트에서 해당 패키지를 열면 고도화된 자격증명 탈코드가 실행되는 방식이었습니다. 여러 연구원들에 따르면, 총 73개의 패키지가 악성으로 분류되어 깃허브(GitHub)의 자동화 시스템에 의해 플랫폼에서 차단되었습니다. 마이크로소프트 산하의 깃허브는 이 패키지들이 악성이라고 명시하거나, AI 에이전트를 통해 이를 사용한 개발자들이 시스템이 감염되었을 수 있다고 경고하는 대신, "깃허브 서비스 약관 위반"을 이유로 패키지를 비활성화했다고만 밝혔습니다. 또한 패키지 소유자에게 깃허브에 연락해달라는 내용의 안내 문구만 남겼습니다.
개발자들에게 전달된 메시지: 시스템 감염을 가정하고 조치하십시오.
월요일이 되어서야 마이크로소프트는 패키지가 감염되었을 가능성을 제기했습니다. 회사 측은 이메일을 통해 "잠재적인 악성 콘텐츠를 조사하는 동안 일부 저장소를 일시적으로 제거했다"고 밝혔습니다.
이번 사건은 공식 마이크로소프트 저장소 계정에 발생한 두 번째 공급망 공격입니다. 지난 5월 중순, 보안 업체 스텝시큐리티(StepSecurity)는 파이썬 패키지 인덱스(PyPI)에 있는 마이크로소프트의 'durabletask' Python SDK가 해킹당했음을 보고했습니다. 해당 패키지는 장애 허용 워크플로와 오케스트레이션을 구축하여 분산 트랜잭션 및 기타 작업을 자동화하는 프레임워크로, 월 40만 건의 다운로드를 기록하고 있었습니다.
감염된 패키지들은 28KB 크기의 페이로드를 실행하여 AWS, Azure, GCP, Kubernetes, 비밀번호 관리자 및 90개 이상의 개발자 도구 구성에서 자격증명을 탈취했습니다. 이후 클라우드 인프라를 통해 측면으로 확산되며 다른 개발자 컴퓨터를 감염시켰습니다. 'TeamPCP'로 추적되는 위협 행위자와 관련된 이번 공격은 패키지 게시용 마이크로소프트 자격증명을 탈취한 후 durabletask 패키지를 감염시켰습니다. 이 기법을 통해 공격자는 저장소의 빌드 파이프라인을 완전히 우회할 수 있었습니다.
이번 공격에 사용된 악성코드는 '미아즈마(Miasma)'로 추적됩니다. 이는 위협 행위자가 최근 오픈소스로 공개한 TeamPCP의 'Mini Shai-Hulud' 툴킷을 본질적으로 복제한 것입니다. 보안 업체 클라우드스미스(Cloudsmith)에 따르면, 이 악성코드는 소프트웨어 무결성에 대한 암호학적으로 서명된 보증을 제공하는 방법인 SLSA(Supply-chain Levels for Software Artifacts) 출처 증명에 사용되는 OIDC(OpenID-Connect) 토큰 자격증명을 수집합니다.
5월의 마이크로소프트 durabletask 해킹 사건과 마찬가지로, 지난주 사건 역시 정상적인 마이크로소프트 OIDC 토큰을 훔치는 기능을 활용했습니다. 이 토큰은 수십 개의 레드햇(Red Hat) 패키지를 감염시킨 별도의 공급망 공격에도 사용되었습니다.
클라우드스미스는 "이 미아즈마 웜의 교묘함은 합법적인 워크플로에 어떻게 영합했는지에 있다"며, "깃허브나 npm의 소프트웨어 취약점을 전혀 악용하지 않고 현대 엔지니어링 생태계의 기본적인 신뢰 모델을 악용한다"고 밝혔습니다.
클라우드스미스는 이어서 다음과 같이 덧붙였습니다. 개발자 자격증명이 유출되면서 합법적인 깃허브 OIDC 토큰이 요청되었습니다. 이어서 유효한 SLSA 출처를 포함한 악성 빌드가 게시되었고, 결국 기존의 스캐너들은 이를 일상적인 신뢰할 수 있는 업데이트로 간주하게 되었습니다. 정상적인 유지보수자의 자격증명을 훔침으로써 이 웜은 인증된 게시자와 정확히 동일하게 행동할 수 있었습니다.
또한 미아즈마는 개별 감염마다 고유하게 암호화된 페이로드를 생성합니다. 즉, 파일 시그니처가 모든 패키지 버전마다 변경되므로 전통적인 해시 기반의 침해 지표(IOC)는 광범위한 탐지에 있어 기능적으로 쓸모가 없게 됩니다.
레드햇의 앤드류 맥나마라(Andrew McNamara)는 전용 블로그 게시물을 통해 SLSA의 한계점이 어디에 있는지 설명했습니다. Mini Shai-Hulud 악성코드의 이전 버전들이 순수하게 로컬 비밀번호 스크래핑에만 집중했던 반면, 이번 미아즈마 웜은 GCP와 Azure의 클라우드 ID를 위해 특별히 설계된 고급 데이터 수집기를 장착하고 있습니다. 감염된 개발자의 컴퓨터와 CI/CD 러너가 액세스할 수 있는 모든 클라우드 ID를 수집하려고 시도하며, 이는 막대한 피해를 입힐 수 있음을 보여줍니다.