SOC Prime Bias: 위급

18 2월 2026 16:42

재사용된 자료로 멀웨어 캠페인 추적하기

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
재사용된 자료로 멀웨어 캠페인 추적하기
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 캠페인은 악성 페이로드를 BaseStart- 및 -BaseEnd 태그 사이에 숨기는 JPEG ‘캐리어’ 이미지를 재사용합니다. 초기 액세스는 조작한 첨부 파일의 Microsoft Equation Editor 취약점(CVE-2017-11882) 악용을 통해 이루어지며, 이는 HTA를 다운로드합니다. HTA는 PowerShell을 실행하여 .NET 바이너리 단계를 가져옵니다. 많은 샘플에서 동일한 이미지를 재사용하는 것은 운영자가 반복 가능한 구성요소에 의존하고 있음을 시사합니다.

조사

연구자들은 TELERADIO_IB_OBYEKTLRIN_BURAXILIS_FORMASI.xIs 파일에서 Equation Editor 취약점이 포함된 것을 발견했습니다. 이 체인은 악성 IP에서 HTA를 가져와 실행하고, 다른 IP에 호스팅 된 두 번째 페이로드를 다운로드하는 PowerShell을 실행합니다. 마지막 단계는 JPEG 캐리어에 내장된 .NET 바이너리이며 BaseStart/-BaseEnd 구분자를 통해 복구됩니다. 유사한 캐리어 이미지가 수십 개의 VirusTotal 제출에서 발견되었습니다.

대응책

CVE-2017-11882 패치를 적용하고 Office를 최신 상태로 유지하세요. HTA 실행을 차단하거나 제한하고, PowerShell 스크립트 서명을 강제하며, URL/IP 필터링을 사용하여 호스팅 인프라에 대한 접근을 차단하세요.

대응

첨부 파일 및 HTA 단계를 탐지하고 격리하며, 식별된 IP에 대한 PowerShell 다운로드 활동을 경고하세요. 영향을 받은 호스트를 격리하고 메모리 포렌식을 수행하여 메모리에 있는 .NET 페이로드를 찾아 제거하세요.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffcc99 %% Nodes node_phishing[“<b>행동</b> – <b>T1566.001 피싱: 스피어피싱 첨부파일</b><br/><b>설명</b>: 이메일로 전송된 CVEu20112017u201111882를 악용한 악성 .xls 파일.”] class node_phishing action node_user_exec[“<b>행동</b> – <b>T1204.002 사용자 실행</b><br/><b>설명</b>: 피해자가 악성 첨부파일을 엽니다.”] class node_user_exec action node_exploit_client[“<b>행동</b> – <b>T1203 클라이언트 실행을 위한 악용</b><br/><b>설명</b>: 수식 편집기 취약점이 악성 콘텐츠 다운로드를 트리거합니다.”] class node_exploit_client action node_mshta[“<b>행동</b> – <b>T1218.005 시스템 바이너리 프록시 실행: Mshta</b><br/><b>설명</b>: HTA 파일이 다운로드되어 mshta를 통해 실행됩니다.”] class node_mshta action node_powershell[“<b>행동</b> – <b>T1059.001 명령 및 스크립트 인터프리터: PowerShell</b><br/><b>설명</b>: 원격 서버에서 PowerShell 스크립트를 가져와 실행합니다.”] class node_powershell action node_web_comm[“<b>행동</b> – <b>T1102.003 웹 서비스: 단방향 통신</b><br/><b>설명</b>: 스크립트가 원격 서버에서 PNG 이미지를 가져옵니다.”] class node_web_comm action node_stego[“<b>행동</b> – <b>T1027.003 난독화된 파일 또는 정보: 스테가노그래피</b><br/><b>설명</b>: PNG에 BaseStart 및 BaseEnd 마커로 구분된 Base64 페이로드가 포함되어 있습니다.”] class node_stego action node_dotnet[“<b>행동</b> – <b>실행</b><br/><b>설명</b>: 호스트에서 임베디드 .NET 바이너리 페이로드가 실행됩니다.”] class node_dotnet process %% Connections node_phishing –>|이어짐| node_user_exec node_user_exec –>|이어짐| node_exploit_client node_exploit_client –>|이어짐| node_mshta node_mshta –>|실행| node_powershell node_powershell –>|다운로드| node_web_comm node_web_comm –>|가져옴| node_stego node_stego –>|포함| node_dotnet

공격 흐름

시뮬레이션 실행

사전 조건: Telemetry 및 Baseline Pre-Flight 체크를 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적수 기술(TTP)의 정확한 실행을 상세히 기술합니다. 명령과 서술은 TTPs가 식별한 내용을 직접 반영하고 탐지 로직에 의해 예상되는 정확한 텔레메트리를 생성해야 합니다.

  • 공격 서술 및 명령:
    적수는 클라이언트 측 취약점을 악용하여 악성 HTA 파일을 제공합니다. HTA는 악성 페이로드를 포함한 명령줄과 함께 PowerShell을 실행합니다(예: Invoke‑Expression 을(를) 실행하여 calc.exe를 실행) BaseStart- and -BaseEnd 문자열 사이에 인코딩됩니다. 이로 인해 공격자는 이를 실시간으로 신뢰성 있게 추출할 수 있습니다. 손상된 호스트에서 실행된 명령은:

    powershell.exe -NoProfile -Command "$b='BaseStart-$( [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Start-Process calc.exe')) )-BaseEnd'; $payload=$b -replace '.*BaseStart-','' -replace '-BaseEnd.*',''; IEX ([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($payload)))"

    이 명령줄은 selection_base_start and selection_base_end 조건을 만족시키며, 규칙을 트리거합니다.

  • 회귀 테스트 스크립트: 다음의 자체 포함 PowerShell 스크립트는 악성 행동을 재현하며, 위의 텔레메트리가 활성화된 Windows 호스트에서 실행될 수 있습니다.

    # 회귀 테스트 스크립트 – 탐지 규칙을 트리거
    # 1. Base64로 인코딩된 페이로드를 빌드(calc.exe 실행)
    $payload = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Start-Process calc.exe'))
    
    # 2. 구분자로 전체 명령줄을 조립
    $cmd = "BaseStart-$payload-BaseEnd"
    
    # 3. 제작한 명령줄로 PowerShell 실행
    $fullCommand = "powershell.exe -NoProfile -Command `"& {`$b='$cmd'; `$payload=`$b -replace '.*BaseStart-','' -replace '-BaseEnd.*',''; IEX ([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(`$payload)))`""
    
    # 4. 명령 실행 (이것은 calc.exe를 실행할 것입니다)
    Invoke-Expression $fullCommand
  • 정리 명령: 필요 시 모든 아티팩트를 제거하고 생성된 프로세스를 종료합니다.

    # 정리 – 여전히 실행 중인 계산기를 닫고 명령 기록 지우기
    Get-Process calc -ErrorAction SilentlyContinue | Stop-Process -Force
    # 선택적으로 PowerShell 기록 지우기 (현재 세션만)
    Remove-Item (Get-PSReadlineOption).HistorySavePath -ErrorAction SilentlyContinue