11 mayo 2015

Extrayendo datos MRU en Linux de escritorio


MRU. ¿Qué son?
Los archivos MRU, por sus siglas en inglés Most Recently Used [files] son de gran ayuda en un análisis forense a la hora de averiguar cuáles fueron los últimos ficheros que se manipularon en un espacio de tiempo determinado. Si bien es verdad que para sistemas Windows hay, desde hace muchísimo tiempo, innumerables herramientas que facilitan la labor de extracción, parseo y presentación de este tipo de información (en su mayoría del registro de Windows), no hay tantas para sistemas Linux de escritorio.

Aunque no es un escenario frecuente, puede darse el caso de que el perito/analista forense se tenga que enfrentar a una máquina Linux con KDE, Gnome o cualquiera de los múltiples escritorios disponibles. Por ello decidí empezar a escribir MRUTools, y al hacerlo descubrí algunos hechos que no saltan inmediatamente a la vista.
  1. No hay una forma ‘estándar’ de almacenar esta información. Cada aplicación que posee esta funcionalidad, e incluso cada escritorio, lo hace de una forma distinta, si bien algunas aplicaciones integradas, o de uso mayoritario en un escritorio particular se atañen a ciertas ‘reglas’. 
  2. Como consecuencia del punto anterior, en muchos casos no basta con ‘eliminar’ las referencias a estos ficheros desde la opción que da el escritorio (lo cual me ha brindado alguna que otra sorpresa al ejecutarlo en mi propia máquina).
Al lío: Buscando información en KDE
Usando el viejo método de ensayo-error, abrimos un fichero de prueba con Kate, el editor de textos por defecto en KDE: prueba.txt
 

Como no sabemos a priori dónde almacena esta información, podríamos ir a la documentación de KDE y buscarlo, pero siendo un poco impacientes, ejecutamos un grep en nuestro $HOME y obtenemos lo siguiente:

 
Vaya, la cosa se pone interesante. Aparecen varias referencias a nuestro fichero de prueba. Tomamos nota de las ubicaciones para inspeccionarlas más a fondo:
  • $HOME/.kde/share/apps/RecentDocuments 
  • $HOME/.kde/share/apps/kate/katerc 
  • $HOME/.kde/share/apps/kate/metainfos 
Si investigamos el contenido de estas ubicaciones, vemos que:
  1. El escritorio KDE almacena la información de los ficheros que abrimos desde él en una carpeta llamada RecentDocuments. Cada fichero abierto (más info: ver xdg-open) genera una entrada en este directorio (hasta un máximo de diez, después van rotando) con una estructura definida (¡y parseable! :D). 
  2. Parece que cada aplicación independiente que tenga funcionalidad de ‘Recent Files…’ también posee su propio listado de ficheros. Lo interesante aquí es que si pulsamos botón derecho en el menú de KDE ‘Usados Recientemente’ y hacemos click en ‘Limpiar documentos recientes’, éstas entradas efectivamente desaparecen del menú (se vacía el contenido del directorio $HOME/.kde/share/apps/RecentDocuments), pero si ejecutamos de nuevo el grep anterior…

Efectivamente, las referencias a ficheros abiertos permanecen de forma independiente por cada aplicación (por lo que he podido comprobar ocurre en varias como VLC, Dragon Player y como estamos viendo aquí, Kate). MRUTools surge de la idea de automatizar el proceso de extracción, parseo y presentación de este tipo de información:



Ejemplo y Timeline 
Evidentemente al ejecutar la herramienta en un entorno real obtenemos gran cantidad de datos que por sí solos no aportan una visión general de la situación. Es necesario estructurar los datos, por ejemplo en una línea temporal. Para ello nos viene muy bien el proyecto Timeline.

Esta herramienta escrita en Python se adapta perfectamente a nuestras necesidades. Tras leer la documentación disponible en su web y entender cómo funciona, adaptamos MRUTools para que exporte un fichero XML que Timeline sea capaz de entender. Y el resultado final, tras ejecutarlo en una máquina real ejecutando KDE es el siguiente:


Un gran punto a favor de Timeline es que nos permite visualizar de forma interactiva los eventos que hayamos generado, mostrando de una forma muy gráfica y ordenada la salida de MRUTools. 

Conclusiones
A partir de los resultados obtenidos hemos podido comprobar que los archivos MRU son de mucha ayuda en un análisis forense, y además, cada aplicación mantiene los suyos, lo que dificulta el borrado de huellas. No es una fuente del todo fiable, ya que como (casi) todo lo digital, puede ser manipulable, pero eso lo dejamos para otra entrega. 

Artículo cortesía de Ángel Suárez-B. Martín (n0w)
@asuarezbm
Leer más...

10 mayo 2015

Enlaces de la SECmana - 275

Leer más...

08 mayo 2015

Para aquel que esté interesado en los deportes, es MUY probable que haya escuchado hablar del 'combate del siglo' que enfrentaba a Mayweather y Pacquiao, tal vez dos de los mejores púgiles del boxeo actual.

El combate en sí era un enfrentamiento entre dos tipos de boxeo muy bien diferenciados. Se enfrentaba un púgil altamente defensivo, estratega, con una gran capacidad para esquivar, y otro que representaba lo contrario: ataque, brega y presión.

El ganador del combate fue Mayweather, el boxeador que actuó de forma defensiva, y claro, para mucha gente eso le resultó una decepción. No obstante, criticar a Mayweather, un boxeador que va camino de pulverizar récords de imbatibilidad, es bastante injusto. Él lo tiene claro: cuanto mejor sea defendiendo, menos golpes recibe, en mejor estado afronta el combate y tiene muy claro que cuando se retire no va a terminar 'sonado' como le ha sucedido a otros boxeadores.

Esta pequeña introducción, alejada del tema principal del blog, me sirve para hacer una analogía bastante buena con respecto al mundo de la seguridad. Claramente hay dos disciplinas o dos tipos de seguridad muy bien diferenciadas. La que busca sobrepasar y la que intenta no ser sobrepasada.

Y es bastante obvio que es tan importante la una como la otra. Por eso me complace informar que, desde Securizame, se ha creado un curso destinado a defender, a saber crear una infraestructura a lo ' Mayweather' que sea capaz de resistir a todos los Pacquiaos que vengan puño en alto a intentar romperla.

El curso, en el que participa mi compañero Lorenzo, así como Juan Garrido o Pedro Sánchez consta del siguiente temario:

Módulo I – Introducción y Seguridad Perimetral  – 8 horas – Profesor: Lorenzo Martínez

Módulo II – Hardening de sistemas operativos Windows  – 8 horas – Profesor: Juan Garrido

Módulo III – Hardening de sistemas operativos GNU/Linux  – 8 horas – Profesor: Lorenzo Martínez

Módulo IV – Hardening de aplicaciones Microsoft  – 8 horas – Profesor: Juan Garrido

Módulo V – Hardening de servicios GNU/Linux. Hardening Mac OS X, IOS y Android – 8 horas – Profesor: Lorenzo Martínez

Módulo VI – Correlación, detección y bloqueo de amenazas de red  – 8 horas – Profesor: Pedro Sánchez

Módulo VII – Criptografía aplicada a la empresa  – 8 horas – Profesor: Yago Jesus

En el que voy a participar con un módulo con alto contenido PKI en el que intentaré, de la mano de la criptografía, explicar cómo configurar tanto sistemas Linux y sistemas Microsoft para aprovechar todas las ventajas que la criptografía ofrece a la seguridad.

EL curso empieza el 1 de Junio, así que si estás interesado, ve corriendo aquí y apúntate !
Leer más...

07 mayo 2015

Flash securizado = HardenFlash

Hablar de Adobe Flash es hablar de uno de los vectores más importantes de infección de un sistema Windows junto con Java y por tanto, uno de los quebraderos de cabeza más serios a la hora de evitar, por ejemplo, las temidas infecciones de Ransomwares.

El ritmo al que se publican vulnerabilidades junto con su consiguiente exploit es notablemente alto si lo comparamos con otros productos.

Hace poco se ha publicado un proyecto cuya misión es parchear el complemento flash original de Adobe y añadirle varios niveles de seguridad para hacerlo más robusto. El proyecto se llama HardenFlash

Un gran número de vulnerabilidades de dicho complemento son explotadas mediante la técnica 'vector spray' (publicada en 2013) y aunque Adobe es muy consciente de ello, parece que no se termina de decidir a la hora de aplicar medidas que permitan detectar y detener exploits que usen dicha técnica.

Por ello, han liberado un binario alternativo que han parcheado para hacerlo más confiable frente a ese tipo de ataques.

De momento han liberado una implementación para Internet Explorer bajo Windows 7, aunque el proyecto pretende avanzar hacia más arquitecturas.

Independientemente de la indudable utilidad del proyecto, cabe preguntarse en qué lugar deja esto a Adobe: alguien ajeno a la empresa, emplea un buen número de horas para 'reversear' su software, entenderlo y aplicarle mejoras a nivel binario (mucho más duro y tedioso que hacerlo con el código fuente en mano)

Merece la pena ojear la parte del proyecto donde explican a nivel técnico lo que han hecho con el binario de Flash
Leer más...

06 mayo 2015

get-mobility-info: Recopilando información útil sobre un Mac OS X




Si la semana pasada hablábamos sobre OSQuery como una excelente solución que nos podía ayudar en el trabajo de un análisis forense sobre sistemas operativos Linux y Mac OS X, hoy me gustaría hacerlo sobre la información que nos puede otorgar get-mobility-info.

Se trata de un script en BASH, que se encuentra en /System/Library/Frameworks/SystemConfiguration.framework/Resources/get-mobility-info.

Aunque se puede ejecutar de manera directa, es normalmente llamado desde /usr/bin/btmmdiagnose, otro script en BASH que se encuentra en /usr/bin/, y ambos vienen de forma nativa con Mac OS X desde la versión 10.9, por lo que no implica la instalación de nada nuevo, como sucedía con OSQuery.

btmmdiagnose está pensada para enviar a Apple un tarball que contendrá logs y ficheros de texto de la configuración de un sistema operativo Mac OS X concreto.  De hecho, las siglas BTTM se refieren al programa Back to My Mac, requerido por Apple para dar soporte cuando cuando un usuario se queje de algún problema.

En el caso concreto de get-mobility-info, su ejecución es sumamente sencilla:




Se generará un fichero tar.gz con el formato mobility-info-fecha.hora.tar.gz

Si descomprimimos el fichero nos encontraremos con un montón de información que este script ha recopilado por nosotros, y que podremos analizar con total tranquilidad en otra máquina en busca de la causa del problema, analizar la actividad de los usuarios del sistema o de algún proceso malicioso que esté ejecutándose. 

Recordemos que en Mac, por supuesto, también hay malware, del que deberíamos estar lo más protegidos posible, así como unas cuantas opciones de configuración de sistema operativo que no vienen por defecto habilitadas, pero que nos pueden evitar unos cuantos dolores de cabeza.

Entre los ficheros generados por otros helpers a los que llama get-mobility-info y/o consolidados de sistema, bajo estas líneas os dejo un pantallazo con la lista completa, aunque me parecen de especial relevancia el fichero ps, syslog, lsof, dmesg, appfirewall.log, pf, DiagnosticMessages, kextstat (que indica qué kernel extensions tiene cargadas en memoria el equipo), preferences.plist (con opciones de configuración de la herramienta de Preferencias de sistema), etc,…



Leer más...

05 mayo 2015

Monitoreo de Procesos Windows desde Linux


Un saludo, en esta ocasión deseo compartir una solución a un problema de seguridad común: "El monitoreo de las actividades de los usuarios en sistemas operativos Windows", que va más alla de saber que esta haciendo un usuario en un determinado momento, implica también determinar si las acciones que esta llevando a cabo corresponden a las necesidades laborales de su cargo. 

Por ejemplo, existen aplicaciones portables que permiten establecer conexión remota con servidores, como el caso de PUTTY, ¿Cual es el riesgo de que un usuario con perfil de Oficial de Crédito tenga acceso a esta aplicación?. En el caso de los desarrolladores de software ¿Cuál es el riesgo de que estos tengan los programas compilados propios de su empresa, en sus equipos de cómputo?

Para esta problemática existen diversas soluciones, libres y de paga, en mi caso, algunas soluciones antivirus o similares permiten solamente extraer una lista de programas instalados, y no así un registro instantáneo de lo que el usuario esta realizando, es decir, una lista de procesos ejecutados en el equipo de cómputo, por lo que muchas veces, toca implementar una solución propia.

Como primer paso se debe realizar un "perfilamiento de usuarios", que en realidad se traducirá en un perfilamiento de los cargos laborales, ya que la persona puede cambiar, pero los roles del cargo laboral no cambiarán,  por tanto la primera tarea consiste en el perfilamiento de cargos:

CARGOGRUPOS PERMITIDOS
Desarrollador-Software base
-Lenguajes de Programación
-Ofimática
Oficial de Crédito-Software base
-Ofimática
-Aplicaciones de CRÉDITO

El objetivo del cuadro anterior consiste en declarar que, un usuario Desarrollador no puede ejecutar ningún software dentro del grupo "Aplicaciones de CRÉDITO", porque su función laboral no lo requiere. Del mismo modo un Oficial de Crédito no puede ejecutar software de tipo "Lenguajes de Programación". 

Esta relación "Cargo -  Grupos Permitidos" debe reflejarse en una base de datos, para su posterior consulta, asociando el proceso a un Grupo.

PROCESOGRUPO
winword.exeOfimática
iPodService.exeCloud Service
winvnc4.exeAcceso Remoto
chrome.exeSoftware Base
TSVNCache.exeDesarrollo de Software

Pasamos a la parte técnica, realizaremos el monitoreo desde un servidor LINUX, en un esquema de Directorio Activo, y haciendo uso del programa WMIC, el cual es un cliente para la herramienta WMIC de Windows (Windows Management Instrumentation Command-line), la cual permite no solo obtener información sino realizar acciones sobre un equipo de cómputo.  El enlace de descarga, manual de instalación y ejemplos es: http://www.aldeid.com/wiki/Wmic-linux.

Los datos que necesitamos son:

- Nombre de Dominio                           :   MIDOMINIO
- Usuario de Dominio con permiso
de sesión remota                                    :  USR_MONITOREO
- Contraseña del Usuario de Dominio
con permiso de sesión remota:                : M1P@sSw0Rd!
- IP del Equipo a Monitorear                  :  192.168.1.15     

Luego, se puede combinar wmic y php de la siguiente manera:

$IP=$_POST['direccion_IP'];
exec('wmic -W MIDOMINIO -U USR_MONITOREO%M1P@sSw0Rd! //'.$IP.'  "select caption, ExecutablePath from Win32_Process" ',$salida);
print_r($salida);
La variables $salida, contiene el nombre de los procesos y la ruta de los ejecutables, este puede tratarse con funciones de vector, no entrare al detalle técnico de la programación en PHP, y pasaré a los resultados obtenidos.



Por tanto, se obtuvo los procesos que ejecuta un usuario determinado desde un servidor LINUX, además de un estado del proceso, y en comparación a una base de datos previamente implementada se pudo categorizar los procesos de acuerdo al perfil.

Se puede implementar también el envió de notificaciones cuando se identifiquen grupos como "Servicios en la Nube" o cuando un usuario "Oficial de Crédito" este ejecutando procesos que pertenecen al grupo "Acceso Remoto", como es el caso de "WinVNC.exe" (como se observa en la imagen anterior), este control debe ser de tipo tarea programada.

Espero que este pequeño ejemplo sea de utilidad, lo he implementado con muy buenos resultados y si alguien esta interesado en hacerlo solo tiene que escribirme. Hasta la próxima.

CesarR.

Email: cesarcuenca@gmail.com
Twitter: @ccuencad
Leer más...

03 mayo 2015

Enlaces de la SECmana - 274



    Leer más...