Exchange forensics: El misterioso caso del correo fantasma (IV)

Volvemos a la investigación del incidente examinando lo que nuestra compañera había encontrado en los logs del OWA. Si recogemos todos los accesos realizados desde las dos IP con el User-Agent de Firefox, encontramos varios patrones de interés:

  • Patrón 1: Acceso directo: Se observa en los logs cómo los atacantes acceden a la página de login, y luego a la pantalla principal del correo.
  • Patrón 2: Accesos incorrectos: Los atacantes acceden a la página de login, pero la contraseña es incorrecta (observamos repetidos intentos de inicio de sesión, como si estuvieran realizando un ataque manual de fuerza bruta).
  • Patrón 3: Accesos incorrectos + correcto: En un caso específico comprobamos como los atacantes realizan varios intentos de inicio de sesión y al quinto logran entrar.

Este último patrón es el más curioso ¿Cómo han podido los atacantes extraer las contraseñas de un usuario (que son robustas al tener 12 caracteres y forzada la complejidad) en unos pocos intentos? [Read more…]

Exchange forensics: El misterioso caso del correo fantasma (III)

Después de una noche con poco sueño (vueltas, vueltas al incidente intentando comprender qué ha podido pasar, qué nos hemos podido pasar por alto, qué nos falta por probar), volvemos cargados de cafeína a la Organización.

Autopsy ha terminado el procesado de la imagen de disco duro, pero tras un análisis superficial de los resultados nuestra teoría inicial se confirma: el equipo del usuario está limpio. De hecho, está tan limpio que el correo malicioso ni siquiera llegó a tocar ese equipo. Por lo tanto, se confirma que todo lo que haya pasado ha tenido que pasar en el Exchange.

Seguimos dándole vueltas al incidente, y hay algo que nos reconcome: si los atacantes tuvieran control completo del Exchange, habrían podido borrar el correo de la carpeta de los Elementos Recuperables, cosa que no han hecho. Pero lo que sí que han logrado ha sido poder borrarlo de la tabla EventHistoryDB, que opera a más bajo nivel… ¿o a lo mejor no lo han hecho?

[Read more…]

Exchange forensics: El misterioso caso del correo fantasma (II)

(Nota: Esta es una historia de ficción; los personajes y situaciones no son reales; lo único real es la parte técnica, que se basa en una mezcla de trabajos realizados, experiencias de otros compañeros e investigaciones llevadas a cabo. Si queréis una versión con la misma dosis técnica pero con menos narrativa, podéis consultar el vídeo de la charla que el autor dio en   las XI Jornadas STIC del CCN-CERT aquí )

Dejamos el anterior artículo con nuestras miras puestas sobre el servidor de correo de la Organización, un Microsoft Exchange 2010.  Lo primero que podemos hacer es solicitar a Sistemas que haga un message tracking (seguimiento del mensaje) del correo, que mediante una herramienta gráfica (aunque también podemos hacerlo por consola) nos localiza el histórico de un correo a alto nivel dentro de Exchange.

Primer intento, y el correo sigue sin aparecer. Repetimos las direcciones y el técnico de Sistemas repite la búsqueda sin éxito. El correo tiene que estar por fuerza, así que le pedimos que busque de nuevo en todo el día completo… y por fin lo encontramos, 14 minutos más tarde de cuando tenía que haber sido enviado.

Al parecer la Organización no tiene bien implementada su estrategia de sincronización de tiempos, y tenemos una deriva de 14 minutos entre el servidor Exchange y los clientes (nota mental: insistir en la necesidad de desplegar un servidor NTP lo antes posible), pero al fin hemos localizado el correo. El pantallazo enviado por Sistemas sería algo similar a este (por temas de confidencialidad no podemos poner ninguno de los originales):

[Read more…]

Exchange forensics: El misterioso caso del correo fantasma (I)

(Nota: Esta es una historia de ficción; los personajes y situaciones no son reales; lo único real es la parte técnica, que se basa en una mezcla de trabajos realizados, experiencias de otros compañeros e investigaciones llevadas a cabo. Si queréis una versión con la misma dosis técnica pero con menos narrativa, podéis consultar el vídeo de la charla que el autor dio en   las XI Jornadas STIC del CCN-CERT aquí).

Otro día más en la oficina, con una lista de tareas pendientes a planificar más larga que la barba de Richard Stallman y ninguna de ellas entretenida: informes, documentación de un par de proyectos y la preparación de una reunión es lo que depara el menú del día para casi toda la semana.

Por suerte, el dicho de que “ningún plan sobrevive al contacto con el enemigo” en este caso juega a nuestro favor. Suena el teléfono, y mi jefe va directo al turrón: “Ha saltado una regla YARA del grupo ATD en la CARMEN de [Redacted] (entidad cuya identidad vamos a dejar en el anonimato denominándola a partir de ahora “la Organización”). Coge tus cosas y ve para allí a la carrera”.

El subidón ante la emoción de la caza es instantáneo: ATD es nuestra denominación interna de un grupo de atacantes que cazamos hace unos meses en otro cliente, y nuestros reverser destriparon el malware de arriba a abajo sin piedad. El análisis permitió detectar una serie de “irregularidades” particulares en su forma de actuar, lo que nos permitió generar una serie de reglas de YARA de alta fidelidad (es decir, falsos positivos prácticamente nulos). Si ha saltado en CARMEN (nuestra herramienta de detección avanzada de intrusos), es que tenemos “trufa” al 99%. [Read more…]

Las herramientas de los dioses

Hoy en SAW no vamos a hablar de seguridad sino de religión. De la religión verdadera, de la buena: de Unix. Y de sus dioses: Kernighan, Ritchie, Thompson… podríamos citar unos cuantos. Y de las herramientas que, en los años setenta, estos dioses nos enviaron a los pobres mortales, como el maná caído del cielo para el pueblo elegido. Y es que estos dioses crearon un sistema operativo de verdad, con unas herramientas técnicamente maravillosas y una filosofía muy sencilla: capacidades simples que combinadas hacen tareas complejas. La perfección. La vida es Unix ejecutando un script. Han pasado más de cuarenta años y nosotros, pobres mortales que éramos el pueblo elegido, ¿qué hemos hecho en este tiempo? Tratar de deshonrar ese legado divino con capas artificiales e inútiles (“de abstracción”, las llaman, para tratar de darles sentido) que introducen dos problemas innecesarios en cualquier entorno tecnológico “moderno”: complejidad, y por tanto probabilidad de error, y lentitud. Sirva de ejemplo el ejecutable “true”, al hilo de la historia que hace poco comentaba Rob Pike en Twitter:

$ >mytrue;chmod +x mytrue
$ ./mytrue
$ echo $?
0
$

Un programa cuya única finalidad es devolver siempre 0. Un ejecutable vacío. VACÍO. No puede haber algo más simple y que funcione, desde hace cuarenta años… pues bien, aquí entramos los mortales. Año 2018:

$ ls -l /usr/bin/true
-rwxr-xr-x 1 root wheel 17760 29 abr 2017 /usr/bin/true
$ file /usr/bin/true
/usr/bin/true: Mach-O 64-bit executable x86_64
$ otool -L /usr/bin/true
/usr/bin/true:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
$ /usr/bin/true
$ echo $?
0
$

Por supuesto, este es solo un ejemplo, y no de los graves, sobre cómo nos gusta complicarnos. Como dijo un profeta hace años, “Those who do not understand Unix are condemned to reinvent it, poorly.”. Me imagino el brainstorming inicial en un grupo que luego acaba sacando a la luz determinadas tecnologías:

– Tíos, vamos a hacer unas herramientas para manejar grandes conjuntos de datos que ahora están en ficheros planos.
– Pero, si ya tenemos awk, sed, grep…
– Funcionan demasiado bien y la gente no contrata mantenimiento. Escuchad, las llamaremos “bases de datos”.
– ¿Bases de datos? Irás de coña, ¿no?
– No, no, lo tengo todo atado: hacen que el fichero por debajo sólo se pueda procesar con nuestro programa metiendo varias capas de abstracción, pero realmente también están manejando archivos de texto, como hasta ahora…
– Jajajaja, ¡qué cabrón! ¡No hay huevos, Larry!
– Sujetadme la cerveza.

#define SELECT grep
#define ALTER sed
#define DELETE cut
#define DROP “>”
int make_program_look_bigger[1000000];

– Eres el puto amo, Larry. ¿Qué va a ser lo próximo, chicos? ¿Un lenguaje de programación que pueda convertir esta Sun 3500 en un 8086, con alguna excusa? ¿Qué se os ocurriría?
– Podemos meter un sleep en las líneas pares de nuestro código C y decimos que es independiente de plataforma.
– Jajajajajaja, no colará… Espera, ¿qué haces, James?
– Sujetadme la cerveza…

Evidentemente, situaciones como las anteriores se producen porque aunque sabemos que Unix es la religión verdadera, Kernighan, Ritchie y demás son sus dioses y algunos otros son sus profetas, aún así hay entre nosotros ateos (los llamaremos así para no ser crueles, aunque el nombre técnico es Human Malware), perfiles aparentemente técnicos que no han querido, sabido o podido ver la luz verdadera; los perfiles no técnicos están disculpados, porque Unix no ha iluminado sus vidas aún. Todos conocemos a algún ateo: son los que siempre buscan soluciones complejas a problemas triviales. Preguntadle a cualquier creyente cómo realizar una operación sobre, pongamos, un log, y con una línea de awk lo resolverá. Preguntadle a un ateo y definirá una estructura en base de datos, parseará el log con un programa en Java que tira de varias librerías bajadas de github para convertirlo en un XML, para luego insertarlo en la base de datos de antes, y montará un comité para determinar aspectos críticos, como elegir los tonos pastel para la interfaz gráfica o analizar la ubicación de los botones en una aplicación web que conecta vía API contra un servidor en cloud que a su vez aplica técnicas de machine learning sobre el puto log. ¿Y esto para qué? Para sacar las líneas que contienen la cadena “foo”. Ojo, en el tercer campo, ahí es nada.

Dentro de esa familia que estamos denominando amablemente “ateos” podemos diferenciar varios tipos característicos; son los siguientes:

Proceseitor. Lo arregla todo con comités, procesos, procedimientos, controles, controles de los controles, seguimientos periódicos y derivados. Realmente esta subespecie no es un ateo, sino que es peor: está intentando convertir gente a otra religión, ITIL, considerada como secta destructiva en muchos entornos. Debe considerarse a proceseitor como ALTAMENTE PELIGROSO y, en caso de encontrase con uno, se recomienda no acercarse a él y avisar inmediatamente a las autoridades; también podemos cambiarles alguna de sus obras de cabecera, como Coaching for IT Strategists: a fist fucking approach, por un ejemplar de The Magic Garden Explained o The Design of the Unix Operating System, lo que conseguirá una combustión espontánea en cuanto comiencen la lectura.

Visual developer. Programador que no sabe usar punteros y por tanto reniega de C; el scripting no es una alternativa porque “son ñapas”. Ante un problema (“especificación de requisitos” le llaman) analiza durante días la situación, hace comparativas entre varias tecnologías, monta unos entornos de desarrollo para realizar benchmarkings y, en seis meses, determina que va a desplegar diez capas de abstracción para empoderar al usuario en su relación con la tecnología y evitar así el tratamiento personalizado del dato. Ríete tú de ISO/OSI. Por supuesto el programa nunca funcionará, pero será por culpa de una especificación de requisitos incorrecta; en estos casos, invitar al ateo leer e interiorizar las Sagradas Escrituras, The C Programming Language y The Unix Programming Environment, puede ser útil, aunque no tanto como un disparo en la rodilla.

Segurata. Acaba de actualizar su LinkedIn para poner que es “Senior Security Architect, Red Team Leader and Chief Strategist Hacker” porque se ha leído un manual de metasploit mientras acaba el máster y ya va a tope, con su Kali Linux y sus menús; por supuesto, prefiere ese manual al Computer Networks o al Modern Operating Systems de Tanenbaum, porque Tanenbaum no es jaker y además usa troff, y eso no es cool… Al contrario que en el caso anterior, el disparo en la rodilla suele ser contraproducente, porque el ateo seguiría molestando y encima se pondría paranoico, activando en su vida el modo MOSSAD_CLAIMS_FOR_ME y siendo aún más pesado; es más efectivo modificar su /etc/hosts para apuntar www.sgae.es a www.fsb.ru, convencerlo para atacar a la SGAE por el tema del canon de los CD, que nunca pasa de moda, y dejar que la naturaleza siga su curso.

DevOps. Administra máquinas Ubuntu y se ha comprado una Raspberry, así que lo debemos considerar devops, porque cree que es un BOFH de verdad pero de vez en cuando se le escapan palabros como XML o agile. Acude regularmente a encuentros endogámicos donde algunos devops explican a otros devops cosas de devops, con dockers y tal, y cuenta la leyenda que una vez uno de ellos recompiló un núcleo Linux y no se lo contó a los demás. A Quarter Century of Unix History puede ser un buen detalle con estos ateos, para que sean conscientes de que muchas cosas no las han descubierto ellos, como también puede serlo un teclado sin intro, que nunca viene mal en estos casos. Y si además nos lo queremos pasar bien, tampoco está mal meterles el evil.sh en su .bash_profile.

El usuario. Aunque se considera a sí mismo un perfil técnico porque una vez consiguió salir de vi y se hizo youtuber e instagramer a la vez, realmente sus conocimientos no son muy amplios y debemos considerarlo un usuario. De vez en cuando dice frases como “Nosotros, los técnicos” o “Aquí todos venimos de la parte técnica”, que te suenan como cuando los gibraltareños dicen “Nozotro lo ingleze”. Ante este tipo particular de ateo no podemos recomendar ninguna lectura, sólo comprensión y paciencia, y también hablarles despacito para que no hagan swap; por otro lado, es fácil -y divertido, hay que decirlo- entretenerlos con algunos palabros sabiamente combinados para que no molesten, como “Es que en el red team estamos trabajando con una VPN a través de USB que envía paquetes TCP a dispositivos IoT”. Ale, a procesar, campeón.

¿Qué hacemos con esta gente? Guardad el AK-47, por favor, que os veo venir y no debemos legislar en caliente. La situación es compleja, principalmente porque los ateos no tienen depredadores naturales y, sobre todo en los últimos años, se han dedicado a reproducirse de manera exponencial; si os cruzáis con uno podéis regalarle condones para frenar su tendencia reproductiva, pero un consejo: jamás os hagáis los héroes, que esta gente ya no tiene nada que perder, como los administradores de Lotus Notes, y pueden incluso ponerse agresivos. Por ejemplo, a proceseitor le molestan especialmente cosas como que alguien se salte el paso 3, punto 3.8, apartado 3.8.A, párrafo 3.8.A.c, línea 3.8.A.c.XVI, del procedimiento “Gestión de recursos informáticos corporativos en plena sinergia con el negocio”, que dice que todo renice debe ser aprobado mediante un burofax con el sello oficial, firmado por el IT Manager y dirigido al Business Strategist de la organización. Se pone nervioso, le da vueltas la cabeza y empieza a hablar en ITIL.

En SAW no tenemos la solución mágica para hacer frente al colectivo de ateos que pululan en las organizaciones; algunos ingenuos piensan que se pueden recuperar con iniciativas sencillas, por ejemplo con campañas donde se use el hashtag #AdoptaUnAteo (#AdoptALuser) para enviarles indirectas simpáticas que traten de marcarles el buen camino, del tipo “biff también avisa de nuevos mensajes… desde hace 40 años y sin soniditos ridículos, imbécil #AdoptaUnAteo”, “Menos stackoverflow y más RTFM #AdoptaUnAteo” o “No abras ficheros CSV con Excel, hijo de puta! #AdoptaUnAteo”. Pero nosotros sabemos que esto no funcionará: ni devolverá al ateo al camino verdadero ni tampoco conseguiremos que convierta el agua en vino. Por eso miramos a la Historia: ¿qué se ha hecho de siempre con la gente que abandona la religión verdadera? Dos cosas: exorcismos y sacrificios humanos. Punto.

Si vamos a exorcizar ateos, por ejemplo poseídos por systemd, debemos ir con cuidado; desde SAW recomendamos que un exorcismo lo ejecuten sólo profesionales, porque si sale mal nos confiamos, creemos haberlo recuperado y un día nos encontramos al falso creyente diciendo en un foro que ifconfig está deprecated. Cuando se dé cuenta de que vamos a exorcizarlo, el ateo tratará de confundirnos para hacernos creer que ha visto la luz verdadera; puede decir cosas en idiomas desconocidos, fruto de la posesión, del tipo “Powered by Solaris…” o “alias nano=‘rm -f’”, pero no nos dejemos engañar: al acercarle el Essential System Administration, su solo contacto le producirá quemaduras, comenzará a girar la cabeza 180 grados, a escupir espuma por la boca y a soltar blasfemias como “Has visto lo que ha hecho la cerda de tu hija”, “Tómame, tómame” o “Yo soy el Maligno y capturo SIGKILL”. Cuidado. Aquí es cuando el exorcista, un profesional, arrojará varios SIGTERM contra el PID del ateo y pronunciará unas palabras sagradas para liberar su alma:

Te exorcizamos Espíritu Inmundo, quienquiera que seas, Java, XML o Word. En el nombre de Unix seas arrojado de las almas de la religión verdadera. No oses oscurecer a los elegidos a quienes pretendes hacerte semejante; te lo ordena Brian, te lo ordena Dennis, te lo ordena Rob, que se hicieron carne y habitaron entre nosotros. Que los descendientes de MULTICS se apiaden de ti, que la pureza de un buen script limpie tu alma, que uses goto cuando tengas que usarlo. Unix es la senda y yo soy su pastor, así está escrito en mi GECOS. Hosanna, K&R, limpiad esta alma.

En este momento el ateo debe mostrar signos de reconversión, por ejemplo desinstalando la máquina virtual de Java o recitando de memoria la página man de getpwent(3). Si no es así ya debemos rociarlo de SIGKILL o, directamente, ejecutar un shutdown, que es el último recurso del exorcista antes de pasar a mayores: si el exorcismo no funciona ya sólo nos queda el sacrificio humano. Por ejemplo, en SAW, desde el fallecimiento de Ritchie hace más de siete años, mensualmente sacrificamos en su honor a un ateo en la hoguera, a la antigua, con encanto; lo hemos puesto en el cron y así no falla, que si no luego se reencarnan en consultores ISO y la liamos. Pero no penséis que es un simple kill -9, no: antes de quemarlo lo abrimos en canal con un CD donde están las fuentes de System V, nos comemos sus vísceras, bebemos su sangre y rezamos dos scriptnuestros para que aquellos dioses que se hicieron carne en los 70 vuelvan a poner cordura en este mundo 4.0 que nos rodea. Todo esto en honor a los creadores de maravillas como Unix, C o awk y, por qué no, también porque nos gusta.

DISCLAIMER: Todo este post está basado en hechos ficticios y no refleja en ningún momento opiniones personales del autor, efectivamente y no. Cualquier parecido con la realidad es pura coincidencia.

Detección de explotación del editor de ecuaciones de Office

Hace unos días apareció en nuestros sistemas de detección un documento RTF a través de una regla bastante genérica que tenemos “para ver qué pilla”. Se trata de una regla que muchas veces nos genera falsos positivos, pero la cantidad es perfectamente asumible por los buenos resultados que nos da cuando acierta.

Llama la atención que siendo del típico correo tipo “Purchase Order”, hubiera pasado por varios filtros sin haber levantado sospechas. Tratándose de una amenaza genérica, no dirigida contra nadie en concreto, parece raro que estén utilizando alguna técnica o exploit novedoso.

En un primer vistazo rápido en estático no parece haber nada raro. El archivo tiene la típica ofuscación con caracteres de “espacio en blanco” en su interior, que, aunque simple, es efectiva para ocultarse ante la búsqueda de firmas. Dentro contiene un objeto identificado como ‘tFsqXa3iGNVxvyKH5LKGet0hQKeCl‘. Nada concluyente. La socorrida herramienta ‘strings’ tampoco es de mucha ayuda. Lo único que se puede identificar rebuscando algo más es una shell dentro de este último objeto tras extraerlo. [Read more…]

Seguridad de contratos inteligentes basados en Blockchain II – Vulnerabilidades y riesgos

En la parte anterior de esta serie sobre la seguridad de blockchain vimos los riesgos asociados con la implementación autónoma y la ejecución de contratos inteligentes en un blockchain público. También presentamos algunos ejemplos de alto perfil de ataques a contratos inteligentes que han causado la pérdida de grandes sumas de dinero y han cambiado la forma en que vemos las interacciones comerciales en la cadena de bloques.

En este episodio, repasaremos algunos problemas conocidos y vulnerabilidades.

Fuga de clave privada

El uso de claves privadas no seguras es realmente un error del usuario, en lugar de una vulnerabilidad. Sin embargo, lo mencionamos, como sucede sorprendentemente a menudo, y ciertos actores se han especializado en robar fondos de direcciones inseguras.

Lo que generalmente ocurre es que las direcciones de desarrollo (como las utilizadas por las herramientas de prueba, como Ganache/TestPRC) se utilizan en producción. Estas son direcciones generadas a partir de claves privadas conocidas públicamente. Algunos usuarios incluso han importado estas claves sin saberlo en el software de cartera virtual, al usar las palabras de semilla originales usadas en la generación de la clave privada.

Los atacantes están monitorizando estas direcciones y cualquier cantidad transferida a dicha dirección en la red principal de Ethereum tiende a desaparecer inmediatamente (dentro de 2 bloques).
[Read more…]

Análisis de Samouri: una botnet de noobs, para noobs

Hace unos días encontramos un malware Linux con elementos bastante conocidos hasta la fecha, sobretodo importados de Gafgyt. Sin embargo, ciertas modificaciones hicieron que le dedicáramos el tiempo de analizarlo.

En un primer momento, el malware lleva a cabo funciones de reconocimiento del entorno, obteniendo la IP pública del sistema o el Endianness, donde por defecto tomará little endian (recordemos que arquitecturas como ARM, PowerPC o MIPS pueden trabajar con ambos órdenes.) [Read more…]

Evadiendo AV con Shellter. También tengo Sysmon y Wazuh III. GAME OVER

Después de los dos primeros post de la historia [1] [2] donde os contábamos las intenciones de Pepito y la seguridad que tiene Pepote, en este post os vamos a contar el desenlace. Poneros en situación de los dos personajes de la historia.

Pepito:

“Aquí sigo, esperando a que mi jefe ejecute el “programa” que me ha pedido y que le he preparado con especial cariño. [Read more…]

Laboratorio de Hacking (II): Portal cautivo Zsun Wifi Card Reader (2ª parte)

Vamos con la segunda parte del artículo sobre el portal cautivo Zsun Wifi Card Reader (ver 1ªparte).

Necesitamos que nuestra aplicación PHP sea la fachada de nuestra red Wifi pero también necesitamos acceder a OpenWRT para administrarlo debidamente. Esto podemos hacerlo si ejecutamos LuCI (la interfaz web de OpenWRT) en un puerto alternativo. Instalaremos Lighttpd y PHP para alojar nuestro portal, y moveremos uHTTP y LuCI en el puerto 8080. Hay que comentar que Lighttpd es capaz de manejar certificados SSL y reescrituras de URL para que podamos configurar nuestro portal cautivo. [Read more…]