NTLMv2
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 28. května 2018; kontroly vyžadují
5 úprav .
NTLMv2 (NTLM verze 2) je síťový ověřovací protokol zabudovaný do operačních systémů rodiny Microsoft Windows . Široce používané v různých službách na nich založených. Původně měl zlepšit zabezpečení autentizace nahrazením zastaralých LM a NTLM v1. NTLMv2 byl představen počínaje Windows NT 4.0 SP4 a používají ho verze Microsoft Windows až po Windows 10 včetně . Od svého vynálezu byly protokoly NTLMv1 a NTLMv2 předmětem mnoha útoků a vykazovaly širokou škálu závažných zranitelností.
Schéma autentizace
V autentizačním schématu implementovaném pomocí zpráv SMB nebo SMB2 , bez ohledu na to, jaký typ autentizačního dialektu bude použit (LM, LMv2, NTLM, NTLM2, NTLMv2), je proces ověřování následující:
- Klient se pokusí navázat spojení se serverem a odešle požadavek informující server, které dialekty se může autentizovat, například: LM, NTLM, NTLM2, NTLMv2. Proto je dialekt ověřování LMv2 mezi klientem a serverem vyloučen.
- Server vybere nejzabezpečenější dialekt (například NTLMv2) ze seznamu dialektů přijatých od klienta (ve výchozím nastavení) a poté odešle klientovi odpověď.
- Klient, který se rozhodl pro autentizační dialekt, se pokusí o přístup k serveru a odešle požadavek NEGOTIATE_MESSAGE .
- Server přijme požadavek od klienta a odešle mu odpověď CHALLENGE_MESSAGE obsahující náhodnou sekvenci 8 bajtů. Říká se tomu Server Challenge .
- Klient po obdržení sekvence Server Challenge ze serveru použije své heslo k zašifrování této sekvence a poté odešle na server odpověď AUTHENTICATE_MESSAGE , která obsahuje 24 bajtů.
- Server po obdržení odpovědi provede stejnou operaci sekvenčního šifrování Server Challenge , kterou provedl klient. Poté porovná své výsledky s odpovědí od klienta a povolí nebo zakáže přístup na základě shody.
Vývoj autentizačních algoritmů LM a NTLM
LM
- Heslo uživatele jako řetězec OEM je převedeno na velká písmena. Například heslo je " SecREt01", pak se získá řetězec OEM:0x5345435245543031
- Pokud je heslo kratší než 14 znaků, je doplněno nulami až 14 bajty:0x5345435245543031000000000000
- Výsledná sekvence 14 bajtů je rozdělena na dvě poloviny po 7 bytech: 0x53454352455430a0x31000000000000
- Každá ze 7bajtových polovin se používá k vytvoření dvou 8bajtových klíčů DES: 0x52a2516b252a5161a0x3180010101010101
- Pomocí algoritmu DES a řetězce ASCII " KGS!@#$%", stejně jako dvou dříve vygenerovaných klíčů DES, se vypočítají dvě hodnoty hash, každá 8 bajtů: 0xff3750bcc2b22412a0xc2265b23734e0dac
- Hodnoty hash 8 bajtů jsou sloučeny do sekvence 16 bajtů a tvoří LM-hash :0xff3750bcc2b22412c2265b23734e0dac
- LM-hash 16 bajtů je doplněn nulami až 21 bajty:0xff3750bcc2b22412c2265b23734e0dac0000000000
- Sekvence 21 bajtů je rozdělena do tří částí po 7 bytech: 0xff3750bcc2b224, 0x12c2265b23734ea0x0dac0000000000
- Každá část se používá k vytvoření tří klíčů DES: 0xfe9bd516cd15c849, 0x136189cbb31acd9da0x0dd6010101010101
- Pomocí algoritmu DES a Server Challenge, stejně jako dříve vytvořených tří klíčů DES, se vypočítají tři hodnoty hash, každá o délce 8 bajtů. Pokud byla například výzva serveru 0x0123456789abcdef, získáte: 0xc337cd5cbd44fc97, 82a667af6d427c6dae67c20c2d3e77c56
- Hash hodnoty 8 bajtů jsou zřetězeny do sekvence 24 bajtů. Tato sekvence je odpověď LM :0xc337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56
LMv2
- Z hesla uživatele ve formě řetězce Unicode se pomocí algoritmu MD4 vypočítá NTLM-hash , skládající se z 16 bajtů. Například heslo „ SecREt01“ nebo řetězec Unicode 0x53006500630052004500740030003100po převodu pomocí algoritmu MD4 bude vypadat takto:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Uživatelské jméno a název domény jako řetězce Unicode jsou zřetězeny a převedeny na velká písmena. Dále se z této sekvence a dříve získaného NTLM-hash pomocí algoritmu HMAC - MD5 vypočítá NTLMv2-hash , sestávající z 16 bajtů. Například uživatelské jméno " User" a název domény " Domain" poskytnou řetězec " USERDOMAIN" nebo řetězec Unicode 0x550053004500520044004f004d00410049004e00. Po algoritmu HMAC - MD5 , kde se používá NTLM -hash, se vypočítá NTLMv2-hash : 0x04b8e0ba74289cc540826bab1dee63ae.
- Sekvence Client Challenge se skládá z 8 náhodně vybraných bajtů (náhodně), například:0xffffff0011223344
- Server Challenge a Client Challenge jsou spojeny do sekvence 16 bajtů. Pokud byla například Server Challenge 0x0123456789abcdef, pak dostaneme:0x0123456789abcdefffffff0011223344
- Ze sekvence Server Challenge a Client Challenge a dříve vypočítaného NTLMv2-hash pomocí algoritmu HMAC-MD5 se vypočítá hodnota hash sestávající z 16 bajtů:0xd6e6152ea25d03b7c6ba6629c2d6aaf0
- Hodnota hash je zřetězena s výzvou klienta do 24bajtové sekvence. Tato sekvence je odpověď LMv2 :0xd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344
NTLM
- Z hesla uživatele ve formě řetězce Unicode se pomocí algoritmu MD4 vypočítá NTLM-hash , skládající se z 16 bajtů. Například heslo „ SecREt01“ nebo řetězec Unicode 0x53006500630052004500740030003100po převodu pomocí algoritmu MD4 bude vypadat takto:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Hash NTLM o velikosti 16 bajtů je doplněn nulami až 21 bajty:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
- Sekvence 21 bajtů je rozdělena do tří částí po 7 bytech. a 0xcd06ca7c7e10c9_0x9b1d33b7485a2e0xd8080000000000
- Každá ze 7bajtových částí se používá k vytvoření tří 8bajtových klíčů DES: 0xcd83b34fc7f14392, 0x9b8f4c767543685da0xd904010101010101
- Pomocí algoritmu DES a Server Challenge, stejně jako dříve vytvořených tří klíčů DES, se vypočítají tři hodnoty hash, každá o délce 8 bajtů. Pokud byla například výzva serveru 0x0123456789abcdef, pak se ukáže: 0x25a98c1c31e81847, 0x466b29b2df4680f3a0x9958fb8c213a9cc6
- Nash hodnoty 8 bajtů jsou zřetězeny do sekvence 24 bajtů. Tato sekvence je odpověď NTLM :0x25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6
NTLM2
- Sekvence Client Challenge se skládá z 8 náhodně vybraných bajtů (náhodně), například:0xffffff0011223344
- Výzva klienta je doplněna nulami až 21 bajty. Tato sekvence je odpověď LMv2 :0xffffff001122334400000000000000000000000000000000
- Server Challenge a Client Challenge jsou spojeny do sekvence 16 bajtů. Pokud byla například výzva serveru 0x0123456789abcdef, pak se ukázalo:0x0123456789abcdefffffff0011223344
- Z přijaté sekvence se pomocí algoritmu MD5 vypočítá následující hash hodnota, která se skládá z 16 bajtů:0xbeac9a1bc5a9867c15192b3105d5beb1
- Prvních 8 bajtů je odříznuto od dříve přijaté hash hodnoty:0xbeac9a1bc5a9867c
- Z hesla uživatele ve formě řetězce Unicode se pomocí algoritmu MD4 vypočítá NTLM-hash , skládající se z 16 bajtů. Například heslo „ SecREt01“ nebo řetězec Unicode 0x53006500630052004500740030003100po převodu pomocí algoritmu MD4 bude vypadat takto:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Hash NTLM o velikosti 16 bajtů je doplněn nulami až 21 bajty:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
- Sekvence 21 bajtů je rozdělena do tří částí po 7 bytech. a 0xcd06ca7c7e10c9_0x9b1d33b7485a2e0xd8080000000000
- Každá ze 7bajtových částí se používá k vytvoření tří 8bajtových klíčů DES: 0xcd83b34fc7f14392, 0x9b8f4c767543685da0xd904010101010101
- Pomocí algoritmu DES a vyříznuté části hodnoty hash, stejně jako tří dříve vygenerovaných klíčů DES, se vypočítají tři hodnoty hash, každá 8 bajtů. Pokud byla například výzva serveru 0x0123456789abcdef, pak se ukáže: 0x10d550832d12b2cc, 0xb79d5ad1f4eed3dfa0x82aca4c3681dd455
- Nash hodnoty 8 bajtů jsou zřetězeny do sekvence 24 bajtů. Tato sekvence je odpověď NTLM2 :0x10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455
NTLMv2
- Z hesla uživatele ve formě řetězce Unicode se pomocí algoritmu MD4 vypočítá NTLM-hash , skládající se z 16 bajtů. Například heslo „ SecREt01“ nebo řetězec Unicode 0x53006500630052004500740030003100po převodu pomocí algoritmu MD4 bude vypadat takto:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Uživatelské jméno a název domény jako řetězce Unicode jsou zřetězeny a převedeny na velká písmena. Dále se z této sekvence a dříve získaného NTLM-hash pomocí algoritmu HMAC - MD5 vypočítá NTLMv2-hash , sestávající z 16 bajtů. Například uživatelské jméno " User" a název domény " Domain" poskytnou řetězec " USERDOMAIN" nebo řetězec Unicode 0x550053004500520044004f004d00410049004e00. Po algoritmu HMAC - MD5 , kde se používá NTLM -hash , se vypočítá NTLMv2-hash :0x04b8e0ba74289cc540826bab1dee63ae
- Sekvence Client Challenge se skládá z 8 náhodně vybraných bajtů (náhodně), například:0xffffff0011223344
- Vytvoří se blob, například: 0x01010000 - podpis objektu blob, 0x00000000 - rezervovaná hodnota, 0x0090d336b734c301 - časové razítko, 0xffffff0011223344 - náhodná výzva klienta, 0x00000000 - neznámý, 0x02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000 - cílový informační blok, 0x00000000 - neznámý
- Server Challenge a blob jsou spojeny do sekvence, ze které je pomocí algoritmu HMAC - MD5 a dříve vypočítaného NTLMv2-hash vypočítána hodnota hash sestávající z 16 bajtů. Pokud byla například výzva serveru 0x0123456789abcdef, získá se následující sekvence: 0x0123456789abcdef01010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000. Po použití algoritmu HMAC - MD5 se získá následující hash hodnota:0xcbabbca713eb795d04c97abc01ee4983
- Hodnoty Nash o 16 bajtech jsou zřetězeny s blobem do sekvence. Tato sekvence je odpověď NTLMv2 :0xcbabbca713eb795d04c97abc01ee498301010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000
Zranitelnosti
Poslech síťového provozu
Nasloucháním síťovému provozu můžete zachytit ověřovací pakety SMB , čímž převezmete sekvenci Server Challenge a Response od klienta. S těmito dvěma parametry je i přes autentizační metodu (i s NTLMv2) možné pomocí moderního softwaru (za předpokladu jednoduchého hesla, řekněme: „12345“) uhodnout heslo klienta během několika hodin. Pokud je však metoda ověřování NTLMv2 a heslo klienta obsahuje velká, velká, malá písmena, čísla a speciální znaky, může prolomení takového hesla trvat mnoho let.
Spoofing serveru
- Spusťte server, ke kterému chce klient přistupovat. K tomu můžete použít nejprimitivnější DDoS útok.
- Přidělte počítači, ze kterého bude útok proveden, všechny parametry serveru, tj. název serveru, IP adresu serveru a MAC adresu serveru. To je nezbytné, aby se klient oslovující server pokusil připojit k počítači, ze kterého bude útok proveden.
- Když je klient požádán o výběr ověřovacího dialektu, bude muset počítač, ze kterého bude útok proveden, zvolit nejnebezpečnější dialekt, konkrétně LM (nebo bezpečnější NTLM). Výsledkem je, že počítač, ze kterého byl útok proveden, obdrží LM Response (odpověď). Útočníkovi, který má sekvenci Server Challenge a LM Response , zabere prolomení hesla hrubou silou ( útok Bruteforce ) jen několik hodin.
Spoofing autentizačního balíčku
Tato metoda se příliš neliší od výměny serveru. Server pomocí speciálního softwaru nebo změnou nastavení místní bezpečnostní politiky zvolí nejnebezpečnější typ autentizačního dialektu.
Prevence úspěšných útoků
Hesla
Při výběru hesla se klient musí řídit následujícími pravidly:
- Heslo musí obsahovat co nejvíce znaků;
- Heslo musí obsahovat písmena, číslice a další symboly;
- Hesla pro všechny důležité účty musí být jedinečná.
Konfigurace zásad zabezpečení systému Windows
Spusťte „Ovládací panely“ a otevřete sekci „Nástroje pro správu → Místní zásady zabezpečení → Místní zásady → Možnosti zabezpečení“. V této části vyhledejte zásady "Zabezpečení sítě: Úroveň ověřování LAN Manager". Z rozevíracího seznamu vyberte možnost „Odeslat pouze odpověď NTLMv2. Odepřít LM a NTLM"
Příklady
Viz také
Odkazy