Buffer overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 2 fonte/i e segnalazione di 0 link interrotto/i. #IABot (v2.0beta10ehf1)
LauBot (discussione | contributi)
m Bot: passaggio degli url da HTTP a HTTPS
Riga 20:
In seguito i buffer overflows furono sfruttati da due importanti ''internet worms'': nel 2001 il [[Code Red (virus)|Code Red worm]], che sfruttava il buffer overflow nei server [[Internet Information Services|Microsoft Internet Information Services]] (IIS) 5.0 <ref>{{Cita web|url=https://www.sans.org/reading-room/whitepapers/malicious/code-red-worm-45|titolo=What is Code Red Worm?}}</ref>, e nel 2003 l'[[SQL Slammer]] worm, che compromise le macchine che eseguivano [[Microsoft SQL Server|Microsoft SQL Server 2000]].<ref>{{Cita web|url=http://pen-testing.sans.org/resources/papers/gcih/sql-slammer-worm-101033|titolo=SQL Slammer worm}}</ref>
 
Nonostante sia una delle vulnerabilità note da più tempo, ancora oggi il buffer overflow rappresenta una falla di sicurezza diffusa ed estremamente attuale: organizzazioni come [[CERT|CERT/CC]] e [[SANS]] pubblicano ancora oggi avvisi relativi alla sicurezza informatica che includono un numero rilevante di exploit basati su buffer overflow; inoltre diversi elementi della lista “CWE/SANS Top 25 Most Dangerous Software Error” sono varianti del buffer overflow.<ref>{{Cita web|url=httphttps://cwe.mitre.org/top25/|titolo=CWE -
2011 CWE/SANS Top 25 Most Dangerous Software Errors|sito=cwe.mitre.org|accesso=17 agosto 2016}}</ref>
 
Riga 76:
Un programma può richiedere al sistema operativo di allocare dinamicamente una certa quantità di memoria nell'area [[Heap (struttura dati)|heap]], sfruttando chiamate di sistema come ''malloc()'' e ''free''() in C/UNIX. Questi buffer possono ugualmente essere suscettibili a problemi di overflow nel momento in cui vi si possa inserire una quantità di dati superiore alla memoria allocata, e questi dati andrebbero come al solito a sovrascrivere le aree di memoria adiacenti al buffer.
 
Si parla in questi casi di '''heap overflow''', ma a differenza dello stack, nell'area heap non sono memorizzati né indirizzi di ritorno, né frame pointer che possano essere alterati da un attaccante per trasferire il controllo dell'esecuzione a codice arbitrario. Tuttavia questo non significa che tali anomalie non costituiscano delle vulnerabilità pericolose: nel 2002 fu riscontrata una vulnerabilità di tipo heap overflow in un'estensione di Microsoft IIS che poteva essere sfruttata per eseguire codice arbitrario proprio su questo tipo di server.<ref>{{Cita web|url=httphttps://www.kb.cert.org/vuls/id/363715|titolo=Vulnerability Note VU#363715 - Microsoft Internet Information Server (IIS) vulnerable to heap overflow during processing of crafted ".htr" request by "ISM.DLL" ISAPI filter|sito=www.kb.cert.org|accesso=19 agosto 2016}}</ref>
 
Quando un programma presenta diverse funzioni che eseguono la stessa operazione ma in modo diverso (ad esempio il ''sorting''), e si desidera stabilire a ''runtime'' quale utilizzare per processare i dati in ingresso, spesso si usa memorizzare dei puntatori a funzione nell'area heap: questi puntatori contengono gli indirizzi iniziali delle funzioni, e vengono utilizzati per richiamarne successivamente l'esecuzione. In uno scenario del genere, un attaccante potrebbe sfruttare l'overflow di un buffer allocato sullo heap per sovrascrivere tali puntatori, sostituendoli con un puntatore allo shellcode iniettato attraverso l'overflow: la successiva chiamata a una delle funzioni comporterebbe il trasferimento del controllo allo shellcode invece che alla funzione attesa.<ref>{{Cita web|url=https://www.sans.org/reading-room/whitepapers/threats/buffer-overflows-dummies-481|titolo=Buffer Overflows for Dummies - SANS Institute}}</ref>
Riga 90:
La miglior difesa da attacchi basati sul buffer overflow sta nella scelta di un linguaggio di programmazione che fornisca controlli automatici sulla dimensione dei buffer (o a tempo di compilazione o a ''runtime'') come Java, Python o Perl. Se questa opzione può essere presa in considerazione per lo sviluppo di nuovi programmi, resta però difficilmente applicabile nel caso di progetti esistenti, in cui ciò comporterebbe la riscrittura del codice nel nuovo linguaggio.<ref name=":1" />
 
Un'alternativa consiste nell'utilizzo di ''safe libraries'', ovvero librerie di funzioni che implementano protezioni contro il buffer overflow: in C rappresentano funzioni vulnerabili ''strcat'', ''strcpy'', ''gets'', ''sprintf'' (e altre ancora...) di cui esistono controparti "sicure" come ''strncpy'', ''strncat'', ''snprintf''. Un esempio di queste ''safe libraries'' sono "libsafe", "libparanoia" e "libverify".<ref>{{Cita web|url=https://www.freebsd.org/doc/en/books/developers-handbook/secure-bufferov.html|titolo=3.3. Buffer Overflows|sito=www.freebsd.org|accesso=31 agosto 2016}}</ref> Libsafe, ad esempio, implementa una tecnica di protezione dallo stack buffer overflow basata sul controllo di eventuali alterazioni dello stack quando una funzione termina di eseguire: se lo stack risulta modificato, il processo termina con un [[Errore di segmentazione|segmentation fault]].<ref>{{Cita web|url=httphttps://directory.fsf.org/wiki/Libsafe|titolo=Libsafe - Free Software Directory|sito=directory.fsf.org|accesso=4 settembre 2016}}</ref>
 
=== Difese a livello di codice sorgente ===
Riga 97:
"Its4" è un semplicissimo esempio di analizzatore statico che effettua la ricerca di eventuali chiamate di funzioni vulnerabili note (come ''strcpy'' o ''popen''), pensato come sostituzione alla ricerca tramite ''grep'': data la sua semplicità e la rudimentale analisi del codice che realizza è molto facile incappare in falsi positivi e negativi.<ref>{{Cita web|url=http://seclab.cs.ucdavis.edu/projects/testing/tools/its4.html|titolo=Its4}}</ref>
 
In alternativa esistono tool più complessi in grado di effettuare l'analisi dinamica del programma, come "Rational Purify", un debugger di memoria realizzato da IBM in grado di individuare eventuali anomalie nella gestione della memoria durante l'esecuzione del programma (accesso a variabili non inizializzate, buffer overflows, deallocazione impropria di memoria, ecc...).<ref>{{Cita web|url=httphttps://www-01.ibm.com/software/awdtools/purify/compare.html|titolo=Rational Purify}}</ref>
 
=== Difese a livello di compilatore ===
Riga 116:
* PaX <ref>{{Cita web|url=https://pax.grsecurity.net/|titolo=Homepage of PaX|sito=pax.grsecurity.net|accesso=4 settembre 2016}}</ref>
* Exec Shield <ref>{{Cita web|url=https://lwn.net/Articles/31032/|titolo="Exec Shield", new Linux security feature [LWN.net]|sito=lwn.net|accesso=4 settembre 2016}}</ref>
* OpenWall <ref>{{Cita web|url=httphttps://www.openwall.com/|titolo=Openwall - bringing security into open computing environments|sito=www.openwall.com|accesso=4 settembre 2016}}</ref>
Le versioni più recenti di [[Microsoft Windows]] lo supportano sotto il nome di Data Execution Prevention (DEP) (o protezione esecuzione programmi).<ref>{{Cita web|url=https://kc.mcafee.com/corporate/index?page=content&id=KB58554&locale=it_IT&viewlocale=it_IT|titolo=McAfee KnowledgeBase - Prevenzione esecuzione programmi e Protezione da overflow del buffer|sito=kc.mcafee.com|accesso=4 settembre 2016}}</ref>
 
Un'altra tecnica di difesa a livello di sistema operativo è l'[[ASLR|''address space layout randomization'' (ASLR)]] che consiste nel rendere parzialmente casuale l'indirizzo delle funzioni di libreria e delle aree di memoria più importanti; ciò rende più complessa (ma non impossibile) l'esecuzione di codice tramite exploit perché costringe l'attaccante a cercare l'indirizzo del codice da eseguire tramite una serie di tentativi rilevabili sia dalla vittima, sia da eventuali SW di protezione.<ref>{{Cita web|url=httphttps://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf|titolo=Address Space Layout Randomization}}</ref>
 
== Note ==
Riga 165:
== Collegamenti esterni ==
* [https://www.sans.org/reading-room/whitepapers/securecode/buffer-overflow-attack-mechanism-method-prevention-386 Inside the Buffer Overflow Attack:Mechanism, Method, & Prevention]
* [httphttps://cwe.mitre.org/top25/ CWE - 2011 CWE/SANS Top 25 Most Dangerous Software Errors]
* [httphttps://www.kb.cert.org/vuls/id/363715 Vulnerability Note VU#363715 - Microsoft Internet Information Server (IIS) vulnerable to heap overflow during processing of crafted ".htr" request by "ISM.DLL" ISAPI filter]
* [https://www.sans.org/reading-room/whitepapers/threats/buffer-overflows-dummies-481 Buffer Overflows for Dummies - SANS Institute]
* [http://www.preserve-it-all.org/emc-plus/rsa-labs/historical/countermeasures-against-buffer-overflow-attacks.htm RSA Laboratories - Countermeasures against Buffer Overflow Attacks]
* [https://www.freebsd.org/doc/en/books/developers-handbook/secure-bufferov.html 3.3. Buffer Overflows]
* [httphttps://directory.fsf.org/wiki/Libsafe Libsafe - Free Software Directory]
* [http://seclab.cs.ucdavis.edu/projects/testing/tools/its4.html Its4]
* [httphttps://www-01.ibm.com/software/awdtools/purify/compare.html Rational Purify]
* {{collegamento interrotto|1=[ftp://ftp.tuwien.ac.at/.vhost/www.gnu.org/software/gcc.old/extensions.html Gcc old extensions] |date=febbraio 2018 |bot=InternetArchiveBot }}
* [http://www.angelfire.com/sk/stackshield/info.html StackShield]
Riga 178:
* [https://pax.grsecurity.net/ Homepage of PaX]
* [https://lwn.net/Articles/31032/ "Exec Shield", new Linux security feature]
* [httphttps://www.openwall.com/ Openwall - bringing security into open computing environments]
* [https://kc.mcafee.com/corporate/index?page=content&id=KB58554&locale=it_IT&viewlocale=it_IT McAfee KnowledgeBase - Prevenzione esecuzione programmi e Protezione da overflow del buffer]
* [https://web.archive.org/web/20110721060319/http://csrc.nist.gov/publications/history/ande72.pdf "Computer Security Technology Planning Study" - Pag. 61]
Riga 187:
* [https://security.googleblog.com/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html CVE-2015-7547: glibc getaddrinfo stack-based buffer overflow]
* [https://access.redhat.com/it/node/2171131 Falla di sicurezza critica: glibc stack-based buffer overflow in getaddrinfo() (CVE-2015-7547) - Red Hat Customer Portal]
* [httphttps://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf Address Space Layout Randomization]
 
{{Controllo di autorità}}