Incident Response, Security and Forensics"

.

jueves, 23 de octubre de 2014

INSTALANDO NUESTRO SERVIDOR DE HASHES NSRL

Hola lectores,

No son pocas las veces que he dudado de la legitimidad de una serie de ficheros en un sistema comprometido. Máxime cuando todo apunta a una infección por algún tipo de malware y que desemboca en alguna suerte de rootkit que modifica ciertos aspectos del sistema operativo.

Me ocurrió en el pasado con el comando NETSTAT.EXE, el cual estaba modificado y filtraba las conexiones que iniciaba el pirata informático contra diversos servidores de su propiedad. También me ha ocurrido con DLL's y también con el propio CMD.EXE.

La solución pasa por comprobar si los hashes de estos ficheros son buenos o malos, comparándolos con alguna instalación base que ya este montada o bien desde el propio repositorio de DVD de instalación de Windows. Esto como podéis imaginar no deja de ser un gran engorro.

Para solventar esta situación me he decidido a montar un servidor de hases NSRL en línea para realizar consultas por internet.

NSRL

La Biblioteca de Software de Referencia Nacional (NSRL), es un proyecto del Instituto Nacional de Estándares y Tecnología (NIST), que mantiene un repositorio de software conocido, de los archivos y firmas de archivo para su uso por la policía y otras organizaciones que participan en las investigaciones forenses relacionadas con la informática. El proyecto es apoyado por el Departamento de Justicia de Estados Unidos y el Instituto Nacional de Justicia así como la Oficina Federal de Investigaciones (FBI), el Servicio de Aduanas de los Estados Unidos y los proveedores y fabricantes de software.

Normalmente este repositorio contiene los metadatos de los ficheros de diversos sistemas operativos y desde su base de datos permite la búsqueda por HASH o por nombre de ficheros. Este punto es interesante dada que la colección de software original se mantiene con el fin de proporcionar repetibilidad de los valores hash calculados, lo que garantiza la admisibilidad de estos datos ante un juicio.

Otra de las anécdotas es que el conjunto de datos de referencia se encuentra en la versión 2.42 y contiene más de 33,9 millones de valores hash únicos. Este conjunto de datos está disponible sin coste alguno para el público (tiene un coste anual de 120$ si deseas que te los envíen en soporte DVD, cada tres meses), y como curiosidad el contenido se revisa trimestralmente.

Por lo tanto disponer de esta base de datos 'en linea' nos permite:

  • Determinar si un archivo ha sido alterado.
  • Si se ha cambiado de nombre o se pretende ocultarlo
  • Si un archivo es lo que pretende ser.
  • Si un archivo falta cuando debería encontrarse.


El NSRL puede ahorrar a un analista cientos de horas en una investigación. Un solo ordenador o unidad de disco duro puede contener entre 15.000 y 50.000 archivos individuales, cada uno de los cuales deben ser examinados desde un punto de vista probatorio. Si varios equipos, unidades de disco, pendrives u otros medios de comunicación están involucrados, las horas del personal podrían llegar a los miles y tomar meses para terminar un indicio. Por ello es necesario disponer de algún tipo de validación o datos que podamos comparar.

REQUISITOS

Para nuestro servidor de Hashes es necesario disponer de los siguientes elementos:

Un mínimo conjunto de set de hashes. Yo he empleado este que contiene los sistemas operativos mas utilizados.

  • Windows XP Professional 
  • Windows 7 Ultimate 32bit 
  • Windows 7 Ultimate 64bit 
  • Windows 8 Pro 32bit 
  • Vista Ultimate 32bit 
  • Vista Ultimate 64bit 
Estos se descargan directamente del NIST. (punto 1)

1.- http://www.nsrl.nist.gov/RDS/rds_2.45/rds_245m.zip (2,4 Gb)
2.- Una distribución de Linux (En mi caso Ubuntu 14.04)
3.- La utilidad nsrllookup - http://rjhansen.github.io/nsrllookup/
4.- El servidor propiamente dicho - https://github.com/rjhansen/nsrlsvr

INSTALANDO EL SERVIDOR

Desde el servidor Ubuntu (instalación limpia) instalamos los compiladores.

apt-get install buid-essential

Descomprimimos el directorio "RJHANSEN-NSRLSVR"

unzip ./rjhansen-nsrlsvr*.zip

Entramos en el directorio y ejecutamos el script ./configure

A continuación completamos con  "make && make install"con lo que se instalarán las aplicaciones siguientes:

  • Nsrlsvr, Servidor de  hashes
  • Nsrlupdate, Limpia la BD y carga un nuevo RDS
  • Nsrlappend, Añade nuevas hashes a una BD existente

Una vez iniciado estos pasos voy a indicar que quiero utilizar el set de datos descargado anteriormente:

/usr/local/bin/nsrlupdate /home/armada/nsrlsvr/rds_241m.zip

Tras un tiempo considerable (media hora) en cargar la Base de datos procedo a ejecutar el servidor.


El cual estará a la escucha en el puerto 9120.



UTILIZANDO EL SERVICIO

Bueno, ya disponemos del servidor, ahora necesitamos una serie de herramientas en modo comando que nos permita escribir procesos automatizados en batch o powershell y que ejecutaremos desde el cliente o máquina sospechosa. Para ello vamos a utilizar MD5DEEP y NSRLLOKUP .

http://md5deep.sourceforge.net/   ---  MD5DEEP
http://rjhansen.github.io/nsrllookup/   ---  NSRLLOKUP

md5deep, es un conjunto de programas para calcular MD5 , SHA-1 , SHA-256 , entre otros y que es muy similar a MD5SUM o MD5. 

nsrllookup permite interactuar desde la consola con NSRLSVR con objeto de enviar y devolver información acerca de las huellas. Veamos un ejemplo.

Desde una máquina (windows) comprometida procedemos a poner el siguiente comando:

md5deep64.exe -r c:\evil | nsrllookup.exe -s 192.168.163.132

Donde C:\EVIL contiene ficheros con posible malware. El parámetro -s y la dirección IP, le indica cual es el servidor de Hashes.


Por defecto, el servidor devuelve los hashes de los archivos que NO se encuentran en la base de datos del NSRL. Si por el contrario deseamos los hashes de los archivos que SI se encuentran en el NSRL, sólo tenemos  que añadir el flag -k. Por ejemplo:

C:\> md5deep -r * | nsrllookup -s 192.168.163.132 -k               
e97295de2a9fde547feab4fe41df16ca            mspaint.exe          
eee470f2a771fc0b543bdeef74fceca0            msiexec.exe          
                                                                                                    

Una vez realizadas estas operaciones podemos disponer de un posible indicio de actividad maliciosa basada  en la reputación. Por otro lado es una manera sencilla de no tener que ir con un montón de cd/dvds con una línea base del sistema operativo.

También hay que decir que este proceso de lectura de Hashes consume mucha ram y tiene picos muy altos de CPU, sobre todo cuando se realizan múltiples consultas o bien es muy grande la búsqueda a realizar, por  lo cual es recomendable disponer de un ordenador moderno y unos 8 Gbytes de RAM para que funcione bien.

SLEUTHKIT

Otra forma más mundana es instalar las utilidades forenses de sleuthkit y utilizar HFIND para la búsqueda de estos hashes.

Primero creamos el indice de huellas

hfind -i nsrl-md5 NSRLFile.txt

Un vez creado podemos buscar una determinada huella.

hfind NSRLFile.txt 76b1f4de1522c20b67acc132937cf82e
76b1f4de1522c20b67acc132937cf82e Hash Not Found

O tener una combinación de ambas (ambas huellas separadas por un espacio)

hfind NSRLFile.txt 392126E756571EBF112CB1C1CDEDF926 fc0b4a626881d7c5980d757214db2d25


Por ultimo comentar que esta base de datos NSRL es adaptada por muchos fabricantes en sus propios productos como por ejemplo EnCase y AccesData y que desde la propia web del NIST (http://www.nsrl.nist.gov/),  proporcionan un enlace para poder buscar de forma manual los Hashes.


5 comentarios:

Hola!! Me gustó mucho el contenido del post. Te quiero consultar sobre el siguiente problema que me surgió en un Ubuntu limpio tanto la versión desktop, server y REMNUX. A la hora de realizar el make me aparece el siguiente error:

/bin/sed -e 's,[@]pkgdatadir[@],/usr/local/share/nsrlsvr,g' < nsrlupdate.in > nsrlupdate
chmod +x nsrlupdate
/bin/sed -e 's,[@]pkgdatadir[@],/usr/local/share/nsrlsvr,g' < nsrlappend.in > nsrlappend
chmod +x nsrlappend
make[2]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master/src»
Making all in man
make[2]: se ingresa al directorio «/home/Usuario/Descargas/nsrlsvr-master/man»
make[2]: No se hace nada para «all».
make[2]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master/man»
make[2]: se ingresa al directorio «/home/Usuario/Descargas/nsrlsvr-master»
make[2]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master»
make[1]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master»
Making install in src
make[1]: se ingresa al directorio «/home/Usuario/Descargas/nsrlsvr-master/src»
make[2]: se ingresa al directorio «/home/Usuario/Descargas/nsrlsvr-master/src»
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c nsrlsvr '/usr/local/bin'
/usr/bin/install: no se puede borrar «/usr/local/bin/nsrlsvr»: Permiso denegado
make[2]: *** [install-binPROGRAMS] Error 1
make[2]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master/src»
make[1]: *** [install-am] Error 2
make[1]: se sale del directorio «/home/Usuario/Descargas/nsrlsvr-master/src»
make: *** [install-recursive] Error 1

Espero que me puedas guiar!!
Gracias

@Moc:¿Tienes la última versión?
Saludo

Si Pedro, tal cual los pasos que marcaste en tú post con versiones limpias de Ubuntu y REMNUX tambien.El error no me ayudar mucho a ver que puede ser. Si alguien me puede dar una mano :)

@Moc: Y supongo que te lo has descargado desde aquí: https://github.com/rjhansen/nsrlsvr

moc, creo que eso se debe a que no lo estas ejecutando con los privilegios correspondientes, fijate si podes mandarle sudo su al make y al make install