Sunteți pe pagina 1din 68

D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.

training/

MALWARE ANALYSIS < HTTPS://DVIRUS.TRAINING/CATEGORY/MALWARE-


ANALYSIS/>

Solución de error al graficar funciones en IDA < https://dvirus.training/2020/01/23/solucion-


de-error-al-graficar-funciones-en-ida/>

By dvirus < https://dvirus.training/author/dvirus/>

23 enero, 2020 < https://dvirus.training/2020/01/23/solucion-de-error-al-graficar-


funciones-en-ida/>

No hay comentarios < https://dvirus.training/2020/01/23/solucion-de-error-al-


graficar-funciones-en-ida/#respond>

En algunos análisis de binarios en IDA se hace neceario generar


gráficas de funciones para identificar referencias cruzadas (xrefs).

Sintoma:

Al usar el IDA que viene instalado en FlareVM aparece el siguiente


mensaje de error al intentar graficar.

1 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Diagnóstico:

El error indica que no se puede graficar debido a que no se encuentra


el programa o la libreria para generar las gráficas, así que
validaremos el archivo de configuración tal como lo sugiere IDA.

En la carpeta donde se encuentra instalado IDA, generalmente


“C:\Program Files\IDA Freeware 7.0\” hay una carpeta que contiene
el archivo de configuración ida.cfg

En este archivo de configuración hay una sección donde se


establecen los parámetros del programa de visualización de gráficas.

2 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Según la configuración, IDA espera el archivo qwingrahp.exe, al no


encontrarlo genera la excepción.

Solución

La solución más sencilla es agregar el binario a la carpeta de IDA, el


binario lo pueden descargar desde aquí < https://dvirus.training
/wp-content/uploads/2020/01/qwingraph.zip> . A continuación
encontrarán el SHA-1 para validar la integridad del binario. (pass:
“dvirus.training”)

bb0954e8352373b76c730e8dc7a772a7021204af
qwingraph.exe
dfb44ee088a469e9446aa767ef5408c00d6dfe0b
qwingraph.zip

Una vez descargado el binario, este se debe copiar en la carpeta de


IDA

3 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Una vez realizados estos pasos IDA podrá graficar correctamente.

FORENSICS < HTTPS://DVIRUS.TRAINING/CATEGORY/FORENSICS/>

Montaje de imágenes forenses cifradas con bitlocker < https://dvirus.training/2020/01


/22/montaje-de-imagenes-forenses-cifradas-con-bitlocker/>

4 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

By dvirus < https://dvirus.training/author/dvirus/>

22 enero, 2020 < https://dvirus.training/2020/01/22/montaje-de-imagenes-forenses-


cifradas-con-bitlocker/>

No hay comentarios < https://dvirus.training/2020/01/22/montaje-de-imagenes-


forenses-cifradas-con-bitlocker/#respond>

En este artículo les explicaré como montar una imagen forense de


disco en formato EWF cifrada con bitlocker.

5 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Preparación:

Para desarrollar este proceso necesitamos:

La imagen forense en formato ewf (Expert Witness Disk Image


Format )

La clave de recuperación de la unidad de cifrado, esta se genera


cuando se cifra el disco y debe ser suministrada por el dueño o
administrador del equipo.

Herramientas

Instalamos dislocker y las herramientas para operar los archivos


EWF

sudo apt install ewf-tools dislocker

6 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Montaje:

Creamos una carpeta en la cuál montaremos la imagen forense.

sudo mkdir /mnt/ewfimages

Verificamos la información de la imagen suministrada.

ewfinfo ForensicImage.E01

Montamos la imagen en la carpeta creada previamente

sudo ewfmount ForensicImage.E01 /mnt/ewfimages/

7 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

listamos el contenido de la carpeta y encontraremos el archivo ewf1

sudo ls -lh /mnt/ewfimages

Validamos la tabla de particiones de la imagen

sudo gparted /mnt/ewfimages/ewf1

gparted nos mostrará una partición con el sistema de archivos


bitlocker, en este caso /mnt/ewfimages/ewf1p4

Una vez identificada la partición que está cifrada con bitlocker


damos doble clic.

8 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Copiamos el valor correspondiente al primer sector para calcular el


offset, este valor también lo podemos obtener con fdisk.

sudo fdisk -l /mnt/ewfimages/ewf1

Antes de intentar montar la partición analizaremos la metadata de la


partición cifrada, para este propósito usaremos dislocker-metadata, a
este comando le pasamos el offset -o y el volumen -V. El 512
corresponde al tamaño de cada sector, cuál pueden confirmar con el
9 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

comando fdisl -l.

sudo dislocker-metadata -o $((1490944*512)) -V


/mnt/ewfimages/ewf1

Hemos confirmado la existencia del volumen cifrado con bitlocker,


ya es hora de montar la partición.

Creamos un punto de montaje para alojar el archivo de dislocker.

sudo mkdir decrypted_volume

Ejecutamos dislocker-fuse para crear un archivo virtual y de esta


forma operar el disco. El archivo virtual creado con FUSE es una
representación virtual del volumen descifrado.

sudo dislocker-fuse -p -O $((1490944*512)) -V


/mnt/ewfimages/ewf1 decrypted_volume/

Si la ejecución es correcta, el sistema nos solicitará la clave de


recuperación de bitlocker.
10 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Ingresamos la clave, y si esta es correcta se creará un archivo


llamado dislocker-file.

sudo ls -lh decrypted_volume

Con este archivo podemos ejecutar las actividades forenses usando


Sleuth Kit como lo vimos en este artículo < https://dvirus.training
/2020/01/09/analisis-y-recuperacion-de-archivos-con-tsk/> .

sudo fsstat decrypted_volume/dislocker-file

11 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Si queremos montar el sistema de archivos para interactuar con los


archivos, ejecutamos los siguientes comandos.

Creamos una carpeta en un disco con suficiente espacio disponible,


preferiblemente un disco externo.

mkdir Files_Decrypted

Montamos la unidad

sudo mount -o loop,ro decrypted_volume/dislocker-


file Files_Decrypted/

En la carpeta Files_Decrypted se encontrarán todos los archivos.


Una vez finalicemos el análisis forense o la inspección del disco,
desmontamos las unidades.

sudo umount Files_Decrypted

rm -rf Files_Decrypted/

sudo fusermount -u decrypted_volume

rm -rf decrypted_volume/

Este procedimiento también se puede realizar para imagenes en


12 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

crudo (RAW) en ese caso no hay que ejecutar los primeros pasos y
se inicia desde la identificación del offset.

Referencias:

Practical Forensic Imaging, Bruce Nikkel 2016


MALWARE ANALYSIS < HTTPS://DVIRUS.TRAINING/CATEGORY/MALWARE-
ANALYSIS/>

Análisis estático de binarios PE desde linux < https://dvirus.training/2020/01/18/analisis-de-


binarios-pe-desde-linux/>

By dvirus < https://dvirus.training/author/dvirus/>

18 enero, 2020 < https://dvirus.training/2020/01/18/analisis-de-binarios-pe-desde-


linux/>

No hay comentarios < https://dvirus.training/2020/01/18/analisis-de-binarios-pe-


desde-linux/#respond>

En esta entrada veremos como usar algunas herramientas de código


abierto en linux para la evaluación inicial de archivos ejecutables de
windows potencialmente maliciosos.

Las técnicas que abordaremos forman parte de el análisis estático de


malware, la cuál consiste en analizar un archivo sospechoso sin
ejecutarlo. El análisis estático corresponde a la técnica más básica de
análisis de malware y el objetivo es extraer información del binario.

13 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Precaución: Para este articulo vamos a utilizar un archivo


malicioso, bajo ningún motivo ejecute el archivo en un entorno
windows, todo el procedimiento se realizará desde una máquina
virtual con sistema operativo linux.

Escenario:

Uno de los usuarios de la organización ha reportado actividad


extraña en el computador. El equipo de respuesta a incidentes ha
logrado identificar la presencia de un archivo sospechoso ubicado en
el perfil de la usuaria.

El archivo que usaremos es este:

Folio-854500047700.zip
< https://dvirus.training/wp-content/uploads/2020/01/Folio-
854500047700.zip> El archivo está comprimido, para descomprimir
utilizar la contraseña “infected”

En la mayoria de escenarios, lo primero que haría un analista de


seguridad es obtener un hash del archivo y compararlo en virustotal.
Sin embargo, si es un binario reciente probablemente no esté aún en
la base de datos de las sandbox públicas y no reconozca el archivo
como una amenaza o su detección sea baja. Es probable que cuando
evalúe el binario aquí suministrado, este ya esté reportado en varias
fuentes de información.

Análisis
14 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Determinar el tipo de archivo

Al descomprimir el archivo encontramos que la extensión es .bin,


sin embargo debemos desconfiar de esta información y determinar
que tipo de archivo es. Para este propósito se utilizan las cabeceras
del archivo (headers) las cuales pueden ser visualizadas con un
editor hexadecimal y comparadas contra información que
encontremos en internet.

En el caso de los archivos PE, si observamos directamente en la


documentación de referencia de Microsoft <
https://docs.microsoft.com/en-us/windows/win32/debug/pe-
format#file-headers> aparecen varios valores hexadecimales que
corresponden a archivos PE. Ejecutaremos la herramienta xxd para
obtener las cabeceras y los números mágicos que identifican al tipo
de archivo.

xxd -g 1 Folio-854500047700.bin | more

15 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Obtenemos los valores 4d 5a, estos valores perteneces a un


ejecutable de windows.

Para obtener más información sobre los números mágicos de las


cabeceras de archivo recomiendo el sitio de Gary Kessler <
https://www.garykessler.net/library/file_sigs.html> .

En linux contamos con una herramienta que hace este análisis de los
números mágicos y es la herramienta file.

file Folio-854500047700.bin

Al ejecutar el comando file, obtenemos el siguiente resultado.

El comando file muestra el tipo de archivo y la arquitectura.

file también nos permite obtener el tipo MIME (Multipurpose


Internet Mail Extensions) del archivo, para más información ver el
rfc2045 < https://tools.ietf.org/html/rfc2045> .

16 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

file Folio-854500047700.bin --mime-type

Obtención de valores criptográficos.

Una vez identificado el tipo de archivo, obtenemos el valor del hash,


los valores hash son como la huella dactilar (fingerprint) del archivo,
los algoritmos hash estándares son MD5,SHA-1 o SHA-256 Estos
valores son necesarios ya que permiten identificar al binario por más
que este cambie de nombre o extensión.

El valor del hash es usado con frecuencia como indicador de


compromiso (IOC) en los procesos de respuesta a incidentes. los
comandos md5sum, sha1sum y sha256sum permiten obtener el valor
del hash requerido.

Observen como se mantiene el valor del hash, aún si el binario tiene


otro nombre.

17 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Introducción a pev

pev es una herramienta de código abierto para el análisis de archivos


PE (Portable Executable). pev contiene varias herramientas de
análisis, las cuales veremos a continuación.

instalación:

sudo apt install pev

pehash

pehash calcular los hashes del archivo.

pehash Folio-854500047700.bin

Al ejecutar pehash sobre el binario obtuvimos el md5, el sha1, el


sha256 del archivo y adicionalmente obtuvimos otros dos valores los
cuales explicaremos a continuación.

ssdeep

El valor ssdeep permite comparar archivos mediante un método


conocido como fuzzy hashing, el método consiste en determinar un
porcentaje de similitud con respecto a otro archivo.

18 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

por ejemplo si ejecutdo ssdeep sobre la carpeta en la cuál estoy


trabajando los binarios aparecerá que la copia que hice utilizando el
nombre cmd tiene un 100% de similitud.

ssdeep -pb *

Import Hash

El imphash o importhash es otra técnica que permite identificar o


clasificar malware mediante un hash calculado sobre la IAT (Import
Address Table) o tabla de direcciones de importación. Este
mecanismo creado por Mandiant permite asociar un especimen
contra un grupo de amenazas conocido (threat groups). Para más
información: https://www.fireeye.com/blog/threat-research
/2014/01/tracking-malware-import-hashing.html <
https://www.fireeye.com/blog/threat-research/2014/01/tracking-
malware-import-hashing.html>

Extracción de cadenas de texto

La extracción de strings permite obtener alguna información básica


sobre acciones o funcionalidades del binario. No en todos los casos,
pero con algunos binarios podemos extraer nombres de archivos,
librerías, urls, dominios, direcciones IP, comandos, entre otros

19 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

valores.

Para obtener las cadenas de texto usaremos el comando strings.

strings Folio-854500047700.bin

20 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Por defecto strings imprime valores en ASCII, sin embargo, el


malware pude utilizar otro tipo de codificaciones como Unicode.
Para extraer las cadenas Unicode le pasamos como parámetro el tipo
de codificación al comando strings,en este caso -el donde e: es para
establecer el tipo de codificción y l: es para decirle que usaremos
codificación de 16-bits.

strings -el Folio-854500047700.bin

Al imprimir los valores unicode obtenemos información adicional


que no vimos en la primera ejecución de strings

En este caso reconocemos que varios textos están escritos en


múltiples idiomas y llamadas a funciones de teclado, lo cuál podría
indicar que se trata de un malware con funcionalidades de keylogger.

Nota: la salida del comando strings es bastante extensa por lo que


se recomienda combinar con comandos como more o less y el uso
de expresiones regulares, por ejemplo:
21 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

strings -el Folio-854500047700.bin | grep -E


".exe" --color

En algunos casos al ejecutar el comando strings podríamos no


obtener mayor información, esto puede ser debido a que el
adversario haya empaquetado u ofuscado el ejecutable.

Identificación de Packers

Los packers, son programas que utilizan mecanismos de compresión


para ofuscar el contenido de un binario con el fin de evadir algunos
controles de seguridad o simplemente dificultar su análisis.

Ejecutamos pepack y pasamos 2 parámetros, el nombre del binario y


un archivo txt que contiene las firmas de múltiples packers.

pepack Folio-854500047700.bin -d userdb.txt

https://dvirus.training/wp-content/uploads/2020/01/userdb.txt <
https://dvirus.training/wp-content/uploads/2020/01/userdb.txt>

22 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

En otra entrada, hablaremos con más detalle sobre los packers y los
metodos de desempaquetado.

Otras Propiedades.

Con la herramienta pescan podemos obtener otras propiedades,


como la entropía del archivo, la fecha de compilado, funciones para
evitar ser desensamblado, entre otras.

pescan -v Folio-854500047700.bin

La entropía permite evaluar el nivel de aleatoriedad de datos que

23 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

contiene un archivo, con base en el valor de la entropia se podría


establecer si el archivo ha sido comprimido o empaquedato.

En linux podemos utilizar el comando ent para calcular la entropía


de un archivo, en este caso vemos como el archivo comprimido tiene
un valor más alto de entropía.

El timestamp, es un valor que indica en que fecha fue compilado el


binario. Este valor puede ser usado como un indicador de
compromiso o simplemente para crear una linea de tiempo sobre la
campaña que estamos analizando.

Mecanismos de protección

Por último usaremos la herramienta pesec para identificar si el


binario utiliza algún esquema de preotección como DEP/NX o
ASLR.

pesec Folio-854500047700.bin

peframe
24 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

peframe es una herramienta de código abierto escrita en python para


el análisis estático de binarios PE, contiene funcionalidades para la
detección de packers, mutex y mecanismos de protección.

Instalación

sudo apt install git python3-pip libssl-dev swig


git clone https://github.com/guelfoweb/peframe.git
cd peframe

dentro de la carpeta peframe, ejecutamos

sudo python3 setup.py install

Ejecutamos el comando peframe --help para confirmar que la


instalación ha sido exitosa.

En la parte inferior del comando de ayuda aparecerán las rutas en las


cuales podemos configurar el api de virustotal y algunas reglas para
extracción de strings y las reglas de yara.

En el archivo config-peframe.json se puede agregar el api de

25 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

virustotal.

Una vez configuradas las opciones necesarias, analizamos el binario


con peframe.

peframe Folio-854500047700.bin

La ejecución arrojará varias secciones como por ejemplo:

Acciones relacionadas con el comportamiento: En este caso ha


detectado la detección de anti-debuggers, funcionalidades para la
toma de pantallazos, escalada de privilegios, toma de capturas de
teclado (keylogger) entre otras funciones.

26 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Funciones criptográficas: peframe identifica funciones


criptograficas utilizadas por el binario, este hallazgo es importante a
la hora de realizar un análisis más en profunidad del binario.

Packers: peframe nos confirma la presencia de packers escritos en


Delphi.

27 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Funciones: Observamos varias funciones o librerías dinámicas


(DLL’s) del sistema operativo que son importadas por el binario.

APIs: En la sección Possible Breakpoint, observamos el llamado a


las APIs de Microsoft Windows

28 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Otra forma de ejecutar peframe, es en modo interactivo, pasamos la


bandera -i y podemos interactuar en una consola con comandos
propios de la herramienta.

peframe Folio-854500047700.bin -i

Si hemos asociado el API de virustotal podemos verificar si el


binario aparece reportado por alguna solución anti-malware

Ejecutamos los comandos virustotal y luego antivirus

29 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Conclusiones:

Con estos simples pasos hemos obtenido información valiosa del


archivo sospechoso:

El tipo de archivo con base en los magic numbers


Los valores criptográficos
MD5
SHA-1
SHA-256
SSDEEP
IMPHASP
strings o cadenas de texto en ASCII o Unicode

30 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

La presencia de packers
Funciones criptográficas usadas por el binario
DLL’ s importadas y APIs
Valores de entropía
La fecha de creación del binario
Identificación de mecanismos de protección.

En la próxima entrada veremos como crear reglas de YARA para la


detección de archivos maliciosos.
FORENSICS < HTTPS://DVIRUS.TRAINING/CATEGORY/FORENSICS/>

Identificación de archivos en imágenes forenses con sorter < https://dvirus.training/2020/01


/09/identificacion-de-archivos-en-imagenes-forenses-con-sorter/>

By dvirus < https://dvirus.training/author/dvirus/>

9 enero, 2020 < https://dvirus.training/2020/01/09/identificacion-de-archivos-en-


imagenes-forenses-con-sorter/>

No hay comentarios < https://dvirus.training/2020/01/09/identificacion-de-archivos-


en-imagenes-forenses-con-sorter/#respond>

31 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

En la entrada anterior realizamos una introducción a The Sleuth


Kit para el análisis de imágenes forenses <
https://dvirus.training/2020/01/09/analisis-y-recuperacion-de-
archivos-con-tsk/> . En esta entrada hablaremos de la herramienta
sorter, una utilidad de TSK para el análisis y recuperación de
archivos.

sorter es un script en Perl que forma parte de TSK, sorter analiza el


sistema de archivos para organizarlos según el tipo. Básicamente lo
que hace es ejecutar el comando file en cada archivo y los organiza
con base en una serie de reglas establecidas en los archivos de
configuración.

Los archivos de configuración que usa sorter por defecto se


encuentran en la ruta donde está instalado TSK, para identificar los
archivos de configuración ejecutamos el comando locate
sorter

32 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Los archivos de configuración contienen una serie de reglas donde


se definen las categorías y los tipos de archivo correspondientes.

Si queremos generar un listado de todos los archivos por tipo con su


respectivo hash, ejecutamos:

sorter -o 3096576 -f ntfs -d recovered_files/


-sha1 Case01.raw

Nota: El número de offsed utilizado en este ejercicio lo obtuvimos


del ejercicio anterior

33 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

-o: el offset
-f: el tipo de sistema de archivos
-d: la carpeta en la cual se almacenarán los resultados (si no existe,
hay que crearla)
-sha1 genera un hash SHA-1 de cada archivo

Al ejecutar el comando aparecerá el siguiente mensaje:

sorter creará la siguiente estructura

Los archivos .txt generados contienen el tipo de archivo, el inodo, y


el hash

34 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Recuperación de Archivos

Sorter puede recuperar archivos y guardarlos en carpetas asociadas


al tipo de archivo, a continuación veremos como se ejecuta el
proceso.

Nota: Para ejecutar este proceso asegúrese de que cuenta con


espacio suficiente en disco, se recomienda recuperar los archivos
en un medio extraíble.

sorter -o 3096576 -f ntfs -d recovered_files/


-sha1 -s Case01.raw

Si pasamos el parámetro -s los archivos serán recuperados en la


carpeta indicada. Por lo que la estructura cambiará a:

35 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Los archivos .txt incluirán la ruta y el archivo recuperado

Sorter tiene la capacidad de validar los hashes contra librerías o


bases de datos NSRL (National Software Reference Library), para
realizar esta comparación es neceario contar con una base se datos
las cuales se pueden descargar del sitio de NIST <
https://www.nist.gov/itl/ssd/software-quality-group/national-
software-reference-library-nsrl> y utilizar el parámetro -n y el
nombre de la librería (NSRLFile.txt).

Si queremos que sorter alerte si identifica un hash malicioso


agregamos el parámetro -a, cuando realiza esta comparación e
36 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

identifica un hash que esté referenciado en la librería NSRL genera


una entrada en el archivo alerts.txt

En el sitio de NIST se encuentan las instrucciones para procesar el


archivo NSRL.

Referencias:

man sorter
FORENSICS < HTTPS://DVIRUS.TRAINING/CATEGORY/FORENSICS/>

Análisis y recuperación de archivos con TSK < https://dvirus.training/2020/01/09/analisis-


y-recuperacion-de-archivos-con-tsk/>

By dvirus < https://dvirus.training/author/dvirus/>

9 enero, 2020 < https://dvirus.training/2020/01/09/analisis-y-recuperacion-de-


archivos-con-tsk/>

No hay comentarios < https://dvirus.training/2020/01/09/analisis-y-recuperacion-de-


archivos-con-tsk/#respond>

Introducción

En esta entrada veremos una breve introducción a las herramientas


que componen The Sleuth Kit para el análisis de imágenes forenses.

The Sleuth Kit o TSK, es un conjunto de herramientas de código


abierto para el análisis forense de imágenes de disco a través de línea
de comandos. TSK puede ser instalado en Windows o Linux.

37 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Preparación

Usaremos la versión 4 de TSK la cuál puede ser descargada desde el


sitio oficial http://www.sleuthkit.org/sleuthkit/download.php <
http://www.sleuthkit.org/sleuthkit/download.php>

Para la instalación en linux basta con ejecutar el siguiente comando

sudo apt install sleuthkit

Para el desarrollo de este ejercicio, hemos tomado una imagen


forense creada con dc3dd de un equipo con sistema operativo
Windows.

Iniciamos con la validación de la imagen forense, ejecutamos el


comando file para confirmar que se trata de una imagen de disco.

file Case01.raw

Importante: Antes de iniciar cualquier análisis forense se debe


validar la integridad del archivo para eso necesitamos el hash que se
generó durante la adquisición forense de los medios (creación de la
imagen), esta información generalmente está documentada en el
formato de cadena de custodia.

Validamos el hash, en este caso puntual nos suministraron un


SHA-1, el valor del hash deberá ser idéntico al documentado en la
cadena de custodia.

38 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

sha1sum Case01.raw

Análisis

Comenzaremos el análisis visualizando la tabla de particiones con el


comando fdisk (requiere privilegios) por eso anteponemos el
comando sudo.

sudo fdisk -l Case01.raw

En el caso de esta imagen encontramos 7 particiones, en la columna


start aparecerá el offset (inicio de la partición) debemos tener estos
offset presentes para las siguientes fases del análisis.

También podemos obtener un resultado similar con el comando


mmls que forma parte de Sleuth Kit

mmls Case01.raw

39 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

fsstat: El comando fsstat muestra el detalle del sistema de archivos,


allí podemos ver tamaño de los bloques, dirección del primer inodo,
los offsets (punto de inicio) y el tipo del sistema de archivo.

fsstat -o 2048 Case01.raw

El parámetro -o hace referencia al offset, es decir el sector en donde


se ubica el inicio del sistema de archivos.

40 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Ejecutamos fsstat sobre otro offset.

fsstat -o 3096576 Case01.raw

41 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

fls permite listar archivos y carpetas sobre una imagen incluyendo


aquellos archivos que hayan sido borrados (marcados con un *).

fls -o 3096576 -f ntfs Case01.raw

Si queremos ver únicamente carpetas agregamos el parámetro -D

fls -o 3096576 -f ntfs Case01.raw -D

Para ver únicamente archivos agregamos el parámetro -F

42 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

fls -o 3096576 -f ntfs Case01.raw -F

Con el parámetro -l obtenemos mayor nivel de detalle, incluyendo el


tipo de archivo, el inodo, el nombre del archivo, fecha de
modificación en la MFT, fecha de acceso del archivo, fecha de
modificación del archivo, fecha de creación del archivo, el tamaño
del archivo (bytes), el id de usuario y el id de grupo.

fls -o 3096576 -f ntfs Case01.raw -l

Si queremos listar la información de manera recursiva utilizamos el


parámetro -r , utilizamos | less para paginar la salida.

fls -o 3096576 -f ntfs Case01.raw -r | less

Si queremos listar una Carpeta específica, utilizamos el parámetro


-m y le indicamos la ruta desde donde debe listar, en este caso
43 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

usaremos la carpeta Archivos de Programa.

fls -o 3096576 -f ntfs -m "Archivos de Programa"


Case01.raw -r | less

Para nuestro propósito generaremos un archivo con el cual


crearemos una línea de tiempo

fls -o 3096576 -f ntfs Case01.raw -r -l -m "/" >


lista_archivos

si leemos el archivo generado mostrará un resultado como el que


observamos a continuación.

Con el comando mactime y el archivo generado con fls crearemos


nuestra linea de tiempo:

mactime -b lista_archivos > linea_de_tiempo

-b archivo de entrada

44 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Si queremos generar un archivo separado por comas agregamos el


parámetro -d, de esta forma se podrá leer el archivo con un programa
que procese hojas de cálculo.

mactime -b lista_archivos -d > timeline

Con el archivo generado y el uso de filtros con grep o awk y algunas


expresiones regulares podemos iniciar un análisis mas profundo de
lo que sucedió en el sistema de archivos

ils permite listar la información de los inodos o los indices de nodo.


Los inodos permiten acceder a un archivo en específico, cada
archivo tiene un inodo único.

Usando ils generaremos un archivo

ils -o 3096576 -m Case01.raw -e > lista_inodos

la opción -m exporta la salida en formato mac (modificación,

45 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

acceso, creación)

otras opciones adicionales a contemplar

-e: muestra todos los inodos


-p: Muestra inodos huérfanos

El archivo resultante se ve así

Este archivo contiene el inodo (número resaltado en rojo en la


imagen previa). De la misma forma podemos usar el comando
mactime para generar la línea de tiempo.

mactime -b lista_inodos

46 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Recuperación de Archivos

Con base en el archivo de inodos vamos a ver como se puede


recuperar un archivo borrado:

Tomamos uno de los inodos, en este caso el inodo 219264 que


pertenece al uno de los binarios de calc.exe que fue borrado del
sistema.

Ejecutamos el comando istat para visualizar la información del


inodo

istat -o 3096576 -f ntfs Case01.raw 219264

Obtenemos la propiedades del inodo

47 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Con el comando icat y el inodo recuperamos el archivo, en este caso


envío la salida del comando a una ruta y le coloco el nombre_inodo
para identificar más fácil el archivo.

icat -o 3096576 -f ntfs Case01.raw 219264 >


/home/dvirus/DFIR/calc_219264.exe

Validamos el archivo generado con el comando file, y efectivamente


es un archivo ejecutable PE32

file /home/dvirus/DFIR/calc_219264.exe

48 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Podemos utilizar el comando ffind para buscar el nombre del


archivo con base en el inodo.

ffind -o 3096576 -f ntfs Case01.raw 219264

Repetimos los comandos istat e icat con los inodos de interés.


Posterior a la recuperación podemos analizar los archivos
sospechosos con diversas técnicas de análisis de binarios las cuáles
explicaré en otra entrada.

Rerefencias:

http://www.sleuthkit. < http://www.sleuthkit.org/> org <


http://www.sleuthkit.org/> / < http://www.sleuthkit.org/>

File System Forensic Analysis, Brian Carrier <


https://www.amazon.com/-/es/System-Forensic-Analysis-Brian-
Carrier-ebook/dp/B016N80EZ8/>

Mastering FreeBSD and OpenBSD Security: Building, Securing,


and Maintaining BSD Systems , Yanek Korff <
https://www.amazon.com/-/es/Yanek-Korff-ebook/dp
/B00CLX8PK6/>

49 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

INCIDENT RESPONSE < HTTPS://DVIRUS.TRAINING/CATEGORY/INCIDENT-


RESPONSE/>

Respuesta a Incidentes – Correos Maliciosos < https://dvirus.training/2019/12/11/analisis-de-


correos-maliciosos/>

By dvirus < https://dvirus.training/author/dvirus/>

11 diciembre, 2019 < https://dvirus.training/2019/12/11/analisis-de-correos-


maliciosos/>

No hay comentarios < https://dvirus.training/2019/12/11/analisis-de-correos-


maliciosos/#respond>

Este artículo tiene como objetivo orientar a analistas de seguridad y

50 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

administradores de correo en la ejecución de algunos procedimientos


básicos ante incidentes de seguridad relacionados con correos
potencialmente maliciosos.

Preparación:

A continuación una serie de herramientas de extracción y análisis de


correos electrónicos, para esta serie de ejercicios usaremos como
sistema operativo base Debian, Ubuntu o Kali Linux.

Oledump

wget http://didierstevens.com/files/software
/oledump_V0_0_43.zip

Conversor de archivos msg a eml

sudo apt install libemail-outlook-message-perl


libemail-sender-perl

Detección

Los correos sospechosos generalmente son alertados por los


usuarios, en otros casos las herramientas de seguridad como
consolas de anti-spam o algunas funcionalidades de los UTM
(Unified Threat Management) pueden generar alertas de correos
sospechosos.

51 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Una vez detectado el correo electrónico, estos deben ser enviados


para análisis, la forma correcta es guardarlo y enviarlo como
adjunto. Reenviar el correo no es la acción más recomendada ya que
se modifican las cabeceras del correo electrónico.

Algunos indicadores a tener en cuenta para detectar correos


sospechosos:

Solicitudes para ejecutar acciones inmediatas


Descargar adjuntos
Dar clic en enlaces
Realizar operaciones financieras
Cambios de credenciales
Mala ortografía (cada vez menos frecuente)
Mensajes relacionados con algún premio (Ganador, Invitación
gratuita a X o Y evento)

Análisis

Las tareas que realizaremos a continuación son manuales y permiten


extraer y analizar elementos que permitan identificar si un correo es
malicioso o no. Es importante que los analistas de seguridad eviten
subir correos electrónicos o sus adjuntos a plataformas públicas de
análisis automático (sandbox) como VirusTotal o Any.Run ya que si
es un correo legítimo y este contiene información sensible, esta
quedará expuesta en estos portales de análisis públicos.

52 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Iniciaremos con un análisis básico de las propiedades del correo:

Verificamos el tipo de archivo que nos han suministrado.

file email.msg

file --mime email.msg

En este caso se trata de un archivo de outlook , bajo el estándar CDF


(Compound Document Format)

Si intentamos visualizar el archivo con un editor de texto aparecerá


algo como esto:

cat email.msg | more

53 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Para analizarlo con herramientas convencionales de Linux, vamos a


convertirlo a un formato estándar en este caso EML, el cuál nos
permitirá ver la información en texto claro.

msgconvert email.msg

Si la ejecución es exitosa obtendremos un nuevo archivo con


extensión .eml

ls -l email.*

Conservaremos los dos archivos ya que desarrollaremos el análisis


de dos formas, uno directamente sobre el archivo EML y otro sobre
el MSG

Análisis de Cabeceras (headers)

Las cabeceras de un correo contienen información particular del


correo electrónico incluyendo, el emisor, el receptor, fecha, hora,
asunto y algunos elementos del enrutamiento del correo electrónico.

cat email.eml | more

54 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Date: Contiene el día, fecha, hora y la zona horaria del mensaje.

Subject: Contiene el asunto del mensaje

From: El emisor o la dirección que envía el correo electrónico,


dentro de este campo podemos visualizar el nombre del emisor y la
cuenta de correo.

Received: Este campo nos muestra la dirección IP y el dominio


desde donde se emitió el correo electrónico, en este ejemplo vemos 3
secciones de Received, estos se leen con un orden cronológico de
abajo hacia arriba, siendo el de más abajo el correo original.

55 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Cada sección received contiene los siguientes elementos

from: Dominio y dirección IP desde donde se envía el correo

by: El servidor de correo realiza la entrega, en este caso puntual


vemos que es un servidor de correo de google.

with: El servicio utilizado para el envío generalmente vamos a


encontrar ESMTP o Microsoft SMTP,

id: El número de identificación del mensaje

Existen herramientas en línea para el análisis de cabeceras.

https://mxtoolbox.com/Public/Tools/EmailHeaders.aspx <
https://mxtoolbox.com/Public/Tools/EmailHeaders.aspx>

https://www.iptrackeronline.com/email-header-analysis.php <
https://www.iptrackeronline.com/email-header-analysis.php>

El análisis de cabeceras es de utilidad para la identificación de los


elementos principales del correo electrónico, validar que cuenta es la
envía realmente el correo, desde donde proviene y con estos

56 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

elementos validar listas negras como primera medida de contención.

Análisis del Cuerpo del Correo (Body)

Continuando con la lectura de el correo, posterior a las cabeceras


encontraremos una línea que hace referencia a los límites del correo
(boundary) este valor se encuentra en el objeto Content-Type.

Según el RFC-1341, este valor (boundary) hace referencia a un


correo con múltiples partes o secciones , es decir indica que el
correo electrónico consta de múltiples partes las cuales podemos
identificar con el código de límite.

El mensaje que estamos analizando contiene múltiples secciones que


hacen referencia al código de límite terminado en 11576.

57 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Es común que al visualizar los correos electrónicos encontremos


secciones codificadas, generalmente en base64 como se observa en
la siguiente imagen.

Si el correo no está codificado, podemos extraer otros elementos de


interés como URLs con un simple grep o mediante el uso de
expresiones regulares

cat email.eml | grep http --color

Sin embargo, lo más probable es que el cuerpo del mensaje al igual


que los adjuntos vengan codificados.

58 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Para leer el contenido ofuscado simplemente copiamos el texto


codificado en base64 y lo de-codificamos haciendo uso de
herramientas como CyberChef o a través del comando base64

https://gchq.github.io/CyberChef/ < https://gchq.github.io


/CyberChef/>

base64 -d encoded.text

Análisis de Adjuntos

A continuación veremos el análisis de correos con un mayor nivel de


profundidad.

Utilizaremos la herramienta oledump.py, un script en python

59 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

desarrollado por Didier Stevens < https://twitter.com


/DidierStevens> la cual permite analizar objetos en formato OLE
(Object Linking and Embedding), un protocolo desarrollado por
Microsoft utilizado principalmente para hacer referencia a archivos
adjuntos o embebidos.

Ejecutamos el script oledump.py y le pasamos como parámetro el


correo electrónico en formato .MSG

oledump.py email.msg

La ejecución del comando nos arroja la siguiente información, la


primera columna corresponde al ID de cada elemento impresos en
orden ascendente, en la segunda columna aparece el indicador de
estado, generalmente es ‘M’ o ‘m’ lo cual indica que el stream o
elemento contienen una macro o código VBA (Visual Basic for
Applications). En algunos casos veremos la letra E que indica la
existencia de código VBA corrupto.

60 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

En este caso, oledump ha detectado una macro en el stream número


4, antes de analizarla veremos algunos plugins de utilidad a la hora
de analizar correos electrónicos.

oledump.py email.msg -p /home/dvirus/DFIR/email


/plugin_msg.py | more

Le pasamos a oledump un parámetro adicional (-p) que hace


referencia a un plugin, en mi caso la ruta que aparece en el comando
previo, es la ruta donde descargué y descomprimí el instalador de
oledump.

El plugin MSG permite extraer elementos de los mensajes de


outlook, incluyendo el nombre del adjunto, la codificación, e incluso
información que se aloja en las cabeceras del mensaje.

Otro plugin de utilidad para este caso es plugin_vba_dco.py el cuál


nos muestra algunas funciones utilizadas por el código malicioso.

oledump.py email.msg -p /home/dvirus/DFIR/email


61 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

/plugin_vba_dco.py

De esta forma confirmamos la existencia de un script VBA

Ahora analizaremos el stream #4 el cual contiene código VBA,


pasamos el parámetro -s4 para hacer referencia al stream de interés.

oledump.py email.msg -s4 | more

62 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

El resultado muestra algunas cadenas interesantes, sin embargo,


debido a que el VBA se mostraba como corrupto vamos a pasar un
parámetro para ver con mayor claridad la macro.

oledump.py email.msg -s4 --vbadecompresscorrupt

El resultado nos arroja el código embebido en el documento de word


adjunto al correo electrónico.

Con estos pasos hemos confirmado información sobre el adjunto y la


existencia de código VBA.

Extraemos el archivo adjunto, en este caso el archivo .doc que

63 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

identificamos previamente, le pasamos a oledump el parametro -d


(dump) y lo redirigimos a un archivo con el nombre que observamos
previamente, puede ser cualquier nombre.

oledump.py -s4 -d email.msg > "Your Invoice.doc"

Validamos las caracteristicas del archivo exportado para comprobar


que el proceso sea correcto.

file Your\ Invoice.doc

Al analizar el resultado observamos que efectivamente hemos


exportado un documento de word de una página y 6 palabras,
bastante sospechoso.

Ejecutamos nuevamente oledump sobre el archivo extraído y


obtenemos nueva información.

64 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Los streams 6 y 7 nos muestran la letra M, lo cual hace referencia a


las macros, mientras que el stream 8 muestra la letra m lo que indica
la existencia de atributos de una macro. Nuestro interés se centra en
los streams 6 y 7.

oledump.py -s6 Your\ Invoice.doc | more

Usando el plugin vba_dco para visualizar propiedades del


documento.

oledump.py Your\ Invoice.doc -p /home/dvirus


/DFIR/email/plugin_vba_dco.py

65 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Exportamos los scripts sobre los streams 6 y 7 respectivamente.

oledump.py -s6 -v Your\ Invoice.doc >


Yacjrozanb.vba

oledump.py -s7 -v Your\ Invoice.doc >


Zzjcjvohytfm.vba

Obtenemos 2 archivos los cuales nombré con base en el nombre de


cada stream

Al visualizar los archivos obtendremos el código que debemos


analizar, pero el análisis de los scripts JS no forman parte de este
artículo.

66 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

Por ahora generamos un hash de cada script

sha256sum *.vba

Contención

Si confirmamos que el correo es malicioso podemos generar los


siguientes IOCs (Indicadores de Compromiso)

Direcciones IP
Nombres de dominio
Cuentas de correo
Hash del archivo word
Hash de los archivos VBA

Acciones a desarrollar:

Búsqueda de correos entregados en los buzones por asunto o


remitente para identificar a las posibles victimas
Bloqueo en el antispam y servidor de correo de las cuentas y

67 of 68 1/25/20, 3:45 PM
D-Virus | DFIR – Incident Response | Network Fo... https://dvirus.training/

dominios de riesgo.
En los firewalls y proxies, bloqueo de URLs maliciosas para
evitar el acceso o descarga de archivos.

Referencias

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html <
https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html>

oledump.py < https://blog.didierstevens.com/programs/oledump-


py/>

© 2020 D-Virus | DFIR < Powered by WordPress < To the


https://dvirus.training/> https://wordpress.org/> top ↑

68 of 68 1/25/20, 3:45 PM

S-ar putea să vă placă și