다크게이트 상세 분석
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
DarkGate는 범죄 시장에서 Malware-as-a-Service로 판매되는 델파이 기반 로더입니다. 이것은 완전한 RAT 기능, 동적 API 해상도, 사용자 정의 base64 문자 집합, Union-API 스타일과 같은 계층적 회피 기법을 포함합니다. 시스템 콜 로딩 및 APC 인젝션이 있습니다. ‘RastaFarEye’로 알려진 판매자에게 기인된 이 도구는 TA577 및 Ducktail과 같은 행위자들에 의해 사용되었습니다. 이는 난독화된 페이로드와 함께 HTTP를 통해 C2와 통신하며 원격 데스크톱 유틸리티를 배포하고, Discord 토큰을 탈취하며, 상호작용적 역셸을 실행할 수 있습니다.
DarkGate 멀웨어 분석
이 출판물은 DarkGate 실행 파일의 심층적인 리버스 엔지니어링 진행 과정을 전달하며, 맞춤형 구성 암호화, XOR 기반 BotID 생성 및 암호화된 로깅을 설명합니다. 로더의 지속성 기술, 권한 상승 경로, 토큰 탈취 워크플로 및 PsExec와 Extexport와 같은 적법한 바이너리의 악용을 기록합니다. 또한 C2 통신 패턴, 기본 hVNC 자격 증명 및 사용되는 일반적인 HTTP 포트 (2351 및 9999)를 자세히 문서화합니다.
완화
블루 팀은 참조된 파일과 레지스트리 실행 항목 생성 여부를 감시하고, 즉시 기본 hVNC 자격 증명을 무효화하거나 차단하며, PsExec 및 Extexport가 승인되지 않은 DLL 로딩에 사용되는지 감지해야 합니다. 행동 분석은 Union-API 시스템 호출 사용, NtTestAlert를 통한 APC 인젝션 및 부모 PID 스푸핑을 다루어야 합니다. 네트워크 방어는 이상한 HTTP 포트를 플래그하고 DarkGate의 사용자 정의 base64 알파벳을 해독하여 C2 트래픽을 드러낼 수 있습니다.
응답
DarkGate 활동이 확인되면 영향을 받은 엔드포인트를 격리하고, 문서화된 아티팩트를 수집하고, 악성 프로세스를 종료하며, 모든 지속성 발판을 제거하십시오. 노출된 자격 증명을 회전시키고 알려진 C2 도메인 및 IP 범위를 차단하십시오. 철저한 포렌식 검토는 모든 2차 페이로드를 식별하고 Extexport 또는 관련 로더를 통해 도입된 모든 DLL이 제거되었는지 확인해야 합니다.
mermaid graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef action fill:#d9ffd9 %% Nodes – Techniques step_initial_infection[“<b>Technique</b> – <b>T1055.001: 초기 접근 AutoIt 스크립트를 통한</b><br />AutoIt 스크립트가 피해자 시스템에 악성코드 페이로드를 전달하는 데 사용됩니다.”] class step_initial_infection technique step_dynamic_api[“<b>Technique</b> – <b>T1027.007: 난독화된/저장된 파일 – 동적 API 해상</b><br />악성 코드는 정적 분석을 피해 런타임에 필요한 Windows API를 해상합니다.”] class step_dynamic_api technique step_union_syscall[“<b>Technique</b> – <b>T1106: 네이티브 API</b><br />악성 행위를 모니터링 도구로부터 숨기기 위해 Union API 시스템 콜 회피가 수행됩니다.”] class step_union_syscall technique step_process_injection[“<b>Technique</b> – <b>T1055.004: 프로세스 인젝션 – APC</b><br />비동기 프로시저 호출 인젝션이 적법한 프로세스 내에서 악성 코드를 실행하는 데 사용됩니다.”] class step_process_injection technique step_token_manipulation[“<b>Technique</b> – <b>T1134: 접근 토큰 조작</b><br />공격자는 접근 토큰을 탈취하거나 수정하여 권한을 상승시킵니다.”] class step_token_manipulation technique step_priv_esc_psexec[“<b>Technique</b> – <b>T1548.002: 권한 상승 제어 메커니즘 악용 – PsExec</b><br />PsExec는 원격 시스템에서 높은 권한 사용자로 명령을 실행하는 데 사용됩니다.”] class step_priv_esc_psexec technique step_persistence[“<b>Technique</b> – <b>T1547.001: 부팅 또는 로그인 초기화 스크립트 – LNK 및 레지스트리 실행</b><br />바이패스용 문서 및 실행 레지스트리 키가 악성코드 시작을 보장하기 위해 생성됩니다.”] class step_persistence technique step_keylogging[“<b>Technique</b> – <b>T1056.001: 입력 캡처 – 키로깅</b><br />사용자 키 입력이 자격 증명 및 민감한 데이터를 캡처하기 위해 기록됩니다.”] class step_keylogging technique step_remote_vnc[“<b>Technique</b> – <b>T1021.005: 원격 서비스 – VNC</b><br />숨겨진 VNC 서버는 공격자에게 상호작용적 원격 데스크톱 접근을 제공합니다.”] class step_remote_vnc technique step_command_execution[“<b>Technique</b> – <b>T1059.001: 명령 및 스크립팅 인터프리터 – PowerShell</b> 및 <b>T1059.003: 명령 및 스크립팅 인터프리터 – Windows 명령 셸</b><br />PowerShell 및 cmd가 추가 공격자 명령을 실행하는 데 사용됩니다.”] class step_command_execution technique step_c2_communication[“<b>Technique</b> – <b>T1102.002/T1102.003: 애플리케이션 계층 프로토콜 – 웹 프로토콜 (HTTP/HTTPS)</b> 및 <b>T1132.002: 데이터 인코딩 – 표준 인코딩</b><br />C2 트래픽이 표준 웹 트래픽과 혼합되도록 사용자 정의 인코딩을 사용하여 HTTP를 통해 전송됩니다.”] class step_c2_communication technique step_environment_checks[“<b>Technique</b> – <b>T1497.001: 가상화/샌드박스 회피 – 시스템 검사</b> 및 <b>T1112: 레지스트리 수정</b><br />멀웨어는 환경을 검사하고, 존재를 숨기기 위해 레지스트리 값을 변경합니다.”] class step_environment_checks technique %% Nodes – Tools tool_autoit[“<b>Tool</b> – <b>이름</b>: AutoIt<br /><b>설명</b>: 초기 감염 스크립트를 생성하는 데 사용되는 스크립팅 언어입니다.”] class tool_autoit tool tool_psexec[“<b>Tool</b> – <b>이름</b>: PsExec<br /><b>설명</b>: 높은 권한으로 원격 실행 유틸리티가 프로세스를 실행합니다.”] class tool_psexec tool tool_vnc[“<b>Tool</b> – <b>이름</b>: 숨겨진 VNC 서버<br /><b>설명</b>: 공격자에게 은밀한 원격 데스크톱 기능을 제공합니다.”] class tool_vnc tool %% Connections – Attack Flow step_initial_infection u002du002d>|사용| tool_autoit step_initial_infection u002du002d>|리드| step_dynamic_api step_dynamic_api u002du002d>|리드| step_union_syscall step_union_syscall u002du002d>|리드| step_process_injection step_process_injection u002du002d>|리드| step_token_manipulation step_token_manipulation u002du002d>|리드| step_priv_esc_psexec step_priv_esc_psexec u002du002d>|사용| tool_psexec step_priv_esc_psexec u002du002d>|리드| step_persistence step_persistence u002du002d>|리드| step_keylogging step_keylogging u002du002d>|리드| step_remote_vnc step_remote_vnc u002du002d>|사용| tool_vnc step_remote_vnc u002du002d>|리드| step_command_execution step_command_execution u002du002d>|리드| step_c2_communication step_c2_communication u002du002d>|리드| step_environment_checks
공격 흐름
탐지
DarkGate에서 NtQueueApcThread 및 NtTestAlert를 통한 APC 인젝션 탐지 [Windows Sysmon]
보기
DarkGate 악성코드 명령 실행 및 권한 상승 탐지 [Windows 프로세스 생성]
보기
탐지 IOCs (HashMd5): DarkGate 내부
보기
탐지 IOCs (HashSha256): DarkGate 내부
보기
비정상적인 위치에서 AutoHotKey 및 AutoIT 실행 의심 (프로세스 생성으로)
보기
지속성 가능성 지점 [ASEPs – 소프트웨어/NTUSER 하이브] (레지스트리 이벤트로)
보기
시뮬레이션 실행
전제 조건: Telemetry & Baseline Pre-flight Check가 통과해야 합니다.
-
공격 서사 및 명령:
시뮬레이션된 적은 이미 엔드포인트에 침입하여 지속적인 RDP 접근을 설정하려고 합니다. 먼저, 그들은 자격 증명을 저장함으로써 수집한 후cmdkey를 사용하여psexec.exe를 통해 측면 이동을 하고, 최종적으로 키로거 스텁을 드롭하는 PowerShell 페이로드를 실행합니다. 각 단계는 탐지 규칙이 모니터링하는 정확한 프로세스 생성 이벤트를 생성하도록 설계되었습니다.- 자격 증명 수집 (T1552.001) – 규칙의
selection_cmdkey패턴과 일치하는 제작된 자격 증명 항목을 저장합니다. - 측면 이동 (T1219) – 원격 호스트에 대한
psexec.exe를 실행하여 새로운 PowerShell 세션을 생성하는 명령을 호출합니다. - PowerShell 실행 (T1059.001) – 베이스64로 인코딩된 무해한 명령과 함께 악성 스크립트를 로드하는 PowerShell 명령을 실행합니다.
- 키로거 배포 (T1056.001) –
GetAsyncKeyState를 호출하는 작은 C 바이너리를 컴파일하고 실행하여API필드 일치를 생성합니다.
- 자격 증명 수집 (T1552.001) – 규칙의
-
회귀 테스트 스크립트:
# DarkGate 시뮬레이션 스크립트 – PowerShell # -------------------------------------------------- # 1. Cmdkey 자격 증명 항목 (탐지 패턴과 일치) $generic = '""' # DarkGate에서 사용한 빈 일반 포맷 $user = 'SafeMode' # 규칙이 예상하는 사용자 이름 $pass = 'darkgatepassword0' # 규칙이 예상하는 비밀번호 cmd.exe /c cmdkey /generic:$generic /user:$user /pass:$pass # 2. PsExec 측면 이동 (바이너리가 PATH에 존재하거나 전체 경로를 지정해야 함) $remoteHost = '10.0.0.5' $psexecPath = "$env:SystemRootSystem32psexec.exe" if (Test-Path $psexecPath) { & $psexecPath \$remoteHost -accepteula cmd /c "whoami" } else { Write-Host "PsExec가 $psexecPath에 없습니다 – 이 단계를 건너뜁니다." } # 3. PowerShell 실행 (베이스64로 인코딩된 무해한 명령) $psCommand = 'Write-Output "PowerShell payload executed"' $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($psCommand)) powershell.exe -EncodedCommand $encoded # 4. 키로거 스텁 컴파일 및 실행 $cSource = @" #include <windows.h> int main() { // API 일치 항목을 만족시키기 위한 간단한 GetAsyncKeyState 호출 GetAsyncKeyState(VK_RETURN); return 0; } "@ $srcPath = "$env:TEMPkeylog_stub.c" $exePath = "$env:TEMPkeylog_stub.exe" $cSource | Set-Content -Path $srcPath -Encoding ASCII # Visual C++로 컴파일 (cl.exe가 PATH에 있어야 함) cl.exe /nologo /O2 /Fe:$exePath $srcPath if (Test-Path $exePath) { & $exePath } -
정리 명령:
# 자격 증명 항목 삭제 cmd.exe /c cmdkey /delete:$generic # 임시 파일 삭제 Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.c" Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.exe" # 선택 사항: 스크립트에서 실행된 남은 psexec 또는 powershell 프로세스를 종료하십시오 Get-Process -Name psexec, powershell -ErrorAction SilentlyContinue | Stop-Process -Force