SOC Prime Bias: Critical

07 4월 2026 18:30

머스탱 팬더와 PlugX: 피싱 주도의 로더 작전에 대한 심층 분석

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
머스탱 팬더와 PlugX: 피싱 주도의 로더 작전에 대한 심층 분석
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 보고서는 중국 연계의 Mustang Panda 그룹에 의해 수행된 다단계 침입을 설명합니다. 공격 체인은 PowerShell 로더를 실행하는 무기화된 Windows 바로가기(LNK)로 시작됩니다. 이 로더는 미끼 ZIP을 드롭하고, 암호화된 DLL을 추출하며, 최종적으로 반사적 로딩과 스레드 풀 주입을 이용하여 PlugX 원격 접속 트로이 목마를 배포합니다. 명령 및 제어 트래픽은 coastallasercompany.com과 연관된 인프라로 HTTPS를 통해 전송됩니다. 이 임플란트는 또한 API 해싱, PEB 워킹, 그리고 정적 탐지를 줄이기 위한 강력한 문자열 난독화를 포함한 회피적 방법을 구현합니다.

조사

분석가는 최초 LNK 활성화, PowerShell 스테이징, DLL 사이드-로딩, 메모리 내 복호화, 그리고 최종 PlugX 런타임까지 실행 경로를 복원했습니다. 이 도구는 DJB2 유사 API 해싱과 가져오기 해결을 위한 ROL-13 해싱을 사용하며, RC4로 암호화된 구성 블롭도 포함합니다. 지속성은 HKCU Run 레지스트리 키의 수정으로 관찰되었습니다. 조사는 파일 이름, 해시, 및 HTTPS 비콘링에 사용된 C2 도메인 포함, 탐지 준비 완료된 지표를 추출했습니다.

완화

신뢰할 수 없는 .lnk 파일을 차단하거나 격리하고, 특히 사용자가 쓸 수 있는 위치에서 읽거나 쓰는 스크립트의 PowerShell 실행을 제한하십시오. %LocalAppData% 아래에서 무작위로 생성된 GUID와 같은 이름으로 의심스러운 파일 생성 여부를 모니터링하고, 사이드-로딩 기회를 줄이기 위해 DLL 검색 순서 동작을 강화하십시오. 식별된 C2 도메인에 대한 접근을 차단하기 위해 DNS/프록시 통제를 적용하고, 적절한 곳에서 TLS 검사로 이상한 HTTPS 비콘 패턴을 노출하십시오.

대응

의심스러운 활동이 감지되면 호스트를 격리하고, 휘발성 메모리를 캡처하며, 더 깊은 분석을 위해 암호화된 구성을 보존하십시오. 추출된 IOC에 대해 환경을 정밀 조사하고, 드롭된 아티팩트를 제거하며, 악성 HKCU Run 지속성 항목을 삭제하십시오. 범위 내 자격 증명을 교체하고, PlugX 운영자 특유의 움직임과 일치하는 횡적 이동의 징후를 검색하십시오.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef artifact fill:#ccffcc classDef process fill:#ccccff classDef registry fill:#ffe599 %% Initial Access initial_zip["<b>Artifact</b> – 악성 ZIP 아카이브에는 .lnk가 포함되어 있음"] class initial_zip artifact lnk_shortcut["<b>Artifact</b> – 숨겨진 아이콘이 있는 바로가기(.lnk)"] class lnk_shortcut artifact tech_lnk_smack["<b>Technique</b> – T1027.012 LNK 아이콘 밀수<br/><b>Description</b>: LNK 아이콘을 사용하여 악성 페이로드 숨기기"] class tech_lnk_smack technique tech_user_exec["<b>Technique</b> – T1204.002 사용자 실행: 악성 파일<br/><b>Description</b>: 피해자가 악성 파일을 염"] class tech_user_exec technique %% Execution psh_stage["<b>Process</b> – .lnk에 의해 실행된 PowerShell 단계"] class psh_stage process tech_psh["<b>Technique</b> – T1059.001 PowerShell<br/><b>Description</b>: 명령 및 스크립팅 인터프리터"] class tech_psh technique tech_archive_custom["<b>Technique</b> – T1560.003 사용자 정의 방법을 통한 아카이브<br/><b>Description</b>: ZIP을 원시 바이트로 읽음"] class tech_archive_custom technique extracted_exe["<b>Artifact</b> – 추출된 합법적으로 보이는 실행 파일"] class extracted_exe artifact malicious_dll["<b>Artifact</b> – Eraser.dll (악성)"] class malicious_dll artifact encrypted_dat["<b>Artifact</b> – 암호화된 .dat 페이로드"] class encrypted_dat artifact %% Persistence run_key["<b>Registry</b> – HKCUSoftwareMicrosoftWindowsCurrentVersionRun 항목"] class run_key registry tech_run_key["<b>Technique</b> – T1037.001 로그인 스크립트 (부트 또는 로그인 초기화 스크립트)<br/><b>Description</b>: 실행 키 지속성"] class tech_run_key technique shortcut_mod["<b>Technique</b> – T1547.009 바로가기 수정<br/><b>Description</b>: 바로가기를 수정하여 자동 시작"] class shortcut_mod technique active_setup["<b>Technique</b> – T1547.014 활성 설정<br/><b>Description</b>: 활성 설정을 통한 자동 시작을 위한 레지스트리 항목"] class active_setup technique psh_profile["<b>Technique</b> – T1546.013 PowerShell 프로파일<br/><b>Description</b>: 실행을 위한 PowerShell 프로파일 훅"] class psh_profile technique %% Defense Evasion tech_compress["<b>Technique</b> – T1027.015 압축<br/><b>Description</b>: ZIP 내 페이로드 압축"] class tech_compress technique tech_dynamic_api["<b>Technique</b> – T1027.007 동적 API 해석<br/><b>Description</b>: 런타임 시 해시를 사용하여 API 해석"] class tech_dynamic_api technique tech_embedded["<b>Technique</b> – T1027.009 내장 페이로드<br/><b>Description</b>: 암호화된 페이로드 내장"] class tech_embedded technique tech_deobfuscate["<b>Technique</b> – T1140 복호화/디코딩 파일 또는 정보<br/><b>Description</b>: 런타임 시 RC4/XOR 복호화"] class tech_deobfuscate technique tech_masquerade["<b>Technique</b> – T1036.008 변장: 파일 유형 변장<br/><b>Description</b>: 미끼 PDF 오버레이"] class tech_masquerade technique %% Privilege Escalation / Execution tech_reflective["<b>Technique</b> – T1620 반사적 코드 로딩<br/><b>Description</b>: 디스크에 닿지 않고 메모리에 DLL 로딩"] class tech_reflective technique tech_injection["<b>Technique</b> – T1055.001 프로세스 인젝션: DLL 인젝션<br/><b>Description</b>: PEB 워킹 및 스레드 풀 콜백을 통한 DLL 인젝션"] class tech_injection technique %% Command and Control c2_https["<b>Process</b> – HTTPS C2 통신 (포트 443)"] class c2_https process tech_nonstd_port["<b>Technique</b> – T1571 비표준 포트<br/><b>Description</b>: 일반 포트를 사용하여 트래픽 혼합"] class tech_nonstd_port technique tech_dead_drop["<b>Technique</b> – T1102.001 데드 드롭 해석기<br/><b>Description</b>: 웹 서비스를 통해 서버 주소 획득"] class tech_dead_drop technique tech_proxy["<b>Technique</b> – T1090.002 프록시: 외부 프록시<br/><b>Description</b>: 외부 프록시를 통해 트래픽 경로 설정"] class tech_proxy technique %% 연결 initial_zip –>|contains| lnk_shortcut lnk_shortcut –>|uses| tech_lnk_smack lnk_shortcut –>|triggers| tech_user_exec tech_user_exec –>|leads to| psh_stage psh_stage –>|executes| tech_psh psh_stage –>|reads| tech_archive_custom tech_archive_custom –>|extracts| extracted_exe tech_archive_custom –>|extracts| malicious_dll tech_archive_custom –>|extracts| encrypted_dat psh_stage –>|writes| run_key run_key –>|implements| tech_run_key psh_stage –>|creates| shortcut_mod psh_stage –>|creates| active_setup psh_stage –>|hooks| psh_profile psh_stage –>|applies| tech_compress psh_stage –>|applies| tech_dynamic_api psh_stage –>|applies| tech_embedded psh_stage –>|applies| tech_deobfuscate psh_stage –>|applies| tech_masquerade malicious_dll –>|acts as| tech_reflective malicious_dll –>|performs| tech_injection tech_injection –>|enables| c2_https c2_https –>|uses| tech_nonstd_port c2_https –>|uses| tech_dead_drop c2_https –>|may route through| tech_proxy %% 클래스 지정 class initial_zip,lnk_shortcut,extracted_exe,malicious_dll,encrypted_dat artifact class psh_stage,c2_https process class run_key registry class tech_lnk_smack,tech_user_exec,tech_psh,tech_archive_custom,tech_run_key,shortcut_mod,active_setup,psh_profile,tech_compress,tech_dynamic_api,tech_embedded,tech_deobfuscate,tech_masquerade,tech_reflective,tech_injection,tech_nonstd_port,tech_dead_drop,tech_proxy technique "

공격 흐름

시뮬레이션 실행

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

합리적 이론: 이 섹션은 탐지 규칙을 촉발하도록 설계된 상대방 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 설명은 식별된 TTP를 직접 반영하며 탐지 로직에 의해 예상되는 정확한 원격 측정을 생성하는 것을 목표로 합니다.

  • 공격 설명 및 명령어:
    공격자가 손상된 워크스테이션에 발판을 마련하고 사용자가 모르게 악성 페이로드를 배포하려고 합니다. 그들은 숨겨진 모드로 PowerShell을 실행하여 (-w 숨김) UI 팝업을 피합니다. 동일한 PowerShell 세션 내에서 내장 tar 유틸리티(최신 Windows 빌드에서 사용 가능)를 사용하여 다음 단계 페이로드를 포함하는 미끼 아카이브를 직접 %LocalAppData%로 추출하는 데 사용됩니다. 이 위치는 종종 방어에서 간과됩니다.

    단계:

    1. 작은 tar 아카이브 (payloads.tar)에 benign 가상 파일 (악성 페이로드를 모방)을 포함하십시오.
    2. 아카이브를 임시 위치에 저장하십시오 (C:Temp).
    3. 숨겨진 창 PowerShell을 실행하여 tar 목표로 하는 추출 명령을 실행하십시오 %LocalAppData%.
  • 회귀 테스트 스크립트:

    # ---------------------------------------------------------
    # 1단계 – 샘플 tar 아카이브 준비 (페이로드를 시뮬레이트함)
    # ---------------------------------------------------------
    $tempDir = "C:Temp"
    $archive = "$tempDirpayloads.tar"
    $payload = "$tempDirdummy.txt"
    $destDir = "$Env:LocalAppDataStagedPayloads"
    
    # 임시 폴더가 존재하는지 확인
    New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
    
    # 아카이브할 가상 파일 생성
    "이것은 가상 페이로드 파일입니다." | Set-Content -Path $payload -Encoding UTF8
    
    # tar 아카이브 생성 (Windows tar 필요)
    tar -cf $archive -C $tempDir dummy.txt
    
    # ---------------------------------------------------------
    # 2단계 – 아카이브를 추출하는 숨겨진 PowerShell 실행
    # ---------------------------------------------------------
    $extractCmd = "tar-xvf "$archive" -C "$Env:LocalAppData""
    $psArgs = "-NoProfile -WindowStyle Hidden -Command `$extractCmd"
    
    Start-Process -FilePath "powershell.exe" -ArgumentList $psArgs -WindowStyle Hidden
    
    # ---------------------------------------------------------
    # 3단계 – 선택사항: 추출 확인 (수동 검증용)
    # ---------------------------------------------------------
    Write-Host "추출 완료. 파일이 이제 $Env:LocalAppData에 존재해야 합니다."
  • 정리 명령어:

    # 임시 파일 및 스테이징된 페이로드 제거
    Remove-Item -Path "C:Temppayloads.tar" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "C:Tempdummy.txt" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$Env:LocalAppDatadummy.txt" -Force -ErrorAction SilentlyContinue
    # 생성된 전체 스테이징 폴더를 선택적으로 제거
    Remove-Item -Path "$Env:LocalAppDataStagedPayloads" -Recurse -Force -ErrorAction SilentlyContinue