"Rahasia" DPAPI. Lihatlah keledai itu

Selain artikel terakhir kami tentang decoding gumpalan DPAPI, kita akan berbicara tentang dua kasus lagi yang harus kita hadapi. Ini akan tentang kata sandi yang disimpan di browser MS IE11 dan Edge.

Strateginya tetap sama - kami akan mendekripsi semuanya offline. Untuk melakukan ini, Anda perlu mengambil file yang diperlukan.

Bergantung pada sistem operasi (Windows 7 atau lebih tinggi), kata sandi yang disimpan harus dicari di dua tempat:

Dalam kasus Windows 7, ini adalah cabang registri

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 

Untuk Windows 8 dan di atasnya, penyimpanan Windows Vault.

Perlu dicatat juga bahwa pada Windows 7, kata sandi dasar otorisasi http juga disimpan di Windows Vault, jadi mengambilnya tidak ada salahnya.

Nah, sesuai dengan tradisi lama yang baik - semua ini, tentu saja, dienkripsi melalui mekanisme DPAPI.

Sekarang pertimbangkan algoritma dekripsi secara lebih rinci.

Windows 7 + IE11 (Tepi)


Seperti disebutkan di atas, kata sandi disimpan dalam registri pengguna saat ini dan gumpalan DPAPI dienkripsi dengan kunci utama pengguna.

Tetapi ada perbedaan penting - entropi digunakan saat mengenkripsi kata sandi. Entropi adalah URL tempat kata sandi dimasukkan dalam format ("https://url"+"\x00").lower().encode("utf-16-le") .

Untuk mendekripsi kata sandi, Anda perlu mengetahui URL lengkap! Kalau tidak, tidak ada apa-apa.

Tetapi agar IE sendiri tahu cara mendekripsi kata sandi, URL ini di-hash dan disimpan dalam registri sebagai nama kunci dengan gumpalan DPAPI.

Pertimbangkan sebuah contoh kecil. Untuk situs https://rdot.org/forum/ kata sandi yang disimpan akan terlihat seperti ini:

 A88E21329B5372B856CE238B79D1F28D8EA1FD359D REG_BINARY 01000000D08C9DDF0115D1118C7A00C......BC310C51EE0F9B05D 

dimana
A88 ... adalah URL hash https://rdot.org/forum/
01000000D08C ... - Gumpalan DPAPI yang berisi nama pengguna dan kata sandi

Algoritma hashing URL sangat mudah. Informasi lebih lanjut tentang dia dapat ditemukan dalam pengembangan Vault7 yang berbasis CIA.

Dengan python, tampilannya seperti ini:

 import hashlib url = "https://rdot.org/Forum/".lower() + "\x00" url_utf_16_le = url.encode("utf-16-le") sha1obj = hashlib.sha1(url_utf_16_le) urldigest = sha1obj.digest() checksum = 0 len(urldigest) for abyte in urldigest: checksum = (checksum + (ord(abyte))) & 0xFF hash = sha1obj.hexdigest().upper() cksum = "%02X" % checksum reg_value_name = "%s%s" % (hash, cksum) print reg_value_name 

Daftar 50 URL terakhir yang dimasukkan juga dapat ditemukan di registri:

  HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\typedurls 

Mari kita kembali ke contoh. Misalkan kita perlu menemukan kata sandi yang disimpan dari https://rdot.org/forum/ di registri.

Mengganti nilai URL ke dalam skrip konversi - kami mendapatkan nilainya

 A88E21329B5372B856CE238B79D1F28D8EA1FD359D 

Kunci dengan nama ini perlu kita temukan di registri

 req query "HKEY_USERS\<SID>\Software\Microsoft\Internet Explorer\IntelliForms\Storage2" 

Jika kunci tersebut ditemukan, maka harus disalin ke file sebagai nilai hex (mis., Mengartikan nilai kunci sebagai hex blob) dan didekripsi sebagai blob DPAPI menggunakan entropi: ("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le")
("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le")


Untuk dekripsi, Anda dapat menggunakan dpapick, membuat perubahan yang sesuai untuk memperhitungkan entropi dalam dekripsi.

Dalam file contoh / filegeneric.py, panggilan fungsi

  probe.try_decrypt_with_password(options.password, mkp, options.sid) 

ganti dengan

 probe.try_decrypt_with_password(options.password, mkp, options.sid, entropy=("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le")) 

dan setelah itu panggil dpapick seperti biasa:

  ./filegeneric.py --sid <SID> --masterkey <mk dir> --password <..> --inputfile <dpapi blob from registry> 

Jika kunci master didekripsi dengan benar, maka output akan menerima nama pengguna dan kata sandi yang disimpan (setelah sejumlah data biner layanan).

Windows 8.1 dan lebih tinggi


Dalam hal menyimpan kata sandi di Win8 dan yang lebih tinggi, kata sandi dari formulir http, serta otorisasi dasar http, disimpan di Windows Vault. Dan apa yang baik - bersama dengan kata sandi, URL lengkap dari situs yang didekati juga disimpan.

Vault sendiri dienkripsi dalam dua tahap - pertama, seluruh blok data dienkripsi oleh AES, dan kunci simetris untuk dekripsi dienkripsi oleh DPAPI dan disimpan ke file. Algoritma enkripsi-dekripsi lengkap dijelaskan dalam artikel oleh orang-orang dari Zena Forensics .

Mereka juga mengembangkan dekripsi khusus untuk Windows Vault berdasarkan dpapick (dpapilab). Anda dapat mengambilnya di ZF git atau mengunduh garpu dari github kami.

Penyimpanan Vault terletak di profil pengguna:

 C:\Users\<user>\AppData\Local\Microsoft\Vault\<GUID>\ 

Di dalam file .vpol adalah gumpalan DPAPI dienkripsi dengan kunci pengguna dan menyimpan kunci AES untuk mendekripsi .vcrd

Untuk mendekripsi Vault, Anda harus menjalankan:

 ./vaultdec.py --masterkey <mk dir> --sid <SID> --password <pass> <VAULT DIR> 

Alih-alih kata sandi, Anda dapat menggunakan kunci domain, seperti yang ditunjukkan pada artikel sebelumnya . Perlu juga dicatat bahwa jika kebijakan Roaming Kredensial dimasukkan dalam mesin dalam domain, maka data Windows Vault akan disimpan dalam ldap. Anda dapat membaca tentang ini di artikel pertama kami tentang DPAPI.

Tambahan kecil: agar skrip berfungsi dengan benar, Anda kemungkinan besar perlu menginstal tautan Python lama:

 apt install python-construct.legacy 

Lembar curang


Untuk mendekripsi kata sandi IE, Edge, serta kata sandi yang disimpan di Windows, Anda perlu mengambil:

Direktori kubah

 c:\Users\<user>\AppData\Local\Microsoft\Vault\<GUID>\ 

katalog dengan kunci utama

 c:\Users\<user>\AppData\roaming\microsoft\Protect\<SID>\ 

isi kunci registri

 HKEY_USERS\<SID>\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 HKEY_USERS>\<SID>\Software\Microsoft\Internet Explorer\typedurls 

Selain itu, Anda perlu mengetahui kata sandi pengguna atau kunci cadangan domain dpapi untuk dekripsi tanpa kata sandi.

Source: https://habr.com/ru/post/id437390/


All Articles