Quelques questions de base sur la sécurité du noyau Linux [fermé]

8

Je ne connais pas grand-chose au noyau Linux et j'ai quelques questions.

  1. Quel est le but principal de séparer la mémoire du noyau de la mémoire de l'espace utilisateur? Pour vous assurer qu'une application utilisateur ne peut rien faire de mal au noyau?

  2. De combien de façons existe-t-il pour une application de niveau utilisateur de transférer le contrôle au noyau? Ce que je peux trouver inclut (1) l'invocation d'un appel système, (2) le mappage de la mémoire au noyau (mais je pense que mmap () est également un appel système), et (3) le chargement d'un module du noyau (mais je suppose que lsmod invoque également un appel système). Ai-je raison? Y a-t-il d'autres façons que j'ai ratées?

  3. Combien de façons d'attaquer le noyau? Puis-je avoir de brefs détails à leur sujet?

  4. Si j'obtiens le privilège root, cela signifie-t-il que je contrôle complètement le noyau? À savoir, je peux faire ce que je veux avec le noyau et le matériel? Ou j'ai encore une puissance limitée sur le noyau?

J'apprécierais vraiment que quelqu'un puisse m'aider à trouver la réponse à ces questions.

hebothu
la source
1
Il y a de bonnes questions ici, mais pourriez-vous les diviser en questions plus spécifiques avec un sujet majeur par question?
Caleb

Réponses:

5

Je vais essayer de répondre aux questions aussi brièvement que possible. Les questions que vous posez sont généralement abordées dans les cours d'introduction aux systèmes d'exploitation dans les universités, mais je suppose que vous n'avez pas suivi un tel cours.

  1. L'isolement de la mémoire pour les processus de l'espace utilisateur est très souhaitable - non seulement pour protéger le noyau des programmes malveillants de l'espace utilisateur, mais aussi pour protéger les programmes de l'espace utilisateur les uns des autres. Ceci est généralement appelé mémoire virtuelle . Il facilite également la mise en œuvre de la pagination, ce qui est également souhaitable pour d'autres raisons (fragmentation plus simple, liens / chargeurs plus simples, etc.).

  2. Interruptions (qui ne contrôlent pas toutes une application de niveau utilisateur). L'abandon du processeur enlève également le "contrôle" du processus (par exemple, waitetc. qui sont également des appels système). Le noyau peut lui-même décider de ne pas planifier une application.

  3. C'est une question très large. Le noyau avec des appels système mal implémentés est vulnérable. La capacité d'écrire dans la mémoire physique serait une autre façon. Il existe d'autres vulnérabilités qui peuvent résulter d'instructions mal implémentées (par exemple la vulnérabilité sysret dans les processeurs Intel).

  4. Les privilèges root ne sont pas les mêmes que les privilèges du noyau. Une application exécutée en tant qu'utilisateur root utilise toujours la mémoire virtuelle, doit toujours effectuer des appels système, doit toujours obéir aux autres règles que toute application de niveau utilisateur doit respecter.

Si vous souhaitez que je donne plus de détails sur certaines des réponses, faites-le moi savoir.

Si quelqu'un peut améliorer certaines des réponses, n'hésitez pas à le signaler.

mtahmed
la source
Merci pour votre réponse. Vous avez dit "Interruptions (qui ne contrôlent pas toutes une application de niveau utilisateur)", ce qui signifie que seules les interruptions logicielles contrôlent le niveau utilisateur, contrairement aux interruptions matérielles. Est-ce correct?
hebothu
Je crois que l'espace utilisateur doit en quelque sorte demander au kernelspace de le laisser gérer certaines des interruptions. Le noyau contrôle donc toujours fondamentalement les interruptions. En particulier, le noyau gère toujours les interruptions et les transmet à l'espace utilisateur si une application de l'espace utilisateur souhaite les recevoir. Recherchez Linux UIO.
mtahmed