Ti suggerisco di verificare se puoi effettivamente fare qualcosa con quei file sul sistema che stai cercando di proteggere come utente normale. Molto probabilmente, scoprirai che la maggior parte di quelli veramente importanti (dispositivi di archiviazione per esempio) non sono già accessibili agli utenti regolari, perché questa è la configurazione standard su una vasta maggioranza di sistemi UNIX, anche nella versione 4.3BSD e SVR4 . Se sei veramente realistico, l'accesso non-root a questi file dispositivo è probabilmente sufficiente per la sicurezza (se l'utente malintenzionato ha accesso root, i file dispositivo non sono importanti perché possono probabilmente ottenere il codice in esecuzione nello spazio del kernel facilmente, cosa che non Non è necessario che i file del dispositivo colpiscano l'hardware). Se il sistema in questione è configurato per utilizzare SELinux o un altro LSM, puoi anche sfruttare (se la configurazione predefinita non lo è già) per limitare ulteriormente l'accesso.
Anche se nascondi o blocchi i percorsi sotto /dev
, ciò non impedisce in realtà alle persone di creare nuovi nodi di dispositivo altrove con i numeri di dispositivi maggiori e minori appropriati e le autorizzazioni arbitrarie. Non è possibile impedire facilmente alle persone di creare tali file, ma è possibile renderli sostanzialmente inutili montando tutto tranne /dev
con l'opzione di montaggio nodev
, che disabilita la gestione speciale dei nodi del dispositivo sul filesystem montato. Per fare ciò è necessario che il filesystem di root sia separato da /dev
(che dovrebbe essere un qualche file system virtuale automatico fornito dal kernel (come devtmpfs
) o un'istanza tmpfs
popolata da un gestore dispositivi).
Oltre a ciò, molti dei più cattivi ( /dev/mem
, /dev/port
, /dev/kmem
e /dev/msr
, e /dev/hpet
) possono essere completamente disabilitati al momento della compilazione. Questo non solo impedisce loro di apparire in /dev
, significa che letteralmente non puoi mai avere istanze funzionanti di questi nodi di dispositivo sul sistema. La maggior parte delle distribuzioni Linux disabilita esplicitamente /dev/kmem
in questi giorni perché nulla la usa e molti di loro disabilitano anche /dev/mem
e /dev/port
perché sono largamente utilizzati solo da software legacy. /dev/msr
invece è solitamente costruito come un modulo caricabile (e quindi può essere esplicitamente inserito nella blacklist senza ricostruire il kernel) perché ci sono degli usi pratici che non implicano l'attacco al sistema (ad esempio, il debug della CPU problemi di gestione).
Inoltre, a parte la vista, non bloccare /dev/null
o /dev/urandom
, probabilmente lo spezzerai se lo fai, e nessuno dei due è davvero un vettore di attacco.