1. PMS Patch Chain
patch.ps1 변경, win01 patch 다운로드, PMS Agent SYSTEM 실행, AD/DC discovery가 짧은 시간 안에 이어지는지 확인한다. 정상 baseline은 HTE-001로 분리한다.
OZZY PMS Chain은 AWS 기반 AD 실습 환경에서 JBoss/PMS 업데이트 경로를 신뢰 체인으로 악용하는 침해 캠페인이다.
HanguelPMSChain은 bastion을 통해 내부망으로 진입한 뒤 hanguel-ops-pms의 JBoss AS 6 취약 표면을 확인하고, PMS update manifest와 patch.ps1을 변조한다.
이후 hanguel-win01의 Hanguel PMS Agent가 변조된 패치를 nt authority\system 권한으로 실행하면서 AD/DC discovery와 dc_cred.xml 발견까지 수행했다.
SYSTEM 컨텍스트의 Import-Clixml은 실패했으므로, 별도 AWS control-plane credential과 EC2 private key를 이용해 win01 EC2 local Administrator password를 획득하고, 그 local Administrator 컨텍스트에서 dc_cred.xml을 복호화해 DC C$/WinRM 접근으로 이어지는 활동을 수행했다.
피해 환경은 AWS VPC, bastion, JBoss/PMS 서버, Windows 클라이언트, Active Directory Domain Controller, Hanguel AD Agent, ELK Stack으로 구성된 기업형 AD 운영 환경으로 모델링된다.
이 캠페인은 외부 접근 경로, Linux 기반 JBoss/PMS 서버, Windows PMS Agent, Active Directory 도메인 컨트롤러가 연결된 기업형 운영망 침해 흐름으로 모델링된다.
핵심 전개는 hanguel-ops-pms의 업데이트 경로를 변조해 hanguel-win01에서 SYSTEM 실행을 만들고,
SYSTEM 컨텍스트에서 dc_cred.xml을 발견하되 복호화 실패를 확인한 뒤,
AWS control-plane의 GetPasswordData 경로로 win01 local Administrator 컨텍스트를 확보해 HANGUEL\Administrator credential object를 복호화하는 것이다.
이후 공격자는 DC의 관리 공유 및 WinRM 실행 경로를 이용해 로더와 암호화된 payload를 배치하고,
로더 실행 산출물, Windows Event Log, Amcache, ShimCache, TaskCache, USN Journal을 조합해 loader chain을 재구성할 수 있는 흔적을 남긴다.
| ID | Name | Description |
|---|---|---|
| G-SB-007 | HanguelPMSChain | OZZY PMS Chain 활동과 연결된 가상 공격 그룹이다. PMS 업데이트 신뢰 구조와 Windows 관리 채널을 결합해 AD 환경 credential access를 수행하는 형태로 모델링된다. |
| Domain | ID | Name | Use | Primary Logs |
|---|---|---|---|---|
| Enterprise | T1133 | External Remote Services | OZZY PMS Chain 당시 HanguelPMSChain은 제공된 SSH 접근 경로로 hanguel-bastion에 접속하고, 이를 내부망 10.60.0.0/16 진입 거점으로 사용했다. |
HAB-001 |
| Enterprise | T1046 | Network Service Discovery | HanguelPMSChain은 bastion에서 내부망을 스캔하여 hanguel-ops-pms:8080, hanguel-dc01:{445,3389,5985}, hanguel-win01:{3389,5985} 등 주요 서비스를 식별했다. |
HAB-001, HAP-001 |
| Enterprise | T1190 | Exploit Public-Facing Application | HanguelPMSChain은 hanguel-ops-pms의 JBoss AS 6 취약 표면을 이용해 PMS 서버 컨테이너 내부 명령 실행 권한을 확보했다. |
HAP-001, HAC-001 |
| Enterprise | T1059.004 | Command and Scripting Interpreter: Unix Shell | HanguelPMSChain은 JBoss 컨테이너 shell에서 id, hostname, pwd, 배포 디렉터리 확인으로 실행 위치와 권한을 파악했다. |
HAP-001 |
| Enterprise | T1505.003 | Server Software Component: Web Shell | HanguelPMSChain은 JBoss 배포 경로에 JSP webshell 또는 marker를 배치하여 PMS 서버에서 지속적인 명령 실행 채널을 유지할 수 있는 구조를 만들었다. | HAP-001 |
| Enterprise | T1083 | File and Directory Discovery | HanguelPMSChain은 PMS 서버 내부에서 JBoss 배포 경로와 Windows PMS Agent가 신뢰하는 /updates/manifest.json, /updates/patch.ps1 업데이트 구조를 확인했다. |
HAP-001, HAP-002 |
| Enterprise | T1195.002 | Supply Chain Compromise: Compromise Software Supply Chain | HanguelPMSChain은 PMS 업데이트 경로의 patch.ps1과 manifest를 변조하여 내부 Windows 클라이언트가 신뢰하는 정상 패치 배포 흐름에 공격 코드를 삽입했다. |
HAP-002, HAW-001, HAC-001 |
| Enterprise | T1036.005 | Masquerading: Match Legitimate Name or Location | HanguelPMSChain은 변조 패치를 기존 파일명과 경로인 /updates/patch.ps1로 유지하고 manifest 버전/해시만 갱신하여 정상 업데이트처럼 보이게 만들었다. |
HAP-002 |
| Enterprise | T1053.005 | Scheduled Task / Job: Scheduled Task | hanguel-win01의 Hanguel PMS Agent Scheduled Task가 PMS 서버에서 변조 패치를 다운로드하고 nt authority\system 권한으로 실행했다. |
HAW-001, HAW-003 |
| Enterprise | T1082 | System Information Discovery | HanguelPMSChain은 win01 SYSTEM 컨텍스트에서 사용자, 호스트명, IP 구성, DNS 서버, 실행 권한을 확인하여 감염된 클라이언트의 내부 위치와 권한 수준을 파악했다. | HAW-001, HTE-002 |
| Enterprise | T1482 | Domain Trust Discovery | HanguelPMSChain은 win01에서 hanguel.local 도메인과 도메인 컨트롤러 hanguel-dc01.hanguel.local / 10.60.20.10 존재를 확인했다. |
HAW-001, HTE-002 |
| Enterprise | T1018 | Remote System Discovery | HanguelPMSChain은 hanguel-dc01의 SMB, WinRM, LDAP, Kerberos, DNS 서비스 접근 가능성을 확인하고 후속 장악 대상으로 지정했다. |
HAW-001, HTE-002 |
| Enterprise | T1552 | Unsecured Credentials | HanguelPMSChain은 win01 SYSTEM 컨텍스트에서 C:\ProgramData\HanguelPMS\dc_cred.xml credential artifact를 발견했다. SYSTEM Import-Clixml은 실패했고, 이후 win01 local Administrator 컨텍스트에서 같은 파일의 HANGUEL\Administrator credential object 복호화가 성공했다. |
HAW-001, HAW-002, HTE-002, HAC-002 |
| Enterprise | T1078.004 | Valid Accounts: Cloud Accounts | HanguelPMSChain은 별도 AWS control-plane credential과 EC2 private key를 사용해 ec2:GetPasswordData로 hanguel-win01 EC2 local Administrator password를 획득했다. 보고/검증 출력에는 평문 password를 남기지 않는다. |
HAC-002 |
| Enterprise | T1078.003 | Valid Accounts: Local Accounts | HanguelPMSChain은 AWS control-plane에서 확보한 win01 local Administrator 계정으로 RDP/WinRM 관리 세션을 열고, 해당 사용자 DPAPI 컨텍스트에서 dc_cred.xml을 Import-Clixml로 복호화했다. |
HAW-002, HAC-002 |
| Enterprise | T1021.001 | Remote Services: Remote Desktop Protocol | 분석/공격 흐름에서는 bastion 터널을 통해 127.0.0.1:13390 -> 10.60.30.10:3389로 win01 RDP 접근이 가능했고, local Administrator 컨텍스트 확보 검증에 사용됐다. |
HAC-002 |
| Enterprise | T1021.002 | Remote Services: SMB / Windows Admin Shares | HanguelPMSChain은 HANGUEL\Administrator 자격 증명으로 win01에서 DC의 \\10.60.20.10\C$ 관리 공유에 접근하고 loader chain 파일을 C:\Windows\Temp에 배치했다. |
HAW-002, HAW-004, HTE-002 |
| Enterprise | T1021.006 | Remote Services: Windows Remote Management | HanguelPMSChain은 HANGUEL\Administrator 자격 증명으로 win01에서 DC에 WinRM 명령을 실행하고, DC 내부에서 SYSTEM 권한 Scheduled Task를 등록했다. |
HAW-002, HAW-003, HTE-002 |
| Enterprise | T1027 | Obfuscated Files or Information | HanguelPMSChain은 LSASS dump payload DLL을 XOR 암호화된 hgl_payload.enc 형태로 전달하여 정적 파일 탐지 가능성을 줄였다. |
HAD-002, HAD-004, HAD-009 |
| Enterprise | T1620 | Reflective Code Loading | HanguelPMSChain은 hgl_loader.exe를 이용해 암호화된 PE/DLL payload를 메모리에서 복호화하고, PE header/section mapping, relocation, import resolving을 직접 수행하는 loader 기반 실행 흐름을 사용했다. |
HAD-003, HAD-004, HAD-005, HAD-006, HAD-007, HAD-008, HAC-001 |
| Enterprise | T1003.001 | OS Credential Dumping: LSASS Memory | HanguelPMSChain은 DC의 SYSTEM Scheduled Task에서 loader 기반 dump 흐름을 실행해 LSASS dump artifact를 생성하고, 이를 win01에서 offline 분석하는 흐름을 구성했다. | HAD-002, HAD-003, HAD-004, HAD-005, HAC-001 |
| Enterprise | T1550.002 | Use Alternate Authentication Material: Pass the Hash | HanguelPMSChain은 LSASS dump에서 확보한 HANGUEL\Administrator NTLM hash를 이용해 평문 비밀번호 없이 DC 및 다른 Windows 시스템 접근을 시도할 수 있는 후속 경로를 확보했다. |
HTE-002, HAC-001 |
| ID | Name | Description | Observed Role |
|---|---|---|---|
| S-SB-007-01 | JBoss AS 6 | PMS 서버의 애플리케이션 런타임으로, 업데이트 파일 배포 경로와 명령 실행 취약 표면이 결합된 대상으로 모델링된다. | PMS application server |
| S-SB-007-02 | Hanguel PMS Agent | Windows 클라이언트에서 PMS 업데이트 manifest와 patch를 주기적으로 확인하고 실행하는 에이전트다. | Trusted update executor |
| S-SB-007-03 | Windows Scheduled Task | win01 PMS Agent 실행과 DC SYSTEM 컨텍스트 작업 등록에 사용된 Windows 작업 스케줄러 기능이다. | Execution mechanism |
| S-SB-007-04 | WinRM | Windows Remote Management 경로로, win01에서 DC에 원격 명령을 실행하는 관리 채널이다. | Remote execution channel |
| S-SB-007-05 | SMB Admin Shares | C$, ADMIN$ 등 Windows 관리 공유로, DC 파일 배치와 회수 경로로 사용된다. |
Remote file access |
| S-SB-007-06 | Hanguel AD Agent | Windows/AD 로그와 포렌식 아티팩트를 ECS 유사 JSON으로 정규화하고 normal, suspicious, attack 태그를 부여하는 실습용 수집 에이전트다. |
Endpoint telemetry and enrichment |
| S-SB-007-07 | Manual PE Loader | 암호화된 PE/DLL payload를 메모리에서 복호화하고 직접 mapping하여 실행하는 C++ loader다. | Defense evasion and payload execution |
| S-SB-007-08 | ELK Stack | Elasticsearch, Logstash, Kibana 기반의 수집, 검색, 시각화, 상관분석 환경이다. | SIEM and investigation platform |
| S-SB-007-09 | Microsoft Defender | raw LSASS dump 시도와 알려진 credential dumping 도구를 탐지하거나 차단하는 Windows 보안 구성 요소다. | Endpoint protection and detection |
patch.ps1 변경, win01 patch 다운로드, PMS Agent SYSTEM 실행, AD/DC discovery가 짧은 시간 안에 이어지는지 확인한다. 정상 baseline은 HTE-001로 분리한다.
dc_cred.xml 발견, SYSTEM Import-Clixml 실패, AWS GetPasswordData 기반 win01 local Administrator 컨텍스트 확보, 이후 DC WinRM whoami 또는 \\10.60.20.10\C$ 접근 이벤트가 이어지는지 확인한다.
DC의 Task XML, Application Error, Amcache, ShimCache, USN Journal, loader run log를 묶어 loader 기반 실행 정황을 재구성한다.
campaign.id: "SB-07"
and event.action: ("pms_patch_executed" or "domain_controller_discovery" or "dc_cred_xml_discovered" or "aws_get_password_data_win01_local_admin_verified" or "win01_local_admin_context")
sequence by host.name with maxspan=30m
[any where event.action == "pms_patch_executed"]
[any where event.action == "domain_controller_discovery"]
[any where event.action == "dc_cred_xml_discovered"]
[any where event.action == "aws_get_password_data_win01_local_admin_verified"]
[any where event.action == "win01_local_admin_context"]
[any where event.action == "dc_cred_xml_imported"]
[any where event.action in ("dc_winrm_whoami", "dc_c_admin_share_access")]
관찰된 환경은 AWS bastion, JBoss/PMS update relay, Windows client, Active Directory Domain Controller, SOC/ELK 서버로 구성된다. 공격자는 bastion을 통해 내부망을 관찰하고, PMS 업데이트 경로를 변조한 뒤 Windows 신뢰 실행 흐름을 이용해 win01 SYSTEM 컨텍스트와 DC 관리 채널로 확장할 수 있다.
Internet / Analyst
-> hanguel-bastion
-> hanguel-ops-pms
-> hanguel-win01 PMS Agent
-> hanguel-dc01
-> hanguel-soc01 ELK
# Analyst KQL
campaign.id: "SB-07"
log.id: ("HAW-001" or "HAD-005" or "HAC-001")
hanguel.classification: ("suspicious" or "attack")