Análisis de memoria

Introducción

Actualmente para respuesta a incidentes y cómputo forense, el análisis de memoria es crucial para las investigaciones. En la memoria se pueden encontrar: procesos maliciosos, código inyectado, conexiones de red utilizadas por los procesos y señales de rootkits.

Metodología

Lo primero que hay que hacer es obtener una imagen de memoria. esta se puede recolectar con winndd32 o alguna otra herramienta de adquisición.

Después de esto se procederá analizar la memoria. Para esto existe una metodología propuesta por el SANS Institute, de la cual no es necesario aplicar todos los pasos. Hay algunas veces que se puede resolver el caso en los primeros. Para el análisis de memoria se puede utilizar RedLine e mandiant o volatility. En este artículo sólo se describirá la metodología que se puede realizar con cualquiera de las dos herramientas.

El procedimiento es el siguiente:

  • Identificar procesos sospechosos
  • Analizar objetos del sistema (DLL´s y manejadores)
  • Revisar conexiones de red
  • Buscar inyección de código
  • Buscar señales de rootkits
  • Obtener procesos y controladores sospechosos

Identificar procesos sospechosos

Para identificar los procesos sospechosos se debe de examinar su nombre, la ruta en disco del ejecutable que lo crea, su proceso padre, los argumentos que recibe, la hora en la que inició y el identificador del usuario que lo invocó.

De estos datos se debe identificar los siguiente para poder identificar si un proceso es válido.

  • Nombre: Sea un nombre válido, se encuentre escrito correctamente, pertenezca a un proceso utilizado en el contexto del sistema
  • Ruta:que la ruta sea válida, la mayoría debe de ser “C:\windows\system32”
  • Proceso padre: Esto ayuda a verificar que proceso lo creó y ver si el proceso padre es válido ejemplo: si un proceso fue creado con un nombre de proceso de sitema por explorer.exe pudiera ser un proceso sospechoso
  • Argumentos:Estos le dicen a un comando las acciones que deben de ralizar, por esto se deben de revisar.
  • Hora de inicio: Sirve para corroborar e identificar si la hora un proceso coinide con la de algún incidente reportado.
  • Identificadores de seguridad: Estos identificadores muestran el tipo de cuenta de usuario y asi saber con que privilegios se está ejecutando.

Analizar objetos de los procesos

Una vez identificados los procesos sospechosos se procede a analizar los objetos que utilizan. Estos son:

  • DLLs: son bibliotecas que pueden sor utilizadas por uno o más procesas, diseñadas para cumplir una funcionalidad específica
  • Handles: son punteros a diferentes tipos de recursos
  • Threads (hilos): son componentes del proceso
  • Secciones de memoria: los espacios de memoria reservados para un proceso
  • Sockets: las conexiones que con las que se comunica un proceso

Estos objetos indican que que DLL utilizó, los handles y las veces que se utilizaron. Todos ellos ayudan a revisar las acciones del proceso en el sistema.

Conexiones de red

Aunque no todos los procesos realizan conexiones de red, es importante ubicar las conexiones que realizan para verificar, por ejemplo, si un malware esta comunicándose dentro de nuestra red o está sacando información a un equipo externo.

Las direcciones y puertos indican la naturaleza de las conexiones y verificar si son conexiones válidas, también ayudan a identificar IP conocidas ya sea por la organización que realiza el análisis o por mala reputación en sitios externos.

Inyección de código

Este es uno de los puntos más importantes para definir si un proceso es malicioso debido a que la mayoría no deja evidencia en disco duro y todo se carga en memoria.

Existen 3 tipos de inyección:

  • Inyección de DLL: Es uno de los métodos mas sencillos.Se reserva espacio en memoria para el código de la DDL
  • y se usan las llamadas al sistema virtualAllocEX() o CreateRemoteThread() pero necesitan privilegios de administrador.
  • Hooks: Forzar a un proceso a cambiar de código en tiempo de ejecución. Este método utiliza la llamada a sistema SetWindowsHookEx() y mantiene el ppid la hora de ejecución y demás datos del proceso como se encuentran.
  • Hollowing: Utiliza la llamada a sistema Page_execute_ReadWrite y se obtiene el código de algún dispositivo de entrada o salida o desde otro proceso.

Buscar señales de rootkits

Los rootkits tratan de esconder su comportamiento a través de operaciones válidas:

  • System Service Descritpor Table (SSDT): Es una utilidad de Windows que permite que un proceso utilice instrucciones predefinidas. Parcha las instrucciones en el código propio y se ejecutan.
  • Interrupt Descriptor Table (IDT): Es una tabla que almacena interrupciones y excepciones. Estas interrupciones permiten manipular la salida y engancha el código ejecutable
  • Import Adress Table: Cada proceso contiene una tabla con DLL`s especificas. Un código malicioso puede intentar añadir una dll a la tabla de un proceso. Esto lo puede hacerse con permisos de usuario normal.
  • I/O Request Packets: Es la manera en que el sistema interactúa con el hardware (controladores). El código de los controladores se llama cada que ocurre una petición de entrada y salida. Los procesos pueden mandar a llamara a diferentes controladores en su ejecución

Obtener procesos y controladores

Este es el último paso, consiste en obtener una copia del código del proceso para realizar diferentes pruebas, como análisis fuera de línea, pruebas dinámicas en un ambiente controlado y para incluirlo en el reporte del hallazgo.