SOC Prime Bias: 위험

12 Jun 2026 18:47 UTC

솔라나 FakeFix: 안정된 빌드로 가장한 25개의 악성 npm 및 PyPI 패키지

Author Photo
SOC Prime Team linkedin icon 팔로우
솔라나 FakeFix: 안정된 빌드로 가장한 25개의 악성 npm 및 PyPI 패키지
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

악성 패키지 캠페인이 Solana 개발자를 대상으로 타이포스크와팅된 npm 및 PyPI 라이브러리를 통한 안정 빌드 수정으로 홍보하고 있습니다. 이 멀웨어는 패키지 수명 주기 실행과 가져오기 시간 후크를 악용하여 감염된 환경에서 지갑 비밀, 클라우드 자격 증명 및 SSH 키를 탈취합니다. 일부 샘플은 텔레그램 기반 명령 및 제어를 통해 백도어 역할을 하거나 Deno 기반의 Windows 로더를 배포하는 등 단순한 탈취를 넘어 확장됩니다.

조사

JFrog Security 연구원들은 두 개의 개별적이지만 관련된 작전을 발견했습니다. 처음 작전은 Solana FakeFix로 추적되며, 위조된 SDK 스타일 패키지를 사용하여 개발자와 빌드 시스템에서 민감한 비밀을 수집했습니다. 두 번째 작전은 CMS 테마의 npm 패키지를 사용하여 Windows 실행 파일을 로드했습니다. 분석에 따르면, 악성 코드는 종종 기능적으로 보이는 라이브러리에 추가되어 패키지가 합법적으로 보이게 도우면서도 Deno를 통해 동적으로 2차 페이로드를 조용히 회수했습니다.

완화

기관은 개발자 워크스테이션, CI/CD 파이프라인 및 내부 패키지 캐시에서 모든 영향을 받는 패키지를 제거해야 합니다. 노출 가능성이 있는 모든 자격 증명은 Solana 지갑 키, SSH 키, AWS 자격 증명 및 GitHub 토큰을 포함하여 즉시 교체되어야 합니다. 보안 팀은 레지스트리 실행 키, 예약된 작업 및 셸 프로필 수정과 같은 지속성 방법에 대해 호스트를 감사해야 합니다.

대응

방어자는 확인된 악성 패키지를 제거하고, 의도하지 않거나 예기치 않은 라이브러리에 대해 종속성 잠금 파일을 검토해야 합니다. 노출된 모든 비밀은 즉시 교체되어야 하며, 잠재적으로 손상된 지갑에 저장된 모든 암호화폐는 새로운 신뢰된 주소로 옮겨져야 합니다. 이후 CI 실행기와 개발자 시스템은 숨겨진 백도어나 지속성 메커니즘이 없도록 깨끗한 이미지에서 복구되어야 합니다.

"graph TB %% Class Definitions Section classDef technique fill:#99ccff classDef persistence fill:#ff99cc classDef command_control fill:#cc99ff classDef exfiltration fill:#ffcc99 classDef credential_access fill:#ffff99 %% Initial Access and Execution Phase attack_supply_chain["<b>Technique</b> – <b>T1195.001 Supply Chain Compromise: <br/>Compromise Software Dependencies and Development Tools</b><br/><b>Description</b>: Use of typosquatting and GitHub issue spam to lure developers into installing malicious npm and PyPI packages impersonating legitimate Solana SDKs.<br/><b>Targets</b>: @solana-labs/web3.js and similar tools."] class attack_supply_chain technique attack_user_exec_copy["<b>Technique</b> – <b>T1204.004 User Execution: Malicious Copy and Paste</b><br/><b>Description</b>: Developers execute commands suggested by attackers via GitHub issues or package instructions."] class attack_user_exec_copy technique attack_user_exec_lib["<b>Technique</b> – <b>T1204.005 User Execution: Malicious Library</b><br/><b>Description</b>: Developers import malicious libraries into their projects."] class attack_user_exec_lib technique op_exec_trigger(("AND")) class op_exec_trigger technique attack_event_trigger["<b>Technique</b> – <b>T1546.016 Event Triggered Execution: Installer Packages</b><br/><b>Description</b>: Execution of attacker-controlled code via npm postinstall lifecycle scripts or PyPI __init__.py imports."] class attack_event_trigger technique attack_drive_by["<b>Technique</b> – <b>T1189 Drive-by Compromise</b><br/><b>Description</b>: Downloading secondary payloads such as Windows executables or Deno-based loaders."] class attack_drive_by technique %% Persistence Phase persist_active_setup["<b>Technique</b> – <b>T1547.014 Boot or Logon Autostart Execution: Active Setup</b><br/><b>Description</b>: Creation of Registry Run keys to launch malicious payloads."] class persist_active_setup persistence persist_windows_service["<b>Technique</b> – <b>T1543.003 Create or Modify System Process: Windows Service</b><br/><b>Description</b>: Establishing persistence by creating Windows Services."] class persist_windows_service persistence payload_deno["<b>Malware</b> – <b>Deno-based CMS Campaign</b><br/><b>Description</b>: Malicious JavaScript payload running in headless mode via conhost.exe."] class payload_deno technique %% Command and Control Phase c2_web_service["<b>Technique</b> – <b>T1102.003 Web Service: One-Way Communication</b><br/><b>Description</b>: Using Telegram bot tokens to receive commands and exfiltrate data."] class c2_web_service command_control c2_dynamic_res["<b>Technique</b> – <b>T1568 Dynamic Resolution</b><br/><b>Description</b>: Utilizing dynamic methods to communicate with C2 infrastructure."] class c2_dynamic_res command_control %% Credential Access and Exfiltration Phase cred_files["<b>Technique</b> – <b>T1552.001 Unsecured Credentials: Credentials In Files</b><br/><b>Description</b>: Scanning local filesystem for Solana wallet JSON files id.json, SSH keys id_rsa, AWS credentials, and .env files."] class cred_files credential_access exfil_c2["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b><br/><b>Description</b>: Sending stolen sensitive data out via the Telegram API."] class exfil_c2 exfiltration %% Connections attack_supply_chain –>|leads_to| op_exec_trigger op_exec_trigger –>|requires| attack_user_exec_copy op_exec_trigger –>|requires| attack_user_exec_lib attack_user_exec_copy –>|triggers| attack_event_trigger attack_user_exec_lib –>|triggers| attack_event_trigger attack_event_trigger –>|downloads_via| attack_drive_by attack_drive_by –>|installs| payload_deno payload_deno –>|establishes| persist_active_setup payload_deno –>|establishes| persist_windows_service persist_active_setup –>|communicates_via| c2_web_service persist_windows_service –>|communicates_via| c2_web_service c2_web_service –>|uses| c2_dynamic_res payload_deno –>|performs_credential_access| cred_files cred_files –>|data_sent_via| exfil_c2 exfil_c2 –>|uses| c2_web_service "

공격 흐름

시뮬레이션 실행

전제조건: 테르메트리 및 기준선 사전 점검이 통과해야 합니다.

근거: 이 섹션은 적대적 기술(TTP)를 탐지 규칙을 유발하도록 설계된 정확한 실행을 상세하게 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영해야 하며 탐지 논리에 의해 기대되는 정확한 테르메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예시는 오진을 초래합니다.

  • 공격 내러티브 및 명령: 공격자는 초기 접근을 얻었고 이를 발판으로 사용하고자 합니다. 그들은 Deno 기반 페이로드를 사용하기로 결정합니다. 터미널 실행을 숨기기 위해, 그들은 --headless 플래그를 conhost.exe에 사용합니다. 그들은 HKCUSoftwareMicrosoftWindowsCurrentVersionRun 레지스트리 키를 수정하는 명령을 실행하며, DenoUpdater 라는 이름의 값을 추가하고 conhost.exe --headless deno.exe [malicious_script]를 실행합니다. 이는 사용자가 로그인할 때마다 페이로드가 백그라운드에서 조용히 실행되도록 보장합니다.

  • 회귀 테스트 스크립트:

    # Registry Run Key를 통한 Deno 기반 지속성의 시뮬레이션
    $RegistryPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
    $Name = "DenoUpdater"
    $Value = "C:WindowsSystem32conhost.exe --headless C:UsersPublicdeno.exe malicious_payload.js"
    
    Write-Host "[*] 지속성 메커니즘 시뮬레이션 중..."
    New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType String -Force
    Write-Host "[+] 레지스트리 키 생성됨. SIEM에서 알림을 확인하세요."
  • 정리 명령:

    # 시뮬레이션된 지속성 정리
    $RegistryPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
    $Name = "DenoUpdater"
    
    if (Get-ItemProperty -Path $RegistryPath -Name $Name -ErrorAction SilentlyContinue) {
        Remove-ItemProperty -Path $RegistryPath -Name $Name -Force
        Write-Host "[+] 정리 완료. 레지스트리 키 제거됨."
    } else {
        Write-Host "[-] 정리 실패: 레지스트리 키를 찾을 수 없음."
    }