Shellcode: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Michele Bini (discussione | contributi)
m typo
tradotto da en.wiki
Riga 1:
Uno '''shellcode''' è un programma in linguaggio [[assembly]] che tradizionalmente esegue una [[shell]], come la [[shell Unix]] '/bin/sh' oppure la shell [[command.com]] sui [[sistema operativo|sistemi operativi]] [[DOS]] e [[Microsoft Windows]]. Uno shellcode può essere utilizzato per sfruttare un [[exploit]], consentendo ad un [[hacker]] o un [[cracker]] di acquisire l'accesso alla [[riga di comando]] di un [[computer]].
{{stub informatica}}
 
==Come funziona uno shellcode==
Uno '''''shellcode''''' è una sequenza di caratteri che rappresenta un codice binario in grado di lanciare una ''[[shell]]'' (come ''/bin/sh'' in [[Unix]] o ''command.com'' in [[Windows]]). Uno ''shellcode'' può essere utilizzato da un ''[[hacker]]'' per acquisire un accesso alla linea di comando.
 
Gli shellcode sono tipicamente inseriti nella memoria del computer stfruttando [[buffer overflow]] nello [[stack]] e nell'[[heap]], o tramite un [[format string attack]]. 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.
<!-- Questa definizione sembra inesatta
L'attacco di tipo '''shell code''', non è altro che una serie di comandi inviati da un client esterno alla network protetta attraverso una pagina [[html]] ed i comandi del [[sistema operativo]] da attaccare. Con tale procedura ad esempio si può creare da remoto un utente amministrativo e prendere possesso della [[workstation]] o del [[server]]. -->
 
===Scoprire l'inserimento di shellcode===
 
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 System]]s (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 effettivamente buone 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 [[crittazione]], [[codice auto-modificante]], [[codice polimorfico]] e [[codice alfanumerico]].
 
==Vedi anche==
* [[Buffer overflow]]
* [[Heap overflow]]
{{stub* [[Sicurezza informatica}}]]
* [[Assembly]]
 
==Collegamenti esterni==
 
* http://www.phrack.org/phrack/49/P49-14 L'introduzione canonica ai [[buffer overflow]] e la creazione di shellcode.
* http://www.shellcode.com.ar/docz/bof/Writing_shellcode.html Un'introduzione allo sviluppo di shellcode
* http://www.metasploit.com/shellcode.html Contiene esempi di shellcode [[x86]] e non-[[x86]] e un interfaccia on-line per la generazione e la codifica automatica di shellcode.
* http://www.shellcode.org/ Contiene esempi di shellcode [[x86]] e non-[[x86]].
* http://www.vividmachines.com/shellcode/shellcode.html Tutorial sugli shellcode in [[windows]] e [[linux]] con esempi passo-passo.
 
[[en:Shellcode]]
[[fr:Shellcode]]
[[de:Shellcode]]
[[en:Shellcode]]
[[es:Shellcode]]
[[pl:Shellcode]]