SSDT: un poco mas hecha, por favor
El otro día leía un advisory de la compañia Coresecurity para varios antivirus y firewalls. El mismo se refería a varias funciones de la SSDT que dichos productos hookeaban. Al parecer no realizaban suficientes validaciones sobre los parametros recibidos, con lo cual daban pie a generar un bonito BSOD.
Despues de leerlo y al tratarse de un tema bastante simple, me decidí a hacer una prueba estupida para la cual no tardaría más de dos minutos. Desarrollé una mierdecilla en ensamblador que invoca a las funciones de la SSDT (via sysenter en Windows XP) y les pasa siempre como parametros una ristra de «0FFFFFFFFh». De modo que si alguno de dichos parametros es utilizado como puntero desde ring0 provocaremos un casque.
Lo cierto es que esperaba que los resultados fueran nulos, pero me llevé una sorpresa al ver que al ejecutarlo el driver del antivirus que tenía en esa máquina (McAfee) me originó un BSOD. También me originó un casque el driver del «Syser» (un debugger de modo nucleo que tenía corriendo en ese momento) y más tarde en otra máquina me dio otro pete el mítico SymTDI.sys de Symantec.