Lo studente avrà acquisito conoscenze in merito alle vulnerabilità più comuni dei sistemi software, delle architetture di elaborazione, delle reti e delle applicazioni web, ai modi in cui queste vulnerabilità sono sfruttate dagli attaccanti e alle contromisure messe in atto per mitigare gli attacchi.
The student will acquire knowledge about the most common vulnerabilities of software systems, computer architectures, networks and web applications, the ways in which these vulnerabilities are exploited by attackers and the countermeasures put in place to mitigate attacks.
La verifica delle conoscenze sarà oggetto di una prova orale a conclusione di ogni esame.
The knowledge check will be the subject of an oral test at the end of each exam.
Lo studente sarà in grado di scrivere codice e configurare i sistemi in modo da mitigare le vulnerabilità più comuni, ma anche di portare a termine attacchi mirati a dimostrare la presenza di tali vulnerabilità.
The student will be able to write code and configure systems to mitigate the most common vulnerabilities, but also to carry out attacks aimed at demonstrating the presence of such vulnerabilities.
Le capacità saranno verificate tramite lo sviluppo di un progetto web che potrà essere sviluppato da piccoli gruppi di studenti o singolarmente, e tramite una prova pratica.
Skills will be tested through the development of a web project, which can be developed by small groups of students or individually, and through a practical test.
Lo studente svilupperà una maggiore attenzione e consapevolezza verso le vulnerabilità dei sistemi informatici, e possiederà un bagaglio delle pratiche migliori atte a mitigare tali vulnerabilità.
The student will develop a greater attention and awareness towards the vulnerabilities of computer systems, and will possess a set of best practices to mitigate these vulnerabilities.
I comportamenti saranno verificati tramite lo sviluppo di un progetto web, che potrà essere sviluppato da piccoli gruppi di studenti o singolarmente.
Skills will be tested through the development of a web project, which can be developed by small groups of students or individually.
SISTEMI OPERATIVI: controllo degli accessi discretionary/mandatory; programmi suid/sgid; metacaratteri; attacchi tramite variabili di ambiente (PATH, IFS, ...); attacchi tramite collegamenti simbolici; "sandboxing" tramite contenitori (namespace, control group) e macchine virtuali; monitor sicuri (AppArmor).
PROGRAMMAZIONE: concetti e pratiche di programmazione sicura in C e C++; i processi e il loro spazio di indirizzamento: la pila e lo heap, dlmalloc, mmap()/mprotect(), le librerie dinamiche, la "Global Offset Table" (GOT) e la Procedure Linkage Table (PLT); overflow sugli interi; buffer overflow su pila e heap; vulnerabilità delle stringhe di formattazione; errori di "use-after-free" e "double-free"; iniezione e riuso di codice: "return-to-libc", "Return Oriented Programming" (ROP); "Address Space Layout Randomization" (ASLR) e codice indipendente dalla posizione; integrità del flusso di controllo; errori di "Time-of-Check to Time-of-Use" (TOCTOU); iniezione di comandi shell, attraversamento di directory; attacchi diretti al kernel (return to userspace, protezione tramite SMEP/SMAP); attacchi diretti all'hypervisor, fuga da una VM.
RETI E WEB: tecniche di raccolta di informazioni; forzatura DNS; sniffing e scansione di rete; identificazione della pila TCP/IP; inondazione e spoofing MAC; avvelenamento ARP; spoofing IP; attacchi e difese DoS e DDoS; attacchi uomo-nel-mezzo; mappatura di applicazioni web; vulnerabilità nell'autenticazione web; forzatura dell'autenticazione; blocco dell'account; tecnologie CAPTCHA; vulnerabilità nella gestione delle sessioni; dirottamento di sessione; vulnerabilità nel controllo degli accessi; iniezione SQL; iniezione SQL cieca; iniezione LDAP; iniezione di comandi del sistema operativo; inclusione di file remoti; iniezione di entità esterne XML; scripting intersito; regola della stessa origine; falsificazione di richiesta intersito.
OPERATING SYSTEMS: discretionary/mandatory access control; suid/sguid programs; metacharacters; attacks via environment variables (PATH, IFS, ...); attacks via symbolic links; Time-Of-Check-to-Time-Of-Use (TOCTOU); sandboxing through containers (namespaces, control groups) and virtual machines; secure monitors (AppArmor).
PROGRAMMING: safe programming concepts and practices in C and C ++; processes and their address space: the stack and the heap, dlmalloc, mmap()/mprotect(), dynamic libraries, the Global Offset Table (GOT) and the Procedure Linkage Table (PLT); integer overflow; buffer overflows on stack and heap; formatt strings vulnerabilities; use-after-free and double-free errors; code injection and code reuse: return-to-libc, Return Oriented Programming (ROP); Address Space Layout Randomization (ASLR) and position independent code; control flow integrity; shell command injection, directory traversal; kernel attacks (return-to-userspace, protection via SMEP/SMAP); hypervisor attacks and VM escaping.
NETWORKS AND WEB: intelligence gathering; DNS bruteforcing; network sniffing and scanning; TCP/IP stack fingerprinting; MAC spoofing and flooding; ARP poisoning; IP spoofing; DoS and DDoS attacks and defenses; man-in-the-middle attacks; web application mapping; web authentication vulnerabilities; login bruteforcing; account locking; CAPTCHAs; session management vulnerabilities; session hijacking; access control vulnerabilities; SQL injection; blind SQL injection; LDAP injection; OS command injection; remote file inclusion; injection of XML external entities; cross-site scripting; same-origin policy; cross-site request forgery.
Prova pratica e orale. Per sostenere la prova pratica gli studenti sono tenuti a portare con sé il proprio calcolatore portatile.
Practical and oral tests. To undergo the prctical test, students must bring their own laptop.
http://www.iet.unipi.it/p.perazzo/teaching