Tecniche di protezione del software
A.A. 2025/2026
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.
Periodo: Secondo quadrimestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
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
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
- 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
- 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
- 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.
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.
Docente/i