Prima di tutto, lasciatemi menzionare che sto assumendo una configurazione configurata dalle attuali distribuzioni desktop Linux (per esempio Debian, Fedora). Sono sicuro che ci sono metodi che, se implementati, attenuerebbero i problemi descritti qui. Quello che mi interessa è la sicurezza "out of the box".
Mi sembra che il fatto che le shell eseguano file come ~/.profile
o ~/.bashrc
, che consentono la completa manipolazione dell'ambiente di esecuzione di un utente e siano di proprietà dell'utente, distrugge ogni speranza che un programma come sudo
possa essere eseguito in modo sicuro. Il problema è che qualsiasi programma malevolo in esecuzione come utente può modificare questi file, ad esempio, modificare la variabile di ambiente PATH
per includere un file eseguibile sudo
falso, come PATH="$HOME/.evil:$PATH"
, in cui il programma dannoso ha anche creato un file %codice%. Quindi, la volta successiva che l'utente digita $HOME/.evil/sudo
in una shell, verrà eseguito il falso sudo
e potrà registrare la password digitata. Pertanto, il falso sudo
può ottenere sudo
privilegi anche se il programma dannoso originale aveva solo i privilegi dell'utente.
In effetti, il file root
predefinito creato dalla mia installazione di Ubuntu include le seguenti righe:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
quindi non c'è nemmeno bisogno di modificare .profile
- basta creare .profile
ed è già il primo su $HOME/bin/sudo
!
Il mio punto non è che sia già "troppo tardi" quando viene eseguito un codice malevolo arbitrario o che questo utente possa essere notato dall'utente (suppongo che sia simile a un attacco phising). Mi aspetto che un programma dannoso in esecuzione come utente possa fare tutto ciò che l'utente potrebbe fare. Ciò che non mi aspetto è, tuttavia, che possa fare più di quell'utente ( PATH
privilegi).
La mia domanda è, in sostanza:
- È vero che il sistema
root
eseguibile può essere eluso in questo modo? - Perché i sistemi desktop Linux, per impostazione predefinita, sono configurati in modo così facilmente sfruttabile? Non dovrebbe il modo predefinito di invocare
sudo
assicurarti che sia, in effetti, l'eseguibile fornito dal sistema (nessuno sta per digitaresudo
ogni volta)? Poiché/usr/bin/sudo
esegue operazioni di sicurezza critiche per il sistema, la possibilità di ombreggiare la sua posizione utilizzando la variabilesudo
sembra portare molti rischi con poco beneficio. In tale ambiente, sembra che l'utilizzo diPATH
sia fondamentalmente insicuro e sarebbe meglio consentire l'accesso comesudo
e l'accesso su un TTY separato.