Gamaredon의 펼쳐지는 도구 모음: GammaPhish와 GammaWorm
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
러시아 국가 지원 APT 그룹인 Gamaredon이 우크라이나 정부 기관, 군 기관 및 주요 인프라에 대한 장기 스파이 활동을 계속하고 있습니다. 그들의 모듈식 감염 사슬은 스피어피싱 문서로 시작하여 WinRAR 경로 탐색 취약점을 악용하고, 이후 VBScript, 대체 데이터 스트림 및 교환지 해석기를 이용해 확산, 지속성 유지 및 추가 페이로드 수집을 수행합니다. 이 캠페인은 또한 명령 및 제어 활동을 위해 Telegram, Cloudflare, Supabase와 같은 합법적인 서비스를 활용합니다. 공격자는 내장된 Windows 기능과 파일이 없는 실행 방식을 많이 악용하기 때문에 탐지는 여전히 어려운 상태입니다.
조사
Sekoia TDR은 손상된 시스템에서 수집된 70개 이상의 아티팩트를 조사하여 2026년 1월 침입 사슬을 재구성했습니다. 그들의 분석에서는 초기 피싱 구성 요소 GammaPhish, 그 후 VBScript 로더 GammaLoad, 자체 전파 웜 GammaWorm, 레지스트리에 모듈을 저장하는 PowerShell 스틸러 GammaSteel이 확인되었습니다. 연구원들은 또한 GammaWorm의 대체 데이터 스트림 및 지속성을 위한 예약 작업과 다수의 교환지 해석기 도메인에 대한 반복적인 네트워크 요청을 문서화했습니다. 조사를 통해 각 구성 요소가 더 넓은 감염 사슬과 장기 거점을 지원하는 방법을 맵핑했습니다.
완화
악성코드는 대체 데이터 스트림을 통해 새로운 페이로드를 지속적으로 가져올 수 있으므로, 안전한 복구 방법으로는 종종 전체 시스템 재구축이 필요합니다. 수비적 노력은 의심스러운 대체 데이터 스트림 생성, RunOnce 레지스트리 수정, 이상한 이름의 예약 작업, 알려진 해석기 도메인으로의 비 브라우저 프로세스에서의 트래픽을 탐지하는 데 중점을 두어야 합니다. 식별된 명령 및 제어 인프라를 차단하고 이메일 첨부 파일에 엄격한 스캔 통제를 적용하면 초기 손상의 가능성을 줄일 수 있습니다.
응답
이 활동이 탐지된 경우, 영향을 받은 호스트를 즉시 격리하고 휘발성 증거를 수집하며 완전한 포렌식 수집을 수행하십시오. 대체 데이터 스트림에 숨겨진 파일을 제거하고 악성 RunOnce 레지스트리 항목을 삭제하며 관련된 예약 작업을 비활성화하십시오. 네트워크 경계에서 알려진 해석기 도메인과 IP 주소를 차단하고, 관찰된 명령 줄과 파일 없는 실행 패턴을 식별할 수 있도록 엔드포인트 탐지를 업데이트해야 합니다.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ddffdd classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes attack_phishing[“<b>행위</b> – <b>T1566.001 스피어 피싱(첨부파일)</b><br/>공격자는 피해자에게 악성 ZIP 파일을 이메일로 전송한다.”] class attack_phishing action file_zip[“<b>파일</b> – malicious.zip<br/>.lnk 바로가기와 Rust로 컴파일된 .exe 드로퍼 포함”] class file_zip file action_user_exec[“<b>행위</b> – <b>T1204.001 사용자 실행</b><br/>피해자가 .lnk 또는 .exe를 실행하여 실행 체인이 시작된다.”] class action_user_exec action file_lnk[“<b>파일</b> – payload.pdf.lnk<br/>더블 확장자와 Edge 아이콘으로 위장된 바로가기”] class file_lnk file tool_wscript[“<b>도구</b> – wscript.exe<br/>VBScript 페이로드 실행”] class tool_wscript tool file_vbs[“<b>파일</b> – empty.vbs<br/>PowerShell을 실행하는 최소 VBScript”] class file_vbs file action_vbscript[“<b>행위</b> – <b>T1059.005 Visual Basic</b><br/>wscript를 통해 VBScript 실행 후 PowerShell 시작”] class action_vbscript action action_powershell[“<b>행위</b> – <b>T1059.001 PowerShell</b><br/>ExecutionPolicy 우회로 실행되며 다음 단계 복호화”] class action_powershell action file_dat[“<b>파일</b> – 1.dat<br/>RuntimeBroker_update.exe를 포함한 XOR 암호화 컨테이너”] class file_dat file process_runtime[“<b>프로세스</b> – RuntimeBroker_update.exe<br/>1.dat에서 복호화되어 DLL 사이드로딩 수행”] class process_runtime process file_dll[“<b>파일</b> – UnityPlayer.dll<br/>RuntimeBroker_update.exe와 동일 디렉토리의 악성 DLL”] class file_dll file action_dll_sideload[“<b>행위</b> – <b>T1546.009 AppCert DLL</b><br/>DLL 사이드로딩을 통해 코드 실행”] class action_dll_sideload action tool_rustloader[“<b>도구</b> – Rust 로더 (RUSTCLOAK)<br/>메모리 할당 후 AZUREVEIL PE를 복호화하여 Windows fibers로 실행”] class tool_rustloader tool action_process_injection[“<b>행위</b> – <b>T1055.002 프로세스 인젝션</b><br/>Windows fibers를 이용한 PE 인젝션”] class action_process_injection action file_azureveil[“<b>파일</b> – AZUREVEIL.exe<br/>인젝션 이후 실행되는 복호화 페이로드”] class file_azureveil file action_discovery[“<b>행위</b> – <b>T1083 파일 탐색</b><br/>로더가 파일을 열거하고 %TEMP%로 이동”] class action_discovery action action_network_discovery[“<b>행위</b> – <b>T1016 네트워크 탐색</b><br/>MAC 및 IP 정보 수집”] class action_network_discovery action action_c2[“<b>행위</b> – <b>T1102 웹 서비스</b><br/>Azure Blob Storage와 HTTPS 통신”] class action_c2 action action_dead_drop[“<b>행위</b> – <b>T1102.003 단방향 통신</b><br/>동일 컨테이너에서 비콘 업로드 및 명령 수신”] class action_dead_drop action action_encrypted_channel[“<b>행위</b> – <b>T1573.001 암호화 채널</b><br/>RC4 및 SM4-CBC 암호화 통신”] class action_encrypted_channel action action_exfil[“<b>행위</b> – <b>T1567.002 웹 서비스 기반 유출</b><br/>암호화된 데이터를 Azure Blob으로 업로드”] class action_exfil action action_persistence[“<b>행위</b> – <b>T1547.009 바로가기 지속성</b><br/>시작 폴더에 LNK 배치로 지속성 확보”] class action_persistence action %% Connections attack_phishing –>|전달| file_zip file_zip –>|활성화| action_user_exec action_user_exec –>|열기| file_lnk file_lnk –>|실행| tool_wscript tool_wscript –>|실행| file_vbs file_vbs –>|시작| action_vbscript action_vbscript –>|시작| action_powershell action_powershell –>|복호화| file_dat file_dat –>|생성| process_runtime process_runtime –>|로드| file_dll file_dll –>|사용| action_dll_sideload process_runtime –>|인젝션| action_process_injection action_process_injection –>|사용| tool_rustloader tool_rustloader –>|로드| file_azureveil file_azureveil –>|실행| action_discovery action_discovery –>|추가| action_network_discovery action_network_discovery –>|전송| action_c2 action_c2 –>|사용| action_dead_drop action_dead_drop –>|의존| action_encrypted_channel action_encrypted_channel –>|활성화| action_exfil action_exfil –>|가능 시| action_persistence file_lnk –>|지속성| action_persistence
공격 흐름
탐지
가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (via registry_event)
보기
LOLBAS WScript / CScript (via process_creation)
보기
LOLBAS MSHTA 방어 회피 행동의 탐지를 통한 의심스러운 행동 (via process_creation)
보기
의심스러운 CURL 사용 (via cmdline)
보기
자동 시작 위치에 의심스러운 이진 파일 / 스크립트 (via file_event)
보기
명령 및 제어 채널로서 가능한 Telegram 남용 (via dns_query)
보기
제3자 서비스/도구를 통한 가능한 데이터 침투/유출/명령 및 제어 (via dns_query)
보기
가능한 CVE-2025-8088 / CVE-2025-6218 (WinRAR 취약점) 악용 시도 (via file_event)
보기
의심스러운 Trycloudflare 도메인 통신 (via dns)
보기
가능한 Cloudflare 개발 도메인 남용 (via dns)
보기
탐지를 위한 IOC (HashMd5): FSB의 마트료시카 #1/3 – 계속 풀어가는 Gamaredon의 선물 – GammaPhish 및 GammaWorm
보기
탐지를 위한 IOC (SourceIP): FSB의 마트료시카 #1/3 – 계속 풀어가는 Gamaredon의 선물 – GammaPhish 및 GammaWorm
보기
탐지를 위한 IOC (DestinationIP): FSB의 마트료시카 #1/3 – 계속 풀어가는 Gamaredon의 선물 – GammaPhish 및 GammaWorm
보기
Windows 파일 이벤트에 대한 GammaWorm NTFS ADS 사용 탐지
보기
시뮬레이션 실행
전제 조건: 원격 측정 및 기준선 사전 점검이 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적대적 기술(T1564.007)의 정확한 실행을 자세히 설명합니다. 명령과 내러티브는 탐지 논리가 예상하는 원격 측정을 직접 생성합니다.
-
공격 설명 및 명령:
운영자는 GammaWorm 페이로드(컴파일된 PE)를 얻고 전통적인 파일 목록에서 숨겨진 채로 지속성을 달성하고자 합니다. 공격자는 NTFS 대체 데이터 스트림에 이름이 지정된 GTR 사용자의 프로필 디렉터리 내. Windows는 ADS를 정상 파일의 일부로 처리할 것입니다 (%USERPROFILE%gamma.exe:GTR). ADS 이름은 규칙의 하드코딩된 목록과 일치하므로, “:GTR”을 포함하는 파일 생성 이벤트는%USERPROFILE%아래에서 탐지를 발생시킬 것입니다.# 단계 1 – 더미 악성 바이너리를 준비합니다 (예: base64로 인코딩된 PowerShell 원라이너) $malicious = [System.Convert]::FromBase64String( "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAwAAAAA4AAAAA") $payloadPath = "$env:USERPROFILEgamma.exe" # 단계 2 – 주 파일에 바이너리를 기록합니다 (선택 사항; ADS는 주 파일 없이 존재할 수 있음) [IO.File]::WriteAllBytes($payloadPath, $malicious) # 단계 3 – 동일한 바이너리(또는 다른 페이로드)를 GTR이라는 ADS에 기록합니다 $adsPath = "$payloadPath:GTR" Set-Content -Path $adsPath -Value $malicious -Encoding Byte -
회귀 테스트 스크립트: (자체 포함; PowerShell 5+가 있는 모든 Windows 호스트에서 실행할 수 있음)
# GammaWorm ADS 지속성 시뮬레이션 – 탐지 규칙을 트리거합니다 try { # 자리 표시자 호스트 파일 생성 $hostFile = "$env:USERPROFILEgamma.exe" $dummyBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # 최소 PE 헤더 [IO.File]::WriteAllBytes($hostFile, $dummyBytes) # 악성 페이로드를 "GTR"이라는 ADS에 기록 $ads = "$hostFile:GTR" Set-Content -Path $ads -Value $dummyBytes -Encoding Byte Write-Host "ADS 'GTR'이 $ads에서 성공적으로 생성되었습니다" } catch { Write-Error "시뮬레이션 실패: $_" } -
정리 명령:
# ADS 및 자리 표시자 호스트 파일 제거 $hostFile = "$env:USERPROFILEgamma.exe" $ads = "$hostFile:GTR" # ADS 삭제(Sysinternals Streams.exe 또는 PowerShell 5+ 필요) if (Test-Path $ads) { Remove-Item -Path $ads -Force Write-Host "ADS GTR 제거됨." } # 메인 파일 삭제 if (Test-Path $hostFile) { Remove-Item -Path $hostFile -Force Write-Host "호스트 파일 gamma.exe 삭제됨." }