Исследователь безопасности из компании PwC Витце Бьюкема (Wietze Beukema) обнаружил почти 300 исполняемых файлов в Windows 10, которые уязвимы к атакам типа DLL hijack («подмена DLL-библиотек»). C помощью скрипта VBScript некоторые из EXE-файлов могут быть использованы для перехвата DLL, полностью минуя контроль учетных записей пользователей (User Account Control, UAC). Подмена DLL-библиотек может позволить злоумышленнику выполнить произвольный код, повысить привилегии и обеспечить персистентность на целевой системе. Различные методы атак с использованием DLL-библиотек, описанные специалистом, включают замену DLL, перехват поиска DLL, перенаправление DLL, замену DLL в папке WinSxS и перехват относительного пути DLL. Для демонстрации перехвата относительного пути DLL Бьюкема выбрал библиотеки, находящиеся в папке «C:\Windows\System32» на компьютере под управлением Windows 10 (v1909). Он скопировал легитимный файл winstat.exe в папку загрузок на своей системе, затем запустил инструмент мониторинга процессов procmon с целью идентифицировать все DLL-библиотеки, запрашиваемые приложениями, которые потенциально можно перехватить. Для того чтобы узнать, какие DLL-библиотеки были корректно загружены, специалист скомпилировал собственную версию DLL-библиотеки и заставил ее осуществить запись в уникальный файл после успешной загрузки. Исследователь предоставил полный список библиотек и исполняемых файлов, которые могут быть использованы в ходе атак. Список состоит из 287 исполняемых файлов и 263 уникальных DLL-библиотек.
Специалист также сообщил о некоторых ограничениях, связанных с данными типами атак:
Использовать только исполняемые файлы, не требующие никаких аргументов;
Избегать приложений с расширенным графическим интерфейсом и возможностями отчетов об ошибках;
Не использовать DLL-библиотеки, написанные на языке C++.
Одна из причин, по которой специалист предлагает использовать VBScript, заключается в том, что создание каталогов Windows, имена которых содержат завершающий пробел, не может быть достигнуто с помощью «традиционных средств». С помощью VBScript нет необходимости использовать собственные скомпилированные двоичные файлы для осуществления атаки. Для предотвращения подобных атак эксперт рекомендует настроить приложения так, чтобы они всегда использовали абсолютные пути вместо относительных. Также в настройках UAC можно указать параметр «всегда уведомлять», что поможет предотвратить успешное выполнение перехвата DLL.