Введение
Представьте, что компьютерная программа — это дом с правилами (архитектура, протоколы). Эксплойт — это находчивый взломщик, который ищет лазейки в этих правилах (например, дверь, которую забыли запереть, или доверчивого охранника). Сегодня разберем две такие "лазейки": одну в самом фундаменте программ (SEH Overwrite), другую в системе пропусков (Pass-the-Hash).SEH Overwrite – Ломаем "аварийную лестницу" программы
Что такое SEH (Structured Exception Handler)?
SEH (Structured Exception Handler) - это механизм обработки программных и аппаратных исключений в операционной системе Microsoft Windows, позволяющий программистам контролировать обработку исключений, а также являющийся отладочным средством.Или же иными словами: SEH — это встроенная система "скорой помощи" для программ на Windows. Представьте, что программа — это многоэтажное здание (стек вызовов функций). На каждом этаже есть аварийная инструкция (SEH-запись), что делать, если тут случилась ЧП (деление на ноль, обращение к несуществующей памяти). Эти инструкции связаны в цепочку (SEH Chain), ведущую к главному аварийному выходу (стандартный обработчик ОС).
Механизм атаки SEH Overwrite: Как взломщик использует "аварию"?
Атакующий намеренно вызывает ошибку после того, как переполнил буфер и подменил SEH-запись.Шаги атаки:
- Найти уязвимость: Программа копирует пользовательские данные (например, из файла или сети) в буфер фиксированного размера в стеке без проверки длины.
- Переполнить буфер: Атакующий посылает данных больше, чем размер буфера.
- Затопить стек: Избыточные данные перезаписывают:
- Локальные переменные после буфера.
- Адрес возврата из функции (если есть).
- Ключевой момент: Перезаписывают SEH-записьв стеке. Атакующий подменяет:
- Pointer to Next SEH Record (часто используется для размещения небольшой инструкции типа jmp).
- Pointer to Exception Handler — ГЛАВНАЯ ЦЕЛЬ! Атакующий подставляет здесь адрес участка памяти под своим контролем (часто где-то в переполненных данных).
- Спровоцировать исключение: Атакующий заставляет программу совершить ошибку после переполнения (например, обращение к неверному адресу памяти, который он же и подсунул).
- Срабатывание подмененного обработчика: Система видит исключение. Она идет по цепочке SEH и натыкается на подмененный Pointer to Exception Handler. Система доверяет этому указателю и передает управление по этому адресу.
- Выполнение кода атакующего: По адресу обработчика атакующий разместил свой вредоносный код (шеллкод), или код, который перенаправляет поток выполнения на шеллкод (часто с помощью инструкции по Pointer to Next SEH). Этот код выполняется с привилегиями уязвимой программы!
Код:
function VulnerableFunction(userData):
char buffer[256]; // Буфер в стеке
strcpy(buffer, userData); // БЕЗ ПРОВЕРКИ ДЛИНЫ! Уязвимость!
main:
data = read_from_network() // Атакующий присылает >256 байт + Шеллкод + Подмененный SEH
VulnerableFunction(data) // Буфер переполняется, SEH перезаписывается
... // Позже происходит ошибка в программе или из-за данных атакующего
// Система: "Ой, ошибка! Смотрю SEH цепочку..."
// Переходит по подмененному адресу обработчика -> Выполняется шеллкод атакующего!
Защита от SEH Overwrite: Укрепляем "аварийные выходы"
/SAFESEH: "Белый список" для обработчиков исключений
Принцип работы:Компилятор (например, Microsoft Visual Studio) помечает безопасные SEH-обработчики на этапе компиляции и создаёт таблицу их адресов, которая сохраняется в исполняемом файле (PE-заголовок). При запуске программы эта таблица загружается в память.Как это предотвращает атаку:
При возникновении исключения система проверяет адрес обработчика из SEH-записи:
- Если адрес есть в таблице /SAFESEH — исключение передаётся обработчику.
- Если адреса нет (например, атакующий подменил его на адрес в стеке/куче) — программа аварийно завершается.
SEHOP (Structured Exception Handler Overwrite Protection)
Принцип работы:Windows добавляет в конец SEH-цепочки фиктивную запись — "заглушку" (например, адрес 0xFFFFFFFF). При обработке исключения система проходит всю цепочку и проверяет:- Корректность связей между записями (указатель Next SEH должен вести на следующую запись).
- Наличие "заглушки" в конце.
- При SEH Overwrite атакующий перезаписывает записи в стеке, нарушая целостность цепочки.
- Система не находит заглушку или обнаруживает "битые" связи — атака блокируется.
- SEHOP активен по умолчанию в Windows 7+ и Server 2008+.
- Для принудительного включения (если отключен):# Через реестр:
Код:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel" /v DisableExceptionChainValidation /t REG_DWORD /d 0 /f
Pass-the-Hash (PtH): Механизм атаки и методы защиты
Суть атаки Pass-the-Hash
Pass-the-Hash (PtH) - это техника аутентификации, при которой злоумышленник использует украденный хеш пароля вместо самого пароля для получения доступа к системе. В Windows-средах это возможно из-за особенностей протоколов NTLM и Kerberos, которые для подтверждения подлинности проверяют знание хеша пароля, а не сам пароль.Как работает атака
- Кража хешей
- Извлечение из памяти процесса LSASS (хранит хеши активных сессий)
- Получение из локальной базы SAM (для локальных учетных записей)
- Перехват сетевого трафика аутентификации NTLM
- Доступ к файлам с кэшированными учетными данными
- Использование хеша
- Атакующий инициирует аутентификацию
- Сервер отправляет случайный challenge
- Атакующий шифрует challenge украденным хешем
- Сервер, проверив ответ, предоставляет доступ
- Перемещение в сети
- Используя полученные хеши, злоумышленник перемещается между системами
- Повышает привилегии, получая доступ к более важным учетным записям
- В конечном итоге получает полный контроль над инфраструктурой
Методы защиты
- Отключение устаревших LM-хешей
- LM-хеши уязвимы для перебора
- Рекомендуется использовать только NTLMv2 или Kerberos
- Настройка через групповые политики
- Шифрование сетевого трафика
- Включение SMB Signing для защиты от перехвата
- Использование Kerberos вместо NTLM, где это возможно
- Обязательное применение TLS для RDP, WinRM и других протоколов
- Credential Guard (Windows 10+/Server 2016+)
- Изолированное хранение хешей в виртуализированной среде
- Защита от извлечения хешей даже при компрометации системы
- Включается через групповые политики
- Ограничение прав доступа
- Принцип минимальных привилегий для пользователей
- Запрет использования доменных административных учетных записей на рабочих станциях
- Применение LAPS для управления паролями локальных администраторов
- Мониторинг и обнаружение
- Анализ подозрительной активности (множественные входы с одного IP)
- Контроль использования NTLM для критически важных ресурсов
- Использование SIEM-систем для выявления аномалий