
Impianto filtro password DLL con capacità di esfiltrazione
DLLPasswordFilterImplant è un DLL filtro password personalizzato che consente la cattura delle credenziali di un utente. Ogni evento di cambio password su un dominio attiverà il DLL registrato per esfiltrare il nome utente e il nuovo valore della password prima di cambiarlo con successo nell'Active Directory (AD).
Per maggiori informazioni sui filtri password consultare la documentazione Microsoft.
Creare il DLL per l'architettura target. Compilare in 32-bit per un sistema a 32 bit e in 64-bit per un sistema a 64 bit.
Copiare il DLL nella directory di installazione di Windows. (Cartella predefinita: \Windows\System32)
Registrare il filtro password aggiornando la seguente chiave di registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Se la sottochiave Notification Packages esiste, aggiungere il nome del DLL ("DLLPasswordFilterImplant" se non lo si è rinominato) ai dati del valore esistente. Non sovrascrivere i valori esistenti.
Se la sottochiave non esiste, crearla e aggiungere il nome del DLL ("DLLPasswordFilterImplant" se non lo si è rinominato) ai dati del valore.
NOTA: Non includere l'estensione .dll quando si aggiunge il nome del DLL nella sottochiave Notification Packages.
Configurare la chiave pubblica da utilizzare per crittografare le credenziali.
KEY=key.pem
# Generate an RSA key and dump its public key. Keep the private key around for decryption
openssl genrsa -out $KEY 2048
# Prepare the Windows registry key entry.
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# If python2 does not exist, use `python` instead.
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
È quindi possibile eseguire il file addKey.reg per aggiungere la chiave pubblica grezza al registro.
Si noti che l'uso della crittografia asimmetrica aumenta significativamente la dimensione dei dati da esfiltrare a causa del padding dei messaggi. Sono possibili miglioramenti per ridurre l'overhead dei dati.
Riavviare il sistema Source
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
I dati crittografati sono riempiti utilizzando OAEP e possono essere decrittati come segue:
# Convert the stitched hex string to raw bytes.
xxd -r -p exfiltrated.hex > raw.bin
# Decrypt using the private key.
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
Per rimuovere completamente il filtro password da un sistema:
Annullare la registrazione del filtro password aggiornando la seguente chiave di registro:
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
Nella sottochiave Notification Packages rimuovere il nome del DLL dai dati del valore esistente. Non rimuovere altri valori esistenti.
Riavviare il sistema
Nella directory di installazione di Windows (Cartella predefinita: \Windows\System32), trovare il DLL del filtro password ("DLLPasswordFilterImplant.DLL" se non lo si è rinominato) ed eliminare il file.
Un semplice server DNS per ricevere i dati esfiltrati è fornito in scripts/.
Eseguire pip install -r scripts/requirement.txt, preferibilmente in un ambiente virtuale, e poi fornirgli una chiave privata codificata in .PEM e un file di output opzionale (predefinito creds.txt) dove scrivere le credenziali.
Attualmente, il server DNS non supporta cambi password concorrenti e funge solo da prova di concetto. Le pull request che aggiungono robustezza al server sono più che benvenute.
Funziona su:
Il filtro password è stato testato esclusivamente sui sistemi elencati sopra.
Ecco alcuni strumenti che possono aiutare a eseguire il debug del DLL (se necessario):