Tecniche di protezione del software
A.A. 2025/2026
Learning objectives
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.
Expected learning outcomes
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 non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.
Course syllabus and organization
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.
Professor(s)
Ricevimento:
su appuntamento e-mail: danilo.bruschi@unimi.it
Stanza 8011 via Celoria 18