Últimamente, con la proliferación de malware del tipo ransomware, las empresas que no tenían ya bloqueada la descarga de ficheros ejecutables en su Firewall o Proxy, la han bloqueado. La medida es efectiva por la mecánica de infección de este tipo de malware, que en muchos casos implica la descarga de un fichero ejecutable que es el que se encarga de cifrar la valiosa información del usuario y de la empresa. Sin embargo, esta medida no tiene porque ser eficaz frente a un ataque dirigido y hecho a medida como suelen ser los APT, como vamos a ver.
Bloquear la descarga de ejecutables en el firewall de perímetro por el que los usuarios de la empresa navegan en Internet es una medida a tener en cuenta por los responsables de seguridad dentro de la política de Defensa en Profundidad de la red, pero una vez bloqueada esta descarga de ficheros, inevitablemente surgen preguntas. ¿Puede un atacante saltársela fácilmente? ¿Y si se salta, es posible implementar de forma sencilla un ataque automatizado?
HTTPs Inspection: Canal cifrado o canal abierto
Supongo que hay varios enfoques para conseguir saltarse la detección de un fichero EXE por parte del firewall en cuestión. Uno sería, por ejemplo, cifrar el canal de comunicación de las descarga punto a punto para que no se pueda analizar ese tráfico, pero desde hace años los sistemas de navegación empresariales pueden implementar medidas de Bridging HTTPs - como implementa desde hace años Forefront TMG - para inspeccionar el tráfico de descarga que hacen los clientes. Es decir, los clientes para poder navegar por Internet necesitan configurar un certificado raíz del firewall y este hace de man in the middle para inspeccionar tráfico HTTPs.
En esta prueba de concepto, vamos a intentar engañar al firewall para que la descarga de los ejecutables no sea considerada como tal, aún cuando el tráfico pueda ser inspeccionado porque venga por HTTP o porque se esté haciendo una inspección HTTPs.
Infiltrando binarios por partes
Por empezar por algún sitio me voy a centrar en los archivos EXE y como solución perimetral un firewall con inspección de tráfico y bloqueo de ficheros. Lo primero es averiguar qué partes del ficheros son la firma de un EXE para el firewall. Esto puede ser solo la cabecera inicial del binario con los Magic Numbers que se buscan, o algo mucho más elaborado donde se comprueben más partes del binario.
Como primera prueba empírica, vamos a partirlo en dos y ver si una, ninguna o las dos partes son detectadas por el firewall y lo bloquea o lo deja pasar. El resultado que se obtiene es que el primer trozo, al descargarlo, es considerado como un EXE y el segundo no:
Ya tenemos pistas. En el primer “trozo” del fichero EXE se encuentra la firma que se busca como patrón para detectarlo y bloquear la descarga. ¿Será un patrón? Si lo es, ¿se podría trocear el fichero en partes lo suficientemente pequeñas para que ese patrón quedara diluido? La idea es que si lo troceamos lo suficiente, podríamos llegar a ofuscarle la firma. Después de algunas iteraciones jugando con el tamaño de las partes del archivo, con 29 partes de 200 bytes del principio del EXE y otra parte más con el resto del fichero, llegamos a un escenario como éste.
Una vez subidas al servidor web de turno se intentan descargar y todas bajan. Hemos conseguido descargar un EXE estando prohibido. Ahora solo queda volver a juntar las partes para conseguir reconstruir nuestra "herramienta de hacking" Putty.
Automatizando la infiltración del binario con Excel
Ahora queda la segunda parte, en la que vamos a intentar automatizar el proceso de recomponerlo. Para ello vamos a utilizar la potencia de Excel y sus macros - que ya vimos que un atacante se puede llevar uno la base de datos completa de la empresa con solo habilitar las macros - y que se han puesto de moda últimamente otra vez. Solo hay que programar una macro que descargue las partes del EXE de la web donde estén colgados y que después los junte otra vez. Ese archivo Excel tendría que descargar las partes, después cargar esas partes en orden en un string y después escribir ese string en un archivo binario que nivel de código no es muy difícil. Y usar después la función Auto_Open(), por ejemplo, para que se ejecute todo simplemente abriendo el Excel.
Con solo abrir el Excel - y conseguir que se ejecute la macro - el fichero Excel descarga todas las partes del servidor desde la máquina interna de la red detrás del firewall, las une y después ejecuta el binario resultante.
Protección en el end-point
Ya hemos conseguido que el fichero Excel con macros se baje un binario saltándose el bloqueo de ficheros EXE en el firewall. La siguiente pregunta es si un fichero de estas características será muy llamativo para las protecciones de end-point como los antivirus. Para la mayoría no es significativo, pero además el código se puede mejorar y ofuscar en diferentes iteraciones hasta que se evada el motor antivirus en concreto que tenga la empresa objetivo de este ataque.
Un posible problema es que el usuario si puede, tiene que habilitar las macros para que esto funcione, pero con una campaña de Spear Phishing contra los empleados de la empresa objetivo con este fichero Excel adjunto ¿estaríais completamente seguros de que ningún usuario le va a dar a activar macros? Por supuesto, existen políticas a nivel de Active Directory para que las macros vayan firmadas, pero esto ya vimos hace tiempo que se puede saltar si el usuario de Excel quiere o cae engañado para hacerlo, con las técnicas de "Hacking Remote Apps: Jailbreaking con Excel".
Owning con Metasploit
Ahora imaginad que en vez de el Putty el archivo fuera un script de Phyton compilado a EXE con un cliente que devolviera una shell remota a través de HTTP, o un ransomware distribuido de esta forma o directamente un Meterpreter para hacer diabluras con Metasploit, tal y como hicieron Chema Alonso y Pablo González en la conferencia del Security Innovation Day de 2014. Aquí os dejo el vídeo con el instante de tiempo de esta demo con Excel.
Figura 10: Metiendo una shell con Excel
No quiere decir este artículo que las medidas de bloqueo de ficheros EXE en los firewalls por los que se navega sean inútiles. Ni mucho menos, proporcionan una protección adecuada para evitar que el malware pueda entrar fácilmente. Pero estas medidas deben acompañarse de muchas otras. En este caso concreto hemos hecho una división del binario para evadir las firmas, pero el atacante podría haber cifrado el fichero completamente en lugar de meterlo por partes, o encontrar otra estrategia para saltarse el fichero.
Así que, dentro de la estrategia de defensa de una empresa, habría que aplicar medidas de protección a todos los niveles, y fortificar Windows correctamente, incluidas las opciones de Excel. Este artículo, solo es un ejercicio para probar cómo un APT puede acabar encontrando el camino si tiene tiempo para aprender cuáles son tus defensas y preparar un ataque diseñado especialmente para ti. No te olvides de eso.
Saludos.
Autor: Xavier Nogues García
Figura 1: Cómo infiltrar malware o herramientas de hacking en una empresa con Excel |
Bloquear la descarga de ejecutables en el firewall de perímetro por el que los usuarios de la empresa navegan en Internet es una medida a tener en cuenta por los responsables de seguridad dentro de la política de Defensa en Profundidad de la red, pero una vez bloqueada esta descarga de ficheros, inevitablemente surgen preguntas. ¿Puede un atacante saltársela fácilmente? ¿Y si se salta, es posible implementar de forma sencilla un ataque automatizado?
HTTPs Inspection: Canal cifrado o canal abierto
Supongo que hay varios enfoques para conseguir saltarse la detección de un fichero EXE por parte del firewall en cuestión. Uno sería, por ejemplo, cifrar el canal de comunicación de las descarga punto a punto para que no se pueda analizar ese tráfico, pero desde hace años los sistemas de navegación empresariales pueden implementar medidas de Bridging HTTPs - como implementa desde hace años Forefront TMG - para inspeccionar el tráfico de descarga que hacen los clientes. Es decir, los clientes para poder navegar por Internet necesitan configurar un certificado raíz del firewall y este hace de man in the middle para inspeccionar tráfico HTTPs.
Figura 2: HTTPs Inspection en Forefront TMG |
En esta prueba de concepto, vamos a intentar engañar al firewall para que la descarga de los ejecutables no sea considerada como tal, aún cuando el tráfico pueda ser inspeccionado porque venga por HTTP o porque se esté haciendo una inspección HTTPs.
Infiltrando binarios por partes
Por empezar por algún sitio me voy a centrar en los archivos EXE y como solución perimetral un firewall con inspección de tráfico y bloqueo de ficheros. Lo primero es averiguar qué partes del ficheros son la firma de un EXE para el firewall. Esto puede ser solo la cabecera inicial del binario con los Magic Numbers que se buscan, o algo mucho más elaborado donde se comprueben más partes del binario.
Figura 3: Primera parte del fichero EXE es detectada |
Como primera prueba empírica, vamos a partirlo en dos y ver si una, ninguna o las dos partes son detectadas por el firewall y lo bloquea o lo deja pasar. El resultado que se obtiene es que el primer trozo, al descargarlo, es considerado como un EXE y el segundo no:
Figura 4: La segunda parte del fichero sí es descargada |
Ya tenemos pistas. En el primer “trozo” del fichero EXE se encuentra la firma que se busca como patrón para detectarlo y bloquear la descarga. ¿Será un patrón? Si lo es, ¿se podría trocear el fichero en partes lo suficientemente pequeñas para que ese patrón quedara diluido? La idea es que si lo troceamos lo suficiente, podríamos llegar a ofuscarle la firma. Después de algunas iteraciones jugando con el tamaño de las partes del archivo, con 29 partes de 200 bytes del principio del EXE y otra parte más con el resto del fichero, llegamos a un escenario como éste.
Figura 5: Fichero dividido en 30 partes |
Una vez subidas al servidor web de turno se intentan descargar y todas bajan. Hemos conseguido descargar un EXE estando prohibido. Ahora solo queda volver a juntar las partes para conseguir reconstruir nuestra "herramienta de hacking" Putty.
Figura 6: Putty se ejecuta correctamente una vez reconstruido el binario |
Automatizando la infiltración del binario con Excel
Ahora queda la segunda parte, en la que vamos a intentar automatizar el proceso de recomponerlo. Para ello vamos a utilizar la potencia de Excel y sus macros - que ya vimos que un atacante se puede llevar uno la base de datos completa de la empresa con solo habilitar las macros - y que se han puesto de moda últimamente otra vez. Solo hay que programar una macro que descargue las partes del EXE de la web donde estén colgados y que después los junte otra vez. Ese archivo Excel tendría que descargar las partes, después cargar esas partes en orden en un string y después escribir ese string en un archivo binario que nivel de código no es muy difícil. Y usar después la función Auto_Open(), por ejemplo, para que se ejecute todo simplemente abriendo el Excel.
Figura 7: A partir del Excel se descargan las partes y se monta el archivo final |
Con solo abrir el Excel - y conseguir que se ejecute la macro - el fichero Excel descarga todas las partes del servidor desde la máquina interna de la red detrás del firewall, las une y después ejecuta el binario resultante.
Figura 8: Ejecución de Putty con solo ejecutar la macro del fichero Excel |
Protección en el end-point
Ya hemos conseguido que el fichero Excel con macros se baje un binario saltándose el bloqueo de ficheros EXE en el firewall. La siguiente pregunta es si un fichero de estas características será muy llamativo para las protecciones de end-point como los antivirus. Para la mayoría no es significativo, pero además el código se puede mejorar y ofuscar en diferentes iteraciones hasta que se evada el motor antivirus en concreto que tenga la empresa objetivo de este ataque.
Figura 9: El fichero Excel no llama la atención de muchos Antivirus |
Un posible problema es que el usuario si puede, tiene que habilitar las macros para que esto funcione, pero con una campaña de Spear Phishing contra los empleados de la empresa objetivo con este fichero Excel adjunto ¿estaríais completamente seguros de que ningún usuario le va a dar a activar macros? Por supuesto, existen políticas a nivel de Active Directory para que las macros vayan firmadas, pero esto ya vimos hace tiempo que se puede saltar si el usuario de Excel quiere o cae engañado para hacerlo, con las técnicas de "Hacking Remote Apps: Jailbreaking con Excel".
Owning con Metasploit
Ahora imaginad que en vez de el Putty el archivo fuera un script de Phyton compilado a EXE con un cliente que devolviera una shell remota a través de HTTP, o un ransomware distribuido de esta forma o directamente un Meterpreter para hacer diabluras con Metasploit, tal y como hicieron Chema Alonso y Pablo González en la conferencia del Security Innovation Day de 2014. Aquí os dejo el vídeo con el instante de tiempo de esta demo con Excel.
Figura 10: Metiendo una shell con Excel
No quiere decir este artículo que las medidas de bloqueo de ficheros EXE en los firewalls por los que se navega sean inútiles. Ni mucho menos, proporcionan una protección adecuada para evitar que el malware pueda entrar fácilmente. Pero estas medidas deben acompañarse de muchas otras. En este caso concreto hemos hecho una división del binario para evadir las firmas, pero el atacante podría haber cifrado el fichero completamente en lugar de meterlo por partes, o encontrar otra estrategia para saltarse el fichero.
Así que, dentro de la estrategia de defensa de una empresa, habría que aplicar medidas de protección a todos los niveles, y fortificar Windows correctamente, incluidas las opciones de Excel. Este artículo, solo es un ejercicio para probar cómo un APT puede acabar encontrando el camino si tiene tiempo para aprender cuáles son tus defensas y preparar un ataque diseñado especialmente para ti. No te olvides de eso.
Saludos.
Autor: Xavier Nogues García
El video fenomenal, y la poc tb, gran trabajo.
ResponderEliminarEl unico "pero" os lo pongo yo como programador web, y es que cuando alguien apunta al cdn de jQuery o cualquier otra libreria no lo hace por vageza si no por cacheo de la libreria.
Si un usuario ya ha estado en una web que contenia ese fichero, cuando entren a la nuestra no tendran que descargarlo, simple optimización, pero entiendo que en este caso es una vulbnerabilidad.
Por tanto, optimizamos o aseguramos, por que las dos no se puede no? ahahahha
Un saludo.
Excelente artículo Xavier.
ResponderEliminarCierto es que las Amenazas Avanzadas son más presentes y afectan cada día más a las organizaciones. Por este motivo, el uso de un Firewall Perimetral no es la única herramienta de seguridad a desplegar en nuestras redes, si no la necesidad de una herramienta de Sandboxing es más importante y deberíamos tener en cuenta.
Saludos
Y si se implementan las restricciones de software que tiene windows por politicas esto nos protegeria de este tipo de ataques?? Ya sea por restriccion de software o zinas de confianza??
ResponderEliminarY si se implementan las restricciones de software que tiene windows por politicas esto nos protegeria de este tipo de ataques?? Ya sea por restriccion de software o zinas de confianza??
ResponderEliminarYO recomiendo usar un EDR (Endpoint detection and response) en vez de un AV tradicional, no podemos estar confiando en un producto basado en firmas o una heuristica basica ... las tendencia apunta a usar un motor basado en comportamiento mas agresivo.. Por ejemplo Malwarebytes
ResponderEliminarChema... leyendo una noticia tuya en 20 minutos (Enhorabuena!!! lo mereces) leo lo siguiente:
ResponderEliminar"Alonso, autor del blo El otro lado del mal"
jajajaja
http://www.20minutos.es/noticia/2756258/0/hacker-chema-alonso-telefonica/
No estoy seguro si es viable, pero propongo una protección adicional.
ResponderEliminarCrear una política en el server de antispam, que "limpie" todos los archivos excel.
Por limpiar me refiero a que borre todas las macros que contengan estos archivos antes de entregarlos al destinatario.
(Adicionalmente enviar un e-mail de alerta, tanto al usuario final como al administrador de seguridad, indicando que fueron eliminadas macros de un archivo y correo especifico)
[Y si envían un archivo de excel zipeados con una contraseña y en el correo se indica al usuario como abrirlo? Protección; Política de seguridad automática, todos los archivos que vengan encriptados, serán bloqueados. Para enviar documentación sensible es necesario hacer uso de métodos de confianza definidos por la empresa.]
[Y si envían un link para descargar el archivo excel? Protección: Esto sería mas complejo de poner en un política, pero podría programase al servidor de antispam, para que descargara todos los archivos de los enlaces que tiene un correo, para luego verificarlos]
Lamentablemente en muchas ocasiones la seguridad se contrapone con la usabilidad, pues habrá algunas ocasiones que ciertas macros son necesarias en algunos archivos de excel. Pero lo común es que la mayoría no tienen macros. Salvo algunas empresas que les guste mucho automatizar acciones, para esto sería conveniente que tengan sus macros en archivos por separado y solo intercambien archivos con datos.
Y para cuando sea necesario realmente compartir un excel con macros, utilizar un método seguro de envió de documentos, que autentifique tanto al remitente como al destinatario.
Que les parecer si proponen mas métodos para saltarse las medidas que indico y entre todos las analizamos para crear las contra medidas especificas?
Muy interesante el artículo y la solución buscada. Pregunto:
ResponderEliminar1. ¿Y si cambian los 2 primeros bytes del exe? (MZ)
2. ¿Y si encriptamos con un algoritmo muy simple la cabecera del exe?
3. Si lo probaron ¿porque no funcionó?
Muchas gracias.
¡Saludos!
Hola, yo creo que una de las gracias es que la tecnica es ciega, no hace falta saber cual es el patron. Por ejemplo se podria isar para saltarse depende que dlps perimetrales o cambiar el exe por un jar sin tocar el exel que lis descarga.
ResponderEliminar