Kant's IT/Issue on IT&Security

오래된 npm 패키지 탈취 사례를 통한 API 키 유출 캠페인 분석

Kant Jo 2025. 5. 9. 23:52

Nine-Year-Old npm Packages Hijacked to Exfiltrate API Keys via Obfuscated Scripts

 

  • 개요 및 공격 배경
    • 최소 9년 이상 npm에 존재하던 합법적인 암호화폐 관련 패키지가 악성 스크립트로 감염됨
    • 공격자는 패키지를 최신 버전으로 위장하여 설치 시 민감 정보 탈취 기능을 삽입
    • 대상은 블록체인 개발자 및 암호화폐 연관 프로젝트 사용자로 추정
  • 감염된 패키지 목록
    • 대표적인 감염 패키지 버전
      • country-currency-map (2.1.8)
      • bnb-javascript-sdk-nobroadcast (2.16.16)
      • @bithighlander/bitcoin-cash-js-lib (5.2.2)
      • eslint-config-travix (6.3.1)
      • @veniceswap/uikit (0.65.34) 등 다수 포함
    • 패키지 내부의 경로(package/scripts/launch.js, diagnostic-report.js)에 난독화된 스크립트 존재
  • 악성 스크립트 분석
    • 설치 즉시 실행되도록 설계된 JavaScript 코드가 포함됨
    • API 키, 액세스 토큰, SSH 키, 환경 변수 등 민감 정보 수집
    • 수집된 정보는 원격 C2 주소(eoi2ectd5a5tn1h.m.pipedream[.]net)로 전송
    • GitHub 저장소에는 악성 변경 사항이 반영되지 않아 npm 계정만 공격당한 것으로 분석
  • 공격 기법 및 침해 추정 방식
    • 주요 침해 방식 추정
      • 계정 탈취: 이전 유출된 자격증명 활용한 크리덴셜 스터핑
      • 도메인 소유권 만료 후 탈취를 통한 패스워드 초기화 가능성
    • 복수 프로젝트의 동시 감염 정황으로 보아 다중 유지관리자 계정 침해 가능성이 높음
    • 패키지 유지보수가 중단되거나 장기간 업데이트되지 않은 점을 악용
  • 보안 권고
    • 개발 환경 내 서드파티 종속성에 대한 정기적 보안 검토 필요
    • 오래된 프로젝트 또는 방치된 패키지의 보안 위험성 인식 필요
    • 모든 개발자 계정에 대해 다중 인증(2FA) 활성화 권장
    • 공급망 보안(Supply Chain Security)을 위한 자동화된 취약 패키지 탐지 및 차단 체계 필요
  • 결론
    • 해당 사례는 오픈소스 생태계에서 방치된 패키지가 얼마나 쉽게 공격자에게 악용될 수 있는지를 보여주는 대표적 공급망 공격 사례
    • 조직 차원에서 타사 종속성에 대한 코드 감사, 개발자 계정 보안 강화, CI/CD 파이프라인 보안성 확보가 필수적
    • 개발자는 npm 패키지 설치 시 출처 및 최근 업데이트 기록 확인 등 기본적인 위생관리(Security Hygiene)를 실천해야 함