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
rooteseguibile 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
sudoassicurarti che sia, in effetti, l'eseguibile fornito dal sistema (nessuno sta per digitaresudoogni volta)? Poiché/usr/bin/sudoesegue operazioni di sicurezza critiche per il sistema, la possibilità di ombreggiare la sua posizione utilizzando la variabilesudosembra portare molti rischi con poco beneficio. In tale ambiente, sembra che l'utilizzo diPATHsia fondamentalmente insicuro e sarebbe meglio consentire l'accesso comesudoe l'accesso su un TTY separato.