JT Ormandy un investigador de seguridad de Google, dio a conocer hace pocos días el desarrollo del proyecto LoadLibrary, el cual está destinado a cargar bibliotecas DLL de Windows para su uso en aplicaciones para Linux. El proyecto proporciona una biblioteca entre capas con la que puede cargar un archivo DLL en formato PE/COFF y llamar a las funciones definidas en él.
LoadLibrary asume la función de cargar la biblioteca en la memoria e importar los caracteres existentes, proporcionando a la aplicación Linux una API de estilo dlopen. El código se puede depurar usando gdb, ASAN y Valgrind. Puede ajustar el código ejecutable en tiempo de ejecución conectando ganchos y aplicando parches (parches de tiempo de ejecución). Se admiten excepciones no deseadas para C++.
El proyecto de LoadLibrary no pretende sustituir a los proyectos actuales que realizan un trabajo similar, tales como Wine. LoadLibrary tiene como objetivo permitir a las bibliotecas de Windows DLL se carguen y se puedan acceder a ellas como se tratarán de código nativo de Linux, no tratando de ejecutar Windows en Linux y otros programas similares, pero simplemente cargando las bibliotecas.
El objetivo del proyecto es organizar pruebas de fuzzing distribuidas escalables y eficientes de archivos DLL en un entorno basado en Linux.
En Windows, la realización de pruebas de cobertura y fuzzing no permite un rendimiento adecuado y a menudo, requiere el lanzamiento de una instancia virtualizada separada de Windows, especialmente cuando se trata de analizar productos sofisticados, como software antivirus, que cubren el trabajo a nivel del núcleo y el espacio del usuario.
La intención de continuar con el desarrollo de este proyecto es permitir la difusión escalable y eficiente de las bibliotecas de Windows autónomas en Linux.
- Despacho de excepción C++ y desenrollado.
- Cargando símbolos adicionales de IDA.
- Depuración con gdb (incluidos símbolos), puntos de interrupción, seguimientos de pila, etc.
- Runtime enganchado y parcheado.
- Soporte para ASAN y Valgrind para detectar errores sutiles de corrupción de memoria.
- Si necesita agregar soporte para cualquier importación externa, escribir resguardos suele ser rápido y fácil.
Con la ayuda de LoadLibrary, los investigadores de Google están buscando vulnerabilidades en códecs de video, escáneres antivirus, bibliotecas de descompresión de datos, decodificadores de imágenes, etc.
“La transmisión distribuida y escalable en windows puede ser desafiante e ineficiente, esto es especialmente cierto para los productos de seguridad de punto final, que utilizan componentes interconectados complejos que abarcan el núcleo y el espacio de usuario.
Esto generalmente requiere rotar un entorno de windows virtualizado completo para su difusión. esto es menos problemático en linux, y he descubierto que a menudo es posible portar componentes de productos de windows antivirus para linux, lo que me permite ejecutar el código que estoy probando en contenedores mínimos con muy poca sobrecarga y expandir fácilmente las pruebas «.
Por ejemplo, usando LoadLibrary, fue posible portar antivirus Windows Defender para ejecutar en Linux. El estudio de mpengine.dll, que forma la base de Windows Defender, permitió analizar una gran cantidad de controladores complicados de varios formatos, emuladores de FS e intérpretes de idiomas que potencialmente proporcionan vectores para posibles ataques.
LoadLibrary también se usó para identificar una vulnerabilidad remota en el paquete antivirus Avast.
Al estudiar la DLL de este antivirus, se reveló que el proceso de escaneo privilegiado clave incluye un intérprete de JavaScript completo utilizado para emular la ejecución de código JavaScript de terceros.
Este proceso no está aislado en el entorno de espacio aislado, no restablece los privilegios y analiza los datos externos no verificados del FS y el tráfico de red interceptado.
Dado que cualquier vulnerabilidad en este proceso complicado e inseguro podría conducir a un compromiso remoto de todo el sistema, se desarrolló un shell avscript especial sobre la base de LoadLibrary para analizar vulnerabilidades en el escáner antivirus Avast en un entorno basado en Linux.
El cargador PE / COFF se basa en el código ndiswrapper. El código del proyecto se distribuye bajo la licencia GPLv2. El código puede ser consultado en el siguiente enlace.
Todos a cagar dlls se ha dicho, no os olvidéis el papel higiénico