Metodi per determinare se un file è crittografato?

6

Sto lavorando a un progetto anti-ransomware. Monitora semplicemente il filesystem e controlla la creazione e l'eliminazione dei file. (controlla anche le estensioni di file ransomware conosciute.)

Operazione di base: Se (File X in Directory Y viene creato), e poco dopo (File Z in Directory Y viene eliminato.) Scansiona il file X e prova a determinare se si tratta di un file crittografato.

Sono bloccato perché non ho idea di come determinare se un file è crittografato o meno. Ho letto un bel po 'di thread su SO, ma sono ancora disponibile.

La mia domanda è fondamentalmente: quali metodi possono essere utilizzati per determinare se un file è crittografato?

    
posta Nobody 06.05.2016 - 18:07
fonte

3 risposte

2

Puoi usare il comando file su Linux / Unix / BSD (scegli il tuo veleno). Ad esempio:

$ gpg --encrypt test-encrypted -r [email protected]

Enter the user ID.  End with an empty line: 
$ ls                       
test-encrypted      test-encrypted.gpg
$ mv test-encrypted.gpg testfile.txt
$ file testfile.txt 
testfile.txt: GPG encrypted data

Tuttavia, questo mostra solo informazioni basate su intestazioni e trailer. Qualche tempo fa qualcuno ha scritto un script PowerShell per trovare Cryptolocker file ( link allo script PS ) che può o non può aiutarti . Il problema che incontrerai è: "COME è stato codificato?" Ad esempio, se un utente malintenzionato crea semplicemente una password complessa per un file "zip protetto da password", non è crittografia per sé, quindi lo script verrà rilevato come file zip, non come file crittografato.

È anche degno di nota il fatto che molti di questi file ransomware cambiano ad ogni iterazione. Ad esempio, locky aggiunge un * .lock a ciascun file, quindi mentre alcuni possono essere facili da rilevare, immagina se tutti i tuoi file sono stati rinominati in checksum casuali. Ora non puoi identificare i file: E.g.:

MD5 ("salesfile") = 64d11ab29c2d78b325d8a944119d1150.doc
MD5 ("payrollfile") = d9087b158cd38e844999456d17611f1c.doc
MD5 ("engineeringfile") = 14e8e9011a4d3343df39e35fc7f2cd29.doc
MD5 ("researchfile") = 26779202429523339305a90e6ec74146.doc
MD5 ("managementfile") = 419765bc586cdd1bf741afe771951bec.doc

Ora hai un problema più grande. Quale file è più mission-critical per trascorrere del tempo "cracking / decrypting / etc." Per la maggior parte, il comando file su sistemi basati su Unix, o lo script PowerShell dovrebbe darti un punto di partenza. C'è anche YARA se si vuole VERAMENTE essere tecnici a riguardo. Crea una firma YARA e usala per cercare.

    
risposta data 06.05.2016 - 18:33
fonte
4

Potresti eseguire ent per vedere la quantità di entropia di un file, un file con un'alta entropia è probabilmente compresso o crittografato (o entrambi). Un problema è che JPEG, XLSX e ZIP sono compressi, quindi i file realmente compressi sono molto comuni.

Se si sospetta che X sia una versione crittografata del file Z, è possibile verificare se hanno dimensioni simili, oltre a un piccolo delta per le intestazioni di crittografia.

    
risposta data 14.05.2016 - 15:37
fonte
0

Se si dispone di un sistema pulito, è possibile utilizzare PowerShell per generare hash per i file validi (ad esempio, si possono avere file crittografati, compressi, binari e regolari validi); e ogni sweep genera nuovi hash e confronta se un hash è cambiato.

In base al tipo, ecc. puoi determinare se questo è un comportamento normale.

Ad esempio, guardo usare PowerShell Get-Process in Windows per avvisare se ci sono modifiche ai processi, ecc.

Ecco una dimostrazione dell'idea che può essere ampliata.

PS C:\windows\system32> ## Demonstration
#  Show how you can fingerprint a server and find out if any new 
#  processes are started since boot or last baseline
#   
Get-Process * | Export-Clixml 'D:\Digital Forensics\__\baseline-local-GPROC-000.xml'
$gpbaseline000 = Import-Clixml 'D:\Digital Forensics\__\baseline-local-GPROC-000.xml'

Start-Process notepad.exe

Get-Process * | Export-Clixml 'D:\Digital Forensics\__\baseline-local-GPROC-001.xml'
$gpbaseline001 = Import-Clixml 'D:\Digital Forensics\__\baseline-local-GPROC-001.xml'

Compare-Object $gpbaseline000 $gpbaseline001 -Property processname

Vedi l'immagine per l'output di esempio.

    
risposta data 06.05.2016 - 18:59
fonte

Leggi altre domande sui tag