Sto imparando a conoscere la sicurezza di Linux e faccio fatica a capire perché una chiavetta USB con un dispositivo di caratteri sia potenzialmente pericolosa.
Se ho una chiavetta USB con un eseguibile bash con root setuid, il pericolo è ovvio:chiunque abbia una chiavetta USB del genere può ottenere i privilegi di root sul mio computer se ho una voce come
/dev/sdb1 /media/usbstick auto defaults 0 0
nel mio /etc/fstab
perché defaults
include suid
.
Ma per quanto riguarda i dispositivi dei personaggi? Come posso usare un dispositivo di caratteri per ottenere i privilegi di root o rompere cose se una chiavetta USB con un dispositivo di caratteri viene montata con dev
o defaults
?
Risposta accettata:
Poiché l'accesso al dispositivo sottostante è controllato solo dai permessi dei file per impostazione predefinita, quindi se la tua chiavetta USB contiene un filesystem POSIX con un nodo dispositivo scrivibile da tutto il mondo corrispondente a un dispositivo reale nel sistema, puoi usare quel nodo dispositivo per accedere al corrispondente dispositivo come utente "normale". Immagina un dispositivo corrispondente a uno dei dispositivi audio, la tua webcam, /dev/sda
(che è un dispositivo a blocchi piuttosto che un dispositivo a caratteri, ma l'argomento è lo stesso)...
Ecco un esempio per rendere le cose più chiare. Supponi di voler accedere a /dev/sda
(quindi puoi praticamente fare tutto ciò che vuoi con il contenuto del disco, incluso creare un programma che ti permetta di diventare root
; questo è un dispositivo a blocchi ma il problema è lo stesso con i dispositivi a caratteri). Sul tuo sistema di destinazione, ls -l /dev/sda
mostra
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
Questo significa /dev/sda
è un dispositivo a blocchi (il b
all'inizio della riga), con il numero maggiore 8 e il numero minore 0 (il 8, 0
al centro della linea). Il dispositivo è accessibile solo a root
(lettura/scrittura) e membri del disk
gruppo (anche lettura/scrittura).
Ora immagina che su questo sistema non puoi diventare root
ma per qualche motivo puoi montare chiavette USB come utente senza nodev
. Su un altro sistema, dove sei root
, puoi creare un file speciale corrispondente sulla tua chiavetta USB:
mknod -m 666 usersda b 8 0
Questo creerà un file speciale chiamato usersda
, leggibile e scrivibile da tutti.
Monta la chiave sul tuo sistema di destinazione e presto, puoi usare usersda
dispositivo allo stesso modo di /dev/sda
, ma senza restrizioni di accesso...
(Funzionerà anche con file system crittografati, purché tu sia in grado di accedere al dispositivo di mappatura decrittografato:crea un dispositivo che corrisponda al /dev/mapper
appropriato voce.)