diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4f96c20dc..ad681ba95 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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) diff --git a/src/windows-hardening/active-directory-methodology/adws-enumeration.md b/src/windows-hardening/active-directory-methodology/adws-enumeration.md new file mode 100644 index 000000000..356ce21e8 --- /dev/null +++ b/src/windows-hardening/active-directory-methodology/adws-enumeration.md @@ -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}} diff --git a/src/windows-hardening/active-directory-methodology/bloodhound.md b/src/windows-hardening/active-directory-methodology/bloodhound.md index 060a66635..6a38947c1 100644 --- a/src/windows-hardening/active-directory-methodology/bloodhound.md +++ b/src/windows-hardening/active-directory-methodology/bloodhound.md @@ -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 -# -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}}