¿Métodos para determinar si un archivo está cifrado?

6

Estoy trabajando en un proyecto anti-ransomware. Simplemente supervisa el sistema de archivos y observa los archivos que se crean y eliminan. (También supervisa las extensiones de archivo ransomware conocidas.)

Operación básica: si (Se crea el Archivo X en el Directorio Y) y poco después (se elimina el Archivo Z en el Directorio Y). Analice el Archivo X e intente determinar si es un archivo cifrado.

Estoy atascado porque no tengo idea de cómo determinar si un archivo está cifrado o no. He leído un buen número de hilos en SO, pero todavía estoy vacío.

Mi pregunta es básicamente: ¿Qué métodos se pueden usar para determinar si un archivo está cifrado?

    
pregunta Nobody 06.05.2016 - 18:07
fuente

3 respuestas

2

Puede usar el comando de archivo en Linux / Unix / BSD (elija su veneno). Por ejemplo:

$ 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

Sin embargo, esto solo muestra información basada en los encabezados y remolques. Hace un tiempo, alguien escribió un secuencia de comandos de Powershell para encontrar Cryptolocker archivos ( enlace a la secuencia de comandos PS ) que puede o no ayudarlo . El problema con el que se encontrará es: "¿CÓMO se cifró esto?" Por ejemplo, si un atacante simplemente crea una contraseña compleja para un archivo "zip protegido por contraseña", eso no es cifrado por sí mismo, por lo que su script se detectará como un archivo zip, no como un archivo cifrado.

También es de destacar que muchos de estos archivos de ransomware cambian en cada iteración. Por ejemplo, locky agrega un * .locky a cada archivo, por lo que, si bien algunos pueden ser fáciles de detectar, imagine que todos sus archivos fueron renombrados a sumas de comprobación aleatorias. Ahora no puede identificar los archivos: Por ejemplo:

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

Ahora tienes un problema más grande. ¿Qué archivo es más crítico para la misión pasar el tiempo "descifrando / descifrando / etc"? En su mayor parte, el comando de archivo en sistemas basados en Unix y / o la secuencia de comandos Powershell debería darle un punto de partida. También hay YARA si REALMENTE desea ser técnico al respecto. Cree una firma YARA y úsela para buscar.

    
respondido por el munkeyoto 06.05.2016 - 18:33
fuente
4

Puede ejecutar ent para ver cuánta entropía tiene un archivo, es probable que un archivo con alta entropía esté comprimido o encriptado (o ambos). Un problema es que JPEG, XLSX y ZIP están comprimidos, por lo que los archivos comprimidos son muy comunes.

Si sospechas que X es una versión encriptada del archivo Z, puedes verificar si tienen tamaños similares, más un pequeño delta para los encabezados de encriptación.

    
respondido por el NikoNyrh 14.05.2016 - 15:37
fuente
0

Si tiene un sistema limpio, puede usar PowerShell para generar hashes para los archivos válidos (es decir, puede tener archivos encriptados, comprimidos, binarios y regulares válidos); y cada barrido generará nuevos hash y comparará si algún hash ha cambiado.

Según el tipo, etc. puede determinar si este es un comportamiento normal.

Por ejemplo, parece que use PowerShell Get-Process en Windows para alertar si hay cambios en los procesos, etc.

Aquí hay una demostración de la idea que se puede ampliar.

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

Ver imagen para la salida de muestra.

    
respondido por el Larry T 06.05.2016 - 18:59
fuente

Lea otras preguntas en las etiquetas