Sicurezza Informatica

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 il calendario degli esami.
  • E' possibile consultare le pagine delle edizioni 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
    27/09/2023 Low-Level attack: Buffer Overflow (Stack-Based) Part 1 Slide Buffer Overflow
    Aleph One paper on Buffer Overflow
    Shellcoder Handbook
    04/10/2023 Low-Level attack: Buffer Overflow Practical Part 2 GDB Cheat Sheet
    GDB Peda Repository
    GDB Input handle
    Pwntools cheat sheet
    11/10/2023 Low-Level attack: Heap Overflow on Metadata Heap Overflow on Metadata
    Heap Overflow Repository
    18/10/2023 Low-Level attack: Use After Free (UAF) Use After Free Vulnerability
    25/10/2023 Low-level defense: Memory safety and Type safety Defense against low-level attacks
    Low-fat pointer technique
    LowFat Pointer Implementation
    08/11/2023 Low-level defense: Canary, ASLR, DEP, Return Oriented Programming (ROP) Return Oriented Programming (ROP)
    15/11/2023 Low-level defense: Return Oriented Programming (ROP) ROP Gadgets Tool
    Blind ROP paper
    x64 Syscall table
    22/11/2023 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
    29/11/2023 Simulazione prova di laboratorio Nessuna risorsa
    06/12/2023 Program Analysis Testing for Security Purpose Security Analysis Introduction
    06/12/2023 Program Analysis I: Symbolic Execution (Introduction) Symbolic Execution
    13/12/2023 Side Channel Attacks Meltdown & Spectre
    13/12/2023 Program Analysis II: Symbolic Execution Symbolic Execution II
    Klee
    20/12/2023 Program Analysis II: Fuzzing Fuzzing Techniques
    Klee Tutorial 1
    Klee Tutorial video
    Qsym Hybrid Fuzzer
    Paper LibAFL

    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 sugli argomenti del corso;
  • Docenti

    Prof. Andrea Lanzi

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