Почему? Ведь если приложение 64-х битное, использует прямые вызовы сервисов по номерам через sysenter, это снимает все юзер хуки антивирусов. Кроме того, как я понял из постов Rel, антивирусы не могут перехватить sysenter, потому что работает защита KPP. Из этого следует, что это достаточно значимая техника, нет?
Нет, не следует. Крупные антивирусы начинают вводить аппаратную виртуализацию, позволяющую обходить KPP. Кроме того, существует технология Instrumentation Callbacks, позволяющая логгировать все системные вызовы процесса из юзермода, что может быть полезно для поведенческого анализа. Вкупе с файловыми, сетевыми и процессными фильтрами в ядре антивирус получает достаточно информации о программе.
piligmindo, нет; потому что аверы мониторят еще и в ядре; а любой вызов сискола - само по себе палево, т.к. легитимные проги не юзают такое.
HoShiMin, M0rg0t, спасибо, столько интересной информации! Буду читать обо всем об этом! --- Сообщение объединено, 8 янв 2021 --- А это вообще не возможно обойти?
И да, и нет. Виртуализация позволяет антивирусу скрытно перехватывать функции (так, что ни ты, ни система эти перехваты не увидишь), изолировать память, создавая анклавы, мониторить доступ к системным регистрам и привилегированным инструкциям. Но сам по себе гипервизор - не защита. Это инструмент аппаратного мониторинга. Если в ядре или в драйвере есть уязвимость, юзермодный код сможет её эксплуатировать и попасть в ядро - независимо от того, под виртуализацией система или нет. Но, попав в ядро, код может столкнуться с ограничениями, вводимыми гипервизором. Например, как делает HVCI, в ядре невозможно будет динамически выделить исполняемую память или сделать исполняемые секции модулей записываемыми. И никакие трюки с VAD'ами, с PTE или с CR0.WriteProtect не помогут. И, возвращаясь к твоему вопросу про системные вызовы, - на каждый sysenter/syscall/int2e в гипервизоре будет вызван обработчик, где он сможет узнать, кто что и с какими параметрами вызывает.
А еще ETW и WMI, нарпимер Threat-Intelligence провайдер мониторит самые важные сервисы и по-сути позволяет детектить любой классический инжект. Да и легетимный интерфейс для перехвата сисколов возможно уже скоро появится: https://github.com/0xcpu/WinAltSyscallHandler. И еще куча всякого андока, который M$ себе припасли для защитника. Эмулятор как только увидит выборку к ntdll, а после вызов сервиса из иного модуля, сразу закричит тревогу.