¿Hay rootkits de Linux en circulación que modifiquen directamente el kernel (sin módulos)?

14

Se ha dicho, una y otra vez, que la desactivación de la carga del módulo dinámico del kernel en Linux aumenta la seguridad. Entiendo por qué la gente da este consejo, pero siempre asumí que un tipo malo podría modificar directamente la memoria si la interfaz del módulo no estuviera disponible. (Después de todo, la interfaz del módulo cargable es para los buenos).

Entonces, mi pregunta es esta: ¿alguien está al tanto de algún kit de raíz circulante que modifique directamente la memoria del kernel, en lugar de usar la interfaz del módulo?

    
pregunta Steve Dispensa 13.09.2011 - 21:32
fuente

1 respuesta

17

Sí, el suckit rootkit tal como aparece en Phrack es uno ejemplo, que modifica el kernel de Linux a través de /dev/kmem . Esencialmente, los objetivos siguen siendo los mismos: reemplazar las entradas en la tabla de llamadas del sistema para hacer lo que queremos que hagan. La diferencia aquí es que la modificación se realiza a través de /dev/kmem .

Los parches grsecurity / PaX para el kernel incluyen soporte / configuración para deshabilitar el acceso a /dev/kmem , /dev/mem y /dev/port - vea la entrada aquí .

La diferencia entre /dev/mem y /dev/kmem se explica aquí .

La notable diferencia entre modificar la memoria de esta manera y cargar en un módulo del kernel es la exposición de los símbolos. La mayoría de los rootkits de módulos del kernel se compilan con las funciones static , por lo que estas funciones no se exportan desde el código; sin embargo, hay otras técnicas que podrían traicionar la existencia de un módulo del kernel (la función init debería ser exportable, por ejemplo). Un rootkit que modifica directamente la memoria del kernel no sería visible en un escaneo del espacio de direcciones del kernel excepto en lo que había cambiado (es decir, si sabe dónde debería apuntar la tabla syscall y a qué apunta). es posible que lo detecte, a menos que el autor sea lo suficientemente inteligente como para garantizar que las lecturas adicionales de /dev/kmem proporcionen las direcciones correctas).

En cuanto a si un tipo malo puede modificar directamente la memoria: un proceso de raíz está técnicamente aún en el espacio del usuario; es decir, sigue siendo parte del anillo 3 y no tiene la capacidad de escapar de su memoria virtual. La única memoria que un proceso de anillo 3 puede modificar es su propio espacio de direcciones virtuales, que en lo que respecta a es el aspecto de la memoria . Un proceso de anillo 3 debe cumplir con todas las reglas de la memoria marcada; por ejemplo, si una página está marcada como de solo lectura, no puede ser modificada por un proceso (la CPU se niega e informa al sistema operativo). Sin embargo, un proceso de anillo 0 (modo cpu supervisor) puede modificar cualquier memoria que le guste y puede ir tan lejos como para pedirle a la CPU que ignore el estado de las páginas de memoria (es decir, puede ignorar el hecho de que las páginas son de solo lectura).

Entonces, lo que estoy tratando de entender es que un proceso raíz no tiene acceso implícito a la memoria por ser un proceso raíz; aún así, debe solicitar y obtener dicho acceso a través del kernel. Es solo que el núcleo obedecerá a ciegas. Entonces, una solución es usar los parches PaX, haciendo que el kernel rechace tales solicitudes.

    
respondido por el user2213 13.09.2011 - 22:21
fuente

Lea otras preguntas en las etiquetas