Подтвердить что ты не робот

Прекращение защищенного антивирусного процесса

Я использую антивирус ESet, а в последнее время его внешний интерфейс egui.exe висел и принимал 50% процессор (т.е. 100% одного ядра). Удивительно, но я обнаружил, что я не могу его убить, даже с включенной поддержкой отладки.

Теперь мне любопытно: как они реализуют такую ​​защиту, и есть ли способ убить ее, не написав драйвер ядра?

Процесс egui.exe выполняется под обычным пользователем (не администратором), и я пытаюсь убить его различными способами с использованием учетной записи администратора. Вот что я пробовал.

  • вы не можете убить его из диспетчера задач
  • вы не можете убить его с помощью pskill
  • вы не можете убить его с помощью проводника процессов, а также не можете подключить к нему отладчик

Затем я начал программировать и обнаружил, что:

  • у не-привилегированного пользователя вы можете открыть его с доступом PROSESS_TERMINATE, но фактический вызов TerminateProcess() завершился с ошибкой 5.

  • под учетной записью администратора вы можете открыть его с любыми правами доступа, которые вы хотите (после включения привилегий отладки, конечно), но затем вызовы TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() завершаются с ошибкой 5.

Это, безусловно, указывает на какую-то работу, за исключением установки DACL процесса, поскольку если Terminate не был в DACL, вы не смогли бы открыть процесс с PROCESS_TERMINATE в первую очередь. Действительно ли они перехватывают вызовы API Win32? Если да, то как? Прошло некоторое время с тех пор, как я сделал низкоуровневое системное программирование, поэтому простите мое невежество.

4b9b3361

Ответ 1

Если вы можете завладеть "Системным верификатором девственности" от Джоанны Рутковски, это должно дать вам довольно хорошую идею, где они реализуют свои крючки. Подобные инструменты (включая GMER) можно использовать для исследования того, что происходит в недрах системы. Это может показаться странным, но иногда AVs используют методы, которые обычно обнаруживаются во вредоносном программном обеспечении, т.е. Методы руткита, в попытке защитить свое программное обеспечение от обмана.

Похоже, что SSDT-Hooking и подобные методы были использованы для "защиты" процесса. Мой первый выстрел в это будет приостановить все потоки процесса. Большинство таких механизмов защиты (вредоносных программ и вредоносных программ) срабатывают только при попытках завершения. Но как только вы приостановите все потоки (Process Explorer может это сделать), ни один из них больше не будет планироваться планировщиком (что приведет к отсутствию использования ЦП).

SSDT (иногда SDT) обозначает таблицу дескрипторов системной службы. Это таблица с функциональными адресами системных служб (номер системной службы, являющейся индексом). Когда вы вызываете что-то вроде CreateFile из вашего приложения Win32, оно будет в NTDLL, вызывающем NtCreateFile (== ZwCreateFile в UM). Оттуда механизм (который изменился с Windows 2000/XP) будет отличаться в том, как он переходит в режим ядра (KM), так называемое "кольцо 0". Во всяком случае, реализация NtCreateFile в NTDLL примерно делает следующее: он перемещает индекс системной службы в регистр и затем вызывает метод, который используется для перехода к коду KM (sysenter в новых реализациях). Прибыв в KM, обработчик проверит индекс, выберет адрес функции из SSDT и затем вызовет эту функцию. Существует еще несколько проверок стека единой системы обмена сообщениями, который происходит здесь (когда вы пришли из UM), но это простой процесс. Поэтому, когда вы используете функциональность на этом уровне, вы можете предотвратить любую подсистему, включая подсистему Win32, от выполнения каких-либо действий. Однако это связано с несколькими проблемами (т.е. Наименьшим из них). Большинство разработчиков выполняют плохую работу, что часто можно увидеть в вредоносных программах, таких как руткит. Sony решила поставить некоторые аудиодиски еще в 2005 году. Таким образом, отсоединение практически невозможно без риска проверки ошибок и нескольких независимых фрагментов кода, Индекс SSDT также обычно приводит к проблемам из-за безрассудства на стороне разработчиков.

Так что приостановка потоков кажется возможной, хотя этот вопрос, конечно, является разновидностью открытого (без знания деталей драйвера ESET). Если, однако, они предотвращают это, вы также должны рассмотреть возможность переключения продуктов. Я утверждаю, что недостатки в стабильности системы таких продуктов перевешивают дополнительную "защиту", хотя они (ESET) собираются рассказать вам об обратном.

Другим возможным методом может быть инъекция кода (например, через DLL) и вызов самого процесса ExitProcess. Это также зависит от того, позволяют ли крючки для этой лазейки.

Ответ 2

Могут быть разные случаи, например:

  • Если дочерний поток процесса, который вы пытаетесь убить, ждет какой-либо объект ядра, он не будет разорван до завершения ожидания. Это может привести к тому, что приложение перестанет отвечать на запросы. Любые потоки в процессе отмечены для завершения - это один из шагов завершения процесса;
  • Такое интеллектуальное программное обеспечение, как брандмауэры, AV и другие связанные с безопасностью вещи, всегда устанавливает перехваты ядра (например, перехват - перехват вызовов API, сообщений или событий, передаваемых между объектами ядра или программным компонентом). У них всегда есть щит для защиты агаиста от внешних сил.

Вы получаете сообщение ERROR_ACCESS_DENIED. Я не знаю, какие шаги вы прошли, но могу ли я предложить следующее:

  • Откройте диспетчер задач и перейдите на вкладку "Процессы";
  • Щелкните правой кнопкой мыши на egui.exe и нажмите "Свойства".
  • Перейдите на вкладку "Безопасность" и нажмите "Изменить".
  • В окне "Разрешения" проверьте свои учетные данные;
  • Добавьте пользователя и/или установите полные разрешения.

Вы можете играть вокруг него, потому что, даже если вы используете свое приложение (это то, что вы пытались сделать, я полагаю), оно будет использовать учетные данные вашей учетной записи.