J'apprends à propos de la sécurité Linux et de la difficulté à comprendre pourquoi un bâton USB avec un appareil de caractère sur celui-ci est potentiellement dangereux.
Si j'ai un bâton USB avec un exécutable Bash qui a une racine seuid sur elle, le danger est évident: n'importe qui avec un tel bâton 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
comprend suid
.
Mais qu'en est-il des périphériques de caractère? Comment utiliser un périphérique de caractères pour obtenir des privilèges root ou casser des trucs si un bâton USB avec un périphérique de caractère sur celui-ci est monté avec dev
ou defaults
?
Étant donné que l'accès au périphérique sous-jacent est contrôlé uniquement par des 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 d'écriture mondiale correspondant à un périphérique réel dans le système, vous pouvez utiliser ce nœud de périphérique pour accéder à la correspondance. appareil comme un utilisateur "simple". Imaginez un appareil correspondant à l'un des périphériques audio, de votre webcam, /dev/sda
(qui est un dispositif de bloc plutôt qu'un dispositif de caractère, mais l'argument est le même) ...
Voici un exemple pour rendre les choses plus claires. Dis que vous voulez accéder à /dev/sda
(alors vous pouvez tout ce que vous pouvez faire tout ce que vous voulez avec le contenu du disque, y compris la plantation d'un programme qui vous permettrait de devenir root
; ceci est un périphérique de bloc mais le problème est la même chose avec les périphériques de caractères ). Sur votre système cible, ls -l /dev/sda
spectacles
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
Ça signifie /dev/sda
est un périphérique de bloc (le b
au début de la ligne), avec le nombre majeur 8 et le nombre mineur 0 (le 8, 0
au milieu de la ligne). L'appareil est uniquement accessible à root
(lecture/écriture) et membres du groupe disk
(lecture/écriture également).
Maintenant, imaginez sur ce système que vous ne pouvez pas devenir root
mais pour une raison quelconque, vous pouvez monter des bâtons 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 écritable par tout le monde.
Montez la clé de votre système cible et Hey Presto, vous pouvez utiliser le périphérique usersda
de la même manière que /dev/sda
, mais sans restriction d'accès ...
(Cela fonctionnera même avec des systèmes de fichiers cryptés, à condition que vous puissiez accéder au périphérique MAPPER déchiffré: Créer un périphérique correspondant à l'approprié /dev/mapper
entrée.)