DoubleAgent: un ataque que usa una herramienta "builtin" no documentada de Windows para secuestrar cualquier aplicación

Cybellum, una empresa israelí de prevención de 0-days, descubrió una nueva vulnerabilidad en Windows que llamaron DoubleAgent, una nueva técnica de inyección de código que funciona en todas las versiones de los sistemas operativos Microsoft Windows, desde Windows XP hasta la última versión de Windows 10.

Lo peor es que DoubleAgent explota una característica legítima y no documentada en Windows de 15 años de edad denominada "Application Verifier" (builtin), que en principio no se puede corregir.

Application Verifier es una herramienta de verificación en tiempo de ejecución que carga DLLs en procesos para hacer pruebas, permitiendo a los desarrolladores detectar y corregir errores de programación en sus aplicaciones.

La vulnerabilidad reside en cómo esta herramienta maneja DLL. Según los investigadores, como parte del proceso, las DLLs están vinculadas a los procesos de destino en una entrada del Registro de Windows, pero los atacantes pueden reemplazar la DLL real por una maliciosa.

Simplemente mediante la creación de una clave de registro de Windows con el mismo nombre de la aplicación que se quiere secuestrar, un atacante puede proporcionar su propia DLL que quiera inyectar en un proceso legítimo de cualquier aplicación.

Una vez que se ha inyectado la DLL personalizada, el atacante puede tomar el control total del sistema y realizar acciones maliciosas, como instalar backdoors y malware persistente, secuestrar los permisos de cualquier proceso de confianza existente o incluso secuestrar las sesiones de otros usuarios.

Así es como los investigadores de Cybellum dicen que este ataque puede funcionar:

     "DoubleAgent le da al atacante la capacidad de inyectar cualquier DLL en cualquier proceso. La inyección de código se produce muy temprano durante el proceso de arranque  del equipo de la víctima, dando al atacante control total sobre el proceso que no tiene manera de protegerse".
     
Para demostrar el ataque de DoubleAgent, el equipo secuestró el antivirus -que es la principal defensa de los sistemas para evitar que cualquier malware se ejecute utilizando su técnica y convertiéndolo en malware.

El equipo fue capaz de corromper la aplicación antivirus utilizando el ataque DoubleAgent y usar el software de seguridad para actuar como ransomware de cifrado de disco. Podéis verlo en el siguiente vídeo:

Como decíamos al principio, el ataque funciona en todas las versiones del sistema operativo Windows de Windows XP a Windows 10 y es difícil de bloquear porque el código malicioso se puede volver a inyectar en el proceso legítimo dirigido después de que el sistema se reinicia. Gracias a la clave de registro persistente.

Los investigadores dijeron que la mayoría de los productos de seguridad de hoy en día en el mercado son susceptibles a los ataques DoubleAgent, incluso después de dejar 90 días posteriores a reportarse (responsible disclosure) muchos siguen sin parchearse. No obstante decir que aunque Cybellum sólo se centró en los programas de antivirus, el ataque DoubleAgent podría funcionar con cualquier aplicación, incluso el sistema operativo Windows en sí.

Para usarlo podéis seguir estos sencillos pasos:

- Clonar / Descargar el código fuente de DoubleAgent.
- Compilar la solución principal dos veces, una vez en x86 y otra en x64. Este paso es crucial ya que crea versiones x86 y x64 de DoubleAgentDll.dll que es necesario para realizar una instalación correcta.
- Copiar la carpeta bin completa en la máquina de destino.
- Ejecutar el instalador:

Uso: DoubleAgent.exe install \ uninstall \ repair nombre_proceso

 p.ej. DoubleAgent.exe instala cmd.exe

Tener en cuenta que el instalador de 32 bits (DoubleAgent_x86.exe) se puede utilizar tanto en Windows x86 como en Windows x64. Sin embargo, el instalador de 64 bits (DoubleAgent_x64.exe) sólo se puede utilizar en Windows x64.

La próxima vez que se cargue el proceso de destino DoubleAgentDll.dll se inyectará en él.

Referencias:
- https://cybellum.com/doubleagentzero-day-code-injection-and-persistence-technique/
- https://github.com/Cybellum/DoubleAgent
- https://thehackernews.com/2017/03/hacking-windows-dll-injection.html
- https://betanews.com/2017/03/22/doubleagent-zero-day-security-exploit/
- https://www.helpnetsecurity.com/2017/03/22/windows-doubleagent-attack/

Comentarios

  1. http://www.kernelmode.info/forum/viewtopic.php?f=2&t=4687

    Un saludo

    ResponderEliminar
  2. Creo entender que hace días que se comprobó que esta noticia era un montón de FUD. Además del enlace de kernelmode que se ha puesto en el comentario anterior (y que vale su peso en oro), ya han aparecido varios posts en otros blogs demostrando que, no solo no estamos ante una vulnerabilidad, si no que además está perfectamente documentada por la propia Microsoft desde Agosto de 2012.

    Lo más gracioso del asunto es que todo apunta a que estos "expertos" habrían robado su "investigación" nada menos que uno de los directivos de CrowdStrike. Ni en las mejores telenovelas, oiga.

    Fuentes:
    https://nakedsecurity.sophos.com/2017/03/27/doubleagent-vulnerability-just-how-bad-is-it/

    http://blog.segu-info.com.ar/2017/03/vulnerabilidad-permite-tomar-control-de.html

    ResponderEliminar
  3. Buenas

    Voy a lanzar una pregunta hablando desde la ignorancia... Si podeis explicarme o corregirme os lo agradecería...

    ¿Se podría disponer de una lista de hashes en el Aplication Verifier correspondientes con los hashes de las .dll propias del sistema (las que vienen en Windows por defecto) y, una vez cargadas, realizar la carga del resto de .dll bajo permiso del usuario o tras haber sido analizadas por un AV?

    Se evitaría la carga de .dll lo verificadas o de terceros ¿no?

    Gracias de antemano

    Un saludo

    ResponderEliminar

Publicar un comentario