Algunas preguntas básicas sobre la security del kernel de Linux

No sé mucho sobre Linux kernel, y tengo algunas preguntas.

  1. ¿Cuál es el propósito principal de separar la memory kernel de la memory de espacio de usuario? Para asegurarse de que una aplicación de usuario no puede hacer nada malo para el kernel?

  2. ¿Cuántas forms hay para que una aplicación a nivel de usuario transfiera el control al kernel? Lo que puedo hacer es include (1) invocar una llamada al sistema, (2) asignar memory al kernel (pero creo que mmap () también es una llamada al sistema), y (3) cargar un module kernel (pero supongo que lsmod también invoca alguna llamada al sistema). ¿Estoy en lo correcto? ¿Hay otras forms en que extrañe?

  3. ¿Cuántas forms de atacar el kernel? ¿Puedo tener algunos detalles breves sobre ellos?

  4. Si obtengo el privilegio de root, ¿significa que controlo completamente el kernel? A saber, puedo hacer lo que quiera con el kernel y el hardware? ¿O todavía tengo poder limitado en el kernel?

Realmente apreciaría si alguien puede ayudarme a encontrar la respuesta a estas preguntas.

Trataré de responder las preguntas lo más brevemente posible. Las preguntas que hace se abordan generalmente en los cursos introductorios de sistemas operativos en las universidades, pero supongo que no ha tomado ese curso.

  1. El aislamiento de memory para los processs del espacio de usuario es muy deseable, no solo para proteger el kernel de los progtwigs de espacio de usuario malicioso, sino también para proteger los progtwigs de espacio de usuario entre sí. Esto generalmente se conoce como memory virtual . También hace que sea más fácil implementar pagination, lo que también es deseable por otras razones (fragmentación más simple, engarzadores / cargadores más simples, etc.).

  2. Interrupciones (no todas ellas controlan una aplicación de nivel de usuario). Dejar el procesador también quita el "control" del process (por ejemplo, wait etc., que también son llamadas al sistema). El kernel puede decidir cancelar la progtwigción de una aplicación.

  3. Esa es una pregunta muy amplia. Kernel con llamadas al sistema mal implementadas es vulnerable. La capacidad de escribir en la memory física sería otra forma. Existen otras vulnerabilidades que pueden popup a partir de instrucciones mal implementadas (por ejemplo, vulnerabilidad sysret en procesadores Intel).

  4. Los privilegios de root no son lo mismo que los privilegios del kernel. Una aplicación que se ejecuta como usuario raíz todavía usa memory virtual, todavía tiene que hacer llamadas al sistema, todavía tiene que obedecer las otras reglas que cualquier aplicación de nivel de usuario debe hacer.

Si quieres que proporcione más detalles sobre algunas de las respuestas, házmelo saber.

Si alguien puede mejorar algunas de las respuestas, siéntase libre de señalarlo.