NTLMv2

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 28 maj 2018; kontroller kräver 5 redigeringar .

NTLMv2 (NTLM version 2) är ett nätverksautentiseringsprotokoll inbyggt i operativsystemen i Microsoft Windows- familjen . Används ofta i olika tjänster baserade på dem. Det var ursprungligen avsett att förbättra säkerheten för autentisering genom att ersätta den föråldrade LM och NTLM v1. NTLMv2 introducerades från och med Windows NT 4.0 SP4 och används av versioner av Microsoft Windows till och med Windows 10 . Sedan deras uppfinning har protokollen NTLMv1 och NTLMv2 varit föremål för många attacker och uppvisat ett brett spektrum av allvarliga sårbarheter.

Autentiseringsschema

I autentiseringsschemat implementerat med SMB- eller SMB2- meddelanden, oavsett vilken typ av autentiseringsdialekt som kommer att användas (LM, LMv2, NTLM, NTLM2, NTLMv2), är autentiseringsprocessen följande:

  1. Klienten försöker upprätta en anslutning till servern och skickar en begäran som informerar servern om vilka dialekter den kan autentisera i, till exempel: LM, NTLM, NTLM2, NTLMv2. Därför är LMv2-autentiseringsdialekten mellan klient och server utesluten.
  2. Servern väljer den säkraste dialekten (till exempel NTLMv2) från listan över dialekter som tas emot från klienten (som standard), och skickar sedan ett svar till klienten.
  3. Klienten, som har bestämt sig för autentiseringsdialekten, försöker komma åt servern och skickar en NEGOTIATE_MESSAGE- förfrågan .
  4. Servern tar emot en begäran från klienten och skickar ett CHALLENGE_MESSAGE- svar som innehåller en slumpmässig sekvens på 8 byte. Det kallas för Serverutmaningen .
  5. Klienten, som har mottagit Server Challenge -sekvensen från servern , använder sitt lösenord för att kryptera denna sekvens och skickar sedan ett AUTHENTICATE_MESSAGE- svar till servern , som innehåller 24 byte.
  6. Servern, efter att ha fått ett svar, utför samma Server Challenge -sekvenskrypteringsoperation som klienten utförde. Sedan, genom att jämföra dess resultat med svaret från klienten, tillåter eller nekar den åtkomst baserat på matchningen.

Utveckling av LM- och NTLM-autentiseringsalgoritmerna

LM

  1. Användarlösenordet, som en OEM-sträng, konverteras till versaler. Till exempel är lösenordet " SecREt01", då erhålls OEM-strängen:0x5345435245543031
  2. Om lösenordet är mindre än 14 tecken är det utfyllt med nollor till 14 byte:0x5345435245543031000000000000
  3. Den resulterande sekvensen på 14 byte är uppdelad i två halvor på 7 byte: 0x53454352455430och0x31000000000000
  4. Var och en av de 7-byte halvorna används för att skapa två 8-byte DES-nycklar: 0x52a2516b252a5161och0x3180010101010101
  5. Med hjälp av DES-algoritmen och ASCII-strängen " KGS!@#$%", såväl som de två DES-nycklarna som genererats tidigare, beräknas två hash-värden, vardera 8 byte: 0xff3750bcc2b22412och0xc2265b23734e0dac
  6. Hashvärden på 8 byte kombineras till en sekvens på 16 byte, och bildar en LM-hash :0xff3750bcc2b22412c2265b23734e0dac
  7. LM-hash på 16 byte är utfylld med nollor till 21 byte:0xff3750bcc2b22412c2265b23734e0dac0000000000
  8. En sekvens på 21 byte är uppdelad i tre delar på 7 byte: 0xff3750bcc2b224, 0x12c2265b23734eoch0x0dac0000000000
  9. Varje del används för att skapa tre DES-nycklar: 0xfe9bd516cd15c849, 0x136189cbb31acd9doch0x0dd6010101010101
  10. Med hjälp av DES-algoritmen och Server Challenge, såväl som de tidigare bildade tre DES-nycklarna, beräknas tre hash-värden, var och en 8 byte lång. Om serverutmaningen till exempel var 0x0123456789abcdef, får du: 0xc337cd5cbd44fc97, 82a667af6d427c6doche67c20c2d3e77c56
  11. Hashvärden på 8 byte är sammanlänkade i en sekvens på 24 byte. Denna sekvens är LM-svaret :0xc337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56

LMv2

  1. Från användarens lösenord i form av en Unicode-sträng, med hjälp av MD4-algoritmen, beräknas en NTLM-hash bestående av 16 byte. Till exempel kommer lösenordet " SecREt01" eller Unicode-strängen 0x53006500630052004500740030003100efter konvertering med MD4-algoritmen att se ut så här:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. Användarnamnet och domännamnet, som Unicode-strängar, sammanfogas och konverteras till versaler. Vidare, från denna sekvens och den tidigare erhållna NTLM-hash , med hjälp av HMAC - MD5-algoritmen , beräknas en NTLMv2-hash , bestående av 16 byte. Till exempel kommer ett användarnamn " User" och ett domännamn " Domain" att ge strängen " USERDOMAIN" eller Unicode-strängen 0x550053004500520044004f004d00410049004e00. Efter HMAC - MD5-algoritmen , där NTLM-hash används, beräknas NTLMv2-hash  : 0x04b8e0ba74289cc540826bab1dee63ae.
  3. En Client Challenge-sekvens bildas av 8 byte slumpmässigt valda (slumpmässigt), till exempel:0xffffff0011223344
  4. Server Challenge och Client Challenge kombineras till en sekvens på 16 byte. Till exempel, om Server Challenge var 0x0123456789abcdef, då får vi:0x0123456789abcdefffffff0011223344
  5. Från sekvensen av Server Challenge och Client Challenge och den tidigare beräknade NTLMv2-hash med HMAC-MD5-algoritmen, beräknas ett hashvärde bestående av 16 byte:0xd6e6152ea25d03b7c6ba6629c2d6aaf0
  6. Hashvärdet sammanfogas med klientutmaningen till en sekvens på 24 byte. Denna sekvens är LMv2-svaret :0xd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344

NTLM

  1. Från användarens lösenord i form av en Unicode-sträng, med hjälp av MD4 -algoritmen, beräknas en NTLM-hash bestående av 16 byte. Till exempel kommer lösenordet " SecREt01" eller Unicode-strängen 0x53006500630052004500740030003100efter konvertering med MD4-algoritmen att se ut så här:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. En NTLM-hash på 16 byte är utfylld med nollor till 21 byte:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
  3. En sekvens på 21 byte är uppdelad i tre delar på 7 byte. 0xcd06ca7c7e10c9, 0x9b1d33b7485a2eoch0xd8080000000000
  4. Var och en av de 7-byte delarna används för att skapa tre 8-byte DES-nycklar: 0xcd83b34fc7f14392, 0x9b8f4c767543685doch0xd904010101010101
  5. Med hjälp av DES-algoritmen och Server Challenge, såväl som de tidigare bildade tre DES-nycklarna, beräknas tre hash-värden, var och en 8 byte lång. Om serverutmaningen till exempel var 0x0123456789abcdef, visar det sig: 0x25a98c1c31e81847, 0x466b29b2df4680f3och0x9958fb8c213a9cc6
  6. Nash-värden på 8 byte är sammanlänkade i en sekvens på 24 byte. Denna sekvens är NTLM-svaret :0x25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6

NTLM2

  1. En Client Challenge-sekvens bildas av 8 byte slumpmässigt valda (slumpmässigt), till exempel:0xffffff0011223344
  2. Klientutmaningen är fylld med nollor till 21 byte. Denna sekvens är LMv2-svaret :0xffffff001122334400000000000000000000000000000000
  3. Server Challenge och Client Challenge kombineras till en sekvens på 16 byte. Om serverutmaningen till exempel var 0x0123456789abcdef, visar det sig:0x0123456789abcdefffffff0011223344
  4. Från den mottagna sekvensen, med hjälp av MD5- algoritmen, beräknas följande hashvärde, bestående av 16 byte:0xbeac9a1bc5a9867c15192b3105d5beb1
  5. De första 8 byten är avskurna från det tidigare mottagna hashvärdet:0xbeac9a1bc5a9867c
  6. Från användarens lösenord i form av en Unicode-sträng, med hjälp av MD4 -algoritmen, beräknas en NTLM-hash bestående av 16 byte. Till exempel kommer lösenordet " SecREt01" eller Unicode-strängen 0x53006500630052004500740030003100efter konvertering med MD4-algoritmen att se ut så här:0xcd06ca7c7e10c99b1d33b7485a2ed808
  7. En NTLM-hash på 16 byte är utfylld med nollor till 21 byte:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
  8. En sekvens på 21 byte är uppdelad i tre delar på 7 byte. 0xcd06ca7c7e10c9, 0x9b1d33b7485a2eoch0xd8080000000000
  9. Var och en av de 7-byte delarna används för att skapa tre 8-byte DES-nycklar: 0xcd83b34fc7f14392, 0x9b8f4c767543685doch0xd904010101010101
  10. Med hjälp av DES-algoritmen och den klippta delen av hashvärdet, såväl som de tre DES-nycklarna som genererats tidigare, beräknas tre hashvärden, vardera 8 byte. Om serverutmaningen till exempel var 0x0123456789abcdef, visar det sig: 0x10d550832d12b2cc, 0xb79d5ad1f4eed3dfoch0x82aca4c3681dd455
  11. Nash-värden på 8 byte är sammanlänkade i en sekvens på 24 byte. Denna sekvens är NTLM2-svaret :0x10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455

NTLMv2

  1. Från användarens lösenord i form av en Unicode-sträng, med hjälp av MD4 -algoritmen, beräknas en NTLM-hash bestående av 16 byte. Till exempel kommer lösenordet " SecREt01" eller Unicode-strängen 0x53006500630052004500740030003100efter konvertering med MD4-algoritmen att se ut så här:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. Användarnamnet och domännamnet som Unicode-strängar sammanfogas och konverteras till versaler. Vidare, från denna sekvens och den tidigare erhållna NTLM-hash , med hjälp av HMAC - MD5-algoritmen , beräknas en NTLMv2-hash , bestående av 16 byte. Till exempel kommer ett användarnamn " User" och ett domännamn " Domain" att ge strängen " USERDOMAIN" eller Unicode-strängen 0x550053004500520044004f004d00410049004e00. Efter HMAC - MD5-algoritmen , där NTLM-hash används, beräknas NTLMv2-hash  :0x04b8e0ba74289cc540826bab1dee63ae
  3. En Client Challenge-sekvens bildas av 8 byte slumpmässigt valda (slumpmässigt), till exempel:0xffffff0011223344
  4. En blob bildas, till exempel: 0x01010000 - blobsignaturen, 0x00000000 - reserverat värde, 0x0090d336b734c301 - tidsstämpel, 0xffffff0011223344 - en slumpmässig klientutmaning, 0x00000000 - okänd, 0x02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000 - målinformationsblock, 0x00000000 - okänt
  5. Serverutmaningen och blob kombineras till en sekvens, från vilken, med hjälp av HMAC - MD5-algoritmen och den tidigare beräknade NTLMv2-hash , ett hashvärde bestående av 16 byte beräknas. Om serverutmaningen till exempel var 0x0123456789abcdef, erhålls följande sekvens: 0x0123456789abcdef01010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000. Efter att ha använt HMAC - MD5-algoritmen erhålls följande hashvärde:0xcbabbca713eb795d04c97abc01ee4983
  6. Nash-värden på 16 byte är sammanlänkade med klumpen till en sekvens. Denna sekvens är NTLMv2-svaret :0xcbabbca713eb795d04c97abc01ee498301010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000

Sårbarheter

Lyssnar på nätverkstrafik

Genom att lyssna på nätverkstrafik kan du fånga upp SMB- autentiseringspaketen och därigenom ta över Server Challenge -sekvensen och svaret från klienten. Med dessa två parametrar, trots autentiseringsmetoden (även med NTLMv2), är det möjligt, med hjälp av modern programvara (förutsatt ett enkelt lösenord, säg: "12345"), att gissa klientens lösenord inom några timmar. Men om autentiseringsmetoden är NTLMv2 och klientens lösenord innehåller versaler, versaler, gemener, siffror och specialtecken, kan det ta många år att knäcka ett sådant lösenord.

Serverspoofing

  1. Ta ner servern som klienten vill komma åt. För att göra detta kan du använda den mest primitiva DDoS- attacken.
  2. Tilldela till datorn från vilken attacken kommer att göras alla serverparametrar, det vill säga servernamnet, serverns IP-adress och serverns MAC-adress. Detta är nödvändigt för att klienten, som adresserar servern, ska försöka ansluta till datorn från vilken attacken kommer att utföras.
  3. När klienten uppmanas att välja en autentiseringsdialekt måste datorn från vilken attacken görs välja den mest osäkra dialekten, nämligen LM (eller säkrare NTLM). Som ett resultat kommer datorn från vilken attacken utfördes att få ett LM-svar (svar). En angripare, som har en sekvens av Server Challenge och LM Response , tar bara några timmar att knäcka lösenordet med brute force ( Bruteforce attack).

Förfalskning av autentiseringspaket

Denna metod skiljer sig inte mycket från att ersätta servern. Servern, med hjälp av speciell programvara eller ändrar inställningarna för den lokala säkerhetspolicyn, väljer den mest osäkra typen av autentiseringsdialekt.

Förebyggande av framgångsrika attacker

Lösenord

När du väljer ett lösenord måste klienten vägledas av följande regler:

Konfigurera Windows säkerhetspolicy

Starta "Kontrollpanelen" och öppna avsnittet "Administrativa verktyg → Lokal säkerhetspolicy → Lokala policyer → Säkerhetsalternativ". I det här avsnittet hittar du policyn "Network Security: LAN Manager Authentication Level". Från rullgardinsmenyn väljer du alternativet "Skicka endast NTLMv2-svar. Neka LM och NTLM"

Exempel


Se även

Länkar