30.09.2020

LoadLibrary, прослойка для загрузки Windows DLL в Linux-приложения


Тэвис Орманди (Tavis Ormandy), исследователь безопасности из Google, развивает проект LoadLibrary, нацеленный на портирование собранных для Windows DLL-библиотек для их использования в приложениях для Linux. Проектом предоставляется библиотека-прослойка, при помощи которой можно загрузить DLL-файл в формате PE/COFF и вызвать определённые в нём функции. Загрузчик PE/COFF основан на коде ndiswrapper. Код проекта распространяется под лицензией GPLv2.

LoadLibrary берёт на себя функции загрузки библиотеки в память и импорта имеющихся символов, предоставляя Linux-приложению API в стиле dlopen. Подключаемый код может отлаживаться при помощи gdb, ASAN и Valgrind. Предусмотрена возможность корректировки исполняемого кода во время выполнения через подключение хуков и наложение патчей (runtime patching). Поддерживаются отработка и размотка (unwinding) исключений для C++.

Целью проекта является организация масштабируемого и эффективного распределённого fuzzing-тестирования DLL-библиотек в окружении на базе Linux. В Windows проведение fuzzing- и coverage-тестирования не позволяет добиться должной эффективности и часто требует запуска отдельного виртуализированного экземпляра Windows, особенно при попытке анализа усложнённых продуктов, таких как антивирусное ПО, охватывающих работу на уровне ядра и пространства пользователя. При помощи LoadLibrary исследователи из Google занимаются поиском уязвимостей в видеокодеках, антивирусных сканерах, библиотеках распаковки данных, декодировщиках изображений и т.п.

Например, при помощи LoadLibrary удалось портировать для запуска в Linux антивирусный Windows Defender. Исследование mpengine.dll, составляющего основу Windows Defender, дало возможность проанализировать большое число усложнённых обработчиков различных форматов, эмуляторов ФС и интерпретаторов языков, потенциально предоставляющих векторы для возможных атак.

LoadLibrary также использовался при выявлении удалённой уязвимости в антивирусном пакете Avast. При изучении DLL от данного антивируса было выявлено, что ключевой привилегированный процесс сканирования включает полноценный JavaScript-интерпретатор, используемый для эмуляции выполнения стороннего JavaScript-кода. Данный процесс не изолирован в sandbox-окружение, не сбрасывает привилегии и выполняет анализ непроверенных внешних данных из ФС и перехваченного сетевого трафика. Так как любая уязвимость в данном усложнённом и незащищённом процессе потенциально может привести к удалённой компрометации всей системы, на базе LoadLibrary была разработана специальная оболочка avscript для анализа уязвимостей в антивирусном сканере Avast в окружении на базе Linux.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52530

Добавить комментарий