Как работает антивирус: Hell’s Gate
• В прошлом посте мы разобрали Direct Syscalls и выяснили их главную проблему: программе необходимо знать правильные SSN, которые могут меняться между версиями Windows.
• В 2019 году исследователи представили технику Hell’s Gate, позволяющую получать номера системных вызовов динамически во время выполнения.
• Вместо хранения готовой таблицы программа находит загруженную
ntdll.dll, изучает её Export Address Table и определяет адрес нужной функции Nt*.• Начало такой функции обычно содержит небольшой syscall stub. Из его инструкций можно извлечь SSN, подготовить аргументы и выполнить системный вызов самостоятельно.
• Упрощенно механизм выглядит так:
• Найти
ntdll.dll в памяти• Найти экспорт нужной Native API функции
• Определить соответствующий SSN
• Выполнить системный вызов без обычного обращения к функции
• Благодаря этому технике не нужна заранее подготовленная таблица для каждой сборки Windows.
• Но появляется другая проблема: EDR может изменить начало функции своим hook. Тогда программа увидит не оригинальный syscall stub, а переход на код защитного решения. Позднее появились производные техники, которые пытаются восстанавливать SSN по соседним функциям или получать чистую копию
ntdll.dll.• И всё же Hell’s Gate решает только одну задачу, а именно обход определенных перехватов пользовательского режима. Call stack, операции с памятью, создание потоков и события ядра никуда не исчезают.
• Более того, самостоятельный разбор PEB, EAT и syscall stubs тоже может стать признаком, по которому EDR узнает подозрительную программу.
• Hell’s Gate хорошо показывает основную гонку между атакой и защитой: каждая новая техника закрывает одну точку наблюдения, но одновременно создает новые признаки в другой. Удачи!
#AV
• Поддержать автора монеткой: @v_meshke
