J'apprends la sécurité sous Linux et j'ai du mal à comprendre pourquoi une clé USB contenant un périphérique de caractères est potentiellement dangereuse.
Si j'ai une clé USB avec un exécutable bash qui a une racine setuid dessus, 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/fstab
parce que defaults
inclut suid
.
Mais qu'en est-il des appareils de caractères? Comment puis-je utiliser un périphérique de caractère pour obtenir des privilèges root ou casser des choses si une clé USB avec un périphérique de caractère dessus est montée avec dev
ou defaults
?
Réponse acceptée :
Étant donné que l'accès au périphérique sous-jacent est contrôlé uniquement 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 inscriptible par le monde correspondant à un périphérique réel dans le 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 périphérique bloc plutôt qu'un périphérique caractère, mais l'argument est le même)…
Voici un exemple pour clarifier les choses. Disons que vous voulez accéder à /dev/sda
(alors vous pouvez faire à peu près tout ce que vous voulez avec le contenu du disque, y compris planter un programme qui vous permettrait de devenir root
; c'est un périphérique bloc mais le problème est le même avec les périphériques caractère). Sur votre système cible, ls -l /dev/sda
montre
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
Cela signifie /dev/sda
est un périphérique bloc (le b
en début de ligne), avec le chiffre majeur 8 et le chiffre mineur 0 (le 8, 0
au milieu de la ligne). L'appareil n'est accessible qu'à root
(lecture/écriture) et membres du disk
groupe (également en lecture/écriture).
Imaginez maintenant sur ce système que vous ne pouvez pas devenir root
mais 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 tous.
Montez la clé sur votre système cible et hop, vous pouvez utiliser le usersda
périphérique 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 pourrez accéder au périphérique de mappage décrypté :créez un périphérique qui correspond au /dev/mapper
approprié entrée.)