• Advertise

Shellcodes

Uno shellcode e’ una routine di codice in linguaggio assembly che tradizionalmente esegue una shell, come la shell Unix ‘/bin/sh’ oppure il prompt dei comandi ‘cmd.exe’ di Windows.

Uno shellcode puo’ essere utilizzato per sfruttare un exploit, consentendo ad un attaccante di acquisire i privilegi del programma vulnerabile e lanciare comandi sul sistema.

Visualizzando un qualsiasi exploit che sfrutta una vulnerabilità che mira ad acquisire una shell con privilegi superiori, sarà possibile visualizzare all’interno del codice una variabile contenente qualcosa del genere:
char shellcode[] =
"\x33\xc9\x83\xe9\xeb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x8a"
"\xd4\xf2\xe7\x83\xeb\xfc\xe2\xf4\xbb\x0f\xa1\xa4\xd9\xbe\xf0\x8d"
"\xec\x8c\x6b\x6e\x6b\x19\x72\x71\xc9\x86\x94\x8f\x9b\x88\x94\xb4"
"\x03\x35\x98\x81\xd2\x84\xa3\xb1\x03\x35\x3f\x67\x3a\xb2\x23\x04"
"\x47\x54\xa0\xb5\xdc\x97\x7b\x06\x3a\xb2\x3f\x67\x19\xbe\xf0\xbe"
"\x3a\xeb\x3f\x67\xc3\xad\x0b\x57\x81\x86\x9a\xc8\xa5\xa7\x9a\x8f"
"\xa5\xb6\x9b\x89\x03\x37\xa0\xb4\x03\x35\x3f\x67";

Gli shellcodes vengono inseriti in spazi di memoria del sistema operativo allocati dal programma vulnerabile sfruttando bug di programmazione del software relativi alla gestione della memoria (buffer overflow, buffer overrun) o ad input imprevisti (integer overflow, format string).

L’esecuzione dello shellcode può essere ottenuta sovrascrivendo l’indirizzo di ritorno dello stack con l’indirizzo dello shellcode. In questo modo quando la subroutine prova a ritornare al chiamante, ritorna invece al codice dello shellcode che apre una riga di comando che può essere usata dal cracker.

I cracker che scrivono gli shellcode utilizzano spesso tecniche per nascondere il loro attacco. Essi provano generalmente ad aggirare il modo in cui i gli Intrusion Detection Systems (IDS) riconoscono un attacco in arrivo. Un tipico IDS di solito cerca in tutti i pacchetti in arrivo gli spezzoni di codice tipici degli shellcode (spesso un grande array di istruzioni NOP); se vengono trovati il pacchetto viene scartato prima di arrivare all’applicazione cui è destinato. Il punto debole degli IDS è che non possono fare delle ricerche complesse poiché richiederebbe troppo tempo, rallentando così la connessione ad Internet.

Gli shellcode contengono spesso una stringa con il nome di una shell. Tutti i pacchetti in arrivo che contengono una stringa del genere sono considerati abbastanza sospetti dal punto di vista dell’IDS. Inoltre, alcune applicazioni non accettano input non-alfanumerici (ossia, non accettano nient’altro che i caratteri a-z, A-Z, 0-9, e pochi altri).

Per aggirare questo tipo di misure anti-intrusione, i cracker fanno a volte uso di codifiche

Categories: Sicurezza