Как работает антивирус: Direct и Indirect Syscalls
• Если EDR перехватывает функции внутри
ntdll.dll, возникает логичный вопрос: можно ли обратиться к ядру, не вызывая пропатченную функцию?• Для этого существуют прямые системные вызовы Direct Syscalls.
• Вместо обращения к функции
Nt* внутри ntdll.dll программа самостоятельно подготавливает номер системного вызова и выполняет инструкцию syscall.• Этот номер называется SSN (System Service Number), по нему ядро определяет, какую системную операцию необходимо выполнить.
• Главная проблема в том, что SSN могут отличаться между версиями и сборками Windows. Если жестко записать их в программу, она может работать на одной системе и сломаться на другой.
• Кроме прямых существуют непрямые системные вызовы Indirect Syscalls. В этом случае программа подготавливает аргументы самостоятельно, но перед выполнением передает управление на подходящую инструкцию
syscall внутри легитимной ntdll.dll.• Это позволяет сделать источник вызова менее очевидным, однако не превращает активность в невидимую.
• Современные EDR могут анализировать:
• Откуда была выполнена инструкция
syscall• Содержимое и происхождение исполняемой памяти
• Call stack потока
• Последовательность операций с памятью и процессами
• События, полученные на уровне ядра
• Например, системный вызов, пришедший из неизвестной исполняемой области памяти, сам по себе выглядит необычно. Подобный анализ call stack описывали исследователи Elastic Security Labs.
• Direct Syscalls обходят некоторые user-mode hooks, а не весь EDR. Защита может не увидеть привычный вызов API, но продолжит видеть его последствия. Удачи!
#AV
• Поддержать автора монеткой: @v_meshke
