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.