Respuesta a Incidentes y Análisis Forense
Juan José Delgado
Análisis Forense Digital
Universidad Internacional de La Rioja
Índice
Índice
1. Comentarios previos
2. Análisis Forense en entornos Windows, Linux y MacOS
1. Información volátil
Análisis de evidencias digitales – Juan José Delgado
Comentarios previos
Análisis de evidencias digitales – Juan José Delgado
Introducción
Como ya hemos avanzado en otras sesiones, el procedimiento de
análisis variará en función del caso y los elementos implicados.
En este tema vamos a conocer cómo analizar los elementos más
relevantes dentro de los tres Sistemas Operativos mas típicos:
Windows, Linux y MacOS.
Además, también veremos cómo recolectar información volátil en
cada uno de ellos por si nos encontrásemos el equipo encendido y
fuera de interés un estudio rápido de algunos de sus elementos.
No vamos a entrar en los procedimientos de recolección y adquisición
que ya conocéis, si no que nos centraremos en la obtención de la
información de interés.
Análisis de evidencias digitales – Juan José Delgado
Análisis Forense en
entornos Windows,
Linux y MacOS
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Introducción
Todos los Sistemas Operativos manejan gran cantidad de información
volátil, la cual se pierde al apagar el equipo. Por lo tanto, únicamente
vamos a poder recolectar esta información si nos encontramos ante
un equipo encendido.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Fecha y hora del sistema
Aunque pueda parecer obvio, uno de los primeros pasos cuando
comenzamos a trabajar sobre un equipo encendido es obtener la fecha
y hora del sistema. De esta forma podremos comprobar si se
encontraba correctamente configurada o si, por el contrario, había sido
modificada.
El conocer la fecha y hora configurada en el sistema nos permitirá
construir una línea temporal fidedigna, evitando así posibles
manipulaciones intencionadas por parte del usuario.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Fecha y hora del sistema
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Fecha y hora del sistema
Para obtener la fecha y hora de un sistema Linux, tan solo debemos
ejecutar el comando “date”
$ date
Thu Sep 17 [Link] CEST 2020
$ date --utc
Thu Sep 17 [Link] UTC 2020
Por otro lado, también podemos ejecutar el comando hwclock para leer
el reloj hardware del equipo.
$ hwclock --show --utc
2020-09-17 [Link].171004
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Fecha y hora del sistema
En MacOS, al igual que en Linux, tan solo debemos ejecutar el
comando “date”
$ date
martes, 22 de septiembre de 2020, [Link] CEST
$ date -u
martes, 22 de septiembre de 2020, [Link] UTC
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Usuarios que han iniciado sesión
Durante la investigación, es muy importante conocer los usuarios
conectados al sistema objeto del análisis. Esto no incluye únicamente
a los usuarios con acceso local, sino también a aquellos usuarios
conectados de manera remota al equipo (por ejemplo, a través de un
recurso compartido).
En entornos Windows, las herramientas “PsLoggedOn” o
“LogonSessions”, pertenecientes a las SysInternals
([Link] de Microsoft son una
muy buena opción.
También podemos obtener información muy relevante utilizando los
propios comandos del Sistema Operativo o las funciones incluidas en
PowerShell.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Usuarios que han iniciado sesión
PsLoggedOn es una herramienta que muestra tanto a los usuarios
conectados localmente como a los usuarios conectados a través de los
recursos de la computadora local o de una remota.
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Usuarios que han iniciado sesión
Para ver los usuarios que han iniciado sesión en un equipo Linux, si
nos encontramos con el equipo encendido y tenemos acceso a la
consola, podemos utilizar el comando “last”.
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Usuarios que han iniciado sesión
En el caso de un equipo MacOS, el procedimiento es el mismo que en
el caso de un equipo Linux.
Desde el terminal ejecutamos el comando “last”
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
Conocer los archivos abiertos por los usuarios que han iniciado sesión
en el equipo puede aportar pistas muy importantes de cara a la
investigación. Podemos, por ejemplo, ver los archivos compartidos que
un usuario remoto ha abierto, archivos que pueden contener
información confidencial que no debería salir de la organización.
En entornos Windows, de nuevo una utilidad incluida en las
SysInternals de Microsoft, “PsFile”, puede sernos de utilidad en este
caso. Además, los comandos “net file” y “openfiles” también van a
aportarnos información al respecto.
Otra opción sería ver los archivos abiertos por determinados procesos,
pero eso lo veremos más adelante.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
El comando "net file" muestra una lista de archivos que otros equipos
han abierto en el local. Sin embargo, trunca los nombres de las rutas
largas y no permite ver esa información para los sistemas remotos.
PsFile corrige esto y además permite cerrar los archivos abiertos.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
El comando “openfiles" permite a un administrador listar o desconectar
archivos y directorios que se han abierto en un sistema.
Es necesario tener activada la opción “mantener lista de objetos” para
poder ver los archivos abiertos localmente.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
Como ya hemos mencionado, conocer los archivos abiertos por los
usuarios que han iniciado sesión en el equipo puede aportar pistas
muy importantes de cara a la investigación.
En Linux, para poder ver la lista de archivos abiertos podemos utilizar
el comando “lsof” (List Open Files).
Este comando nos ayudará a encontrar todos los archivos abiertos
asociados a puertos, servicios y procesos.
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
El comando “lsof” nos muestra distinta información sobre los archivos
abiertos, entre otras cosas:
• El comando asociado al proceso que ha abierto el archivo
• El PID del proceso y el usuario que lo ha lanzado
• El descriptor del archivo (columna FD), que nos indica si son
datos, directorios, librerías compartidas, etc.
• El nombre con la ruta completa del archivo
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
En el caso de MacOS, al igual que en los Sistemas Operativos Linux,
podemos hacer uso del comando “lsof” (List Open Files).
Este comando nos ayudará a encontrar todos los archivos abiertos
asociados a puertos, servicios y procesos.
Los parámetros pasados a este comando son prácticamente los
mismos que los que podemos utilizar en Sistemas Linux y el resultado
también es similar en cuanto a la información obtenida.
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Archivos abiertos
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red
Cuando se está investigando un incidente, las trazas de las
comunicaciones de red suelen ser una gran fuente de información.
Sobre todo, en casos relacionados con infecciones por malware o
fugas de información.
En estos casos, cuanta más información tengamos sobre la
arquitectura de la red y sobre las comunicaciones establecidas (y
quién las ha establecido), mucho mejor.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Información general
Antes de comenzar a obtener información sobre las conexiones
establecidas, es necesario obtener la propia configuración de los
interfaces de red del equipo.
Para ello, podemos utilizar las propias herramientas del sistema, como
el comando ipconfig (ipconfig /all) o herramientas externas como
“PromiscDetect” o “Promqry” que nos permiten detectar aquellos
interfaces de red en modo promíscuo.
También podemos utilizar scripts de PowerShell para obtener esta
información.
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Información general
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Caché NetBIOS
NetBIOS es un protocolo de red (cada vez menos utilizado, pero
todavía activo) que permite a las aplicaciones comunicarse a través de
la red.
La caché de nombres de NetBIOS contiene un listado de las
conexiones realizadas por otros sistemas utilizando este protocolo.
Esta caché contiene el nombre y la dirección IP del sistema remoto y
podemos visualizarla utilizando el comando “nbtstat” incluido en el
Sistema Operativo.
Para visualizar la caché de nombres de NetBIOS tan solo tendremos
que ejecutar el comando con la opción “-c”:
nbtstat -c
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
Cuando estamos analizando un equipo que sospechamos se
encuentra infectado con un malware, uno de los primeros puntos a
analizar es las conexiones abiertas. Las conexiones que dicho equipo
tiene establecidas con otros sistemas (ej. Conexiones con el centro de
control del malware o conexiones con el sistema de keylogger remoto).
Para ello podemos utilizar el comando “netstat” del propio Sistema
Operativo (podremos ver conexiones activas entrantes y salientes e
incluso obtener los puertos y las direcciones con las que un proceso se
está comunicando) y la herramienta TCPView de las SysInternals, la
cual nos mostrará las conexiones establecidas por cada uno de los
procesos en ejecución en el equipo.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Información general
Antes de comenzar a obtener información sobre las conexiones
establecidas, es necesario obtener la propia configuración de los
interfaces de red del equipo.
Para ello, podemos utilizar las propias herramientas del sistema, como
el comando “ifconfig” (similar a “ipconfig” en Windows), que nos
muestra información sobre la configuración de los distintos interfaces
de red del equipo.
Actualmente y como sustituto de “ifconfig” (en realidad incluye toda la
funcionalidad del paquete net-tools) también podéis utilizar el comando
“ip”.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
Cuando estamos analizando un equipo que sospechamos se
encuentra infectado con un malware, uno de los primeros puntos a
analizar es las conexiones abiertas. Las conexiones que dicho equipo
tiene establecidas con otros sistemas (ej. Conexiones con el centro de
control del malware o conexiones con el sistema de keylogger remoto).
Para ello podemos utilizar el comando “lsof”, utilizado para listar los
archivos abiertos, pero con parámetros específicos que nos permiten
obtener sólo la información que nos interesa.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
Para listar las conexiones TCP: “lsof -i TCP”
Para listar las conexiones UDP: “lsof –i UDP”
Para listar conexiones a la escucha: “lsof -iTCP –sTCP:LISTEN” o “lsof
-iUDP –sUDP:LISTEN”
Para listar procesos en escuchando o transmitiendo por un
determinado puerto (ej. 80): “lsof -i :80”
Para listar procesos utilizando un determinado protocolo de
comunicaciones o servicio (ej. http): “lsof –i :http”
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
* Hora local
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Información general
Al igual que en Sistemas Linux, en MacOS también tenemos
disponible el comando ifconfig para obtener información general de la
red.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Información de red: Conexiones abiertas
El comando “lsof” utilizado en Linux también nos es útil en sistemas
MacOS. Aunque algunos parámetros pueden variar ligeramente, el
funcionamiento general del mismo es similar.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución
Los procesos que se encuentran en ejecución y la manera en que
estos han sido “lanzados” es también importante de cara a una
investigación.
Analizando los procesos en ejecución podemos saber, por ejemplo, si
se están utilizando los recursos de la empresa para minar
criptomonedas o si algún equipo está infectado con un software
malicioso.
En entornos Windows, la manera más sencilla de ver los procesos en
ejecución es a través del administrador de tareas, pero desde un punto
de vista más forense, de nuevo las SysInternals de Microsoft nos
proporcionan algunas herramientas muy útiles.
Mientras que en equipos Linux o MacOS se suelen utilizar los
comandos “ps”, “pstree” o “top”.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: Tasklist
El comando “tasklist”, incluido en los Sistemas Operativos Windows es
una especie de administrador de tareas en modo consola de
comandos. Esto nos permite automatizar esta parte de la recolección
de evidencia, además de otras opciones interesantes como:
/S sistema: Especifica el sistema remoto al que conectarse.
/U [dominio\]usuario : Especifica el contexto de usuario
/SVC : Muestra los servicios hospedados en cada proceso.
/FI filtro : Permite filtrar el listado.
/FO formato : Permite dar formato al listado
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: Tasklist
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: Process Explorer
Process Explorer es otra utilidad de Microsoft incluida en las
SysInternals que nos permite ver el listado de procesos en ejecución
en el equipo de manera mucho más amigable.
Con Process Explorer vamos a poder los procesos y subprocesos, los
parámetros de ejecución de los mismos, las DLL utilizas, sus
“punteros” (handles) en uso, etc.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: Process Monitor
Process Monitor es una herramienta de supervisión para Windows que
muestra en tiempo real la actividad del sistema de archivos, el registro,
la red y los procesos.
Además, Process Monitor permite realizar un rápido filtrado de la
información, lo que nos permite centrarnos únicamente en el proceso
sospechoso (por ej. Un keylogger) y descartar el resto o analizar tan
solo los archivos o las claves de registro que están siendo accedidas
y/o modificadas.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: Process Monitor
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ListDLL
ListDLL es una utilidad que nos muestra las DLLs cargadas por los
procesos.
Podemos utilizarla para listar todas las DLLs cargadas en todos los
procesos, en un proceso específico, o para listar los procesos que
tienen una DLL cargada en particular. Por ejemplo, cuando
sospechamos de una DLL maliciosa.
ListDLL también puede mostrar la información de la versión completa
de las DLL, incluida su firma digital, y puede utilizarse para escanear
procesos en busca de DLL no firmadas.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: PsKill
En Sistemas Operativos Windows, no tenemos un comando “kill” como
en Linux o MacOS que nos permita “matar” un proceso malicioso.
Podemos matar procesos desde el propio administrador de tareas o
utilizando alguna de las utilidades mencionadas anteriormente como
Process Mónitor o Process Explorer pero, además, también tenemos la
posibilidad de utilizar la herramienta PsKill incluida en las SysInternals.
PsKill no solo es capaz de matar procesos que se estén ejecutando en
la máquina local, si no que también es capaz de matar procesos en
máquinas remotas (siempre que tengamos acceso de administración)
sin necesidad de instalar ningún cliente.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ps y pstree
Los comandos del sistema “ps” y “pstree” nos muestran el listado de
procesos en ejecución.
El comando “ps” tiene múltiples parámetros para visualizar los
procesos en ejecución, aunque la manera más utilizada de ejecutarlo
es “ps aux”.
• a: Eliminar la restricción BSD "only yourself" para agregar
procesos de otros usuarios.
• u: Utilizar el formato orientado al usuario.
• x: Eliminar la restricción BSD "must have a tty" para agregar
procesos que no tengan una tty (terminal) asociada.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ps y pstree
La diferencia es que “pstree” nos muestra la información en forma de
árbol, lo que nos permite ver quién a lanzado qué proceso.
Otra pequeña diferencia es que “pstree” muestra los hilos asociados a
cada proceso de manera predeterminada, mientras que para ver los
hilos de ejecución de cada proceso con el comando “ps” debemos
ejecutar “ps –eLf”, ya que sino, parecerá que ambos comandos dan
información diferente.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ps y pstree
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: top
El comando top nos permite ver el estado actual de la máquina, sus
procesos y los usuarios que los han lanzado.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: kill
Si nos encontramos en un equipo de respuesta a incidentes o estamos
actuando como tal en nuestra organización, es posible que debamos
“matar” algún proceso malicioso que detectemos.
Quizá un malware que está cifrando la información, quizá una
herramienta de minado de criptomonedas, en ocasiones, vamos a
necesitar finalizar procesos que no deberían estar funcionando y para
eso utilizaremos el comando “kill”.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: kill
Podemos matar procesos simplemente con “kill [PID]” (ej. “kill 1709”
para matar el proceso con PID = 1709), lo que enviará al proceso una
señal del tipo SIGTERM (finalizar proceso).
Es posible que esto no siempre ocurra (incluso es probable que no nos
interese enviar esa señal a un malware), por lo que podemos
especificar qué señal enviar al proceso para su finalización, siendo la
mas normal SIGKILL (código 9), la cual fuerza la finalización del
proceso independientemente de su estado (ej. “kill -9 1709” o “kill –
SIGKILL 1709”).
Podemos ver el listado de señales que podemos enviar a los procesos
con el comando “kill –l”.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ps
De manera similar a los sistemas Linux, en MacOS el comando “ps”
nos muestra el listado de procesos en ejecución.
El comando “ps” tiene múltiples parámetros para visualizar los
procesos en ejecución, aunque la manera más utilizada de ejecutarlo
es “ps aux”.
• a: Eliminar la restricción BSD "only yourself" para agregar
procesos de otros usuarios.
• u: Utilizar el formato orientado al usuario.
• x: Eliminar la restricción BSD "must have a tty" para agregar
procesos que no tengan una tty (terminal) asociada.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: ps
El comando top nos permite ver el estado actual de la máquina, sus
procesos y los usuarios que los han lanzado.
Análisis de evidencias digitales – Juan José Delgado
Información volátil
Procesos en ejecución: kill
Podemos matar procesos simplemente con “kill [PID]” (ej. “kill 1709”
para matar el proceso con PID = 1709), lo que enviará al proceso una
señal para que finalice su ejecución.
Es posible que esto no siempre ocurra (incluso es probable que no nos
interese enviar esa señal a un malware), por lo que podemos
especificar qué señal enviar al proceso para su finalización, siendo la
mas normal KILL (código 9), la cual fuerza la finalización del proceso
independientemente de su estado (ej. “kill -9 1709” o “kill –KILL 1709”).
Podemos ver el listado de señales que podemos enviar a los procesos
con el comando “kill –l” (tened en cuenta que no se nombran de la
misma manera que en Linux).
Análisis de evidencias digitales – Juan José Delgado
[Link]