Modificando el kernel en tiempo de ejecución

Marzo 23rd, 2004

NOTA: en este post me refiero exclusivamente al kernel de Linux. Si cualquier técnica descrita aquí funciona en algún otro sistema yo no lo sabía 😉

Para que queremos modificar el kernel?
En principio, se me ocurren dos razones por las que hacerlo. Una es aplicar un parche al kernel actual sin tener que reiniciar la máquina. La otra es modificarlo para añadirle funcionalidad (especialmente usado en rootkits y programas de este tipo).

Como podemos modificar la funcionalidad de un kernel de Linux que se está ejecutando?
En principio tenemos dos técnicas básicas. La primera es la carga de módulos. Esta es especialmente útil si queremos cargar drivers o otras funciones del kernel que sean más o menos independientes (es decir, hay cosas que no podremos utilizar como módulo). Tiene la desventaja que si el núcleo no está compilado para soportar módulos, pues no podremos hacerlo.
Otra forma de modificar el kernel es cambiar la versión que hay cargada en memoria. Esto podemos hacerlo accediendo al fichero /dev/kmem, buscando los valores que nos interesen y modificandolos.

Como podemos evitar que alguien modifique el kernel?
En primer lugar es imprescindible deshabilitar la carga de módulos. Para evitar la modificación a través del fichero /dev/kmem la única solución es parchear el kernel para evitar que se pueda escribir en él. No nos va a servir de nada cambiar los atributos de este fichero o aplicarle ACLs, ya que siempre podemos recrearlo en otro directorio con la orden mknod /tmp/kmem c 1 2

Más información en:
Complete Linux Kernel Modules
Modificación a través de /dev/kmem con mmap
Técnicas para modificar el kernel de Windows

Guardado en Artículo | Comentarios desactivados en Modificando el kernel en tiempo de ejecución

Los comentarios están cerrados.