160 likes | 361 Views
NTDS.DIT offline hashdump , avagy a meztelen igazság a domaines jelszótárolásról. Bemutatkozás. Barta Csaba Deloitte Zrt . Manager CHFI cbarta@deloittece.com csaba.barta@gmail.com. NTDS.DIT?. Active Directory elsődleges adattároló állománya Helye : %WINDOWS%NTDS<br>tds.dit
E N D
NTDS.DIT offline hashdump, avagy a meztelenigazság a domainesjelszótárolásról
Bemutatkozás BartaCsaba Deloitte Zrt. Manager CHFI cbarta@deloittece.com csaba.barta@gmail.com
NTDS.DIT? • Active Directory elsődlegesadattárolóállománya • Helye: %WINDOWS%\NTDS\ntds.dit • Mittartalmaz • Azösszes AD-bentároltobjektumot • Felhasználók • Csoportok • Jogosultságok
Hogyanjuthatunkhozzá? • Volume Shadow Copy • Online forensic pillanatkép • DC kikapcsolas + masolas
NTDS.DIT felépítés • Táblák • datatable (AD objektumokésattribútumaik) • linktable (hivatkozások pl.: memberof) • sdtable (security descriptors /Server 2003 óta/)
NTDS.DIT felépítés 2 • A schema-ban leírtösszestulajdonságmegtalálhatómindenobjektum-rekordban (csaknincskitöltve) • emiattakártöbbezermezőből is állhategyrekord
Holtárolódnak a jelszavak? • A jelszó hash-eket a datatabletárolja • Érdekesebb user attribútumok • ATTm3 – SAMAccountName • ATTm13 – Description • ATTk589970 – SID • ATTk589879 – Titkosított LM hash • ATTk589914 – Titkosított NT hash • ATTk589918 – Titkosított NT PWD history • ATTk589984 – Titkosított LM PWD history • ATTk590689 – Titkosított PEK
Hash titkosítás • A jelszó hash-ektitkosítvatárolódnak • Standard algoritmusok (RC4, MD5, DES) • A titkosítókulcs (PEK) tartományonkéntkülönbözik, • megtalálhatóaz NTDS.DIT állományban (szinténtitkosítva a bootkeysegítségével)
PEK dekriptálás md5=MD5.new() md5.update(bootkey) foriinrange(1000): md5.update(enc_pek[0:16]) rc4_key=md5.digest(); rc4 = ARC4.new(rc4_key) pek=rc4.encrypt(enc_pek[16:]) returnpek[36:]
Jelszó hash dekriptálás md5 = MD5.new() md5.update(pek) md5.update(enc_hash[0:16]) rc4_key = md5.digest(); rc4 = ARC4.new(rc4_key) denc_hash = rc4.encrypt(enc_hash[16:]) (des_k1,des_k2) = sid_to_key(rid) d1 = DES.new(des_k1, DES.MODE_ECB) d2 = DES.new(des_k2, DES.MODE_ECB) hash = d1.decrypt(denc_hash[:8]) + d2.decrypt(denc_hash[8:]) return hash
Jelszó history • Miértfontos a vizsgálata • Jelszóválasztásimintakeresése • LM hashek • Holtárolódik • Az ATTk589984 és ATTk589918 attribútumokbantárolódik • Egymásutánmásolva (titkosítva) • Külön-különkelldekriptálniőket