SOC Prime Bias: 위험

30 Jul 2026 15:32 UTC

DEV#POPPER RAT이 손상된 Joyfill npm 릴리스를 통해 배포됨

Author Photo
SOC Prime Team linkedin icon 팔로우
DEV#POPPER RAT이 손상된 Joyfill npm 릴리스를 통해 배포됨
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

두 개의 손상된 베타 릴리스 @joyfill npm 패키지에는 가져오기 시 임플란트되는 JavaScript가 포함되어 있습니다. 이 임플란트는 Tron, Aptos, BNB Smart Chain 전반의 블록체인 트랜잭션을 사용하여 DEV#POPPER 원격 접근 트로이 목마(RAT)를 해결하고 다운로드합니다. 이 캠페인은 모듈이 import되는 즉시 악성 코드를 실행하여 개발자 워크스테이션과 CI/CD 파이프라인을 대상으로 합니다.

조사

소켓 연구 팀은 분석하는 동안 손상을 밝혀냈습니다. @joyfill/layouts and @joyfill/components. 연구원들은 난독화된 JavaScript와 블록체인 기반 전달 메커니즘을 결합한 다단계 페이로드 전달 체인을 확인했습니다. 조사는 초기 로더를 PolinRider 가족과 연결하여 최종 페이로드가 DEV#POPPER 악성코드 패밀리에 속함을 확인했습니다.

완화

개발자는 즉시 영향을 받은 @joyfill 베타 버전을 락파일, 패키지 캐시, 빌드 환경, 배포 아티팩트에서 삭제해야 합니다. 의존성을 인증된 릴리스에 고정하는 것이 권장됩니다. @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 보안 팀 또한 레지스트리 프록시와 의존성 관리 도구를 통해 손상된 버전을 차단해야 합니다.

대응

영향을 받은 패키지를 가져온 모든 시스템은 격리되어야 하며, 손상된 Node.js 프로세스에 접근 가능한 모든 자격 증명은 교체되어야 합니다. 조사자는 VS Code, GitHub Desktop, 디스코드를 포함한 개발자 애플리케이션에서 핵심 모듈에 대한 예기치 않은 변경 사항을 검사해야 합니다. 엔드포인트 및 CI/CD 원격 측정은 고립된 Node.js 프로세스, 알려진 C2 주소, 의심스러운 블록체인 RPC 트래픽을 검토해야 합니다.

공격 흐름

시뮬레이션 실행

전제 조건: 원격 측정 및 기준치 사전 점검이 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 촉발시키기 위해 설계된 적대 기술(TTP)의 정확한 실행을 설명합니다. 명령과 서술은 반드시 식별된 TTP를 직접 반영하고, 탐지 논리에 의해 예상되는 정확한 원격 측정을 생성해야 합니다. 추상적이거나 관련 없는 예는 오진의 원인이 될 것입니다.

  • 공격 서사 및 명령: 적은 널리 사용되는 npm 종속성에 악성 코드를 성공적으로 주입했습니다(공급망 손상). 개발자가 npm install 을 실행하거나 프로젝트를 시작할 때 악성 스크립트가 실행됩니다. 스크립트는 먼저 require 함수를 글로벌 변수(global.r = require)에 할당하여 의도를 숨기려고 시도하며, 이를 통해 require 직접 호출하지 않고 애플리케이션의 어느 곳에서나 모듈을 로드할 수 있습니다(난독화). 마지막으로 child_process.spawn 을 사용하여 Command & Control (C2) 서버로 연결하는 분리된 셸 프로세스를 시작하며, 부모 Node.js 프로세스에서 악성 프로세스를 분리하여 탐지를 피하려고 시도합니다.

  • 회귀 테스트 스크립트:

    #!/bin/bash
    # Node.js 주입 탐지 규칙을 유발하기 위한 시뮬레이션 스크립트.
    # 이 스크립트는 임시 악성 JS 파일을 생성하고 Node.js를 통해 실행합니다.
    MALICIOUS_FILE="malicious_pkg.js"
    echo "[+] 악성 Node.js 스크립트 생성중..."
    cat << 'EOF' > $MALICIOUS_FILE
    // 글로벌 모듈 주입 시뮬레이션 (T1027)
    global.r = require;
    // detached 프로세스 실행 시뮬레이션을 위한 child_process.spawn (T1059.006)
    const cp = require('child_process');
    cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' });
    console.log("[!] 악성 페이로드가 실행되었습니다.");
    EOF
    echo "[+] Node.js를 통해 악성 스크립트 실행중..."
    node $MALICIOUS_FILE
    echo "[+] 시뮬레이션 완료. SIEM을 체크하여 경고 확인: Node.js 모듈 주입 및 분리 프로세스 실행 탐지."
  • 정리 명령:

    # 시뮬레이션된 악성 파일 제거
    rm -f malicious_pkg.js
    # 시뮬레이션에 의해 생성된 고아 sleep 프로세스 제거
    pkill -f "sleep 30"