Pourquoi «nodev» dans / etc / fstab est-il si important? Comment les appareils de caractères peuvent-ils être utilisés pour le piratage?

19

J'apprends la sécurité Linux et j'ai du mal à comprendre pourquoi une clé USB avec un périphérique de caractères est potentiellement dangereuse.

Si j'ai une clé USB avec un exécutable bash sur lequel se trouve la racine setuid, le danger est évident: N'importe qui avec une telle clé USB peut obtenir des privilèges root sur mon ordinateur si j'ai une entrée comme

/dev/sdb1 /media/usbstick auto defaults 0 0

dans mon /etc/fstabparce que defaultscomprend suid.

Mais qu'en est-il des appareils de caractères? Comment puis-je utiliser un périphérique de caractères pour obtenir des privilèges root ou casser des trucs si une clé USB avec un périphérique de caractères est montée avec devou defaults?

rosix
la source

Réponses:

31

Étant donné que l'accès au périphérique sous-jacent n'est contrôlé que par les autorisations de fichier par défaut, donc si votre clé USB contient un système de fichiers POSIX avec un nœud de périphérique accessible en écriture correspondant à un véritable périphérique du système, vous pouvez utiliser ce nœud de périphérique pour accéder au correspondant appareil en tant qu'utilisateur "ordinaire". Imaginez un appareil correspondant à l'un des appareils audio, votre webcam, /dev/sda(qui est un appareil bloc plutôt qu'un appareil caractère, mais l'argument est le même) ...

Voici un exemple pour clarifier les choses. Disons que vous voulez accéder /dev/sda(vous pouvez alors faire à peu près tout ce que vous voulez avec le contenu du disque, y compris planter un programme qui vous permettrait de le devenir root; c'est un périphérique de bloc mais le problème est le même avec les périphériques de caractères). Sur votre système cible, ls -l /dev/sdaaffiche

brw-rw----  1 root disk      8,   0 Sep  8 11:25 sda

Cela signifie qu'il /dev/sdas'agit d'un périphérique bloc (le bau début de la ligne), avec le numéro majeur 8 et le numéro mineur 0 (le 8, 0au milieu de la ligne). L'appareil n'est accessible qu'aux root(lecture / écriture) et aux membres du diskgroupe (également en lecture / écriture).

Imaginez maintenant sur ce système que vous ne pouvez pas devenir, rootmais pour une raison quelconque, vous pouvez monter des clés USB en tant qu'utilisateur sans nodev. Sur un autre système, où vous êtes root, vous pouvez créer un fichier spécial correspondant sur votre clé USB:

mknod -m 666 usersda b 8 0

Cela créera un fichier spécial appelé usersda, lisible et inscriptible par tout le monde.

Montez la clé sur votre système cible et hé hop, vous pouvez utiliser l' usersdaappareil de la même manière que /dev/sda, mais sans restriction d'accès ...

(Cela fonctionnera même avec les systèmes de fichiers cryptés, tant que vous êtes en mesure d'accéder au périphérique de mappage décrypté: créez un périphérique qui correspond à l' /dev/mapperentrée appropriée .)

Stephen Kitt
la source
Cela semble intéressant! Mais je ne suis pas sûr de le comprendre. Un périphérique est un fichier et les fichiers sont accessibles via des inodes. Le faux appareil sur ma clé USB aurait un inode différent et donc ce serait un appareil différent, non?
rosix
7
Un périphérique est un fichier spécial, avec un nombre majeur et mineur; vous pouvez les voir si vous le faites ls -l /dev, ce sont les deux nombres qui apparaissent à la place de la taille du fichier. Le noyau fait correspondre un fichier spécial de périphérique avec un pilote utilisant ces numéros, vous pouvez donc avoir plusieurs fichiers qui pointent vers le même pilote de noyau et le même périphérique. Les fichiers spéciaux sont créés à l'aide de mknod.
Stephen Kitt
Notez que les /dev/tty*appareils sont des appareils de caractères, et qu'un intrus obtenant un accès complet en lecture / écriture à vos sessions de terminal et / ou à la console système combiné avec des fonctionnalités d'
émulation de terminal abusives
1
@TheQuark à peu près, oui. C'est un peu plus général; Je dirais que «interpréter» signifie «traiter les fichiers de périphériques comme des nœuds de périphériques, pas des fichiers simples».
Stephen Kitt
1
@ n00b, vous ne pouvez pas le monter usersda, mais vous pouvez au moins l'utiliser pour lire à partir du disque sous-jacent sans aucune restriction, et éventuellement y écrire également. Vous pouvez facilement copier tout le contenu du disque, et avec des outils tels que debuge2fs, écraser /etc/shadowetc.
Stephen Kitt