Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: kub0x en 28 Junio 2015, 15:53 pm



Título: Patchear arranque kernel-mode driver
Publicado por: kub0x en 28 Junio 2015, 15:53 pm
Buenas tardes señores,

Desde Windows Vista y posteriores un kernel-mode driver no booteable (non-boot) es instalado validando el certificado emitido para firmar el archivo del catálogo (.cat) y cada uno de los archivos asociados al catálogo.

El procedimiento se realiza comprobando si la cadena de certificado es válida, esto significa que la Root CA que firmó nuestro certificado debe de estar en la local Trusted Root CA (Entidades de raíz de confianza) y además nuestro certificado (no el Root CA) debe de estar en la local Trusted Publisher (Editores de Confianza).
De esta forma al usuario no se le pregunta si confía en el sujeto que firmó el driver.

Vale nos hemos quitado un peso de encima, pero queda la cuestión más importante y es subir al kernel.

Al finalizar la instalación, el driver supongo que es cargado por winload, y el problema es que falla al verificar la firma digital.
Esto es debido a que el certificado no ha sido firmado por una CA de confianza dado que winload tendrá su propia lista de Root CAs, así que la única manera LEGAL de pasar el checkeo es comprar un certificado emitido por una CA de confianza, las cuáles están en esta lista -> https://msdn.microsoft.com/en-us/library/windows/hardware/dn170454%28v=vs.85%29.aspx

Ahora mi pregunta,

existe alguna manera de patchear windload para insertar una nueva Root CA para que cuando se cargue nuestro driver valide el certificado correctamente? Sé que al modificar winload su firma digital se romperá, pero podríamos refirmarlo con la clave privada asociada a nuestra nueva Root CA, que ahora reside en winload, por lo que la verificación sería satisfactoria.

Espero que alguien de aquí haya pensado en esto alguna vez, sino es un tema muy extenso :/ Aun así gracias por vuestra atención.

Este post lo he escrito también en la comunidad Stackexchange de Ingeniería Inversa, por si os interesa el tema -> http://reverseengineering.stackexchange.com/questions/9243/patch-driver-loading-process

Saludos!