Estoy usando el antivirus ESet, y recientemente su GUI front-end egui.exe colgó y estaba tomando 50% de CPU (es decir, 100% de un núcleo). Sorprendentemente, descubrí que no puedo matarlo, incluso con privilegios de depuración habilitados.Terminación de un proceso antivirus protegido
Ahora tengo curiosidad: ¿cómo implementan tal defensa, y hay una manera de matarlo sin escribir un controlador de kernel?
El proceso egui.exe se ejecuta bajo un usuario normal (no administrador), e intento eliminarlo de varias maneras con una cuenta administrativa. Esto es lo que intenté.
- no se puede matar desde el administrador de tareas
- no se puede acabar con él utilizando pskill
- no se puede acabar con él utilizando el explorador de procesos, ni se puede adjuntar un depurador a ella
Entonces empecé alguna programación y encontró que:
en usuario no privilegiado puede abrirlo con PROSESS_TERMINA Acceso TE, pero la llamada real a TerminateProcess() falla con el error 5.
en cuenta de administrador puede abrirlo con los derechos de acceso que desee (después de habilitar el privilegio de depuración, por supuesto), pero luego llama a TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() todo con el error 5.
Esto definitivamente apunta a algún tipo de tocar el violín más allá de establecer el proceso DACL, ya que si no fuera Terminar en la DACL, no sería capaz de abra el proceso con PROCESS_TERMINATE en primer lugar. ¿Están realmente interceptando las llamadas API de Win32? ¿Si es así, entonces cómo? Ha pasado un tiempo desde que hice la programación de bajo nivel del sistema, perdón por mi ignorancia.
¿Por qué querrías saber eso? :) –
AVs típicamente tienen componentes kernel-mode. Si pudieras matarlo solo dándote los más altos privilegios, sería una protección pésima. –
¿Puedes matarlo cuando se ejecuta normalmente, o es justo cuando colgaba que no puedes matarlo? – nos