IronWorm은 'claude'로 커밋하여 Anthropic 및 OpenAI 키를 탈취합니다
요약
IronWorm는 AI 코딩 어시스턴트인 'claude'를 사칭하여 공급망 공격을 수행하는 새로운 형태의 악성코드입니다. 이 공격은 OpenAI, Anthropic, Cursor 등 AI 관련 API 키와 자격 증명을 집중적으로 탈취하며, GitHub Actions의 Trusted Publishing을 악용하여 패키지를 전파합니다.
핵심 포인트
- AI 도구(claude)를 사칭한 고도화된 사회 공학적 공격
- OpenAI, Anthropic 등 AI API 키 및 인증 파일 집중 탈취
- GitHub Actions 워크플로우를 수정하여 Trusted Publishing 악용
- 타임스탬프 위조를 통해 git log 탐지를 회피
6월 4일, JFrog Security Research는 asteroiddao 계정을 통해 37개의 npm 패키지를 침해한 공급망 공격(supply chain attack)인 IronWorm에 대한 분석 결과를 발표했습니다. preinstall에 의해 트리거되는 976KB 크기의 Rust ELF 바이너리입니다. 인기 패키지로 확산되기 전 조기에 발견되었습니다. 하지만 이 기술은 이전의 모든 것들과는 차원이 다른 변화를 보여줍니다.
IronWorm를 다르게 만드는 세 가지 요소가 있습니다.
1. "claude"로 커밋합니다
피해 저장소(repository)에 푸시된 모든 악성 커밋은 claude@users.noreply.github.com이라는 작성자 신원을 사용합니다. 커밋 메시지는 "fix: resolve lint warnings", "test: add missing edge case", "ci: update workflow configuration"와 같이 일상적입니다.
타임스탬프(timestamps)는 위조되었습니다. 일부는 13년 전으로 소급 적용되었습니다. AI가 생성한 커밋이 흔하고 정당한 저장소에서 이러한 커밋은 자연스럽게 섞여 들어갑니다. git log를 스캔하는 개발자는 눈치채지 못할 것입니다. "claude"로부터 온 커밋을 보는 코드 리뷰어(code reviewer)는 그것이 자신의 일을 수행 중인 AI 코딩 어시스턴트(AI coding assistant)로부터 온 것이라고 가정할 수도 있습니다.
AI 시대에 맞게 적응한 사회 공학(Social engineering)입니다. 공격자는 인간인 척하는 것이 아니라, 팀이 이미 신뢰하고 있는 AI 도구인 척하고 있습니다.
2. AI 자격 증명을 구체적으로 탈취합니다
IronWorm는 86개의 환경 변수(environment variables)와 20개 이상의 자격 증명 파일(credential files)을 타겟으로 삼습니다. 표준 타겟(AWS, SSH, Docker)에 더해 다음과 같은 새로운 카테고리가 포함됩니다:
- OpenAI API 키 (
OPENAI_API_KEY) - Anthropic API 키 (
ANTHROPIC_API_KEY) - Claude 인증 파일 (세션 토큰)
- Cursor 인증 파일
- npm publish 토큰 (Trusted Publishing OIDC 토큰 포함)
탈취된 AI 키는 즉각적인 가치를 지닙니다. 지출 한도가 없는 OpenAI 키는 누군가 알아차리기 전에 수천 달러를 소모합니다. Anthropic 키는 공격을 확대하는 에이전트(agents)를 실행합니다. npm 토큰은 침해된 개발자 한 명을 그들이 관리하는 모든 패키지의 공격 벡터(vector)로 변모시킵니다.
전용 Exodus 지갑 모듈은 로그인 시 비밀번호와 시드 니모닉(seed mnemonic)을 캡처하기 위해 JavaScript를 주입합니다. 이것은 일반적인 자격 증명 스크래퍼(credential scraper)가 아닙니다. 가치가 높은 타겟별로 맞춤형 모듈을 사용합니다.
3. Trusted Publishing을 통한 전파
pm의 Trusted Publishing은 저장된 자격 증명 (credentials) 대신 GitHub Actions OIDC 토큰을 통해 패키지를 게시할 수 있게 해줍니다. 이는 훔쳐갈 수 있는 장기 생존 토큰 (long-lived tokens)이 없도록 설계되어 더 안전합니다.
IronWorm는 저장된 자격 증명이 필요하지 않습니다. 이 악성코드는 GitHub Actions 워크플로우 (workflows)를 수정하여 런타임 (runtime)에 OIDC 토큰을 요청하도록 하며, 그 후 유효한 출처 증명 (provenance attestations)을 포함한 피해자 패키지의 트로이 목마 버전 (trojanized versions)을 게시합니다.
결과적으로: npm audit signatures를 통과하는 악성 패키지가 생성됩니다. 출처 증명 (Provenance)은 "검증된 CI 파이프라인을 통해 게시됨"이라고 말할 뿐, "CI 파이프라인이 하이재킹(hijacked)됨"이라고 말하지는 않습니다.
이는 일주일 전 Red Hat의 SLSA 출처 증명 (provenance)을 이용해 Miasma가 악용했던 것과 동일한 근본적인 격차입니다. 일주일 간격으로 발생한 두 건의 독립적인 공격 모두 서로 다른 메커니즘을 통해 출처 증명 (provenance)을 무력화했습니다. 출처 증명 (Provenance)은 관리 연속성 (chain-of-custody) 도장일 뿐, 신뢰 신호 (trust signal)가 아닙니다.
행동 점수 (behavioral scoring)가 보여주는 것
저는 모든 IronWorm 패키지를 Commit의 행동 감사 (behavioral audit)를 통해 실행했습니다:
| 패키지 | 점수 | 게시자 | 주간 다운로드 | 연령 |
|---|---|---|---|---|
| weavedb-sdk | 53 | 1 | ~1.2k | ~4년 |
| ... |
단일 게시자. 낮은 다운로드 수. 제한된 이력. 모든 IronWorm 패키지는 첫 설치가 완료되기 전 행동 점수 (behavioral scoring)가 포착하는 프로필에 부합합니다.
에스컬레이션 타임라인 (escalation timeline)
| 날짜 | 공격 | 새로운 점 |
|---|---|---|
| 3월 5일 | LiteLLM | 단일 패키지 PyPI 자격 증명 탈취 |
| ... |
각 공격은 이전 공격에는 없던 기능을 도입합니다. IronWorm는 Rust로 작성된 최초의 npm 공급망 악성코드이며, eBPF 커널 루트킷 (kernel rootkit)을 사용한 최초의 사례이자, Trusted Publishing OIDC를 통해 스스로 전파되는 최초의 사례입니다.
그리고 이는 특히 AI 코딩 어시스턴트 (AI coding assistant) 자격 증명을 타겟으로 합니다. 공격 벡터 (attack vector)가 완전히 한 바퀴를 돌았습니다. AI 도구는 개발을 가속화하지만, 그 자격 증명은 이제 고가치의 타겟이 되었으며, 도구 그 자체가 커밋 기록 (commit history)에서 사칭되고 있습니다.
대응 방안
AI 어시스턴트의 설치를 게이트(Gate)하세요:
npx proof-of-commitment hook
모든 npm install, pip install, cargo add, go get 명령은 실행 전 행동 분석 검사 (behavioral check)를 거칩니다. 이력이 없는 패키지는 차단됩니다.
현재 종속성(dependencies)을 감사(Audit)하세요:
npx proof-of-commitment --file package-lock.json
환경 내에 IronWorm 패키지가 설치된 적이 있다면 **AI 자격 증명(credentials)을 교체(Rotate)**하세요. 수정된 GitHub Actions 워크플로(workflows)가 있는지 확인하십시오.
출처(provenance)만 믿지 마세요. Miasma와 IronWorm 모두 유효한 출처 증명 (provenance attestations)이 침해된 파이프라인 (pipelines)으로부터 생성될 수 있음을 보여주었습니다. 출처는 "이것이 어디에서 왔는가?"에 답하지만, 행동 점수 (behavioral scoring)는 "이것을 신뢰해도 되는가?"에 답합니다. 두 가지 모두가 필요합니다.
Commit은 npm, PyPI, Cargo, Go 패키지를 행동적 약속 (behavioral commitment) 기준으로 점수화합니다. 이는 별점(stars), README, 또는 다운로드 수보다 위조하기 어려운 신호입니다. 감사 시도하기 또는 AI 어시스턴트에 MCP 서버를 추가해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기