SOC Prime Bias: 위급

31 3월 2026 17:31

Axios에 대한 공급망 공격으로 NPM에서 악성 종속성이 가져옵니다

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
Axios에 대한 공급망 공격으로 NPM에서 악성 종속성이 가져옵니다
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

악성 npm 패키지, plain-crypto-js@4.2.1,이 게시되었고 나중에 널리 사용되는 JavaScript HTTP 클라이언트 Axios의 손상된 릴리스를 통해 변환 종속성으로 끌어 들어왔습니다. 이 패키지는 포스트 설치 스크립트를 사용하여 Windows, macOS 및 Linux를 대상으로 하는 다단계 원격 액세스 트로이목마를 전달합니다. 공격은 프로젝트의 일반적인 릴리스 워크플로 외부에서 악성 버전을 푸시할 수 있는 장기 npm 토큰에 의존한 것으로 보입니다. 손상된 종속성을 조기에 감지하면 영향을 받는 시스템에서 RAT의 실행을 막을 수 있습니다.

조사

Socket Research는 setup.js 배포자에 대한 정적 분석을 수행하고 인코딩된 문자열을 복호화하여 C2 도메인, 페이로드 전송 논리 및 대상 파일 시스템 경로를 노출했습니다. 연구원들은 동일한 악성 코드를 포함한 세 개의 손상된 Axios 버전과 두 개의 추가 npm 패키지를 식별했습니다. 이들은 또한 탐지 엔지니어링 및 규칙 생성에 사용할 수 있는 네트워크 지표, 파일 경로 및 사용자 에이전트 문자열을 추출했습니다.

완화

조직은 모든 잠재적으로 영향을 받을 가능성이 있는 계정에 대해 장기 npm 토큰을 폐기하고 자격 증명을 교체해야 합니다. 손상된 Axios 버전 및 이에 따라 종속되는 모든 패키지는 즉시 제거하거나 다운그레이드해야 합니다. 또한 팀은 차단 파일, CI/CD 파이프라인 및 소프트웨어 공급망 보안 제어를 검토하여 승인되지 않은 게시 활동을 식별하고 향후 패키지 손상 가능성을 줄여야 합니다. plain-crypto-js@4.2.1 should be removed or downgraded immediately. Teams should also review lockfiles, CI/CD pipelines, and software supply-chain security controls to identify unauthorized publishing activity and reduce the chance of future package compromise.

대응

보안 팀은 plain-crypto-js@4.2.1 및 영향을 받는 Axios 버전에 대한 참조를 npm 설치 로그에서 모니터링해야 합니다. 포스트 설치 후크의 실행, sfrclak.com으로의 네트워크 액세스, 그리고 악성 사용자 에이전트 문자열에 대한 탐지 규칙을 만들어야 합니다. 손상이 확인되면 영향을 받는 시스템을 격리시키고, 분석을 위해 휘발성 메모리를 수집하며, RAT가 발견될 경우 호스트를 재이미징해야 합니다.

graph TB %% Class definitions classDef technique fill:#c2e0ff classDef tool fill:#ffd9b3 classDef malware fill:#f5b7b1 classDef process fill:#d5f5e3 %% Technique nodes tech_t1195_002[“<b>기술</b> – <b>T1195.002</b> 공급망 공격: 소프트웨어 손상<br/><b>설명</b>: 공격자는 업데이트 또는 패키지 배포를 손상시켜 악성 코드를 전달한다.”] class tech_t1195_002 technique tech_t1127_003[“<b>기술</b> – <b>T1127.003</b> 신뢰된 도구를 통한 실행<br/><b>설명</b>: post-install 스크립트를 통해 악성 코드 실행.”] class tech_t1127_003 technique tech_t1059_004[“<b>기술</b> – <b>T1059.004</b> Unix Shell”] class tech_t1059_004 technique tech_t1059_001[“<b>기술</b> – <b>T1059.001</b> PowerShell”] class tech_t1059_001 technique tech_t1059_005[“<b>기술</b> – <b>T1059.005</b> Visual Basic”] class tech_t1059_005 technique tech_t1059_003[“<b>기술</b> – <b>T1059.003</b> Windows CMD”] class tech_t1059_003 technique tech_t1027_014[“<b>기술</b> – <b>T1027.014</b> 난독화”] class tech_t1027_014 technique tech_t1070_004[“<b>기술</b> – <b>T1070.004</b> 흔적 삭제”] class tech_t1070_004 technique tech_t1195_001[“<b>기술</b> – <b>T1195.001</b> 의존성 공격”] class tech_t1195_001 technique tech_t1127[“<b>기술</b> – <b>T1127</b> npm 훅”] class tech_t1127 technique tech_t1082[“<b>기술</b> – <b>T1082</b> 시스템 정보 수집”] class tech_t1082 technique tech_t1219[“<b>기술</b> – <b>T1219</b> 원격 접근”] class tech_t1219 technique tech_t1102_002[“<b>기술</b> – <b>T1102.002</b> 웹 통신”] class tech_t1102_002 technique tech_t1570[“<b>기술</b> – <b>T1570</b> 측면 이동”] class tech_t1570 technique tech_t1036_005[“<b>기술</b> – <b>T1036.005</b> 위장”] class tech_t1036_005 technique tech_t1036_003[“<b>기술</b> – <b>T1036.003</b> 이름 변경”] class tech_t1036_003 technique process_curl[“<b>프로세스</b> – curl”] class process_curl process process_chmod[“<b>프로세스</b> – chmod”] class process_chmod process process_nohup[“<b>프로세스</b> – nohup”] class process_nohup process malware_rat[“<b>악성코드</b> – macOS RAT”] class malware_rat malware %% Connections showing attack flow tech_t1195_002 –>|leads_to| tech_t1127_003 tech_t1127_003 –>|uses| tech_t1059_004 tech_t1059_004 –>|executes| tech_t1059_001 tech_t1059_004 –>|executes| tech_t1059_005 tech_t1059_004 –>|executes| tech_t1059_003 tech_t1059_004 –>|employs| tech_t1027_014 tech_t1059_004 –>|leverages| tech_t1195_001 tech_t1059_004 –>|leverages| tech_t1127 tech_t1059_004 –>|collects| tech_t1082 tech_t1027_014 –>|enables| tech_t1070_004 tech_t1082 –>|enables| tech_t1219 tech_t1219 –>|communicates via| tech_t1102_002 tech_t1102_002 –>|facilitates| tech_t1570 tech_t1570 –>|results in| tech_t1036_005 tech_t1570 –>|results in| tech_t1036_003 tech_t1059_004 –>|downloads| process_curl tech_t1059_004 –>|sets permissions| process_chmod tech_t1059_004 –>|runs background| process_nohup malware_rat –>|is the| tech_t1219

공격 흐름

탐지

의심스러운 MacOS – Plist 위치 및 이름 (파일 이벤트 기준)

SOC Prime 팀
2026년 3월 31일

의심스러운 NodeJS 하위 프로세스 [Windows] (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

표준 도구를 통한 원격 파일 업로드/다운로드 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

MacOS 의심스러운 Tmp 폴더 파일 권한 수정 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

의심스러운 CURL 사용 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

단일 명령에서 chmod 및 nohup 사용으로 인한 실행 가능성 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

의심스러운 폴더로 다운로드 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

LOLBAS WScript / CScript (프로세스 생성 기준)

SOC Prime 팀
2026년 3월 31일

숨겨진 파워쉘 명령 줄을 통한 실행 가능성 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

Nohup 사용 (명령줄 기준)

SOC Prime 팀
2026년 3월 31일

IOC (출발지IP) 탐지: Axios에 대한 공급망 공격이 npm에서 악성 종속성을 가져옴

SOC Prime AI 규칙
2026년 3월 31일

IOC (목적지IP) 탐지: Axios에 대한 공급망 공격이 npm에서 악성 종속성을 가져옴

SOC Prime AI 규칙
2026년 3월 31일

IOC (이메일) 탐지: Axios에 대한 공급망 공격이 npm에서 악성 종속성을 가져옴

SOC Prime AI 규칙
2026년 3월 31일

파워쉘 및 VBScript 회피 전술: 공급망 공격 [Windows 프로세스 생성]

SOC Prime AI 규칙
2026년 3월 31일

악성 npm 패키지 포스트 설치 후크 실행 탐지 [Linux 프로세스 생성]

SOC Prime AI 규칙
2026년 3월 31일

빈번히 발견된 악성 Python 스크립트 및 Linux 공급망 공격 탐지 [Linux 파일 이벤트]

SOC Prime AI 규칙
2026년 3월 31일

이름이 변경된 Windows 터미널 및 자체 삭제 VBScript 탐지 [Windows 파일 이벤트]

SOC Prime AI 규칙
2026년 3월 31일

숨김 및 우회 플래그와 함께 파워쉘 스크립트 실행 [Windows 파워쉘]

SOC Prime AI 규칙
2026년 3월 31일

시뮬레이션 실행

필수 조건: Telemetry & Baseline Pre‑flight Check가 통과했어야 합니다.

근본적인 이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적대자 기법 (TTP)의 정확한 실행을 상세히 설명합니다. 명령어와 내러티브는 반드시 식별된 TTP와 직접적으로 일치해야 하며, 탐지 논리에 의해 예상되는 정확한 원격 측정을 생성하는 것을 목표로 합니다.

  • 공격 내러티브 및 명령어:

    제한된 사용자 권한을 가진 공격자는 손상된 작업장에서 합법적인 npm 패키지를 통해 악성 VBScript 페이로드를 다운로드하고자 합니다 (공급망 시나리오). 일반적인 PowerShell 탐지를 피하기 위해, 공격자는 powershell.exepowershell_renamed.exe 라고 이름을 바꾸지만 파일 이름에 “powershell” 서브스트링을 유지합니다 (따라서 이미지|포함 검사에서 여전히 일치합니다). 공격자는 그런 다음 “where powershell” 조회를 수행하여 이름이 바뀐 바이너리의 경로를 열거하고, 마지막으로 cscript //nologo 로 로고 배너를 억제하여 VBScript 페이로드를 실행합니다.

  • 회귀 테스트 스크립트:

    # -------------------------------------------------
    # Step 1: Rename powershell.exe를 생성합니다.
    # -------------------------------------------------
    $src = "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe"
    $dst = "$env:Temppowershell_renamed.exe"
    Copy-Item -Path $src -Destination $dst -Force
    
    # -------------------------------------------------
    # Step 2: 'where'을 사용하여 이름이 변경된 바이너리를 참조합니다.
    # -------------------------------------------------
    $whereOutput = & where.exe powershell_renamed
    Write-Host "이름이 변경된 PowerShell의 위치: $whereOutput"
    
    # -------------------------------------------------
    # Step 3: 간단한 악성 VBScript 페이로드를 생성합니다.
    # -------------------------------------------------
    $vbsPath = "$env:Tempmalicious.vbs"
    @"
    WScript.Shell 객체를 생성합니다.
    objShell.Run "cmd.exe /c echo pwned > $env:Temppwned.txt", 0, False
    "@ | Set-Content -Path $vbsPath -Encoding ASCII
    
    # -------------------------------------------------
    # Step 4: cscript //nologo를 사용하여 VBScript를 조용히 실행합니다.
    # -------------------------------------------------
    & $dst -Command "cscript //nologo `"$vbsPath`""
    # -------------------------------------------------
    # 시뮬레이션 종료
    # -------------------------------------------------
  • 정리 명령어:

    # 이름이 변경된 파워쉘 바이너리를 제거합니다.
    Remove-Item -Path "$env:Temppowershell_renamed.exe" -Force -ErrorAction SilentlyContinue
    
    # 악성 VBScript 파일을 삭제합니다.
    Remove-Item -Path "$env:Tempmalicious.vbs" -Force -ErrorAction SilentlyContinue
    
    # 실행 증거를 제거합니다.
    Remove-Item -Path "$env:Temppwned.txt" -Force -ErrorAction SilentlyContinue