npm 패키지 공급망 공격: 토큰 탈취, 자체 전파, PyPI 확산 시도!
@fairwords npm 패키지에서 TeamPCP/CanisterWorm 공격 발생, 토큰 탈취 및 자체 전파 시도
AWS, GCP, Azure, GitHub, OpenAI, Stripe 등 40개 이상의 환경 변수 탈취 및 SSH 키, 암호화폐 지갑 데이터 유출
탈취된 npm 토큰을 이용, 자체 전파(Self-propagation)를 통해 다른 패키지 감염 시도
PyPI를 통한 크로스 에코시스템(Cross-ecosystem) 공격 시도, .pth 파일 기법 활용
악성 페이로드(Malicious Payload) 분석
공격은 @fairwords 스코프(Scope) 내 3개의 npm 패키지를 대상으로, postinstall 스크립트를 통해 실행된다. 해당 스크립트는 40개 이상의 패턴을 기반으로 환경 변수(Environment Variables)를 수집하며, SSH 키, 클라우드 자격 증명, 암호화폐 지갑 데이터를 탈취한다. 특히, 리눅스 환경에서 하드코딩된 키를 사용하여 크롬(Chrome)에 저장된 비밀번호를 해독하는 점이 특징이다. 탈취된 데이터는 RSA-4096으로 암호화되어 HTTPS 웹훅(Webhook) 및 ICP 캐니스터(Canister)로 전송된다.
자체 전파 및 PyPI 확산
악성 코드는 감염된 시스템의 npm 토큰을 사용하여 자체 전파를 시도한다. 구체적으로, 토큰 소유자를 확인하고, 해당 토큰으로 게시할 수 있는 모든 패키지를 열거한 후, 최신 tarball을 다운로드하여 postinstall 훅을 삽입하고 패치 버전을 증가시킨다. 또한, PyPI로의 확산을 위해 .pth 파일을 활용하는 기술을 사용한다. 이는 파이썬 인터프리터(Python Interpreter) 시작 시마다 실행되어 추가적인 크리덴셜 탈취를 시도한다.
탈취 대상 및 피해 규모
공격은 AWS, GCP, Azure, GitHub, OpenAI, Stripe 등 다양한 클라우드 및 CI/CD 플랫폼의 환경 변수를 노린다. 또한, Solana, Ethereum, MetaMask, Phantom, Exodus, Atomic Wallet 등 다양한 암호화폐 지갑 데이터를 탈취한다. 특히, 리눅스 환경에서 크롬에 저장된 비밀번호를 해독하는 기능은 광범위한 피해를 야기할 수 있다. 공격자는 데이터 미저장 정책(Zero-Retention Policy)을 통해 추적을 회피한다.
대응 방안 및 예방 조치
해당 패키지를 사용하고 있다면, 즉시 npm 토큰, 클라우드 키, SSH 키를 변경해야 한다. 또한, 암호화폐 지갑의 안전성을 확인하고, 감염된 시스템에서 패키지를 제거한 후, 안전한 버전으로 재설치해야 한다. 공격의 특성상, 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 피해 범위를 최소화하고, 정기적인 보안 감사를 수행하여 취약점을 사전에 파악하는 것이 중요하다.