Tecniche di protezione del software

A.A. 2025/2026
6
Crediti massimi
42
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
In questo insegnamento verranno esplorate le foundation del software security. e considerate importanti vulnerabilità software e attacchi low-level come heap overflow, use after free e buffer overflow. Verranno inoltre illustrate ed analizzate le techniche di difesa per prevenire e mitigare questi attacchi includendo meccanismi di testing avanzato e di program analysis come la symbolic execution e il fuzzing.
Risultati apprendimento attesi
Lo studente che avrà superato l'esame di questo insegnamento con successo sarà in grado di applicare tecniche di attacco di base sui low-level attacks come buffer overflow, heap overflow e use after free. Avrà compreso le tecniche di difesa generali dei sistemi e sarà in grado di applicare tecniche avanzate di testing e program analysis su linguaggi C e C++. Lo studente che affronta questo insegnamento dovrà avere un background di base sulla programmazione, una conoscenza dei linguaggi C/C++ e degli algoritmi.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Secondo quadrimestre

Programma
Low‑Level attack: Buffer Overflow (Stack‑Based) - Parte 1
Low‑Level attack: Buffer Overflow (Stack‑Based) - Parte 2 (laboratorio pratico)
Low‑Level attack: Heap Overflow su Metadata
Low‑Level attack: Use‑After‑Free (UAF)
Difesa low‑level: Memory safety e Type safety
Difesa low‑level: Canary, ASLR, DEP e Return‑Oriented Programming (ROP)
Difesa low‑level: Return‑Oriented Programming (ROP), ROP Gadgets
Difesa low‑level: Control Flow Integrity (CFI)
Program Analysis per scopi di sicurezza
Program Analysis: Fuzzing
Program Analysis: Symbolic Execution
Side Channel Attacks: Meltdown & Spectre
Prerequisiti
Al fine di poter trarre il massimo profitto dal corso gli studenti interessati a frequentarlo devono possedere i seguenti requisiti:

- Saper gestire autonomamente un sistema Linux/Windows/MacOS
- Saper scrivere programmi in C
- Saper usare un emulatore QEMU/VMware
- Aver frequentato un corso base di Sicurezza
Metodi didattici
- Forte enfasi sull'apprendimento pratico: gli studenti sperimentano direttamente vulnerabilità reali a basso livello, come buffer overflow, heap overflow e use-after-free, insieme alle principali tecniche di difesa (es. memory safety, spatial safety).

- Esercitazioni in laboratorio: accompagnano le lezioni teoriche e permettono di applicare concretamente le tecniche studiate, incluse attività di exploit development, debugging e mitigazione delle vulnerabilità.

- Studio di tecniche avanzate di analisi del software, come symbolic execution e fuzzing, trattate sia dal punto di vista teorico che pratico.

- Partecipazione attiva e frequenza consigliata, vista la natura fortemente pratica del corso e il ruolo centrale delle esercitazioni.

- Approccio integrato teoria-pratica, per garantire una comprensione solida dei concetti teorici e della loro applicazione nel contesto della protezione del software
Materiale di riferimento
- Slide basate sul paper Aleph One che introduce il concetto di buffer overflow

- Shellcoder Handbook, manuale di riferimento per exploit e sviluppo di shellcode

- Cheat sheet per GDB, Peda, Pwntools e tecniche per il controllo degli input in laboratorio

- Repositories specifici per tecniche di heap overflow, heap overflow on metadata e Use‑After‑Free

- Materiali sul controllo delle difese a basso livello: memory safety, type safety e low-fat pointer

- Documentazione su tecniche difensive come canary, ASLR, DEP, ROP, ROP Gadgets e bypass di meccanismi ROP

- Articolo su Control Flow Integrity (CFI) e paper sul bypassing del Intel CET con Counterfeit Object‑oriented Programming

- Contenuti introduttivi all'analisi del software per scopi di sicurezza (testing for security), symbolic execution e fuzzing

- Paper su tecniche di fuzzing (incl. LibAFL) e introduzione all'uso di strumenti come KLEE per la symbolic execution

- Materiale su attacchi side-channel come Meltdown & Spectre
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame si compone di 2 parti:

Laboratorio: consiste nello svolgimento di alcuni esercizi analoghi a quelli svolti durante il corso;
Teoria: consiste in una prova scritta o orale sugli argomenti del corso;

Il voto finale sara` la media dei due voti.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 42 ore
Docente/i
Ricevimento:
su appuntamento e-mail: [email protected]
Stanza 8011 via Celoria 18