LoadLibrary, uma camada para carregar DLLs do Windows em aplicativos Linux

Tavis Ormandy (Tavis ormandy), pesquisador de segurança do Google que está desenvolvendo o projeto LoadLibrary, visando portar DLLs compiladas para Windows para uso em aplicações Linux. O projeto fornece uma biblioteca de camadas com a qual você pode carregar um arquivo DLL no formato PE/COFF e chamar as funções nele definidas. O bootloader PE/COFF é baseado em código desembrulhar. Código do projeto distribuído por licenciado sob GPLv2.

LoadLibrary se encarrega de carregar a biblioteca na memória e importar os símbolos existentes, fornecendo ao aplicativo Linux uma API estilo dlopen. O código do plug-in pode ser depurado usando gdb, ASAN e Valgrind. É possível ajustar o código executável durante a execução conectando ganchos e aplicando patches (correção em tempo de execução). Suporta tratamento e desenrolamento de exceções para C++.

O objetivo do projeto é organizar testes de difusão distribuídos escaláveis ​​e eficientes de bibliotecas DLL em um ambiente baseado em Linux. No Windows, os testes de difusão e cobertura não são muito eficientes e geralmente exigem a execução de uma instância virtualizada separada do Windows, especialmente ao tentar analisar produtos complexos, como software antivírus que abrangem o kernel e o espaço do usuário. Usando LoadLibrary, os pesquisadores do Google estão procurando vulnerabilidades em codecs de vídeo, scanners de vírus, bibliotecas de descompressão de dados, decodificadores de imagens, etc.

Por exemplo, com a ajuda do LoadLibrary conseguimos portar o mecanismo antivírus do Windows Defender para rodar no Linux. O estudo do mpengine.dll, que forma a base do Windows Defender, tornou possível analisar um grande número de processadores sofisticados para diversos formatos, emuladores de sistemas de arquivos e intérpretes de linguagem que potencialmente fornecem vetores para possível ataques.

LoadLibrary também foi usado para identificar vulnerabilidade remota no pacote antivírus Avast. Ao estudar a DLL deste antivírus, foi revelado que o processo de verificação privilegiada de chave inclui um interpretador JavaScript completo usado para emular a execução de código JavaScript de terceiros. Esse processo não é isolado em um ambiente sandbox, não redefine privilégios e analisa dados externos não verificados do sistema de arquivos e do tráfego de rede interceptado. Como qualquer vulnerabilidade neste processo complexo e desprotegido poderia levar ao comprometimento remoto de todo o sistema, um shell especial foi desenvolvido baseado em LoadLibrary avscript para analisar vulnerabilidades no scanner antivírus Avast em um ambiente baseado em Linux.

Fonte: opennet.ru

Adicionar um comentário