|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
buffer overflow: parliamone
ieri sera si è scatenato il panico per l'ennesima falla di windows, causata da un buffer overflow.
quello che mi chiedo è come mai capitano ancora cose del genere. ricordo di aver affrontato la questione BO e l'idea che mi ero fatto era quella di un problema serio ma cmq evitabile con qualche accorgimento. come è possibile che saltino fuori ogni volta problemi del genere? una volta ho scritto un programmino che poteva essere "bucato" con un attacco tipo BO ma avevo proprio fatto apposta a mettere la strcpy in un certo punto ecc. ecc. e pensavo che ormai si fosse immuni da roba del genere ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Ieri sera a 3 miei amici quasi contemporaneamente hanno avuto problemi di RPC (Remote Procedure Call), ti stai riferendo a quello?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
io parlo del buffer overflow in generale. per quel problema di RPC c'è già una discussione in rilievo in "Discussioni Off-Topic".
l'ho messo in questa sezione perché mi piacerebbe parlarne dal punto di vista della programmazione: ovvero cosa genera un buffer overflow, come sfruttare queste falle e soprattutto come fare per creare programmi "sicuri" ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2003
Città: Torino
Messaggi: 319
|
ciao
L'overflow di un registro o di un buffer (penso siano più o meno simili...) avviene quando si raggiunge il numero massimo che il registro può contenere. Ad esempio nel microcontrollore PIC16x84 una volta raggiunto il numero 255 (registri da 8 bit), se si incrementa di 1 o più quel numero, il conteggio ritorna da capo, ovvero 0, 1, 2... Nel momento in cui fa il "giro", viene messo a 1 una determinata (il carry se non sbaglio...) flag che ti indica che il registro è andato in overflow. Penso che intenda una cosa del genere, però non ne sono sicuro, magari è completamente diverso quel caso...aspetto eventuali correzioni. ciao |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
Quote:
quello che intendevo io invece riguarda il caso di buffer quindi in genere si parla di array di caratteri. viene data in pasto a tale array una stringa particolare e questa "sconfina" dai limiti dell'array e finisce con l'intaccare parti di memoria dove risiede il codice sorgente del programma in esecuzione. in questo modo si può controllarne l'esecuzione, saltando in punti particolari o magari inserendo delle istruzioni che si vogliono eseguire (molto comunemente l'istruzione per aprire una shell) |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2000
Messaggi: 886
|
Non so ... può essere utile?
************ Mi sembra una spiegazione introduttiva non malaccio...Spero sia un indirizzo "lecito" altrimenti lo edito ....
__________________
1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. ![]() Ultima modifica di MM : 16-08-2003 alle 12:37. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 1999
Città: Pistoia
Messaggi: 37438
|
Quote:
Può sembrare ipocrisia, ma non lo è Sono perfettamente cosciente che certi siti sono noti a tutti (anche quelli pornografici lo sono), ma questo non significa che li si debba anche pubblicizzare Lo scopo dichiarato di certi siti non è l'evidenziare certe falle nella sicurezza, ma il suggerire metodi per sfruttarle, quindi da questo punto di vista, a mio avviso, non sono accettabili Questi i motivi della correzione apportata, mi riservo comunque di chiedere il parere di tutto lo staff e verificare se mi sono sbagliato |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2000
Messaggi: 886
|
--Non ritengo personalmente che si debbano segnalare certe cose
Calma, apposta mi sono autodenunciato, appena inserito il post, presso i mod .... giusto per avere un parere... (non ricordavo tutto il contenuto dell'articolo che in passato avevo preso come base per alcuni test sulla mia rete aziendale) non faccio certe cose a cuor leggero --Questi i motivi della correzione apportata, mi riservo comunque di chiedere il parere di tutto lo staff e verificare se mi sono sbagliato Per me è sufficiente questo, anche io ero un po' restio alla pubblicazione del link che peraltro trattava bene quanto in argomento da un punto di vista "anche", o meglio, soprattutto, teorico. Chiudiamo pure qui la questione, esiste altro materiale meno"pesante" sull'argomento che cercherò di mettere a disposizione. Grazie per le puntualizzazioni, anche se forse avrei apprezzato maggiormente un pvt.
__________________
1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. ![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
cmq io voglio solo una discussione teorica, non mi interessa affatto sapere come sfruttare falle di questo tipo.
semmai è interessante capire come prevenirle e come scrivere codice "sicuro". una discussione sul buffer overflow può inoltre stimolare ad approfondire argomenti che non riguardano esplicitamente la sicurezza. ad esempio si può capire bene come funziona lo stack, cos'è il record di attivazione di una funzione ecc. ho proposto l'argomento perché in questa sezione si fanno sempre domandine su come fare questo e quello nel tal linguaggio e non si approfondisce mai nulla ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Quote:
Spero anche che i moderatori per qualche linea di codice che magari verrà postata, tengano in considerazione che si tratta appunto di uno scambio culturale di vedute ed esperienze e non un invito al cracking etc.....(e magari bastasse solo qualche linea di codice ![]() Cmq....,diamo per scontato di sapere che: La memoria allocata per un processo si divide in 3 parti: 1) text (a sola lettura ) 2) dati statica - divisa in "data" e "bss" 3) dati dinamica - divisa in "stack e "heap" e dato per scontato che sappiamo anche cosa "ci va" a livello dati in queste 3 parti..... E, non ultimo, diamo anche per scontato di masticare un pò di C ed un pò di assembly...... per tornare al problema posto da recoil, e cioè relativo al buffer overflow sullo stack, possiamo dire che se ad esempio vogliamo realizzare una semplice applicazione in C, che magari legge una stringa da linea di comando, per poi copiarla in un buffer di "n" caratteri mediante "strcpy()" e poi c'invia il dato su output standard.....qui chiedo esplicitamente ad un mod di sapere appunto se posso postare o meno un pò di codice.....
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
Quote:
per me non c'è niente di illegale, tanto più in un semplice esempio con lo strcpy dato che potrebbe trattarsi di un programma qualunque ![]() purtroppo non ho più la roba che avevo fatto io ma per fare un esempio basta poco direi. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
beh, hai ragione....se usiamo codice di publico dominio.....
/* esempio tratto da una nota rivista....buffer.c*/ #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buf[48]; printf("indirizzo: 0x%x (%u)\n", buf , buf); strcpy(buf, argv[1]); printf("%s\n", buf); } ........ compilatelo anche con l'opzione -S per il codice assembly.
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
beh?....finito tutto?
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
appunto, non scrive nessuno
![]() diamo colpa alle vacanze |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Quote:
beati loro...... ![]() ![]()
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2000
Messaggi: 886
|
Se riesco a recuperare la documentazione che avevo la posto .... purtroppo sono passati un po' di anni e due traslochi...
![]()
__________________
1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. ![]() |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
possiamo anche partire da quello spunto di qualche post sopra.
E' sicuramente banale ma credo che per la trattazione dell'argomento sia + che sufficiente(almeno per come ho inteso che Recoil voglia).
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#18 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Quindi non condivido gli atteggiamenti "questi siti non dovrebbero essere segnalati ecc. ecc." Anche i coltelli da cucina possono essere usati per uccidere, eppure pare che non siano stati tolti dal commercio. Inoltre fare un uso malizioso di eventuale codice in rete richiede conoscenze estremamente specialistiche, cioè non sono persone che si vanno a leggere la teoria dei buffer overflow. Quella di cui parli tu non è ipocrisia ma oscurantismo. Giocare con queste cose, con le cose che tu dici non debbano essere pubblicizzate, sono gli argomenti che la maggiorparte dei programmatori dovrebbe conoscere dopo le teorie della programmazione. Lo sviluppo non è fatto solo dalla teoria ma anche dalla tecnica. E' questa è tecnica pura. Se poi c'è qualcuno che crede che simili argomenti possano essere appresi a dovere con gli esempi deficienti di una rivista che usa male una funzione di libreria ... bhè ... |
|
![]() |
![]() |
![]() |
#19 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Recoil ha detto una cosa giusta. Ha detto che simili problemi pensava fossero risolti una volta per tutti. Ma se nessuno insegna COME FUNZIONANO in fondo le cose e quindi non impara a fondo COME EVITARLE, ci ritroviamo che tutte le generazioni future faranno sempre e solo gli stessi errori. |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Quote:
maxithron scrive un programma, un sistema operativo a un accidenti qualsiasi. Sarà pieno di bug ma va bene così. Il problema nasce quando certi exploit possono essere utilizzati contro software "quotati" scritti da persone che normalmente dovrebbero mangiare pasta e bit, per cui si ritorna inevitabilmente al punto che indicavi prima e cioè che su certe materie c'è sicuramente dell'oscurantismo in quanto.... magari bastasse leggere quegli articoletti che ogni tanto compaiono sulle riviste (come dicevo qualche post + su).
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:45.