HAW-001 Win01 Hanguel AD Agent Enriched Event
PMS patch 실행 이후 win01의 AD/DC discovery, credential artifact 발견, DC 접근 신호를 정규화한다.
이 페이지는 OZZY PMS Chain 환경에서 발생하는 공격 Technique과 이를 증명할 수 있는 Log Source를 분리해 정리한 Campaign Page 2 초안이다.
Technique 문서는 공격 행위와 분석 관점을 설명하고, Log Catalog는 원본 로그 위치, 수집 방식, 주요 필드, 커버 가능한 Technique을 역매핑한다.
특히 loader 기반 실행은 직접 증거와 추론 증거를 분리하여 manual_mapping_inferred처럼 표현한다.
| AWS Region | ap-northeast-2 |
|---|---|
| Bastion | hanguel-bastion, 10.60.0.10 |
| PMS / JBoss | hanguel-ops-pms, 10.60.0.20 |
| Domain Controller | hanguel-dc01, 10.60.20.10 |
| Windows Client | hanguel-win01, 10.60.30.10 |
| ELK / SOC | hanguel-soc01, 10.60.40.10 |
| Campaign ID | HGC-2026-AD-001 |
| # | MITRE ID | Technique | 현재 환경 적용 여부 | Related Logs | Representative event.action |
|---|---|---|---|---|---|
| 1 | T1133 | External Remote Services | 관측 가능 | HAB-001 | ssh_session_accepted |
| 2 | T1046 | Network Service Discovery | 관측 가능 | HAB-001, HAP-001 | internal_service_probe, jboss_invoker_probe |
| 3 | T1190 | Exploit Public-Facing Application | 핵심 Technique | HAP-001, HAC-001 | jboss_command_execution |
| 4 | T1195.002 | Supply Chain Compromise | 핵심 Technique | HAP-002, HAW-001, HAC-001 | pms_patch_changed_emulated, pms_patch_executed |
| 5 | T1053.005 | Scheduled Task / Job | 핵심 Technique | HAW-003, HAD-008 | dc_scheduled_task_registered, task_xml_loader_action_found |
| 6 | T1082 | System Information Discovery | 관측 가능 | HAW-001, HTE-002 | system_user_context, system_ipconfig |
| 7 | T1482 | Domain Trust Discovery | 관측 가능 | HAW-001, HTE-002 | domain_controller_discovery, dc_srv_dns_lookup |
| 8 | T1018 | Remote System Discovery | 관측 가능 | HAW-001, HTE-002 | dc_port_probe_445, dc_port_probe_5985 |
| 9 | T1552 | Unsecured Credentials | 핵심 Technique | HAW-001, HAW-002, HTE-002, HAC-002 | dc_cred_xml_discovered, dc_cred_xml_imported |
| 10 | T1078.004 | Valid Accounts: Cloud Accounts | 핵심 Technique | HAC-002 | aws_get_password_data_win01_local_admin_verified |
| 11 | T1078.003 | Valid Accounts: Local Accounts | 핵심 Technique | HAC-002, HAW-002 | win01_local_admin_context, dc_cred_xml_imported |
| 12 | T1021.001 | Remote Desktop Protocol | 관측 가능 | HAC-002 | win01_rdp_local_admin_context |
| 13 | T1021.002 | SMB / Windows Admin Shares | 관측 가능 | HAW-002, HTE-002, HAC-002 | dc_c_admin_share_access |
| 14 | T1021.006 | Windows Remote Management | 관측 가능 | HAW-002, HAW-003, HTE-002, HAC-002 | dc_winrm_whoami, dc_winrm_command_observed |
| 15 | T1027 | Obfuscated Files or Information | 관측 가능 | HAD-002, HAD-004, HAD-009 | encrypted_payload_artifact_found, loader_execution_log_found |
| 16 | T1620 | Reflective Code Loading | 추론 포함 | HAD-003, HAD-004, HAD-005, HAD-006, HAD-007, HAD-008, HAC-001 | loader_execution_log_found, manual_mapping_inferred_from_artifacts |
| 17 | T1003.001 | OS Credential Dumping: LSASS Memory | 조건부 관측 | HAD-002, HAD-003, HAD-004, HAD-005, HAC-001 | sysmon_lsass_process_access, loader_execution_log_found |
멘토님 피드백에 맞춰 Technique 단위만 나열하지 않고, 실제 공격자가 수행하는 행위 단위로 탐지 단위를 재정의한다. 각 행위는 primary logs, KQL, 후속 pivot을 가진다.
| Behavior Unit | What Happened | Primary Logs | KQL Pivot | Evidence State |
|---|---|---|---|---|
| PMS patch execution | PMS update path의 patch.ps1이 win01 PMS Agent에 의해 SYSTEM으로 실행됨 | HAP-002, HAW-001, HAW-003, HAC-001 | event.action:("pms_patch_executed" or "pms_patch_changed_emulated") | 확인됨 |
| AD/DC discovery | win01에서 DC DNS/SRV, 445/5985 reachability, domain context를 확인함 | HAW-001, HTE-002 | event.action:("domain_controller_discovery" or "dc_port_probe_445" or "dc_port_probe_5985") | 확인됨 |
| Credential artifact access | dc_cred.xml 발견, SYSTEM Import-Clixml 실패, local Administrator 컨텍스트에서 Import-Clixml 성공을 분리해 확인함 | HAW-001, HAW-002, HTE-002, HAC-002 | event.action:("dc_cred_xml_discovered" or "dc_cred_xml_imported") | 확인됨 |
| AWS control-plane local admin bridge | AWS ec2:GetPasswordData와 EC2 private key로 win01 local Administrator password를 획득하고, 비밀 출력 없이 WinRM/RDP 컨텍스트를 확인함 | HAC-002 | event.action:"aws_get_password_data_win01_local_admin_verified" | 확인됨 |
| DC remote access | local Administrator 컨텍스트에서 복호화된 HANGUEL\Administrator credential object로 DC WinRM/C$ 접근 및 원격 task 등록 흐름 확인 | HAW-002, HAW-003, HAW-004, HTE-002, HAC-001, HAC-002 | event.action:("dc_winrm_whoami" or "dc_c_admin_share_access" or "dc_scheduled_task_registered") | 확인됨 |
| Loader artifact reconstruction | Task XML, Application Error, Amcache, ShimCache, USN Journal, loader run log로 loader 실행 흐름 재구성 | HAD-004, HAD-005, HAD-006, HAD-007, HAD-008, HAD-009, HAC-001 | log.id:("HAD-005" or "HAD-006" or "HAD-007" or "HAD-008" or "HAD-009") | 확인됨 + 일부 추론 |
| LSASS access direct proof | Sysmon Event ID 10으로 hgl_loader.exe -> lsass.exe를 직접 증명하는 단계 | HAD-003 | event.action:"sysmon_lsass_process_access" and not hanguel.test_runner:true | 미확인 |
Page 2의 각 Log ID는 단순 경로가 아니라, 발생 조건과 필드 의미까지 포함해야 한다. 아래 표는 SB-07에서 우선 보강한 실무형 로그 설명 기준이다.
| Log ID | Original Location | When It Appears | Important Fields | Collection | Example KQL |
|---|---|---|---|---|---|
| HAW-001 | C:\ProgramData\HanguelADAgent\logs\*.jsonl | win01 PMS patch/AD discovery/credential artifact 요약 이벤트 생성 | event.action, host.name, user.name, hanguel.classification | Hanguel AD Agent -> Logstash HTTP -> ES | log.id:"HAW-001" and campaign.id:"SB-07" |
| HAW-002 | PowerShell Operational / agent-normalized event | Import-Clixml, Invoke-Command, New-PSDrive 등 credential 사용 및 DC 접근 | powershell.command, event.action, related.hosts | collector summary -> hanguel-ad-agent-* | event.action:("dc_winrm_whoami" or "dc_c_admin_share_access") |
| HAD-003 | Microsoft-Windows-Sysmon/Operational | Sysmon 설치 후 process create/access/file create/image load 발생 | event.code, SourceImage, TargetImage, GrantedAccess | Sysmon + Windows Event collector | event.action:"sysmon_lsass_process_access" |
| HAD-005 | Windows Logs > Application, Event ID 1000/1001 | hgl_loader.exe crash 또는 WER reporting 발생 | process.name, error.code, event.code | collector summary -> hanguel-ad-agent-* | log.id:"HAD-005" and event.action:"application_loader_crash_observed" |
| HAD-006 | C:\Windows\AppCompat\Programs\Amcache.hve | Application Compatibility inventory에 실행 파일 metadata가 남을 때 | file.path, pe.architecture, artifact.source | forensic collector summary | event.action:"amcache_loader_artifact_found" |
| HAD-007 | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache | ShimCache/AppCompatCache에 executable path reference가 남을 때 | registry.path, file.path, artifact.source | registry collector summary | event.action:"shimcache_loader_artifact_found" |
| HAD-008 | TaskCache registry + C:\Windows\System32\Tasks\* | DC loader scheduled task 등록/실행 action 확인 | task.name, task.action, process.command_line | task collector summary | event.action:("taskcache_loader_task_found" or "task_xml_loader_action_found") |
| HAD-009 | fsutil usn readjournal C: csv | loader/payload/run script 파일 생성/수정/close lifecycle 확인 | file.name, file.path, usn.reason | USN collector summary | event.action:"usn_loader_file_lifecycle_observed" |
| HAC-001 | hanguel-alerts-* | custom sequential correlator가 여러 event.action을 시간창 내에서 연결 | rule.id, correlation.key, correlation.actions | Hanguel AD correlator reads hanguel-ad-agent-* + langflow-agent-* -> ES | correlation.key:"run:SB07-FULL-BAS-20260528-111840" |
| HAC-002 | AD-JBOSS\verify_aws_control_plane_win01_admin.py redacted JSON output | AWS GetPasswordData, win01 local Administrator WinRM, dc_cred.xml Import-Clixml, DC WinRM/C$ 확인 | password_data_present, plaintext_printed:false, dc_winrm_succeeded, dc_c_admin_share_succeeded | Manual verification script, optional HTTP collector -> current index langflow-agent-* | event.action:"aws_get_password_data_win01_local_admin_verified" |
수집 스크립트가 흩어져 보이지 않도록 최종 운영 기준 경로를 C:\ProgramData\HanguelADAgent\로 정의한다.
기존 C:\ProgramData\HanguelPMS\ 경로는 PMS patch chain의 공격/실습 artifact 경로로 남기고, 탐지 수집 패키지는 별도 agent 경로로 분리한다.
| Package Item | Recommended Path | Purpose | Status |
|---|---|---|---|
| Agent config | C:\ProgramData\HanguelADAgent\config.json | campaign id, collector endpoint, host role, log routing 설정 | 패키지 기준 정의됨 |
| Windows detection collector | C:\ProgramData\HanguelADAgent\collectors\collect_windows_detection_logs.ps1 | Defender, Security, PowerShell, TaskScheduler, Sysmon 이벤트 정규화 | 패키지 포함 |
| Loader artifact collector | C:\ProgramData\HanguelADAgent\collectors\collect_loader_bypass_artifacts.ps1 | Amcache, ShimCache, TaskCache, Task XML, USN Journal, WER artifact 요약 | 패키지 포함 |
| Local normalized output | C:\ProgramData\HanguelADAgent\logs\*.jsonl | ELK 전송 전 로컬 원본 보존 및 재전송 근거 | 패키지 기준 정의됨 |
| Optional Sysmon | C:\ProgramData\HanguelADAgent\tools\Sysmon\ | Event ID 10 ProcessAccess, Event ID 11 FileCreate 직접 증거 확보 | 직접 LSASS 증거는 아직 미확인 |
아래 상세 항목은 Technique별로 어떤 행위가 발생하고, 어떤 Log ID를 1차 근거로 삼아야 하며, 어떤 필드와 KQL로 확인할 수 있는지 정리한다.
단일 로그만으로 단정하지 않고, host.name, source.ip, event.action, hanguel.classification, related.events를 pivot으로 연결한다.
PMS update path의 manifest와 patch.ps1이 변경되고, win01 PMS Agent가 이를 정상 업데이트처럼 다운로드/실행하는 단계다.
patch.ps1 hash 변경, pms_patch_executed, SYSTEM 실행 context
event.action : ("pms_patch_changed_emulated" or "pms_patch_executed")
Investigation Pivot: PMS host의 manifest/hash 변경 시간과 win01의 patch 실행 시간, 이후 AD/DC discovery 이벤트를 연결한다.
win01 SYSTEM 컨텍스트에서 사용자, IP/DNS, 도메인 컨트롤러, DC SMB/WinRM 포트 접근성을 확인하는 단계다.
C:\ProgramData\HanguelPMS\dc_cred.xml을 발견하고, SYSTEM 컨텍스트의 Import-Clixml 실패와 win01 local Administrator 컨텍스트의 Import-Clixml 성공을 분리해 확인하는 단계다.
AWS control-plane credential과 EC2 private key로 hanguel-win01 local Administrator password를 얻고, WinRM/RDP로 local Administrator 컨텍스트를 확보하는 단계다. 이 단계는 DPAPI 우회가 아니라, 올바른 사용자 컨텍스트를 획득해 Export-Clixml 보호 범위 안에서 복호화한 것으로 표현한다.
win01 local Administrator 컨텍스트에서 dc_cred.xml로 복호화한 도메인 관리자 credential object를 사용해 DC WinRM command와 C$ admin share 접근을 수행하는 단계다.
DC에 loader chain 파일이 배치되고, Task XML, Application Error, Amcache, ShimCache, USN Journal, loader run log로 실행 흐름을 재구성하는 단계다. Sysmon Event ID 10이 없으면 LSASS process access는 직접 증거가 아니라 한계로 표시한다.
| Technique | HAB-001 | HAP-001 | HAP-002 | HAW-001 | HAW-002 | HAW-003 | HAW-004 | HAD-003 | HAD-004 | HAD-005~009 | HTE-002 | HAC-001 | HAC-002 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| T1133 External Remote Services | O | - | - | - | - | - | - | - | - | - | - | - | - |
| T1046 Network Service Discovery | O | O | - | - | - | - | - | - | - | - | - | - | - |
| T1190 Exploit Public-Facing Application | - | O | - | - | - | - | - | - | - | - | - | O | - |
| T1195.002 Supply Chain Compromise | - | O | O | O | - | O | - | - | - | - | O | O | - |
| T1082/T1482/T1018 Discovery | - | - | - | O | - | - | - | - | - | - | O | O | - |
| T1552 Unsecured Credentials | - | - | - | O | O | - | - | - | - | - | O | O | O |
| T1078.004/T1078.003 Valid Accounts | - | - | - | - | O | - | - | - | - | - | - | - | O |
| T1021.001 RDP to win01 | - | - | - | - | - | - | - | - | - | - | - | - | O |
| T1021.002/T1021.006 Remote Services | - | - | - | - | O | O | O | - | - | - | O | O | O |
| T1620 Reflective Code Loading | - | - | - | - | - | O | O | O | O | O | - | O | - |
| T1003.001 LSASS Memory | - | - | - | - | - | - | O | 확장 필요 | O | O | - | O | - |
PMS patch 실행 이후 win01의 AD/DC discovery, credential artifact 발견, DC 접근 신호를 정규화한다.
Import-Clixml, Invoke-Command, New-PSDrive 기반 credential 사용과 DC 접근을 확인한다.
Sysmon Event ID 10으로 loader가 LSASS를 열었는지 직접 증명하기 위한 로그다.
hgl_loader.exe crash와 unknown module 정황을 Windows 원본 로그로 확인한다.
Amcache에서 hgl_loader.exe 경로와 PE metadata를 확인한다.
patch, credential, DC access, loader artifact를 시간창 내 incident 후보로 묶는다.
GetPasswordData, win01 local Administrator 컨텍스트, dc_cred.xml Import-Clixml, DC WinRM/C$ 검증을 비밀 출력 없이 확인한다.
hgl_loader.exe -> lsass.exe ProcessAccess 직접 증거는 아직 재현 캡처가 필요하다.manual_mapping_inferred는 직접 증거가 아니라 loader run log, Application Error, Amcache, ShimCache, Task XML, USN Journal 조합에 따른 추론으로 유지한다.HTE-001과 공격 traffic emulation인 HTE-002를 Page 3 Detection Evidence 캡처로 분리하면 오탐/탐지 비교가 쉬워진다.