
Analizziamo ora uno degli attacchi hacker più usati.
Teoria
Il Buffer overflow consiste nello sfruttare la mancanza di un controllo all’interno di programmi affacciati sulla rete.
Il programma in questione non controlla la lunghezza dei dati che riceve ma li scrive direttamente su un buffer di lunghezza prestabilita.
Se vengono inviati più dati di lunghezza maggiore di quella del buffer si blocca il programma o il computer, ma da qualche anno a questa parte si è scoperto che dimensionando a modo i dati extra si riesce a prendere il controllo del programma e a volte anche del computer attaccato.
Effettuare un attacco buffer overflow
Nelle seguenti righe verrà fatto un esempio di buffer overflow, serviranno particolari file, se si vuole effettuare tale test.
Cosa serve avere?
Vuln.c // Il sorgente del programma vulnerabile
Vuln.exe //Il programma vulnerabile compilato per Windows
Perl.exe + perl58.dll // Il compilatore perl a riga di comando
Exp.pl // Un file perl per effettuare l’exploiting
Iniziamo:
1) Mettiamo tutti i file in una cartella a nostro piacimento.
2) Osserviamo il sorgente del programma vulnerabile:
int main(int argc,char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
3)Analiziamo il codice:
la prima riga decide che il programma ammette un argomento all’avvio (Per esempio: “Vuln.exe Ciao”).
La terza e la quarta sono decisamente piu interessanti, per cui l’argomento passato al programma viene inserito in un buffer che misura 500 byte.
4)Ed ecco l’attacco: se noi inseriamo un contenuto maggiore di 500 byte?
Il programma sovrascriverà la parte adiacente di memoria.
5)Ora proviamo:
se apriamo il file Exp.pl notiamo le seguenti righe:
6)Apriamo col prompt dei comandi il file Vuln.exe e procediamo.
Il carattere “pipe” redirige l’output della compilazione dello script perl (la stampa di 502 volte della lettera “a”,altrimenti impossibile da fare a mano) fino all’argomento del programma,tanto da risultare:
7)Il programma ha dato luogo ad un crash (su linux appare come “segmentation fault” nella shell).
Considerazioni finali
Se invece di accodare 2 caratteri in più nel buffer inseriamo del codice che il programma capisce e interpreta giustamente, possiamo fargli eseguire ciò che vogliamo.
Questo tipo di applicazione è chiamata shellcode.
Quando un attacker prova questo tipo di attacco non è in possesso del sorgente vulnerabile, ma va molto per tentativi.










Iscriviti al feed di Good2know