NTLMv2

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 28. maj 2018; checks kræver 5 redigeringer .

NTLMv2 ( NTLM version 2) er en netværksgodkendelsesprotokol indbygget i operativsystemer i Microsoft Windows -familien . Udbredt i forskellige tjenester baseret på dem. Det var oprindeligt beregnet til at forbedre sikkerheden for autentificering ved at erstatte den forældede LM og NTLM v1. NTLMv2 blev introduceret fra Windows NT 4.0 SP4 og bruges af versioner af Microsoft Windows til og med Windows 10 . Siden deres opfindelse har NTLMv1- og NTLMv2-protokollerne været genstand for mange angreb og udvist en lang række alvorlige sårbarheder.

Godkendelsesskema

I godkendelsesskemaet implementeret ved hjælp af SMB- eller SMB2 -meddelelser, uanset hvilken type godkendelsesdialekt der vil blive brugt (LM, LMv2, NTLM, NTLM2, NTLMv2), er godkendelsesprocessen som følger:

  1. Klienten forsøger at etablere en forbindelse med serveren og sender en anmodning, der informerer serveren om, hvilke dialekter den kan autentificere i, for eksempel: LM, NTLM, NTLM2, NTLMv2. Derfor er LMv2-godkendelsesdialekten mellem klient og server udelukket.
  2. Serveren vælger den mest sikre dialekt (for eksempel NTLMv2) fra listen over dialekter modtaget fra klienten (som standard), og sender derefter et svar til klienten.
  3. Klienten, der har besluttet sig for godkendelsesdialekten, forsøger at få adgang til serveren og sender en NEGOTIATE_MESSAGE -anmodning .
  4. Serveren modtager en anmodning fra klienten og sender den et CHALLENGE_MESSAGE -svar indeholdende en tilfældig sekvens på 8 bytes. Det kaldes Server Challenge .
  5. Klienten, der har modtaget Server Challenge -sekvensen fra serveren , bruger sin adgangskode til at kryptere denne sekvens og sender derefter et AUTHENTICATE_MESSAGE -svar til serveren , som indeholder 24 bytes.
  6. Serveren, efter at have modtaget et svar, udfører den samme Server Challenge -sekvenskrypteringsoperation, som klienten udførte. Ved at sammenligne resultaterne med svaret fra klienten tillader eller nægter den adgang baseret på matchet.

Udvikling af LM- og NTLM-godkendelsesalgoritmerne

LM

  1. Brugeradgangskoden, som en OEM-streng, konverteres til store bogstaver. For eksempel er adgangskoden " SecREt01", så opnås OEM-strengen:0x5345435245543031
  2. Hvis adgangskoden er mindre end 14 tegn, er den udfyldt med nuller til 14 bytes:0x5345435245543031000000000000
  3. Den resulterende sekvens på 14 bytes er opdelt i to halvdele på 7 bytes: 0x53454352455430og0x31000000000000
  4. Hver af de 7-byte halvdele bruges til at oprette to 8-byte DES nøgler: 0x52a2516b252a5161og0x3180010101010101
  5. Ved at bruge DES-algoritmen og ASCII-strengen " KGS!@#$%", samt de to tidligere genererede DES-nøgler, beregnes to hash-værdier, hver på 8 bytes: 0xff3750bcc2b22412og0xc2265b23734e0dac
  6. Hash-værdier på 8 bytes kombineres til en sekvens på 16 bytes, der danner en LM-hash :0xff3750bcc2b22412c2265b23734e0dac
  7. LM-hash på 16 bytes er polstret med nuller til 21 bytes:0xff3750bcc2b22412c2265b23734e0dac0000000000
  8. En sekvens på 21 bytes er opdelt i tre dele på 7 bytes: 0xff3750bcc2b224, 0x12c2265b23734eog0x0dac0000000000
  9. Hver del bruges til at oprette tre DES-nøgler: 0xfe9bd516cd15c849, 0x136189cbb31acd9dog0x0dd6010101010101
  10. Ved hjælp af DES-algoritmen og Server-udfordringen, samt de tidligere dannede tre DES-nøgler, beregnes tre hash-værdier, hver 8 byte lange. For eksempel, hvis serverudfordringen var 0x0123456789abcdef, får du: 0xc337cd5cbd44fc97, 82a667af6d427c6doge67c20c2d3e77c56
  11. Hash-værdier på 8 bytes er sammenkædet i en sekvens på 24 bytes. Denne sekvens er LM-svaret :0xc337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56

LMv2

  1. Ud fra brugerens adgangskode i form af en Unicode-streng, ved hjælp af MD4-algoritmen, beregnes en NTLM-hash bestående af 16 bytes. For eksempel vil adgangskoden " SecREt01" eller Unicode-strengen 0x53006500630052004500740030003100efter konvertering ved hjælp af MD4-algoritmen se sådan ud:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. Brugernavnet og domænenavnet, som Unicode-strenge, sammenkædes og konverteres til store bogstaver. Yderligere, ud fra denne sekvens og den tidligere opnåede NTLM-hash , ved hjælp af HMAC - MD5-algoritmen , beregnes en NTLMv2-hash , bestående af 16 bytes. For eksempel vil et brugernavn " User" og et domænenavn " Domain" give strengen " USERDOMAIN" eller Unicode-strengen 0x550053004500520044004f004d00410049004e00. Efter HMAC - MD5-algoritmen , hvor NTLM-hash bruges, beregnes NTLMv2-hash  : 0x04b8e0ba74289cc540826bab1dee63ae.
  3. En Client Challenge-sekvens er dannet af 8 bytes tilfældigt udvalgt (tilfældigt), for eksempel:0xffffff0011223344
  4. Server Challenge og Client Challenge kombineres til en sekvens på 16 bytes. For eksempel, hvis Server Challenge var 0x0123456789abcdef, får vi:0x0123456789abcdefffffff0011223344
  5. Ud fra sekvensen af ​​Server Challenge og Client Challenge og den tidligere beregnede NTLMv2-hash ved hjælp af HMAC-MD5-algoritmen beregnes en hashværdi bestående af 16 bytes:0xd6e6152ea25d03b7c6ba6629c2d6aaf0
  6. Hashværdien er sammenkædet med Client Challenge til en 24 byte-sekvens. Denne sekvens er LMv2-svaret :0xd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344

NTLM

  1. Ud fra brugerens adgangskode i form af en Unicode-streng, ved hjælp af MD4 -algoritmen, beregnes en NTLM-hash bestående af 16 bytes. For eksempel vil adgangskoden " SecREt01" eller Unicode-strengen 0x53006500630052004500740030003100efter konvertering ved hjælp af MD4-algoritmen se sådan ud:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. En NTLM-hash på 16 bytes er polstret med nuller til 21 bytes:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
  3. En sekvens på 21 bytes er opdelt i tre dele på 7 bytes. 0xcd06ca7c7e10c9, 0x9b1d33b7485a2eog0xd8080000000000
  4. Hver af 7-byte-delene bruges til at oprette tre 8-byte DES-nøgler: 0xcd83b34fc7f14392, 0x9b8f4c767543685dog0xd904010101010101
  5. Ved hjælp af DES-algoritmen og Server-udfordringen, samt de tidligere dannede tre DES-nøgler, beregnes tre hash-værdier, hver 8 byte lange. For eksempel, hvis serverudfordringen var 0x0123456789abcdef, så viser det sig: 0x25a98c1c31e81847, 0x466b29b2df4680f3og0x9958fb8c213a9cc6
  6. Nash-værdier på 8 bytes er sammenkædet i en sekvens på 24 bytes. Denne sekvens er NTLM-svaret :0x25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6

NTLM2

  1. En Client Challenge-sekvens er dannet af 8 bytes tilfældigt udvalgt (tilfældigt), for eksempel:0xffffff0011223344
  2. Client Challenge er polstret med nuller til 21 bytes. Denne sekvens er LMv2-svaret :0xffffff001122334400000000000000000000000000000000
  3. Server Challenge og Client Challenge kombineres til en sekvens på 16 bytes. For eksempel, hvis serverudfordringen var 0x0123456789abcdef, så viser det sig:0x0123456789abcdefffffff0011223344
  4. Fra den modtagne sekvens, ved hjælp af MD5 -algoritmen, beregnes følgende hashværdi, bestående af 16 bytes:0xbeac9a1bc5a9867c15192b3105d5beb1
  5. De første 8 bytes er afskåret fra den tidligere modtagne hashværdi:0xbeac9a1bc5a9867c
  6. Ud fra brugerens adgangskode i form af en Unicode-streng, ved hjælp af MD4 -algoritmen, beregnes en NTLM-hash bestående af 16 bytes. For eksempel vil adgangskoden " SecREt01" eller Unicode-strengen 0x53006500630052004500740030003100efter konvertering ved hjælp af MD4-algoritmen se sådan ud:0xcd06ca7c7e10c99b1d33b7485a2ed808
  7. En NTLM-hash på 16 bytes er polstret med nuller til 21 bytes:0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
  8. En sekvens på 21 bytes er opdelt i tre dele på 7 bytes. 0xcd06ca7c7e10c9, 0x9b1d33b7485a2eog0xd8080000000000
  9. Hver af 7-byte-delene bruges til at oprette tre 8-byte DES-nøgler: 0xcd83b34fc7f14392, 0x9b8f4c767543685dog0xd904010101010101
  10. Ved at bruge DES-algoritmen og den klippede del af hashværdien samt de tre tidligere genererede DES-nøgler beregnes tre hashværdier, hver på 8 bytes. For eksempel, hvis serverudfordringen var 0x0123456789abcdef, så viser det sig: 0x10d550832d12b2cc, 0xb79d5ad1f4eed3dfog0x82aca4c3681dd455
  11. Nash-værdier på 8 bytes er sammenkædet i en sekvens på 24 bytes. Denne sekvens er NTLM2-svaret :0x10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455

NTLMv2

  1. Ud fra brugerens adgangskode i form af en Unicode-streng, ved hjælp af MD4 -algoritmen, beregnes en NTLM-hash bestående af 16 bytes. For eksempel vil adgangskoden " SecREt01" eller Unicode-strengen 0x53006500630052004500740030003100efter konvertering ved hjælp af MD4-algoritmen se sådan ud:0xcd06ca7c7e10c99b1d33b7485a2ed808
  2. Brugernavnet og domænenavnet som Unicode-strenge sammenkædes og konverteres til store bogstaver. Yderligere, ud fra denne sekvens og den tidligere opnåede NTLM-hash , ved hjælp af HMAC - MD5-algoritmen , beregnes en NTLMv2-hash , bestående af 16 bytes. For eksempel vil et brugernavn " User" og et domænenavn " Domain" give strengen " USERDOMAIN" eller Unicode-strengen 0x550053004500520044004f004d00410049004e00. Efter HMAC - MD5-algoritmen , hvor NTLM-hash bruges, beregnes NTLMv2-hash  :0x04b8e0ba74289cc540826bab1dee63ae
  3. En Client Challenge-sekvens er dannet af 8 bytes tilfældigt udvalgt (tilfældigt), for eksempel:0xffffff0011223344
  4. En klat dannes, for eksempel: 0x01010000 - klattens signatur, 0x00000000 - reserveret værdi, 0x0090d336b734c301 - tidsstempel, 0xffffff0011223344 - en tilfældig klientudfordring, 0x00000000 - ukendt, 0x02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000 - målinformationsblok, 0x00000000 - ukendt
  5. Serverudfordringen og klatten kombineres til en sekvens, hvorfra der ved hjælp af HMAC - MD5-algoritmen og den tidligere beregnede NTLMv2-hash beregnes en hashværdi bestående af 16 bytes. Hvis serverudfordringen f.eks. var 0x0123456789abcdef, opnås følgende sekvens: 0x0123456789abcdef01010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000. Efter brug af HMAC - MD5-algoritmen opnås følgende hashværdi:0xcbabbca713eb795d04c97abc01ee4983
  6. Nash-værdier på 16 bytes sammenkædes med klatten til en sekvens. Denne sekvens er NTLMv2-svaret :0xcbabbca713eb795d04c97abc01ee498301010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000

Sårbarheder

Lytte til netværkstrafik

Ved at lytte til netværkstrafik kan du opsnappe SMB - godkendelsespakkerne og derved overtage Server Challenge -sekvensen og svaret fra klienten. Med disse to parametre, på trods af godkendelsesmetoden (selv med NTLMv2), er det muligt ved hjælp af moderne software (forudsat en simpel adgangskode, for eksempel: "12345"), at gætte klientens adgangskode inden for et par timer. Men hvis godkendelsesmetoden er NTLMv2, og klientens adgangskode indeholder store, store, små bogstaver, tal og specialtegn, kan det tage mange år at knække en sådan adgangskode.

Server spoofing

  1. Nedbring den server, som klienten ønsker at få adgang til. For at gøre dette kan du bruge det mest primitive DDoS- angreb.
  2. Tildel til den computer, hvorfra angrebet vil blive foretaget, alle serverparametrene, det vil sige servernavnet, serverens IP-adresse og serverens MAC-adresse. Dette er nødvendigt, for at klienten, der adresserer serveren, vil forsøge at oprette forbindelse til den computer, hvorfra angrebet vil blive udført.
  3. Når klienten bliver bedt om at vælge en autentificeringsdialekt, skal computeren, hvorfra angrebet foretages, vælge den mest usikre dialekt, nemlig LM (eller mere sikre NTLM). Som et resultat vil den computer, hvorfra angrebet blev udført, modtage et LM-svar (svar). En angriber, der har en sekvens af Server Challenge og LM Response , vil tiden til at knække adgangskoden med brute force ( Bruteforce- angreb) kun tage et par timer.

Godkendelsespakke spoofing

Denne metode er ikke meget forskellig fra at erstatte serveren. Serveren vælger den mest usikre type autentificeringsdialekt ved at bruge speciel software eller ændre indstillingerne for den lokale sikkerhedspolitik.

Forebyggelse af vellykkede angreb

Adgangskoder

Ved valg af adgangskode skal klienten være styret af følgende regler:

Konfiguration af Windows-sikkerhedspolitik

Start "Kontrolpanel" og åbn afsnittet "Administrative værktøjer → Lokal sikkerhedspolitik → Lokale politikker → Sikkerhedsindstillinger". I dette afsnit skal du finde politikken "Netværkssikkerhed: LAN Manager Authentication Level". Fra rullelisten skal du vælge indstillingen "Send kun NTLMv2-svar. Afvis LM og NTLM"

Eksempler


Se også

Links