Translated ['src/windows-hardening/active-directory-methodology/adws-enu

This commit is contained in:
Translator 2025-07-28 12:12:44 +00:00
parent 71d9d74f63
commit d322da331a
3 changed files with 155 additions and 57 deletions

View File

@ -260,6 +260,7 @@
- [Ad Certificates](windows-hardening/active-directory-methodology/ad-certificates.md)
- [AD information in printers](windows-hardening/active-directory-methodology/ad-information-in-printers.md)
- [AD DNS Records](windows-hardening/active-directory-methodology/ad-dns-records.md)
- [Adws Enumeration](windows-hardening/active-directory-methodology/adws-enumeration.md)
- [ASREPRoast](windows-hardening/active-directory-methodology/asreproast.md)
- [BloodHound & Other AD Enum Tools](windows-hardening/active-directory-methodology/bloodhound.md)
- [Constrained Delegation](windows-hardening/active-directory-methodology/constrained-delegation.md)

View File

@ -0,0 +1,106 @@
# Active Directory Web Services (ADWS) Enumeration & Stealth Collection
{{#include ../../banners/hacktricks-training.md}}
## What is ADWS?
Active Directory Web Services (ADWS)는 **Windows Server 2008 R2 이후 모든 도메인 컨트롤러에서 기본적으로 활성화되어 있으며** TCP **9389**에서 수신 대기합니다. 이름과는 달리, **HTTP는 포함되지 않습니다**. 대신, 이 서비스는 독점적인 .NET 프레임 프로토콜 스택을 통해 LDAP 스타일의 데이터를 노출합니다:
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
트래픽이 이러한 이진 SOAP 프레임 안에 캡슐화되어 있고 일반적이지 않은 포트를 통해 전송되기 때문에, **ADWS를 통한 열거는 고전적인 LDAP/389 및 636 트래픽보다 검사, 필터링 또는 서명될 가능성이 훨씬 적습니다**. 운영자에게는 다음과 같은 의미가 있습니다:
* 더 은밀한 정찰 블루 팀은 종종 LDAP 쿼리에 집중합니다.
* SOCKS 프록시를 통해 9389/TCP를 터널링하여 **비 Windows 호스트 (Linux, macOS)**에서 수집할 수 있는 자유.
* LDAP를 통해 얻을 수 있는 동일한 데이터 (사용자, 그룹, ACL, 스키마 등)와 **쓰기**를 수행할 수 있는 능력 (예: **RBCD**를 위한 `msDs-AllowedToActOnBehalfOfOtherIdentity`).
> NOTE: ADWS는 많은 RSAT GUI/PowerShell 도구에서도 사용되므로 트래픽이 합법적인 관리자 활동과 혼합될 수 있습니다.
## SoaPy Native Python Client
[SoaPy](https://github.com/logangoins/soapy)는 **순수 Python으로 ADWS 프로토콜 스택을 완전히 재구현한 것입니다**. 이는 NBFX/NBFSE/NNS/NMF 프레임을 바이트 단위로 생성하여 .NET 런타임에 손대지 않고 Unix 유사 시스템에서 수집할 수 있게 합니다.
### Key Features
* **SOCKS를 통한 프록시 지원** (C2 임플란트에서 유용).
* LDAP `-q '(objectClass=user)'`와 동일한 세밀한 검색 필터.
* 선택적 **쓰기** 작업 ( `--set` / `--delete` ).
* BloodHound에 직접 수집하기 위한 **BOFHound 출력 모드**.
* 사람이 읽기 쉬운 경우를 위해 타임스탬프 / `userAccountControl`을 예쁘게 만드는 `--parse` 플래그.
### Installation (operator host)
```bash
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
```
## Stealth AD Collection Workflow
다음 워크플로우는 ADWS를 통해 **도메인 및 ADCS 객체**를 열거하고, 이를 BloodHound JSON으로 변환한 후 인증서 기반 공격 경로를 탐색하는 방법을 보여줍니다 모두 Linux에서:
1. **대상 네트워크에서 귀하의 박스로 9389/TCP 터널링** (예: Chisel, Meterpreter, SSH 동적 포트 포워드 등을 통해). `export HTTPS_PROXY=socks5://127.0.0.1:1080`을 내보내거나 SoaPy의 `--proxyHost/--proxyPort`를 사용하십시오.
2. **루트 도메인 객체 수집:**
```bash
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
```
3. **구성 NC에서 ADCS 관련 객체 수집:**
```bash
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-dn 'CN=Configuration,DC=ludus,DC=domain' \
-q '(|(objectClass=pkiCertificateTemplate)(objectClass=CertificationAuthority) \\
(objectClass=pkiEnrollmentService)(objectClass=msPKI-Enterprise-Oid))' \
| tee data/adcs.log
```
4. **BloodHound로 변환:**
```bash
bofhound -i data --zip # produces BloodHound.zip
```
5. **ZIP 파일을** BloodHound GUI에 업로드하고 `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c`와 같은 cypher 쿼리를 실행하여 인증서 상승 경로(ESC1, ESC8 등)를 드러냅니다.
### `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD) 작성하기
```bash
soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....'
```
`s4u2proxy`/`Rubeus /getticket`와 결합하여 전체 **리소스 기반 제약 위임** 체인을 만듭니다.
## 탐지 및 강화
### 상세 ADDS 로깅
ADWS(및 LDAP)에서 발생하는 비효율적인 검색을 드러내기 위해 도메인 컨트롤러에서 다음 레지스트리 키를 활성화합니다:
```powershell
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics' -Name '15 Field Engineering' -Value 5 -Type DWORD
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Expensive Search Results Threshold' -Value 1 -Type DWORD
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Search Time Threshold (msecs)' -Value 0 -Type DWORD
```
이벤트는 **Directory-Service** 아래에 전체 LDAP 필터와 함께 나타나며, 쿼리가 ADWS를 통해 도착했을 때도 마찬가지입니다.
### SACL 카나리 객체
1. 더미 객체(예: 비활성 사용자 `CanaryUser`)를 생성합니다.
2. _Everyone_ 주체에 대한 **Audit** ACE를 추가하고 **ReadProperty**에서 감사합니다.
3. 공격자가 `(servicePrincipalName=*)`, `(objectClass=user)` 등을 수행할 때마다 DC는 실제 사용자 SID를 포함하는 **Event 4662**를 발생시킵니다. 이는 요청이 프록시되거나 ADWS에서 발생하더라도 마찬가지입니다.
Elastic 사전 구축 규칙 예:
```kql
(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10"
```
## Tooling Summary
| Purpose | Tool | Notes |
|---------|------|-------|
| ADWS enumeration | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, read/write |
| BloodHound ingest | [BOFHound](https://github.com/bohops/BOFHound) | SoaPy/ldapsearch 로그 변환 |
| Cert compromise | [Certipy](https://github.com/ly4k/Certipy) | 동일한 SOCKS를 통해 프록시 가능 |
## References
* [SpecterOps Make Sure to Use SOAP(y) An Operators Guide to Stealthy AD Collection Using ADWS](https://specterops.io/blog/2025/07/25/make-sure-to-use-soapy-an-operators-guide-to-stealthy-ad-collection-using-adws/)
* [SoaPy GitHub](https://github.com/logangoins/soapy)
* [BOFHound GitHub](https://github.com/bohops/BOFHound)
* [Microsoft MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nbfx/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,87 +1,78 @@
# BloodHound & Other AD Enum Tools
# BloodHound & Other Active Directory Enumeration Tools
{{#include ../../banners/hacktricks-training.md}}
{{#ref}}
adws-enumeration.md
{{#endref}}
> NOTE: 이 페이지는 **열거**하고 **시각화**하는 데 유용한 도구들을 그룹화합니다. 스텔스 **Active Directory Web Services (ADWS)** 채널을 통한 수집에 대한 내용은 위의 참조를 확인하세요.
---
## AD Explorer
[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer)는 Sysinternal Suite의 도구입니다:
[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) (Sysinternals)는 다음을 허용하는 고급 **AD 뷰어 및 편집기**입니다:
> 고급 Active Directory (AD) 뷰어 및 편집기입니다. AD Explorer를 사용하여 AD 데이터베이스를 쉽게 탐색하고, 즐겨찾기 위치를 정의하고, 대화 상자를 열지 않고도 객체 속성과 특성을 보고, 권한을 편집하고, 객체의 스키마를 보고, 저장하고 다시 실행할 수 있는 정교한 검색을 수행할 수 있습니다.
* 디렉토리 트리의 GUI 탐색
* 객체 속성 및 보안 설명자 편집
* 오프라인 분석을 위한 스냅샷 생성 / 비교
### Snapshots
### Quick usage
AD Explorer는 AD의 스냅샷을 생성할 수 있어 오프라인에서 확인할 수 있습니다.\
오프라인에서 취약점을 발견하거나 시간에 따라 AD DB의 다양한 상태를 비교하는 데 사용할 수 있습니다.
1. 도구를 시작하고 도메인 자격 증명을 사용하여 `dc01.corp.local`에 연결합니다.
2. `File ➜ Create Snapshot`을 통해 오프라인 스냅샷을 생성합니다.
3. `File ➜ Compare`를 사용하여 두 스냅샷을 비교하여 권한 변화를 확인합니다.
연결하려면 사용자 이름, 비밀번호 및 방향이 필요합니다 (모든 AD 사용자가 필요합니다).
AD의 스냅샷을 찍으려면 `File` --> `Create Snapshot`으로 이동하고 스냅샷의 이름을 입력합니다.
---
## ADRecon
[**ADRecon**](https://github.com/adrecon/ADRecon)은 AD 환경에서 다양한 아티팩트를 추출하고 결합하는 도구입니다. 이 정보는 분석을 용이하게 하고 대상 AD 환경의 현재 상태에 대한 전체적인 그림을 제공하는 메트릭이 포함된 **특별히 형식화된** Microsoft Excel **보고서**로 제공될 수 있습니다.
```bash
# Run it
.\ADRecon.ps1
[ADRecon](https://github.com/adrecon/ADRecon)은 도메인에서 대량의 아티팩트(ACL, GPO, 신뢰, CA 템플릿 등)를 추출하고 **Excel 보고서**를 생성합니다.
```powershell
# On a Windows host in the domain
PS C:\> .\ADRecon.ps1 -OutputDir C:\Temp\ADRecon
```
## BloodHound
---
From [https://github.com/BloodHoundAD/BloodHound](https://github.com/BloodHoundAD/BloodHound)
## BloodHound (그래프 시각화)
> BloodHound는 [Linkurious](http://linkurio.us/) 위에 구축된 단일 페이지 Javascript 웹 애플리케이션으로, [Electron](http://electron.atom.io/)으로 컴파일되었으며, C# 데이터 수집기로 공급되는 [Neo4j](https://neo4j.com/) 데이터베이스를 사용합니다.
[BloodHound](https://github.com/BloodHoundAD/BloodHound)는 그래프 이론 + Neo4j를 사용하여 온프레미스 AD 및 Azure AD 내의 숨겨진 권한 관계를 드러냅니다.
BloodHound는 그래프 이론을 사용하여 Active Directory 또는 Azure 환경 내의 숨겨진 관계와 종종 의도하지 않은 관계를 드러냅니다. 공격자는 BloodHound를 사용하여 빠르게 식별할 수 없는 복잡한 공격 경로를 쉽게 식별할 수 있습니다. 방어자는 BloodHound를 사용하여 동일한 공격 경로를 식별하고 제거할 수 있습니다. 블루 팀과 레드 팀 모두 BloodHound를 사용하여 Active Directory 또는 Azure 환경에서 권한 관계에 대한 더 깊은 이해를 쉽게 얻을 수 있습니다.
그래서, [Bloodhound ](https://github.com/BloodHoundAD/BloodHound)는 도메인을 자동으로 열거하고 모든 정보를 저장하며, 가능한 권한 상승 경로를 찾고, 모든 정보를 그래프를 사용하여 보여줄 수 있는 놀라운 도구입니다.
BloodHound는 **ingestors**와 **visualisation application**의 두 가지 주요 부분으로 구성됩니다.
**ingestors**는 **도메인을 열거하고 모든 정보를 시각화 애플리케이션이 이해할 수 있는 형식으로 추출하는 데 사용됩니다.**
**visualisation application은 neo4j를 사용하여** 모든 정보가 어떻게 관련되어 있는지 보여주고 도메인에서 권한을 상승시키는 다양한 방법을 보여줍니다.
### Installation
BloodHound CE가 생성된 후, 전체 프로젝트는 Docker를 사용하기 쉽게 업데이트되었습니다. 시작하는 가장 쉬운 방법은 미리 구성된 Docker Compose 구성을 사용하는 것입니다.
1. Docker Compose를 설치합니다. 이는 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 설치에 포함되어야 합니다.
2. Run:
### 배포 (Docker CE)
```bash
curl -L https://ghst.ly/getbhce | docker compose -f - up
# Web UI ➜ http://localhost:8080 (user: admin / password from logs)
```
3. Docker Compose의 터미널 출력에서 무작위로 생성된 비밀번호를 찾습니다.
4. 브라우저에서 http://localhost:8080/ui/login으로 이동합니다. 사용자 이름 **`admin`**과 Docker Compose 로그에서 찾을 수 있는 **`무작위로 생성된 비밀번호`**로 로그인합니다.
### 수집기
이후 무작위로 생성된 비밀번호를 변경해야 하며, 새로운 인터페이스가 준비되어 ingestors를 직접 다운로드할 수 있습니다.
* `SharpHound.exe` / `Invoke-BloodHound` 네이티브 또는 PowerShell 변형
* `AzureHound` Azure AD 열거
* **SoaPy + BOFHound** ADWS 수집 (상단의 링크 참조)
### SharpHound
#### 일반 SharpHound 모드
```powershell
SharpHound.exe --CollectionMethods All # Full sweep (noisy)
SharpHound.exe --CollectionMethods Group,LocalAdmin,Session,Trusts,ACL
SharpHound.exe --Stealth --LDAP # Low noise LDAP only
```
수집기는 BloodHound GUI를 통해 수집된 JSON을 생성합니다.
여러 가지 옵션이 있지만, 도메인에 가입된 PC에서 현재 사용자로 SharpHound를 실행하고 모든 정보를 추출하려면 다음과 같이 할 수 있습니다:
```
./SharpHound.exe --CollectionMethods All
Invoke-BloodHound -CollectionMethod All
```
> **CollectionMethod** 및 루프 세션에 대한 자세한 내용은 [여기](https://support.bloodhoundenterprise.io/hc/en-us/articles/17481375424795-All-SharpHound-Community-Edition-Flags-Explained)에서 확인할 수 있습니다.
다른 자격 증명을 사용하여 SharpHound를 실행하려면 CMD netonly 세션을 생성하고 거기에서 SharpHound를 실행할 수 있습니다:
```
runas /netonly /user:domain\user "powershell.exe -exec bypass"
```
[**Bloodhound에 대해 더 알아보세요 ired.team에서.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-with-bloodhound-on-kali-linux)
---
## Group3r
[**Group3r**](https://github.com/Group3r/Group3r)는 **그룹 정책**과 관련된 Active Directory의 **취약점**을 찾기 위한 도구입니다. \
도메인 내의 호스트에서 **모든 도메인 사용자**를 사용하여 **group3r를 실행**해야 합니다.
[Group3r](https://github.com/Group3r/Group3r)은 **그룹 정책 개체**를 열거하고 잘못된 구성을 강조합니다.
```bash
group3r.exe -f <filepath-name.log>
# -s sends results to stdin
# -f send results to file
# Execute inside the domain
Group3r.exe -f gpo.log # -s to stdout
```
---
## PingCastle
[**PingCastle**](https://www.pingcastle.com/documentation/) **는 AD 환경의 보안 태세를 평가**하고 멋진 **보고서**를 그래프와 함께 제공합니다.
실행하려면 이진 파일 `PingCastle.exe`를 실행하면 **인터랙티브 세션**이 시작되어 옵션 메뉴가 표시됩니다. 기본 옵션으로 사용할 수 있는 것은 **`healthcheck`**로, **도메인**의 **개요**를 설정하고 **잘못된 구성** 및 **취약점**을 찾습니다.
[PingCastle](https://www.pingcastle.com/documentation/)는 Active Directory의 **건강 검진**을 수행하고 위험 점수가 포함된 HTML 보고서를 생성합니다.
```powershell
PingCastle.exe --healthcheck --server corp.local --user bob --password "P@ssw0rd!"
```
{{#include ../../banners/hacktricks-training.md}}