Tavis Ormandy (), chercheur en sécurité chez Google, développe un projet , visant à porter des bibliothèques DLL compilées pour Windows afin de les utiliser dans des applications Linux. Le projet fournit une bibliothèque intermédiaire permettant de charger un fichier DLL au format PE/COFF et d'appeler des fonctions définies dans celui-ci. Le chargeur PE/COFF est basé sur le code . Le code du projet sous licence GPLv2.
LoadLibrary prend en charge les fonctions de chargement de bibliothèque en mémoire et d'importation de symboles existants, offrant à l'application Linux une API de style dlopen. Le code connectable peut être débogué à l'aide de gdb, ASAN et Valgrind. Il est prévu de pouvoir ajuster le code exécutable au moment de l'exécution via des hooks et l'application de patches (runtime patching). Le traitement et le déballage (unwinding) des exceptions pour C++ sont pris en charge.
L'objectif du projet est de mettre en place un test de fuzzing distribué, évolutif et efficace des bibliothèques DLL dans un environnement basé sur Linux. Dans Windows, la réalisation de tests de fuzzing et de couverture ne permet pas d'atteindre une efficacité suffisante et nécessite souvent de lancer une instance virtualisée séparée de Windows, surtout lors de tentatives d'analyse de produits complexes tels que les logiciels antivirus, qui impliquent le fonctionnement au niveau du noyau et de l'espace utilisateur. Grâce à LoadLibrary, des chercheurs de Google cherchent des vulnérabilités dans des codecs vidéo, des scanners antivirus, des bibliothèques de décompression de données, des décodeurs d'images, etc.
Par exemple, grâce à LoadLibrary, il a été possible de porter pour un fonctionnement sous Linux le moteur antivirus Windows Defender. L'analyse de mpengine.dll, qui constitue la base de Windows Defender, a permis d'étudier un grand nombre de gestionnaires complexes de différents formats, d'émulateurs de systèmes de fichiers et d'interpréteurs de langages, potentiellement offrant des vecteurs pour .
LoadLibrary a également été utilisé pour identifier dans le paquet antivirus Avast. En étudiant les DLL de cet antivirus, il a été découvert que le processus de numérisation privilégié clé inclut un interpréteur JavaScript complet, utilisé pour émuler l'exécution de code JavaScript tiers. Ce processus n'est pas isolé dans un environnement sandbox, ne réinitialise pas les privilèges et analyse des données externes non vérifiées provenant du système de fichiers et du trafic réseau intercepté. Étant donné qu'une vulnérabilité dans ce processus complexe et non sécurisé peut potentiellement conduire à une compromission à distance de l'ensemble du système, une couche spéciale a été développée sur la base de LoadLibrary. pour analyser les vulnérabilités de l'analyseur antivirus Avast dans un environnement basé sur Linux.
Source : opennet.ru
