Silvestro Di Pietro, una passione informatica.

Lezione 5: Case Studies e Laboratorio Pratico

Case Study: JPEG Overflow

Negli anni 2000, numerose vulnerabilità sono state scoperte nelle librerie di gestione JPEG (es. libjpeg, gdiplus.dll). Un buffer overflow nella decodifica di commenti EXIF poteva consentire esecuzione di codice simply aprendo un'immagine maligna. L'articolo di DilDog citava proprio questo scenario.

Case Study: Windows DLL e Offuscamento

Molte funzioni di sistema in kernel32.dll e advapi32.dll non avevano protezioni ASLR nelle prime versioni di Windows XP/2000. Un exploit poteva trovare indirizzi fissi, usare WinExec o CreateProcess per lanciare payload. L'IP del server di download veniva offuscato con XOR per eludere IDS basati su signature.

Laboratorio Pratico

  1. Setup: compilare il binario vulnerabile della Lezione 1 con opzioni diverse:
    • gcc -m32 -fno-stack-protector -z execstack -no-pie -o vuln vuln.c
    • gcc -m32 -fstack-protector -no-pie -o vuln_ssp vuln.c
  2. Exploit baseline: inviare input di 200 byte con pattern, individuare offset, creare exploit con shellcode.
  3. Test con DEP: compilare con -z noexecstack (default). Provare return-to-libc.
  4. Test con ASLR: riattivare ASLR (echo 2 > /proc/sys/kernel/randomize_va_space). Provare ROP con gadgets trovati con ROPgadget o objdump.
  5. Offuscamento payload: implementare un semplice XOR encoder per lo shellcode, testare che funzioni con e senza NOP sled.

Strumenti Consigliati

  • GDB + PEDA/gef: debugging e analisi.
  • pwndbg: estensioni per GDB.
  • ROPgadget: individuare gadgets.
  • msfvenom: generare shellcode (per apprendimento).
  • checksec: visualizzare protezioni del binario (checksec --file=./vuln).

Checksum e Affidabilità

Un exploit reale deve essere robusto: gestire N bytes diversi, usare NOP sled lunghi, fornire fallback se l'indirizzo non è corretto. Laboratorio: testare l'exploit con diverse lunghezze di input e verificare che la shell venga ottenuta con affidabilità >90%.

Conclusioni

I buffer overflow sono una classe di vulnerabilità classica, ma tuttora rilevante. La comprensione dello stack e delle tecniche di sfruttamento è fondamentale per sia per l'attaccante che per il difensore. Le protezioni moderne (ASLR, DEP, SSP) hanno reso gli exploit più complessi, ma non impossibili. L'abilità di combinare ROP e info leak distingue i penetration tester esperti.

← Torna al corso