Está en la página 1de 54

TO ARGEN

CI T

IN
EJÉ

O
ESC

CA
NI
UE
LA

C
SU P TÉ
ERIOR

ESCUELA SUPERIOR TÉCNICA


DEPARTAMENTO DE POSTGRADO

Adquisición e identificación de

información forense en

memoria (y en volcados).

Tutor: Pablo Croci

Alumno: Mariano Messina


Carrera de Especialización en Criptografía y Seguridad en Redes Teleinformáticas

8 de Agosto del 2017


Tabla de Contenido
Prefacio ......................................................................................................................................3
Antecedentes .............................................................................................................................5
Desarrollo ...................................................................................................................................7
La memoria y su básico funcionamiento.........................................................................7
Archivos Pagefile.sys e Hiberfil.sys ...............................................................................10
Acceder y adquirir la memoria RAM .............................................................................13
Adquisición de RAM en unidad externa: Memoryze.....................................................15
Adquisición de RAM en unidad externa: FTK Imager ....................................................17
Adquisición de cadenas de caracteres (strings) en unidad externa ..............................19
Adquisición de RAM a unidad de red ............................................................................21
Adquirir archivo Hiberfil.sys..........................................................................................22
Adquirir archivo PageFile.sys ........................................................................................25
Análisis en búsqueda de información relevante ...........................................................28
Análisis Automático – Eureka! ......................................................................................33
Conclusión ................................................................................................................................42
Anexo I - Eureka.py – The Forensics OpenSource Tool .............................................................43
Bibliografía ...............................................................................................................................52

2
Prefacio

En múltiples oportunidades he realizado ethical hacking en diversas aplicaciones con la

finalidad de evaluar la seguridad de las mismas para luego, mejorarla. Con el fin de lograr el

objetivo he utilizado diversas técnicas, sin embargo, siempre que sea posible me encuentro

cautivado en analizar un lugar en particular, pero que por las particularidades que presenta, se

torna desafiante poder realizarlo en plazos cortos y con calidad en los resultados.

Este lugar es la memoria RAM del computador. Allí dentro, es posible encontrar mucha

información en texto claro, la cual me ha permitido alcanzar diferentes impactos durante las

evaluaciones de seguridad en aplicaciones. Entre ellos, la información que se encuentra

almacenada en la RAM me ha permitido escalar privilegios, ganar acceso no autorizado y

también conseguir información sensible, entre otros.

Cursando la materia “Forensia Informática Aplicada” de la Escuela Superior Técnica, en varias

oportunidades indagamos en cómo recabar datos de diversas fuentes para ser analizados en

una investigación forense digital en búsqueda de elementos probatorios. No obstante,

nuestros respetables educadores en varias oportunidades mencionaron los desafíos que

existen al momento de realizar la actividad en la memoria RAM de un computador,

principalmente debido a lo costosas que son las herramientas que realizan la actividad de

forma automática y también, debido al volumen de información que se puede encontrar en

ella si se prefiere una revisión manual.

3
Tales premisas son las que me llevan a desarrollar el presente trabajo descriptivo, de forma tal

que se detallen cuáles son los pasos necesarios para obtener una copia de la memoria en un

archivo físico, para que luego sea evaluado por un investigador o auditor en la búsqueda de

evidencia durante un proceso judicial, o una auditoría.

Adicionalmente, se pretende también abordar la problemática mediante el desarrollo de una

herramienta open source que identifique elementos de chats de Facebook, correos

electrónicos, direcciones de email, direcciones URL y lenguaje en archivos de volcado de

memoria..

La herramienta open source utilizará una técnica para detectar lenguaje que también puede

ser utilizada cuando se trata de quebrar algoritmos de transposición de caracteres (en

criptografía). El objetivo es identificar información con alta probabilidad de ser lenguaje

humano dentro de la memoria del computador.

4
Antecedentes

Investigadores forenses utilizan distintas técnicas de identificación y recopilación de

información durante un proceso judicial o auditoría. Comúnmente, y teniendo en

consideración el caso particular que se esté analizando en un momento determinado, los datos

deben ser obtenidos, analizados y resguardados de forma apropiada y protegida, sin olvidar de

mantener una apropiada cadena de custodia.1

En el pasado, la información referida a la navegación web por parte de los usuarios, y que

pudiera resultar evidencia en un proceso judicial, se podía obtener mediante su búsqueda en

el caché de los navegadores, el historial, o en archivos físicos del computador. Sin embargo, el

avance de la tecnología, de la criptografía y de los requerimientos de seguridad en las

aplicaciones logra que resulte desafiante para los investigadores forenses la obtención de

elementos probatorios ya que los datos no se encuentran siempre presente en dichos

contenedores.

El presente trabajo de integración de conocimientos adquiridos durante la cursada de la

“Especialización en Criptografía y Seguridad Teleinformática”, de investigación y desarrollo

propio, es de analizar la memoria en sistemas operativos Windows para determinar la

existencia de elementos que pudieran ser evidencia durante un proceso judicial. A su vez,

debido a que el volumen de información en la memoria es amplio y, debido a que las

características propias de la memoria y de la asignación del espacio hace difícil de analizar su

1
Messina, Mariano: Aplicabilidad metodológica de la informática forense en la obtención de resultados
eficientes en procesos judiciales argentinos, 7 de Diciembre del 2012, http://www.segu-
info.com.ar/tesis/

5
contenido en corto tiempo y con calidad, se pretende crear una herramienta open source que

logre asistir a investigadores en la obtención e identificación de evidencia en archivos de

volcado de memoria durante un proceso forense digital.

La herramienta open source realizará de forma automática la identificación de elementos y

estructuras correspondientes a chats de Facebook, correos electrónicos, direcciones de email,

direcciones URL y texto en archivos de volcado de memoria.

Por último, durante la investigación y desarrollo del presente trabajo se ha determinado que

los datos de diversas aplicaciones son alojados en memoria en forma de texto, sin guardar

relación alguna con el sitio web accedido por parte del usuario, o de la aplicación que se

encuentre abierta al momento de realizar la adquisición de memoria. Por lo tanto, a fin de

detectar texto o lenguaje (español o inglés) dentro de archivos de gran volumen,

pertenecientes a volcados de memoria, la herramienta de código abierto (Open Source)

utilizará una técnica para detectar lenguaje humano. La técnica, también puede ser utilizada

para determinar si el resultado es válido o no al momento de quebrar algoritmos de

trasposición de caracteres (en criptografía). El objetivo es identificar de forma automática

información con alta probabilidad de ser lenguaje humano dentro de la memoria del

computador para su posterior análisis por parte del perito.

6
Desarrollo

La memoria y su básico funcionamiento.

La memoria de un computador es un dispositivo físico, compuesto por un circuito integrado

con capacitores y resistencias, cuya principal función es la de retener datos informáticos por un

período de tiempo determinado. Si bien existen múltiples tipos de memoria, a fines prácticos

en el presente trabajo se consideran la Memoria de Acceso Aleatorio (o Random Access

Memory, RAM) y la Memoria Virtual. 2

“Una memoria RAM, entonces, es un dispositivo que se utiliza para el manejo de datos e

información circunstancialmente con programas y softwares. Esta memoria permite el

funcionamiento de dichas aplicaciones y, una vez, apagado o interrumpido el funcionamiento

del sistema, la información se pierde, ya que a menudo no se trata de archivos o datos

guardados por su relevancia, sino simplemente de datos necesarios para el desempeño del

software en cuestión.” (Bembibre, 2009)

La memoria RAM además de ser volátil por lo anteriormente expuesto, cuenta con otra

particularidad. La memoria de acceso aleatorio se caracteriza por permitir el acceso a cualquier

parte de la misma con el mismo tiempo para cualquier posición. Es decir que no hace falta un

2
RedUsers: Técnico PC: Uso de la memoria RAM, 3 de Agosto del 2012,
http://www.redusers.com/noticias/tecnico-pc-funcionamiento-de-la-memoria-ram/

7
modo en particular (por ejemplo una lectura secuencial) para acceder a cualquier posición en

el menor tiempo posible. 3

La asignación y referencia de la memoria RAM para las aplicaciones y los datos es tarea de los

sistemas operativos. Microsoft Windows por ejemplo siempre referencia la memoria RAM a

través de direcciones de memoria virtuales (exceptuando por algunos módulos propios del

kernel).

Figura 1 - Ejemplo de múltiples direcciones virtuales compartiendo la memoria física y el disco.


Fuente: The Art of Memory Forensics - Detecting Malware and Threats in Windows, Linux, and Mac
Memory

A fin de proteger los componentes críticos del sistema operativo de forma tal que las

aplicaciones maliciosas, los usuarios mal intencionados o el mal funcionamiento afecten su

comportamiento, se implementan controles que establecen privilegios de usuario o de kernel,

cada uno de manera aislada.

3
CCM: Memoria de acceso aleatorio (memoria RAM o PC), Julio de 2017,
http://es.ccm.net/contents/398-memoria-de-acceso-aleatorio-memoria-ram-o-pc

8
Los privilegios se implementan mediante el uso de cuatro diferentes niveles (comúnmente

llamados “protection rings”). En la mayoría de los sistemas operativos, el modo kernel

corresponde al anillo 0 (ring 0), siendo el más privilegiado. El modo usuario utiliza el anillo 3

(ring 3) y es el que cuenta con el menor de los privilegios.

El nivel del anillo establece qué tipo de acciones u operaciones se pueden realizar en el sistema

y, para que una aplicación de usuario pueda acceder a componentes críticos (kernel) del

sistema operativo, la aplicación debe utilizar llamadas de sistema (system calls) 4 que se

encuentran disponibles en forma de APIs (Application Programming Interface). Es mediante el

uso de las APIs que es posible cambiar de modo usuario a modo kernel. 5

Por otra parte, los sistemas operativos modernos a fin de proteger el espacio de memoria de

las aplicaciones contra ataques que pudieran afectar la confidencialidad, integridad y

disponibilidad de la información almacenada, aplican diversos mecanismos de seguridad con el

objetivo de mitigar6 la explotación de vulnerabilidades en el sistema.

En Microsoft Windows, ASLR (Address Space Layout Randomization) es una técnica de

seguridad en la cual la memoria de los procesos (incluyendo la base del ejecutable y las

posiciones del heap, stack y las librerías) se asigna de forma aleatoria. De esta forma, ASLR

4
Las system calls son funciones de bajo nivel disponibles en el sistema operativo a través de APIs, por
ejemplo, los archivos ntdll.dll y kernel23.dll en Windows.
5
Michael Hale Ligh, Andrew Case, Jamie Levy, Aaron Walters: The Art of Memory Forensics - Detecting
Malware and Threats in Windows, Linux, and Mac Memory, 2014
6
Existen técnicas de evasión a las protecciones de los sistemas operativos, por ejemplo: Bypassing
ASLR/DEP, https://www.exploit-db.com/docs/17914.pdf

9
hace que el espacio de memoria sea impredecible para un atacante, mitigando los ataques de

corrupción de memoria (como los stack o heap buffer overflows).7

Archivos Pagefile.sys e Hiberfil.sys

Debido a que la memoria RAM cuenta con una capacidad limitada para el almacenamiento de

información de forma volátil, los sistemas operativos utilizan la memoria virtual para

almacenar ciertos datos en el disco duro. De esta forma, cuando una aplicación requiere

memoria RAM y la misma no cuenta con los recursos suficientes para satisfacer la demanda, la

memoria virtual utiliza el espacio libre del disco duro para almacenar páginas de la RAM en su

interior.

“En los sistemas Windows, estas páginas "paginadas" se almacenan en uno o más archivos

(archivos Pagefile.sys) en la raíz de una partición.” (Microsoft, 2017)

Las páginas de la memoria es una división o partición de la memoria en segmentos de (por

defecto) 4k. Por lo tanto, los datos podrían estar divididos y esparcidos en diferentes espacios

de la memoria. 8

Es tarea del sistema operativo volver a ensamblar la información de forma tal que guarde

sentido para las aplicaciones y los usuarios. Este fenómeno creado por la paginación (y

7
Michael Howard, Matt Miller, John Lambert and Matt Thomlinson: Windows ISV Software Security
Defenses, Diciembre del 2010, https://msdn.microsoft.com/en-us/library/bb430720.aspx
8
Microsoft Support: RAM, memoria virtual, archivo de paginación y administración de memoria en
Windows, 27 de Julio del 2017, https://support.microsoft.com/es-es/help/2160852/ram,-virtual-
memory,-pagefile,-and-memory-management-in-windows

10
también por los mecanismos de seguridad anteriormente mencionados) de la memoria agrega

complejidad a los investigadores al momento de analizarla en búsqueda de información

relevante a la investigación, ya que los datos pueden no estar almacenados en forma

secuencial en el espacio de memoria (RAM o virtual). 9

Si bien los datos pueden encontrarse divididos y esparcidos a lo largo del espacio de la

memoria, al momento de realizar una adquisición un investigador forense, o auditor, debe

tener en consideración que las estructuras de memoria pueden variar dependiendo de la

versión y el tipo de sistema operativo. Inclusive, las estructuras también podrían variar

dependiendo del nivel de parches instalados en el sistema a analizar. 10

Por otra parte, algunos dispositivos (por ejemplo una notebook) cuentan con funcionalidades

que brindan flexibilidad al usuario al contar con poca energía eléctrica o al momento de

transportar el dispositivo hacia una ubicación diferente. Por ejemplo, Microsoft Windows

cuenta con funcionalidades de “Hibernación”, lo que permite cortar el suministro de energía a

diversos componentes del sistema de forma tal que al reactivar el suministro, las aplicaciones

vuelvan al estado en que se encontraban antes de entrar en dicho modo.

“El equipo utiliza el archivo Hiberfil.sys para almacenar una copia de la memoria del sistema en

el disco duro cuando se activa la suspensión híbrida.” (Microsoft, 2017)

9
Si bien existen dos mecanismos de gestión de memoria (segmentación y paginación) a fines prácticos
se omite mencionar la segmentación de memoria. Para mayor referencia de por qué se omite
mencionar la segmentación, referirse a la página 9 del libro The Art of Memory Forensics - Detecting
Malware and Threats in Windows, Linux, and Mac Memory
10
SANS DFIR: Digital Forensics How-To: Memory Analysis with Mandiant Memoryze, 08 de Noviembre
de 2010, https://digital-forensics.sans.org/blog/2010/11/08/digital-forensics-howto-memory-analysis-
mandiant-memoryze

11
La memoria RAM y los archivos Pagefile.sys e Hiberfil.sys corresponden entonces a diferentes

contenedores que alojan datos utilizados por el sistema operativo y aplicaciones para su

funcionamiento. Cada uno de estos contenedores deben ser adquiridos y analizados por los

investigadores a fin de encontrar información que pudiera ser considerada evidencia en un

proceso judicial o auditoría, sin embargo, y tal como se verá más adelante, cada uno de ellos

cuenta con alguna particularidad que un analista debe tener en cuenta al momento de realizar

la adquisición y posterior análisis.

Antes de adquirir la memoria física de un sistema objetivo, el investigador debe ser consciente

que existe el riesgo de alterar o contaminar la información almacenada en el computador. La

contaminación se puede producir debido a que muchos sistemas operativos no cuentan con

funcionalidades nativas que soporten la adquisición de la memoria con los recaudos suficientes

para no alterar su contenido. Por ello, el investigador estará utilizando el sistema de una forma

no esperada; el investigador debe comunicar el riesgo y justificar la decisión de adquirir la

memoria física a las autoridades correspondientes.11

A continuación, se detallan algunos métodos de adquisición y análisis de los contenedores en

búsqueda de información útil para un investigador o auditor.

Michael Hale Ligh, Andrew Case, Jamie Levy, Aaron Walters: The Art of Memory Forensics - Detecting
11

Malware and Threats in Windows, Linux, and Mac Memory, 2014

12
Acceder y adquirir la memoria RAM

Para acceder a los datos almacenados en la memoria RAM en un momento determinado se

utilizan aplicaciones que adquieren la misma en formato crudo (raw). Si bien la memoria puede

ser analizada en tiempo real, también se puede guardar una copia de su contenido en un

archivo, para luego ser analizada en mayor detalle. En el presente trabajo, se centrará en la

adquisición de memoria en un sistema operativo Microsoft Windows.

Una herramienta que se puede utilizar para analizar la memoria en tiempo real es la versión

gratuita de WinHex12. Al instalar la herramienta, el investigador podrá acceder a los datos

almacenados en memoria y visualizar su contenido en tiempo real. A continuación se muestra

una imagen en la que se puede apreciar el contenido de la memoria utilizada por la aplicación

‘Firefox’ en un sistema Windows, utilizando WinHex.

Figura 2 - Imágen de información en texto plano en memoria. Fuente:


http://searchenterprisedesktop.techtarget.com/tip/Find-Windows-vulnerabilities-with-a-hex-editor

12
El software puede ser descargado desde: https://www.x-ways.net/winhex/

13
Si el investigador debe analizar un sistema que forma parte de un ambiente virtual, la

metodología de adquisición a utilizar será distinta dependiendo del escenario con el que el

investigador se encuentre. A continuación se muestra una imagen del proceso (en alto nivel) de

adquisición de memoria, teniendo también en consideración las máquinas virtuales:

Figura 3 - Diagrama de alto nivel de metodología a seguir en adquisiciones de memoria. Fuente: The
Art of Memory Forensics - Detecting Malware and Threats in Windows, Linux, and Mac Memory

En un procedimiento judicial en dónde se debe analizar la memoria de un sistema encendido, se

recomienda la ejecución de herramientas que almacenen una imagen de la memoria en una

unidad extraíble o en una unidad remota (utilizando la red o Internet). Una vez obtenida la

imagen, es tarea del investigador forense calcular los hashes correspondientes, mantener una

cadena de custodia apropiada y tener en cuenta los pasos necesarios para evitar la invalidación

14
de la evidencia durante un proceso judicial.13 Luego, se debe proceder a analizar la muestra en

un laboratorio.

Se debe destacar que no se recomienda en absoluto almacenar el volcado (o imagen) de la

memoria de forma directa en el sistema operativo que se encuentra examinando durante un

proceso judicial o auditoría. La razón es debido a que se podrían sobrescribir muchos datos que

pueden resultar evidencia (por ejemplo, el slack space). 14

Adquisición de RAM en unidad externa: Memoryze

Los pasos para adquirir una imagen de la memoria de un sistema Windows utilizando la herramienta

‘Memoryze’, son los siguientes: 15

- Descargar e instalar la herramienta ‘Memoryze’ en un dispositivo de almacenamiento USB. 16

El siguiente comando realiza la instalación de la herramienta en un pendrive USB:

msiexec /a MemoryzeSetup.msi /qb TARGETDIR=Unidad_USB_y_Directorio

- Al finalizar la instalación en la unidad USB, se debe conectar el mismo en el sistema objetivo.

Luego, abrir en modo administrador una consola en Windows y ejecutar el siguiente comando

(suponiendo que la unidad extraíble USB sea G:):

13
Messina, Mariano: Aplicabilidad metodológica de la informática forense en la obtención de resultados
eficientes en procesos judiciales argentinos, 7 de Diciembre del 2012, http://www.segu-
info.com.ar/tesis/
14
Michael Hale Ligh, Andrew Case, Jamie Levy, Aaron Walters: The Art of Memory Forensics - Detecting
Malware and Threats in Windows, Linux, and Mac Memory, 2014
15
SANS DFIR: Digital Forensics How-To: Memory Analysis with Mandiant Memoryze, 08 de Noviembre
de 2010, https://digital-forensics.sans.org/blog/2010/11/08/digital-forensics-howto-memory-analysis-
mandiant-memoryze
16
El freeware se puede descargar desde: https://www.fireeye.com/services/freeware/memoryze.html

15
G:\memoryze\MemoryDD.bat —output G:\images

- Memoryze realizará la adquisición y una vez finalizado el proceso, se debe corroborar que la

imagen de memoria se encuentra almacenada de forma correcta. Para ello, se deberá

acceder al directorio definido por el comando ‘output’ utilizado en el paso anterior y

revisar que la información ha sido respaldada de forma correcta. La ruta de los archivos

almacenados en el ejemplo anterior es:

G:\images\Audits\[Machine Name]\[Date/Time of Acquisition]

Figura 4 - Ejemplo de una imagen de Memoria utilizando Memoryze

- Por último, se deberán calcular los hashes correspondientes, se debe actualizar la cadena de

custodia y también resguardar la evidencia de forma apropiada.

16
Adquisición de RAM en unidad externa: FTK Imager

También es posible utilizar la herramienta “FTK Imager” desde una unidad extraíble (por ejemplo, una

unidad de almacenamiento masivo USB) en un sistema encendido para la adquisición forense de la

memoria.17

Al momento de realizar la adquisición, el investigador forense debe ser consciente de los riesgos de

utilizar FTK Imager desde una unidad extraíble en un sistema encendido. La herramienta puede alterar el

contenido de la memoria RAM, así como también puede modificar las referencias de la memoria virtual.

En un sistema encendido, los pasos necesarios para realizar la adquisición de la memoria RAM y guardar

su contenido en un en un medio extraíble, son los siguientes:

- Asegurar la existencia de espacio libre suficiente en el medio extraíble para almacenar la captura

de la memoria en su interior.

- Copiar los archivos de “FTK Imager” en la unidad extraíble.18

- Conectar la unidad extraíble en un sistema que se desee adquirir la memoria RAM.

- Localizar el botón “Capture Memory” y hacer click en él.

17
Brendan, Bone: Run FTK Imager from A Flash Drive (Imager Lite), 23 de Febrero del 2015,
https://support.accessdata.com/hc/en-us/articles/203681809-Run-FTK-Imager-from-a-flash-drive-
Imager-Lite-
18
Brendan, Bone: Run FTK Imager from A Flash Drive (Imager Lite), 23 de Febrero del 2015,
https://support.accessdata.com/hc/en-us/articles/203681809-Run-FTK-Imager-from-a-flash-drive-
Imager-Lite-

17
- A continuación, se debe elegir la unidad externa en la cuál se desea almacenar la captura de la

memoria. Se recomienda cambiar el nombre del fichero de forma tal que guarde relación con la

evidencia adquirida, incluyendo además su respectiva numeración y nombre del caso de

referencia, dependiendo de la metodología de etiquetado que esté utilizando el investigador o

auditor.

Figura 5 - Captura de Memoria utilizando FTK Imager. Si bien también se puede obtener el archivo
“Pagefile.sys” al momento de realizer la captura de memoria, se recomienda la previa lectura de la
sección “Adquirir archivo PageFile.sys” del presente documento.

- Realizar click en botón “Capture Memory”. El proceso de captura dará comienzo y una vez

finalizado se debe revisar la ubicación a fin de asegurar que el tamaño del archivo condice con el

total de memoria utilizada por el sistema. Por ejemplo:

18
Figura 6 - Captura de Memoria almacenada en disco extraíble

- Por último, se debe calcular los hashes necesarios, mantener una apropiada cadena de custodia

y resguardar la evidencia de forma apropiada.

Adquisición de cadenas de caracteres (strings) en unidad externa

Es posible obtener todas las cadenas de caracteres (strings) alojadas en memoria de una aplicación que

se encuentra ejecutando al momento de la adquisición de un sistema encendido mediante su número

de proceso (PID); un investigador forense o auditor puede utilizar la herramienta “strings2” para realizar

la adquisición de las cadenas de texto y guardar su resultado en un archivo de un medio extraíble.

Mediante el número de proceso (“Process ID”) correspondiente al programa en ejecución, “strings2” es

capaz de obtener todas las cadenas de texto cargadas en memoria mientras la aplicación se encuentra

ejecutando, sin importar si las cadenas se encuentran en formato codificado ASCII o Unicode.19

La sintaxis de ejecución es:

strings2 –pid [número_del_Proceso] > dump_strings_Memoria.txt

19
Lenny Zeltser: Tools for Analyzing Static Properties of Suspicious Files on Windows, 04 de Marzo del
2014, https://digital-forensics.sans.org/blog/2014/03/04/tools-for-analyzing-static-properties-of-
suspicious-files-on-windows

19
Utilizando comando del ejemplo anterior, podremos observar que dentro del archivo

“dump_strings_Memoria.txt” se encontrarán las cadenas de textos correspondientes al número de

proceso de referencia:

Figura 7 - Resultado de obtener cadenas de caracteres de un proceso utilizando Strings2

Por otra parte, también se puede utilizar la herramienta “strings2” para buscar las cadenas de texto en

las capturas de memoria adquiridas por el investigador. Por ejemplo, la siguiente imagen muestra la

ejecución de “strings2” utilizando el archivo correspondiente a la captura de la memoria RAM con “FTK

Imager”, explicada en la sección anterior:

20
Figura 8 - Utilizando "strings2" se pueden obtener los strings de una captura de memoria

En la sección “Análisis en búsqueda de información relevante” se detalla cómo analizar un archivo

obtenido con la herramienta “Strings2” a fin de identificar determinadas estructuras, que pudieran

resultar en evidencia.

Adquisición de RAM a unidad de red

Una forma básica de adquisición de memoria a través de la red es mediante la utilización de la

herramienta “PsExec”20. El inconveniente es que la información enviada a través de PsExec y su

20
Para mayor referencia de la herramienta PsExec, visitar: http://technet.microsoft.com/en-
us/sysinternals/ bb897553.aspx

21
respectivo “listener” no se encuentra cifrada. Por lo tanto, información sensible podría transmitirse a

través de canales inseguros, lo que podría comprometer la confidencialidad y/o integridad de la

evidencia en tránsito.

Windows Server 2012 cuenta con Server Message Block (SMB) 3.0 cuya implementación soporta cifrado

en la comunicación entre el emisor y el receptor. No obstante, también existen herramientas

comerciales que soportan el envío de las imágenes de memoria a través de la red en forma cifrada.21

Adquirir archivo Hiberfil.sys

Tal como fue mencionado anteriormente, el archivo hiberfil.sys es utilizado por el sistema operativo

Windows para almacenar en disco una copia completa de la memoria al momento de entrar en modo

hibernación. Al archivo “hiberfil.sys” se lo puede encontrar en la raíz de la unidad en dónde se

encuentra instalado el sistema operativo, generalmente se aloja en: “C:\hiberfil.sys”.

Asumiendo que los pasos necesarios para realizar una copia forense del disco completo del sistema

objetivo (tomando los recaudos necesarios para evitar contaminar la evidencia durante los mismos), el

correcto tratamiento de la cadena de custodia y el resguardo apropiado de la evidencia han sido

realizados, se detallan los pasos necesarios para extraer el archivo hiberfil.sys de una imagen cruda

(raw) de un sistema:

Michael Hale Ligh, Andrew Case, Jamie Levy, Aaron Walters: The Art of Memory Forensics - Detecting
21

Malware and Threats in Windows, Linux, and Mac Memory, 2014

22
1) Encontrar el sector inicial de la partición primaria de la imagen del disco utilizando el comando

“fdisk -l <Nombre_imagen>.dd” (sin comillas).

2) En el resultado de la ejecución del comando se podrán ver las distintas particiones que contiene

la imagen forense. La de mayor tamaño debiera ser la de nuestro interés; tomamos nota del

inicio de la partición (start).

3) Utilizaremos el comando “fls”22 junto con el número del sector inicial de la partición primaria

con la finalidad de buscar el archivo hiberfil.sys. El comando completo a ejecutar sería de la

siguiente forma: “fls -o [número_sector_inicial] | grep “hiberfil.sys””

Figura 9 - Ejemplo de búsqueda de archivo hiberfil.sys en imágen forense. Fuente:


http://digitalresidue.blogspot.com.ar/2016/06/memory-acquisitions-memoryze-ftk-imager.html

4) La ejecución del comando del paso anterior brindará el número de inodo del archivo hiberfil.

Este número será utilizado como parámetro en el comando “icat”23 a fin de extraer el espacio

asignado al archivo completo en la imagen forense. El comando completo es:

“icat -o [número_sector_inicial] [número_inodo] > [ruta_de_almacenamiento]”.

A continuación se muestra la ejecución del comando y su respectivo resultado:

22
El comando “fls” lista los nombres de archivos y directorios en imágenes forenses. Para mayor
información del comando “fls”, referirse a: http://www.sleuthkit.org/sleuthkit/man/fls.html
23
El comando “icat” obtiene el contenido de un archivo utilizando su número de inodo como
parámetro.

23
Figura 10 - Ejemplo de extracción de archivo hiberfil.sys de una imagen forense. Fuente:
http://digitalresidue.blogspot.com.ar/2016/06/memory-acquisitions-memoryze-ftk-imager.html

5) El archivo recuperado mediante los pasos anteriores se encuentra en formato no procesado

(raw). Volatility Framework puede ser utilizado a partir de este paso para poder realizar el

análisis del contenido del mismo.

Por otra parte, el investigador o auditor puede también utilizar herramientas disponibles en sistemas

operativos Windows para extraer de una imagen no procesada (raw) el archivo hiberfil.sys.

FTK Imager free puede ser utilizado para agregar la imagen no procesada (raw) como ‘Image file’. Una

vez cargada la imagen en FTK, se debe navegar a la unidad raíz del disco (generalmente c:\) para extraer

el archivo hiberfil.sys mediante de la funcionalidad ‘export’ de FTK Imager.

24
El archivo hiberfil.sys es un archivo oculto en el sistema operativo. Por lo tanto, para poder visualizarlo,

se debe activar la visualización de los archivos ocultos en el explorador de Windows. Es posible

habilitarlo desde la siguiente ubicación: Panel de control -> Opciones de Carpeta -> Vista. 24

Adquirir archivo PageFile.sys

Anteriormente se ha mencionado que el archivo “PageFile.sys” es utilizado para almacenar páginas de

memoria en disco con la finalidad de gestionar de manera eficiente los recursos de la memoria RAM. Por

defecto en un sistema operativo Windows, el archivo “PageFile.sys” se encuentra almacenado en la raíz

de la unidad local del disco duro. Por ejemplo, podría encontrarse en la ruta “C:\pagefile.sys”.

No obstante, podría suceder que la ruta al mismo haya sido alterada a fin de almacenar diversos

archivos pagefile.sys en un directorio distinto al por defecto, por lo tanto, se recomienda revisar la

entrada de registro “HKLM\System\CurrentControlSet\Control\Session Manager\Memory

Management\PagingFiles” con el fin de determinar la cantidad de archivos y la ubicación exacta de cada

uno de ellos antes de comenzar con la extracción. 25

24
Dan Doonan, Catherine Stamm: Volatility: Part 2 – Malware in hiberfil.sys, 4 de Diciembre del 2012,
http://www.champlain.edu/Documents/LCDI/archive/Volatility-Report-Part-2.pdf
25
CC Hameed: Microsoft Ask the Performance Team Blog, What is the Page File for anyway?, 14 de
Diciembre de 2007, https://blogs.technet.microsoft.com/askperf/2007/12/14/what-is-the-page-file-for-
anyway/

25
Figura 11 - Lista y ubicación de PageFile.sys. Fuente:
https://blogs.technet.microsoft.com/askperf/2007/12/14/what-is-the-page-file-for-anyway/

Una vez identificados los archivos “PageFile.sys”, se debe navegar hasta la ubicación del archivo y

realizar la copia forense del mismo, sin olvidar de calcular los hashes correspondientes, de mantener

una cadena de custodia adecuada y también, de los recaudos necesarios para evitar la invalidación de la

evidencia durante el proceso judicial. 26

Al igual que con el “Hiberfil.sys”, para la obtención del archivo “PageFile.sys”, utilizando sistemas

operativos de código abierto (Open Source) e imágenes forenses previamente adquiridas por un

investigador, se pueden seguir los pasos descriptos en la sección anterior. No obstante, también es

26
Messina, Mariano: Aplicabilidad metodológica de la informática forense en la obtención de resultados
eficientes en procesos judiciales argentinos, 7 de Diciembre del 2012, http://www.segu-
info.com.ar/tesis/

26
posible utilizar la herramienta “FTK Imager” desde una unidad extraíble en un sistema encendido para

su recuperación.27

Al momento de realizar la adquisición, el investigador forense debe ser consciente de los riesgos de

utilizar FTK Imager desde una unidad extraíble en un sistema encendido. La herramienta puede alterar el

contenido de la memoria RAM, así como también puede modificar las referencias de la memoria virtual.

En un sistema encendido, los pasos necesarios para realizar la extracción del archivo “pagefile.sys” y

almacenar su contenido en un en un medio extraíble, son los siguientes:

- Asegurar la existencia de espacio libre suficiente en el medio extraíble para almacenar el archivo

pagefile.sys en su interior.

- Copiar los archivos de “FTK Imager” en la unidad extraíble.28

- Conectar la unidad extraíble en un sistema que se desee recuperar un archivo.

- Localizar la ruta del archivo a extraer. Por defecto el archivo pagefile.sys se encuentra en la

unidad raíz del disco.

- Una vez localizado, realizar click derecho sobre el mismo y seleccionar la opción “Export Files”

del menú emergente. Ejemplo:

27
Brendan, Bone: Run FTK Imager from A Flash Drive (Imager Lite), 23 de Febrero del 2015,
https://support.accessdata.com/hc/en-us/articles/203681809-Run-FTK-Imager-from-a-flash-drive-
Imager-Lite-
28
Brendan, Bone: Run FTK Imager from A Flash Drive (Imager Lite), 23 de Febrero del 2015,
https://support.accessdata.com/hc/en-us/articles/203681809-Run-FTK-Imager-from-a-flash-drive-
Imager-Lite-

27
Figura 12 - Exportando el archivo "pagefile.sys"

- Almacenar el archivo pagefile.sys en la unidad extraíble.

- Calcular los hashes necesarios, mantener una apropiada cadena de custodia y resguardar la

evidencia de forma apropiada.

Análisis en búsqueda de información relevante

Anteriormente se han descripto los pasos necesarios para adquirir los datos alojados en memoria, así

como también cómo adquirir las cadenas de texto utilizadas por una aplicación en particular y también,

cómo adquirir los archivos hiberfil.sys y pagefile.sys respectivamente.

A partir de este momento el investigador forense o auditor debe realizar la apertura y análisis de cada

uno de los diferentes contenedores mediante la lectura secuencial de los ficheros o utilizando técnicas

de búsqueda de información relacionada al caso. No obstante, también se pueden utilizar herramientas

automáticas que lo asistan en la ardua tarea de identificación de evidencia.

28
En el interior de cada uno de los contenedores anteriormente mencionados, yacen distintos tipos de

datos, diferentes estructuras, cadenas de caracteres (strings) y símbolos de todo tipo, esparcidos en

ubicaciones aleatorias. Inclusive, la información puede encontrarse dividida y alojada en diferentes

segmentos del contenedor que se analice.

Durante el desarrollo del presente trabajo, se ha tomado el desafío de identificar estructuras específicas

dentro de la memoria. Entre ellas, se pretende analizar la memoria a fin de encontrar información

estructurada, como ser: chats pertenecientes a la aplicación web Facebook, direcciones de enlace (URL),

direcciones de correo y correos de Google Mail.

No obstante, durante el análisis de los contenedores, también se ha observado la existencia de cadenas

de texto esparcidas en diferentes ubicaciones de la memoria y de forma aleatoria, que debieran ser

analizadas en profundidad por parte de un investigador o auditor para determinar si resultan elementos

probatorios. Surge entonces el interrogante de cómo detectar información que a priori no respeta una

estructura definida (datos no estructurados), más que el propio lenguaje.

A fin de identificar chats de Facebook en memoria, he utilizado la herramienta “strings2” con el número

de proceso (“process ID”) correspondiente a la aplicación “Chrome”, la cual se encontraba abierta en el

sistema a analizar.

El archivo resultante contenía todas las cadenas de texto (strings) utilizadas por la aplicación, así como

también, de las páginas web que se encontraban abiertas en las diferentes pestañas (tabs) del

navegador.

29
Durante el análisis de diferentes contenedores y luego de realizar varias búsquedas manuales, he

identificado la siguiente estructura en memoria perteneciente a un chat de la aplicación web Facebook

(la cual se encontraba abierta en una de las pestañas del navegador al momento de realizar la

adquisición). La estructura, se encontraba alojada en diferentes posiciones del archivo (o de la memoria)

teniendo en cuenta la cantidad de mensajes transmitidos y almacenados en la memoria (o los archivos

pagefile.sys o hiberfil.sys respectivamente, si aplica):

Figura 13 - Estructura de un mensaje de Facebook en memoria. El recuadro rojo representa el contenido del
mensaje enviado a un usuario.

Por otra parte, analizando línea por línea la memoria (más específicamente, analizando las cadenas de

caracteres (strings) obtenidas con la herramienta strings2) se puede observar que existen múltiples

estructuras almacenadas, y de diferentes formas. Por ejemplo, a continuación se puede observar

algunas variaciones de las diferentes representaciones de direcciones de enlaces (URLs) almacenadas

dentro de la memoria.

30
Figura 14 - Ejemplo de representaciones de URL en memoria

Tal como se puede ver en la imagen anterior, el resultado de la ejecución de la herramienta “Strings2”

nos muestra que las URLs pueden estar almacenadas y definidas de diferentes formas en la memoria.

Las mismas, pueden encontrarse de forma unitaria en una línea o también pueden estar definidas como

un valor de una variable, entre otras representaciones disponibles.

También, si observamos los números de línea presentes en el lado izquierdo de la Figura 14, se puede

notar que la revisión manual del archivo completo representa un desafío: el poder analizar cada uno de

los contenedores (memoria RAM, pagefile.sys y/o hiberfil.sys) de forma completa, en el menor tiempo

posible y con calidad, es decir, evitando omitir información que pudiera resultar evidencia.

Si la memoria RAM de un computador es superior a 1 GB de tamaño y se ha adquirido una imagen

completa de la misma, la revisión manual podría demandar plazos de tiempo que podrían no

encontrarse alineados con el necesario para desarrollar la investigación judicial o auditoría.

31
Continuando con el análisis de las estructuras disponibles en la memoria (o volcados), durante algunas

horas de revisión de archivos he podido notar que algunas aplicaciones almacenan las cadenas de

caracteres (strings) en memoria sin necesitar más que la referencia de la posición de la misma para ser

utilizadas por el sistema operativo o una aplicación en particular. Por ejemplo, al ejecutar la herramienta

“Strings2” utilizando el archivo “pagefile.sys” como parámetro de entrada, la siguiente estructura pudo

ser identificada en el resultado:

Figura 15 - Chat alojado en memoria

Por lo anteriormente expuesto, resulta entonces clave contar con una herramienta automática que sea

capaz de recorrer los ficheros de forma tal que identifique y recupere diferentes estructuras y las

muestre en un formato amigable al investigador o auditor.

Durante el análisis de los contenedores adquiridos en búsqueda de potencial evidencia, me he dado

cuenta que a fines prácticos, se puede realizar abstracción del contenedor que se debe analizar. Para el

presente trabajo, no importa el contenedor (hiberfil.sys, pagefile.sys, cadenas de texto (strings) de un

32
proceso en ejecución o imágenes completas de memoria) que se deba analizar, los pasos necesarios

para identificar chats de Facebook, ciertos mails, direcciones URL, direcciones mails y texto humano se

centran en leer y analizar los datos almacenados a fin de poder identificar ciertas estructuras dentro de

los ficheros extraídos durante la adquisición.

Análisis Automático – Eureka!

El siguiente archivo de muestra contiene distintas estructuras similares a las figuras anteriores: mails de

GMail, chats de Facebook, URLs, direcciones Mails y texto humano mezclado con datos presentes en las

adquisiciones de imágenes de memoria. El archivo de prueba, (que ha sido modificado intencionalmente

a fin de asegurar la privacidad de los datos), han servido de base para crear y evaluar la efectividad de la

herramienta Eureka.29

En color rojo se encuentran señaladas las líneas que serán detectadas por la herramienta, de forma

automática:

////

..

90

3 3 3 31

11

[]##~@#@|||¬¬“÷”÷”ø÷ø ∞~~~~

29
El código python se encuentra disponible en el Anexo I del presente trabajo. También publicado en:
https://github.com/MMarianus/Eureka

33
,"\u003capan class\u003d\ "yP\" email\u003d\"atacante@atacante.com\" name\u003d\"Prueba del

JSON\"\u003ejPrueba de un json de Google Mail!

x2\u003c/span\u003e","\u002&raquo;\002%nbsp;","esto es una prueba de un json encontrado en

memoria junto a mucha basura, falta darle forma al resultado","este json es para que sea detectado por

eureka..",0,"","","11/12/13",True,March 12, 2017 at 22:22 PM", 1384123123,,[] ,,0,[] ,,[] ,,"3", [0]

,,"victima@victima.com",,,, el resto es simplemente basura!...

asdfjadsfofads

dfsa

dfas

sdf

dfs

estas lineas tambien estan tiradas en memoria sin referencia alguna, con suerte son detectadas por

eureka.

asdf

asd

fdsa

dfas¢¢¢dt7idt7idt7i¢¢¢¢q345qq345¢¢¢¢¢¢¢q345¢¢¢¢¢¢¢34534q545¢¢¢¢¢dt7idt7i¢¢¢¢¢¢3245q345435

¢¢¢¢¢¢¢¢¢q34t¢¢¢¢¢¢¢¢dt7idt7i¢¢¢¢fsdfregt34t34tt¢¢¢¢¢¢¢¢¢¢¢r43t34wqt43t34t634t34t34¢¢¢¢¢¢¢d

t7idet7i7dti¢¢¢¢¢¢¢¢¢¢dt7i¢¢¢¢asdf¢¢¢¢¢q345q345q345¢¢¢¢¢¢q45¢¢¢¢¢esgweartw4t34wt6346t¢¢¢¢

dt7iedt7i¢¢¢¢¢q34t5q34t5q34t5¢¢¢¢¢¢¢¢¢dt7idt7i¢¢¢¢¢¢¢asdf¢¢¢¢¢¢¢¢y3g5qyh5u¢¢¢¢¢asdf¢¢¢¢¢¢¢

34
¢¢¢¢¢dt7o7toedoi75e¢¢¢¢¢¢q34t5q34t¢¢¢¢¢¢¢¢¢rewag2345t25245twqtgweqrtgwt4t43t6436t36y5y6¢

¢¢¢¢¢¢¢¢¢¢¢¢¢¢q34t534qtq34t6q34t53q4t5¢¢¢¢¢¢¢¢¢¢¢¢¢dtu7itu7ioed7i¢¢¢¢¢drtui¢¢¢¢¢rurui¢¢¢¢¢

¢ruir¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢

mariano@mariano.com

sdaf

asdf

i34r34i

ff

24X

asdf@fakeemailfortest.com

"24X

esto es una prueba de un mail alojado en memoria

35
I"24X

Mariano Messina (This fake email: mariano@mariano.com)

"24X

hola hola, esto es un email alojado en un tab del browser, capaz lo ve eureka.

!$24X

Fri Jun 16 2017 15:31:33 (Argentina Standard Time)

%24X

asdfñlkadsf

asd

¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢sdg

sddf33 this is a line for english language test identification ..

sdf

36
3

while(1);

[[["v","137s2mfg40boa","1c22e772e53ff3

de","-902218240","1","vaknsvbtjz8a"]

,["gn","gsi test502"]

,["cfs",[]

,[]

,["i",50]

,["st",1208038540]

,["qu","0","6616","0","#006633",

0,0,0,"0","6.5"]

,["ft"," este es un texto alojado dentro de un json custom de una herramienta de mail online\u003ca

href\u003d\"http://www.urlGrabbingTestFirst.com\"

asdf

asdf

oooooo

r3

37
t2

42g

24

tfr

2tf

ft2

¢~@#{¢~@¢{|~|{{|~{@

#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}

#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}v

#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}

#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}#~{@|~#{@|{#@|~#~|@{3ñ12´ñ}}}}}}}}}

########

##########

############

1|@wsecedit.dll

ame=@mscms.dll

7|@wsecedit.dll

txt=@snmptrap.exe

38
http://www.urlGrabbingTestSecondResult.com.ar asdg9go9go http://ww.IIIII.com

float3 vec3(float2 x0, float x1)

return float3(x0, x1);

Mariano: holaaa!

Mariano: jajajaja

Mariano: esto es una prueba de un chat

Mariano: alojado en memoria..

Mariano: tal vez sea detectado por eureka..

7|@wsecedit.dll

txt=@snmptrap.exe

,["cfs",[]

,[]

,["i",50]

www.grabThisURL.com.ar?evilParam=33&evilParam33=AAA

asdf

fsad

CM_Messaging_Configurat

,"offline_threading_id":"a85578462a04307","author":"fbid:1202a59a2","author_email":"1202a59a2\u0

39
040facebook.com","ephemeral_ttl_mode":0,"timestamp":1498598687640,"is_unread":false,"is_filtered

_content":false,"is_filtered_content_bh":false,"is_filtered_content_account":false,"is_filtered_content_

quasar":false,"is_filtered_content_invalid_app":false,"is_sponsored":false,"commerce_message_type":

null,"customizations":[],"source":"source:chat:web","source_tags":["source:chat"],"tags":["sent","sourc

e:chat:web","inbox"],"is_spoof_warning":false,"folder":"inbox","thread_fbid":"","other_user_fbid":"120

2a59a2","platform_xmd":null,"message_source":null,"montage_reply_data":null,"skip_bump_thread":f

alse,"profile_ranges":[],"reactions":{},"body":"THIS IS A TEST OF A FACEBOOK

SEARCH","subject":null,"has_attachment":false,"attachments":[],"raw_attachments":null,"meta_ranges

":[],"thread_idd":"mid.1483908536030:5b144a3d20",

return float3(x0, x1);

float4 vec4(float x0, float x1, float x2, float x3)

fasdfasdfsdf

asdf

ds

fds

daf

40
La ejecución de la herramienta Eureka.py utilizando el archivo de prueba anterior, produce el

siguiente resultado:

Ejecución de Eureka
Mail de Gmail Identificado

Direcciones de Mail Identificadas

URLs Identificadas

Chat de Facebook Identificado

Lenguaje Español identificado en


el archivo

Figura 16 - Ejecución de Eureka utilizando archivo de prueba

41
Conclusión

Si bien existen múltiples herramientas destinadas a realizar la adquisición de la memoria RAM

de un computador, representa un desafío encontrar herramientas de bajo costo y/o gratuitas

que satisfagan las necesidades de los investigadores forenses y/o auditores para el análisis de la

información adquirida. Esto se debe a que cada aplicación puede almacenar sus datos de

diversas formas y mediante distintas estructuras en memoria.

No obstante, si bien representa un desafío el detectar estructuras (o evidencia) debido a la falta

de estandarización de almacenamiento de los datos en memoria, algunas estructuras aún

resultan identificables debido a que yacen en texto claro. En el futuro, cuando las aplicaciones

comiencen a cifrar los datos en memoria, surgirán nuevos desafíos para los investigadores

forenses y/o auditores.

Mediante el desarrollo de Eureka, se concluye que es posible crear herramientas automáticas

que reduzcan el tamaño de los archivos de memoria de gigabytes de información a volúmenes

que puedan ser analizados por investigadores en plazos razonables.

42
Anexo I - Eureka.py – The Forensics OpenSource Tool
Eureka es una herramienta de código abierto que recorre archivos que contienen datos que se

encontraban almacenados en la memoria (previamente adquirida), en busca de estructuras específicas.

Eureka busca de forma automática chats de Facebook, direcciones mail, direcciones de enlace, correos

de Google Mail, y lenguaje humano para que luego sea analizado por un investigador forense o auditor

en búsqueda de elementos probatorios.

Código:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @MMerianus 2017 - eureka.py - The forensic search tool..

import re

import subprocess

import argparse

import os

def GetBanner():

return '\nEureka! :)\n'

def GetUsage():

return 'python eureka.py -f fileName.ext --fb --je --mails --urls --lang eng'

43
def GetDescription():

return """

Eureka! is search tool that identifies Facebook Chats, Emails, URLs, Email Addresses and Human

Language in very, very large files (mostly, in memory dumps). NOTE: To save the results into a file,

please redirect the output..

"""

def notFound():

return '\t[i] - No results found, but keep trying!.'

def GetLangLetters(lang):

if 'esp' in lang:

return 'abcdefghijklmnopqrstuvwxqyzñáóé \t\n'

return 'abcdefghijklmnopqrstuvwxqyz \t\n'

def GetOutFileName():

return "stringsOut.txt"

def StringSearch(filename):

cmd = 'strings'

if os.name == 'nt':

cmd = 'strings2'

cmdStringSearch = cmd + ' ' + filename + ' > ' + GetOutFileName()

subprocess.call(cmdStringSearch, shell=True)

44
def WarmingUp():

parser = argparse.ArgumentParser(description=GetDescription(), usage=GetUsage())

parser.add_argument("-f", metavar='File_Name', nargs=1, required=True, help="File to

analyze.")

parser.add_argument("--je",action='store_true', help="JSON Emails Search. (Raw output)")

parser.add_argument("--mails", action='store_true', help="Mail Addresses search.")

parser.add_argument("--urls", action='store_true', help="URLs search.")

parser.add_argument("--fb", action='store_true', help="Facebook chats search.")

parser.add_argument("--lang", metavar='\'eng\' [or] \'esp\'', nargs=1, help="Identify human

language in a given file. 'esp' for spanish, 'eng' for english language identification. Example: python

eureka.py -f pagefile.sys --lan eng ")

return parser.parse_args()

def SearchMails(fileName):

with open(fileName,'r') as memDumpFile:

regex = r".*email\\.*"

re.compile(regex)

found = 0

for line in memDumpFile:

matches = re.finditer(regex, line)

for match in matches:

found += 1

print match.group()

45
if found == 0:

print(notFound())

def FilterFBChat(chat):

filReg = "\"(?:thread_id|message_id|author|timestamp|body)\":\"{0,1}[^\"]+[\"|\,]"

re.compile(filReg)

matches2 = re.finditer(filReg, chat)

for match2 in matches2:

print match2.group()

def SearchFBChat(fileName):

print("\n[i]- Now, Facebook chats are being searched..")

print("\t[i]- To get the identity of the Author, use:

https://www.facebook.com/profile.php?id={AUTHOR FBID NUMBER}")

with open(fileName,'r') as memDumpFile:

regChat = r".*\[\"source:chat\"\].*"

re.compile(regChat)

found = 0

for line in memDumpFile:

matches = re.finditer(regChat, line)

for match in matches:

found += 1

FilterFBChat(match.group())

if found == 0:

46
print(notFound())

def SearchData(fileName, regex):

allData = {}

re.compile(regex)

with open(fileName,'r') as memDumpFile:

found = 0

for line in memDumpFile:

matches = re.finditer(regex, line)

for match in matches:

found += 1

allData[match.group().replace('u003c','').replace('u003e','').replace('u003d','')] = 'data'

if found == 0:

print(notFound())

else:

for data in allData:

print data

def LoadDictionary(lang):

if 'eng' in lang:

dictionaryFile = open('engDict.txt','r')

else:

dictionaryFile = open('espDict.txt','r')

47
wordList = {}

for word in dictionaryFile.read().split('\n'):

wordList[word] = 'found'

dictionaryFile.close()

return wordList

def GetWordCount(message, lang, dictionary):

message = message.lower()

message = RemoveNonLetters(message, lang)

possibleWords = message.split()

if possibleWords == [] or len(possibleWords)==1:

return 0.0

if depShorts(possibleWords):

matches = 0

for word in possibleWords:

if word in dictionary:

matches += 1

else:

return 0.0

return float(matches) / len(possibleWords)

def depShorts(possibleWords):

48
cantSingle = 0

for word in possibleWords:

if len(word) < 2:

cantSingle += 1

return cantSingle <= len(possibleWords)/2

def RemoveNonLetters(message, lang):

lettersOnly = []

for symbol in message:

if symbol in GetLangLetters(lang):

lettersOnly.append(symbol)

return ''.join(lettersOnly)

def IsValidLanguage(lang, message, dictionary, wordPercentage=20, letterPercentage=80):

message = message.lower()

wordsMatch = GetWordCount(message, lang, dictionary) * 100 >= wordPercentage

numLetters = len(RemoveNonLetters(message, lang))

messageLettersPercentage = float(numLetters) / len(message) * 100

lettersMatch = messageLettersPercentage >= letterPercentage

return wordsMatch and lettersMatch

def SearchLanguage(fileName, lang):

print("\n[i]- Now, Human Language is being searched..")

if not 'esp' in lang and not 'eng' in lang:

49
print("\t[!]- No valid language was provided.")

else:

print("\t[i]- Using %s language for detection." % ('English' if 'eng' in args.lang else

'Spanish'))

dictionary = LoadDictionary(lang)

with open(fileName,'r') as file:

for line in file:

if IsValidLanguage(lang, line, dictionary):

print line.replace('\n','')

if __name__ == "__main__":

print(GetBanner())

args = WarmingUp()

if not args.je and not args.mails and not args.lang and not args.urls and not args.fb:

print("\n[!]- Maybe you need help, as no parameter was provided. You can try with

\'eureka.py -h\'..\n")

else:

print("\n[i]- Searching strings in the file, please be patient..")

StringSearch(args.f[0])

if args.je:

print("\n[i]- Now, JSON Emails are being searched..")

SearchMails(GetOutFileName())

50
if args.mails:

print("\n[i]- Now, Email Addresses are being searched..")

mailReg = r"(?:[a-z0-9_-]+(?:\.[a-z0-9_-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-

\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-

9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-

9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-

\x09\x0b\x0c\x0e-\x7f])+)\])"

SearchData(GetOutFileName(), mailReg)

if args.urls:

print("\n[i]- Now, URLs are being searched..")

urlReg = r"(?=https?://|www\.|ftp://)([^\s\"\'\)\>]+)"

SearchData(GetOutFileName(), urlReg)

if args.fb:

SearchFBChat(GetOutFileName())

if args.lang:

SearchLanguage(GetOutFileName(), args.lang)

print("\n")

os.remove(GetOutFileName())

51
Bibliografía

Zeltser, L. (2014, 03 04). Tools for Analyzing Static Properties of Suspicious Files on

Windows. Retrieved from SANS Digital Forensics and Incident Response Blog: https://digital-

forensics.sans.org/blog/2014/03/04/tools-for-analyzing-static-properties-of-suspicious-files-on-

windows

Wietse Venema, T. W. (n.d.). ICAT - Manual Page. Retrieved from The Sleuth Kit

(TSK) & Autopsy - Open Source Digital Forensics Tools:

http://www.sleuthkit.org/sleuthkit/man/icat.html

X-Ways. (n.d.). WinHex: Computer Forensics & Data Recovery Software, Hex Editor &

Disk Editor. Retrieved from X-Ways: https://www.x-ways.net/winhex/

Bembibre, V. (2009, 01 02). Memoria RAM. Retrieved from Definición ABC:

https://www.definicionabc.com/tecnologia/memoria-ram.php

Carrier, B. (n.d.). FLS - Manual Page. Retrieved from The Sleuth Kit (TSK) & Autopsy:

Open Source Digital Forensics Tools: http://www.sleuthkit.org/sleuthkit/man/fls.html

CCM. (2017, 07). Memoria de acceso aleatorio (memoria RAM o PC). Retrieved from

CCM: http://es.ccm.net/contents/398-memoria-de-acceso-aleatorio-memoria-ram-o-pc

Dan Doonan, C. S. (2012, 12 04). Volatility: Part 2 – Malware in hiberfil.sys . Retrieved

from Champlain College: http://www.champlain.edu/Documents/LCDI/archive/Volatility-

Report-Part-2.pdf

Fire Eye. (n.d.). Memoryze - Find evil in live memory. Retrieved from FireEye:

https://www.fireeye.com/services/freeware/memoryze.html

52
Hameed, C. (2007, 12 14). What is the Page File for anyway? Retrieved from Microsfot -

Ask the Performance Team Blog: https://blogs.technet.microsoft.com/askperf/2007/12/14/what-

is-the-page-file-for-anyway/

Messina, M. (2012, 12 7). Aplicabilidad metodológica de la informática forense en la

obtención de resultados eficientes en procesos judiciales argentinos.

Michael Hale Ligh, A. C. (2014). The Art of Memory Forensics - Detecting Malware and

Threats in Windows, Linux, and Mac Memory . Indianapolis: John Wiley & Sons, Inc. .

Michael Howard, M. M. (2010, 12). Windows ISV Software Security Defenses. Retrieved

from Microsoft Developer Network: https://msdn.microsoft.com/en-us/library/bb430720.aspx

Microsoft. (2017, 01 08). Cómo deshabilitar y volver a habilitar la hibernación en un

equipo con Windows. Retrieved from Microsoft Support: https://support.microsoft.com/es-

ar/help/920730/how-to-disable-and-re-enable-hibernation-on-a-computer-that-is-running

Microsoft. (2017, 07 27). RAM, memoria virtual, archivo de paginación y administración

de memoria en Windows. Retrieved from Microsoft Support: https://support.microsoft.com/es-

es/help/2160852/ram,-virtual-memory,-pagefile,-and-memory-management-in-windows

SANS. (2010, 11 08). https://digital-forensics.sans.org/blog/2010/11/08/digital-

forensics-howto-memory-analysis-mandiant-memoryze. Retrieved from SANS - Digital

Forensics & Incident Response: https://digital-forensics.sans.org/blog/2010/11/08/digital-

forensics-howto-memory-analysis-mandiant-memoryze

secfence. (n.d.). Bypassing ASLR/DEP. Retrieved from Exploit Database:

https://www.exploit-db.com/docs/17914.pdf

Técnico PC: Funcionamiento de la memoria RAM. (2012, 08 03). Retrieved from

RedUsers: http://www.redusers.com/noticias/tecnico-pc-funcionamiento-de-la-memoria-ram/

53
54

También podría gustarte