0Pricing
Ethical Hacking Academy · Lezione

Memoria e stack

Come funzionano gli overflow

Memoria e stack è una lezione Ethical Hacking Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ethical Hacking Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Layout della memoria di un processo

Quando un programma viene eseguito, il sistema operativo gli assegna un layout di memoria con regioni distinte: text (codice), data/BSS (variabili globali), heap (allocazione dinamica) e stack.

I buffer overflow sfruttano più spesso lo stack, quindi comprenderlo è essenziale.

Che cos'è lo stack?

Lo stack è una regione di memoria utilizzata per le chiamate di funzione. Contiene variabili locali, argomenti delle funzioni e indirizzi di ritorno.

Su x86 cresce verso il basso: inserire dati sposta lo stack pointer verso indirizzi inferiori. Questa direzione è importante quando si verifica un overflow.

Stack frame

Ogni chiamata di funzione crea uno stack frame. Un frame contiene in genere variabili locali, il saved base pointer (EBP) e il return address (saved EIP).

L'indirizzo di ritorno indica alla CPU da dove proseguire al termine della funzione. Controllarlo è il fulcro dello sfruttamento degli stack overflow.

Registri principali

Su x86 a 32 bit, i registri importanti sono:

  • ESP: stack pointer, la cima dello stack.
  • EBP: base pointer, l'ancora del frame corrente.
  • EIP: instruction pointer, l'indirizzo della prossima istruzione.

Se controlla EIP, controlla il flusso di esecuzione.

Che cos'è un buffer?

Un buffer è un blocco di memoria di dimensione fissa, ad esempio un array locale di caratteri. Il programma si aspetta che i dati vi rientrino.

Se il programma copia più dati di quanti il buffer possa contenere senza verificarne la lunghezza, l'eccesso si riversa nella memoria adiacente.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

L'overflow

Si verifica un buffer overflow quando l'input supera le dimensioni del buffer e sovrascrive i dati adiacenti nello stack.

Poiché l'EBP salvato e l'indirizzo di ritorno si trovano subito oltre i buffer locali, un input sufficientemente grande può sovrascrivere l'indirizzo di ritorno, dirottando il flusso di controllo.

Funzioni pericolose

Gli overflow derivano solitamente da funzioni C non sicure che non verificano la lunghezza:

  • strcpy, strcat, sprintf, gets.

Alternative più sicure come strncpy o snprintf prevedono un limite di dimensione, ma il codice legacy è pieno di quelle pericolose.

gets(buffer); // never use: no length limit at all

Cosa si ottiene sovrascrivendo EIP

Quando la funzione vulnerabile restituisce il controllo, la CPU estrae l'indirizzo di ritorno (ora controllato dall'attaccante) e lo carica in EIP, quindi salta a quell'indirizzo.

Se si fa puntare EIP al proprio codice macchina iniettato (shellcode), la CPU lo esegue con i privilegi del programma.

Indirizzamento little-endian

x86 usa il formato little-endian: i valori composti da più byte vengono memorizzati iniziando dal byte meno significativo. Per sovrascrivere l'indirizzo di ritorno con 0x080414C3, è necessario scrivere i byte nell'ordine inverso.

Sbagliare l'endianness è un errore comune tra i principianti e fa fallire silenziosamente gli exploit.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Protezione moderne

I sistemi moderni aggiungono difese che rendono lo sfruttamento più complesso:

  • DEP/NX: contrassegna lo stack come non eseguibile.
  • ASLR: randomizza gli indirizzi di memoria.
  • Stack canary: rileva le sovrascritture prima del ritorno.

Questo corso si concentra sul caso classico (con le protezioni disattivate) per insegnare i concetti fondamentali.

Perché è ancora importante

Sebbene le difese moderne rendano più difficili i classici stack overflow, i concetti fondamentali restano essenziali. I sistemi embedded, l'IoT e i software legacy spesso non dispongono affatto di queste protezioni.

La padronanza del caso di base è inoltre il prerequisito per tecniche avanzate come ROP, che aggirano le moderne misure di mitigazione.

Verifica rapida

Ricordi quale valore l'attaccante vuole infine controllare?

Riepilogo

Ora conosce i fondamenti:

  • Lo stack memorizza le variabili locali, l'EBP salvato e l'indirizzo di ritorno, e cresce verso il basso.
  • ESP, EBP, EIP sono i registri x86 principali; controllare EIP significa controllare l'esecuzione.
  • Funzioni non sicure come strcpy e gets causano overflow.
  • x86 usa il formato little-endian; le difese moderne sono DEP, ASLR e canary.

Nel prossimo passaggio farà il fuzzing di un programma per trovare l'offset del crash.

Domande Frequenti

La lezione «Memoria e stack» è gratuita?

Sì — il testo completo di «Memoria e stack» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ethical Hacking Academy, passa a CoddyKit PRO. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Cosa imparerò in «Memoria e stack»?

Come funzionano gli overflow Eserciti Ethical Hacking Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Ethical Hacking Academy?

Non è richiesta alcuna esperienza precedente. Ethical Hacking Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Memoria e stack»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Ethical Hacking Academy?

Sì. Ogni lezione Ethical Hacking Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Memoria e stack
  2. Fuzzing per trovare i crash
  3. Controllo di EIP
  4. Shellcode ed exploit
← Torna a Ethical Hacking Academy