Tecniche di Protezione del Software

In questo corso saranno analizzati i principi della software security. Piu` in dettaglio saranno introdotti i principali attacchi low-level memory errors: buffer overflow, heap overflow e Use After Free. Verranno analizzate inoltre le difese per bloccare tali attacchi insieme ai concetti di memory and spatial safety. Per la parte finale verranno introdotti i concetti di symbolic execution applicati alla scoperta di vulnerabilita` nell'ambito del fuzzing. Particolare enfasi verrà posta sugli aspetti pratici dei vari problemi trattati senza ovviamente trascurare le implicazioni teoriche ad essi correlate. Viste le modalità di svolgimento del corso e delle prove d'esame si incoraggiano vivamente gli studenti interessati al corso a frequentarne assiduamente le lezioni.

Obiettivi Formativi

Al termine del corso lo studente che avrà superato con profitto l'esame sarà in grado di:

  • Descrivere e scrivere le principali forme di memory error exploit
  • Descrivere i principali sistemi di difesa nell'ambito dei memory error
  • Effettuare l'analisi del codice per programmi di piccole dimensioni
  • Usare un debugger
  • Descrivere le tecniche piú importanti di analisi del software (Symbolic execution, Fuzzing, ...)
  • 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 il corso di Sicurezza 1
  • Descrivere le tecniche piú importanti di analisi del software (Symbolic execution, Fuzzing, ...)
  • Studenti che NON posseggono questi requisiti possono comunque seguire il corso ma dovranno autonomamente provvedere al recupero delle suddette nozioni e capacità.

    Link Utili

  • Sito del corso su Ariel
  • E' possibile consultare il calendario delle lezioni alla seguente pagina.
  • E' possibile consultare la pagina della passata edizione del corso al seguente link.
  • Istanza pwncollege per lo svolgimento degli esercizi.
  • Gli script mostrati durante le lezioni di laboratorio sono consultabili al seguente repository gitlab.
  • Le registrazioni delle lezioni di laboratorio sono consultabili al seguente link.
  • Argomenti trattati nelle lezioni:

    Data Argomento Materiale didattico
    26/02/2025 Low-Level attack: Buffer Overflow (Stack-Based) Part 1 Slide Buffer Overflow
    Aleph One paper on Buffer Overflow
    Shellcoder Handbook
    05/03/2025 Low-Level attack: Buffer Overflow Practical Part 2 GDB Cheat Sheet
    GDB Peda Repository
    GDB Input handle
    Pwntools cheat sheet
    12/03/2025 Low-Level attack: Heap Overflow on Metadata Heap Overflow on Metadata
    Heap Overflow Repository
    19/03/2025 Low-Level attack: Use After Free (UAF) Use After Free Vulnerability
    26/03/2025 Low-level defense: Memory safety and Type safety Defense against low-level attacks
    Low-fat pointer technique
    LowFat Pointer Implementation
    02/04/2025 Low-level defense: Canary, ASLR, DEP, Return Oriented Programming (ROP) Return Oriented Programming (ROP)
    09/04/2025 Low-level defense: Return Oriented Programming (ROP) ROP Gadgets Tool
    Blind ROP paper
    x64 Syscall table
    16/04/2025 Low-Level defense: Control Flow Integrity (CFI) Control Flow Integrity (CFI)
    Control Flow Integrity (CFI) paper
    Bypassing Intel CET with Counterfeit objects
    Paper: Counterfeit Object-oriented Programming
    23/04/2025 Program Analysis Testing for Security Purpose Security Analysis Introduction
    30/04/2025 Program Analysis I: Symbolic Execution (Introduction) Symbolic Execution
    07/05/2025 Side Channel Attacks Meltdown & Spectre
    14/05/2025 Program Analysis II: Symbolic Execution Symbolic Execution II
    Klee
    21/05/2025 Program Analysis II: Fuzzing Fuzzing Techniques
    Klee Tutorial 1
    Klee Tutorial video
    Qsym Hybrid Fuzzer
    Paper LibAFL
    28/05/2025 TBD
    04/06/2025 TBD

    Modalità d'esame

    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;
  • Docente titolare del corso

    Prof. Andrea Lanzi

  • Ufficio 6012, Via Celoria 18, Milano 20133
  • Ricevimento Studenti: su appuntamento
  • Email: andrea.lanzi@unimi.it
  • Assistente laboratorio

    Dott. Mirco Picca

  • Laboratorio LaSER, 6º Piano, Via Celoria 18, Milano 20133
  • Email: mirco.picca@unimi.it