NTLM-autentikointi, SAM-tietokanta ja tiivisteiden (hash) varastaminen
Autentikointi (authentication, todentaminen/tunnistaminen) Windows-ympäristössä on melko monipuolista. Kaksi yleisintä tunnistautumismenetelmää ovat NTLM ja Kerberos. Käsittelemme Kerberosta toisessa skenaariossa, keskitytään nyt NTLM:ään.
NTLM
NTLM (NT Lan Manager) on Windowsin autentikointiprotokolla joka toimii karkeasti seuraavalla tavalla:
- Asiakas (client) lähettää NtlmNegotiate viestin jossa Jaska kertoo että haluaisi tunnistautua. "Terve, haluaisin tonnistautua.".
- Palvelin (server) vastaa NtlmChallenge viestillä, jossa se esittää haasteen. "Jos tosiaan olet kuka väität olevasi, niin todista se. Minä tiedän sinun salasanasi, mikä se on? Ei kun odotas, sitähän ei saanut lähettää verkon yli ettei se joudu vääriin käsiin... Hei, nyt keksin! Minä tiedän sinun salasanan NTLM-tiivisteen. No, tässä on haaste: ABC123. Salaa se salasanasi tiivisteellä ja lähetä takaisin. Minä salaan sen myös salasanasi tiivisteellä, ja vertaan molempia keskenään. Jos ne ovat samat, olet todistanut että sinulla on salasanasi, tai no ainakin se tiiviste.
- Asiakas (client) vastaa NtlmAuthenticate viestillä, jossa on paitsi vastaus pyydettyyn haasteeseen, myös salattu istuntotunniste (EncryptedSessionKey) jonka avulla nyt autentikoitua yhteyttä voidaan jatkaa.
Esimerkki Wiresharkissa: NTLM SMB:n yli
Hyvin tyypillinen skenaario Windows-verkossa on tunnistautua SMB-tiedostojakoon NTLM-protokollalla.



Paikallinen kirjautuminen: SAM-tietokanta
Kun Windows-palvelimeen (tai työasemaan) ollaan kirjatumassa paikallisella tunnuksella, NTLM-tiiviste tarkastetaan SAM-tietokannasta.
Windows-käyttöjärjestelmässä on tietokanta nimeltään SAM (Security Accounts Manager), joka on vastuussa käyttäjätilien hallinnasta ja tallentaa käyttäjätiloihin liittyvät tiedot paikallisessa tietokannassa.
Kun käyttäjä yrittää kirjautua sisään tietokoneelle, Windows-käyttöjärjestelmä käyttää SAM-tietokantaa tarkistaakseen, vastaavatko annetut käyttäjänimi ja salasana tallennettuja tietoja. Jos tiedot ovat oikein, käyttäjä saa pääsyn tietokoneelle.
SAM-tietokanta määrittää myös, mitkä käyttäjätilit ovat järjestelmänvalvojia ja millä käyttäjillä on rajoitettu pääsy tietokoneeseen.
Toimialuekirjautuminen: Kirjautumisen välitys toimialueohjaimelle (Pass through authentication)
Tyypillisesti yritysverkossa Windows-koneet ovat osana toimialuetta (domain) josta vastaa toimialueohjain (domain controller). Jos palvelimelle yritetään kirjautua NTLM:llä, mutta sellaisella käyttäjällä joka ei ole palvelimen paikallinen käyttäjä vaan toimialueen käyttäjä, palvelin ei itse tietenkään tiedä käyttäjän salasanaa, eikä voi tarkistaa haaste-vastauksen oikeellisuutta. Tällaisessa tapauksessa palvelin välittää vastauksen eteenpäin toimialueohjaimelle ("pass through authentication").
Pelkällä NTLM-tiivisteellä voi kirjautua sisään
On huomionarvoinen seikka, että NTLM-tunnistautumisessa ei varsinaisesti lähetetä tai edes käytetä selkokielistä salasanaa. Kaikki tapahtuu NTLM-tiivisteellä (hash) joka on salasanasta johdettu tiiviste.
Hyökkäyksiä, jossa hyökkääjä on saanut tällaisen NTLM-tiivisteen haltuunsa, ja on sillä kirjautunut toimialueen koneisiin joihin salasana on kelvannut, on historiallisesti kutsuttu "Pass the Hash" (PtH) hyökkäyksiksi.
Sama salasana = Sama tiiviste = Sama käyttäjä
On myöskin huomionarvoinen seikka, että jos käyttäjälle käytetään samaa salasanaa kahdella eri palvelimella, niin myös tiiviste on sama, ja sillä voidaan kirjautua molempiin palvelimiin.
Otetaan esimerkki.
- evilcorp.local käyttää kaikilla palvelimilla samaa salasanaa paikalliselle Administrator-käyttäjälle. Salasana on "kissa123" ja sen hash on "ABAAF1E2DEBF7362E046820DB495ACFE".
- Hyökkääjä murtautuu A.evil.local palvelimelle ja varastaa NTLM-tiivisteen (ABAAF1E2DEBF7362E046820DB495ACFE) palvelimen paikallisesta SAM-tietokannasta.
- Hyökkääjä kirjautuu B.evil.local palvelimelle käyttäen tunnusta "Administrator" ja tiivistettä ABAAF1E2DEBF7362E046820DB495ACFE.
- Hyökkääjä saa myös B.evil.local palvelimen haltuun.
- Hyökkääjä toistaa tämän jokaiseen palvelimeen johon tiiviste kelpaa.
Tyhjä LM hash
Muinaisina aikoina Windows on käyttänyt NTLM:ää heikomaa LM (LanMan) tiivistettä. Se ei ole enää käytössä modernissa Windows-verkossa. Sen sijaan LM-tiivisteen tilalla on "tyhjä LM hash" jonka arvo on AAD3B435B51404EEAAD3B435B51404EE. Älä siis hämmenny kun näet erilaisten työkalujen tulostavan sekä LM että NTLM hashin, LM hash on lähes aina kyseinen "aad3b..." alkuinen arvo joka tarkoittaa että LM-tiivistettä ei oikeasti ole käytössä.
SAM-tietokannan varastaminen meterpreterillä
Metasploitissa on Meterpreter-komento hashdump, joka lukee ja parsii SAM-tietokannan palvelimen levyltä, erittelee tietokannasta käyttäjät sekä LM ja NTLM-tiivisteet ja tulostaa ne.



Harjoitus
Aja meterpreterin "hashdump" komento ja selvitä Administrator-käyttäjän NTLM-tiiviste. Kannattaa myös tehdä CherryTreehen uusi node (esim. Servers/IIS1) ja laittaa muistiin käyttäjät ja tiivisteet.
Mikä on IIS-palvelimen Administrator -käyttäjän salasanan NTLM-tiiviste?


Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.
Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.