Simulazione Educativa: Attacco Return Address Overwrite con ATmega328

 

Simulazione Educativa: Attacco Return Address Overwrite con ATmega328

Titolo

"Capire un attacco avanzato con strumenti semplici: Return Address Overwrite spiegato con ATmega328"


Introduzione

In questo video, affronteremo un tema complesso della sicurezza informatica: il Return Address Overwrite. È un tipo di attacco usato per prendere il controllo dell'esecuzione del codice, ma lo faremo in modo sbalorditivamente semplice, usando solo:


Il concetto di Stack (con metafora)

Immagina lo stack come una pila di biglietti con indirizzi. Quando il programma chiama una funzione (CALL), scrive su un biglietto: "torna qui dopo" e lo mette in cima alla pila. Questo biglietto è l'indirizzo di ritorno. Quando la funzione finisce (RET), legge l'ultimo biglietto e ci salta. Esegue l'indirizzo scritto e continua come se nulla fosse.

  • CALL = mette un biglietto (indirizzo) → PUSH implicito

  • RET = legge il biglietto → POP implicito

Ogni CALL deve avere un RET. Ogni biglietto d’andata ha bisogno del suo ritorno.

E noi, con l'attacco, creeremo un biglietto di ritorno falso!

Questo vale per tutti i sistemi: da un microcontrollore 8-bit a un sistema operativo moderno. Lo stack è ovunque.


Prima parte: codice innocente (LED acceso)

Iniziamo con un semplice programma:

Snippet di codice
.org 0x0
    rjmp init
.org 0x60
init:
    sbi 4,5      ; DDRB5 = 1 -> pin 13 output
    sbi 5,5      ; PORTB5 = 1 -> LED ON
loop:
    rjmp loop    ; ciclo infinito

Quando compili e carichi questo codice su avr-compiler-js, vedrai il LED restare acceso. Il disassemblato conferma il flusso:

Makefile
L0060: SBI 4, 5
L0061: SBI 5, 5
L0062: RJMP 0x0062

Funziona esattamente come previsto.


Seconda parte: "codice hackerato"

Ora, aggiungiamo una nuova sezione che sovrascrive lo stack per alterare il comportamento:

Snippet di codice
.org 0x0
    rjmp hack

.org 0x60
init:
    sbi 4,5
    sbi 5,5
loop:
    rjmp loop

.org 0x70
hack:
    cbi 5,5           ; spegne il LED
    ldi r16, 0        ; high byte dell'indirizzo
    push r16
    ldi r16, 0x62     ; low byte dell'indirizzo = loop
    push r16
    ret               ; ritorna a loop come se niente fosse

Il disassemblato della sezione hack mostra:

Makefile
L0070: CBI 5, 5
L0071: LDI R16, 0
L0072: PUSH R16
L0073: LDI R16, 0x62
L0074: PUSH R16
L0075: RET

Cosa succede?

Quando carichiamo il secondo codice:

  1. La partenza è da hack, non da init.

  2. La prima cosa che fa hack è spegnere il LED (cbi 5,5).

  3. Poi, invece di chiamare una funzione, scriviamo sullo stack un indirizzo falso (0x0062), che è l'inizio del nostro loop nel programma legittimo.

  4. L'istruzione RET legge questo indirizzo dallo stack e ci salta.

Il risultato? Il LED è spento, ma il programma entra in loop come se nulla fosse successo. Abbiamo eseguito un'azione non prevista (cbi 5,5), ma poi il programma è tornato nel suo flusso normale, "ingannato" dal nostro indirizzo di ritorno falsificato.


Perché è importante?

Questo è un esempio reale e funzionante di Return Address Overwrite. Lo strumento che stiamo usando compila, carica e disassembla il codice del microcontrollore, non è una semplice simulazione: è reale.

Spiegare questi concetti con ATmega328 e Assembly permette di vedere direttamente indirizzi, stack, registri e salti in modo trasparente. In un mondo dove gli exploit avvengono in sistemi moderni e cloud, capire le basi con strumenti semplici come questi ti prepara davvero a comprendere le vulnerabilità più complesse.


Conclusione

Abbiamo appena visto un concetto avanzatissimo, usato in exploit reali, spiegato con uno dei microcontroller più semplici: ATmega328. Con pochi byte e due LED, abbiamo simulato un attacco di Return Address Overwrite.

Prossimamente, vedremo come questo stesso stack è usato per passare parametri alle funzioni, e come anche lì si possono fare cose "interessanti"...


Link utili

Comments

Popular posts from this blog

Compile mks dlc32 using Visual Studio Code and Platform.io

MAKERBASE MKS DLC32 $ESP Configurations AP STA Costycnc