Perché "nodev" in / etc / fstab è così importante? Come possono essere utilizzati i dispositivi di carattere per l'hacking?


19

Sto imparando a conoscere la sicurezza di Linux e faccio fatica a capire perché una chiavetta USB con un dispositivo a caratteri sia potenzialmente pericolosa.

Se ho una chiavetta USB con un eseguibile bash che ha root setuid su di essa, il pericolo è ovvio: chiunque abbia una tale chiavetta USB 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/fstabperché defaultsinclude suid.

E i dispositivi a caratteri? Come posso usare un dispositivo a caratteri per ottenere i privilegi di root o rompere cose se una chiavetta USB con un dispositivo a caratteri su di essa viene montata con devo defaults?

Risposte:


31

Poiché l'accesso al dispositivo sottostante è controllato solo dalle autorizzazioni dei file per impostazione predefinita, quindi se la chiavetta USB contiene un filesystem POSIX con un nodo dispositivo scrivibile in tutto il mondo corrispondente a un dispositivo reale nel sistema, è possibile utilizzare quel nodo dispositivo per accedere al corrispondente dispositivo come utente "semplice". 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 /dev/sda(quindi puoi praticamente fare tutto quello che vuoi con i contenuti del disco, incluso piantare un programma che ti consenta 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/sdamostra

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

Questo significa che /dev/sdaè un dispositivo a blocchi ( ball'inizio della riga), con il numero maggiore 8 e il numero minore 0 ( 8, 0il centro della riga). Il dispositivo è accessibile solo a root(lettura / scrittura) e ai membri del diskgruppo (anche lettura / scrittura).

Ora immagina su questo sistema che non puoi diventare, rootma per qualche motivo puoi montare chiavette USB come utente senza nodev. Su un altro sistema, dove ti trovi root, puoi creare un file speciale corrispondente sulla tua chiave USB:

mknod -m 666 usersda b 8 0

Questo creerà un file speciale chiamato usersda, leggibile e scrivibile da tutti.

Installa la chiave sul tuo sistema di destinazione e hey presto, puoi utilizzare il usersdadispositivo allo stesso modo /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 alla /dev/mappervoce appropriata .)


Sembra interessante! Ma non sono sicuro di capirlo. Un dispositivo è un file e si accede ai file tramite gli inode. Il dispositivo falso sulla mia chiavetta USB avrebbe un inode diverso e quindi sarebbe un dispositivo diverso, no?
rosix,

7
Un dispositivo è un file speciale, con un numero maggiore e minore; puoi vederli se lo fai ls -l /dev, sono i due numeri che appaiono al posto delle dimensioni del file. Il kernel abbina un file speciale di dispositivo a un driver che utilizza quei numeri, quindi puoi avere più file che puntano allo stesso driver di kernel e dispositivo. I file speciali vengono creati utilizzando mknod.
Stephen Kitt,

Si noti che i /dev/tty*dispositivi sono dispositivi a caratteri e che un intruso che ottiene pieno accesso in lettura / scrittura alle sessioni del terminale e / o alla console di sistema in combinazione con le funzioni
abusive

1
@TheQuark praticamente, sì. È un po 'più generale; Direi "interpretare" significa "trattare i file di dispositivo come nodi di dispositivo, non semplici file".
Stephen Kitt,

1
@ n00b non puoi montarlo usersda, ma puoi almeno usarlo per leggere dal disco sottostante senza restrizioni e possibilmente scrivere anche su di esso. Puoi facilmente copiare tutto il contenuto del disco e con strumenti come debuge2fs, sovrascrivi /etc/shadowecc.
Stephen Kitt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.