SECURITY IN SOFTWARE APPLICATIONS Canale unico
Docente coordinatore e verbalizzante: DANIELE FRIOLO
Docenti
Obiettivi formativi
Obiettivi generali
I fondamenti della sicurezza nei programmi software
Obiettivi specifici
Metodologie e strumenti per trovare e rimuovere le vulnerabilità più comuni del software e per sviluppare software senza falle di sicurezza
Conoscenza e comprensione
conoscenza e capacità di comprensione delle tecniche più efficaci per la rimozione di vulnerabilità dal codice e per sviluppare software che soddisfi specifiche politiche di sicurezza.
Applicare conoscenza e comprensione
Essere in grado di applicare e trasferire la propria conoscenza delle metodologie alla scelta delle tecniche e strumenti appropriati risolvere problemi di sicurezza del software
Autonomia di giudizio
Capacità d’interpretazione autonoma per proporre soluzioni appropriate a problemi di sicurezza software congruenti con le tecnologie disponibili.
Abilità comunicative
Capacità di presentare e di argomentare le proprie scelte in merito alle metodologie ed agli strumenti utilizzati per le soluzioni proposte, sia con colleghi che con utenti
Capacità di apprendimento successivo
Capacità di apprendere e approfondire nuove tecniche nell’ambito della sicurezza software informatica sia degli aspetti metodologici sia di quelli tecnologici
Risultati di apprendimento attesi
Obiettivi Generali
Le basi della sicurezza nei programmi software e delle soluzioni crittografiche.
Obiettivi Specifici
Metodologie e strumenti per individuare e rimuovere le vulnerabilità software più comuni e per sviluppare software privo di falle di sicurezza.
Conoscenza e Comprensione
Apprendimento delle tecniche più efficaci per eliminare le vulnerabilità dal codice e per sviluppare software che soddisfi specifiche politiche di sicurezza.
Capacità di Applicare Conoscenza e Comprensione
Lo studente è in grado di trasferire le conoscenze di metodologie verso la selezione di tecniche e tool appropriati per risolvere vulnerabilità.
Autonomia di Giudizio
Lo studente impara ad analizzare il problema e a identificare le metodologie e i tool adeguati per risolvere problemi di sicurezza del software.
Capacità di Comunicazione
Lo studente è in grado di comunicare con successo e di giustificare le scelte fatte nella selezione delle metodologie e dei tool appropriati.
Capacità di Apprendimento
Lo studente è in grado di proseguire in autonomia il processo di apprendimento per comprendere nuove metodologie e l’applicabilità di nuovi tool.
Prerequisiti
- Corso introduttivo di sicurezza
- Conoscenza elementare di sistemi operativi e DB
- Capacità basilari di programmazione, in particulare C/C++, Java, basi di PHP e javascript
Programma dell’insegnamento
Descrizione del Corso
Il corso presenta aspetti metodologici e pratici della sicurezza software, partendo da alcune delle vulnerabilità più note. Gli argomenti trattati includono attacchi ai cifrari comuni, come la crittoanalisi e i side channel, e attacchi software, tra cui varie forme di buffer e heap overflow, problemi causati dalla formattazione dell'input, conseguenze delle race conditions, generazione di numeri casuali e code injection. L'accento è posto sulle metodologie e i tool usati per identificare ed eliminare tali vulnerabilità.
Vengono presentate tecniche per dimostrare l'assenza di vulnerabilità e discussi approcci per evitare l'introduzione di vulnerabilità nei prodotti software (ad esempio, l'uso dei tipi nei linguaggi per garantire memory safety, type-safety, information flow security e strumenti crittografici). Sono inoltre trattate nozioni di base su Proof-Carrying Code (PCC) e sull'offuscamento del codice/crittografico. Gli studenti vengono esposti a metodologie per progettare software integrando l'analisi e la gestione del rischio nel software development lifecycle.
Migliorare il Codice Esistente
- Vulnerabilità note: Buffer overflow, SQL/code injection, TOCTOU
- Analisi statica e dinamica del codice e tools
- Common Vulnerability Scoring System (CVSS)
Valutare la Sicurezza
- Principi
- Testing
Sviluppare Software Sicuro
- Sviluppo di codice sicuro / defensive coding
- Sicurezza in Java
Approcci Attuali
- Language-based security
- Information Flow Control
- Proof-Carrying Code
- Code Obfuscation
Introduzione alle Primitivi Crittografiche
- Cifrari comuni
- Crittografia a chiave pubblica
Testi di riferimento
R. Anderson, Security Engineering: a guide to building dependable distributed systems, 2nd ed., John Wiley and Sons 2008
J.Viega, G.McGraw, Building Secure Software, Addison- Wesley 2002
G.McGraw, Software Security: Building Security in, Addison- Wesley 2006
G.Hoglung, G.McGraw, Exploiting Software: how to break code, Addison-Wesley 2004
G.McGraw, E.Felten, Securing Java, John Wiley and Sons 1999,
D.A.Wheeler, Secure Programming for Linux and Unix HOWTO
J. Katz, Y. Lindell, Introduction to Modern Cryptography (Chapman & Hall/CRC Cryptography and Network Security Series)
Bibliografia
R. Anderson, Security Engineering: a guide to building dependable distributed systems, 2nd ed., John Wiley and Sons 2008
J.Viega, G.McGraw, Building Secure Software, Addison- Wesley 2002
G.McGraw, Software Security: Building Security in, Addison- Wesley 2006
G.Hoglung, G.McGraw, Exploiting Software: how to break code, Addison-Wesley 2004
G.McGraw, E.Felten, Securing Java, John Wiley and Sons 1999,
D.A.Wheeler, Secure Programming for Linux and Unix HOWTO
J. Katz, Y. Lindell, Introduction to Modern Cryptography (Chapman & Hall/CRC Cryptography and Network Security Series)
Modalità di svolgimento
In presenza
Frequenza
In presenza
Modalità di esame
Uno o più progetti individuali
- Analisi statica di frammenti di codice
- Assertion-based code analysis
- Testing o Evaluation di applicationo
I progetti sono obbligatori per poter superare l'esame.
- Esame scritto sugli argomenti del corso.
Esempi di domande
L'esame scritto è composto da domande aperte ed esercizi.
Programmazione delle attività didattiche
- Buffer Overflow
- Format Strings
- Input Validation
- Code Injection
- Design Principles
- Secure Software Design and Development
- Language-Based Security
- Information Flow
- Program Verification and Testing
- Obfuscation
Obiettivi per lo sviluppo sostenibile - Agenda ONU 2030
- Anno accademico2024/2025
- Corso di studio a cui afferisce l’insegnamentoComputer Science - Informatica
- Codice insegnamento1047642
- Anno e semestre2º anno - 1º semestre
- TipologiaAttività formative affini ed integrative
- AmbitoAttività formative affini o integrative
- SSDINF/01
- Presenza obbligatoriaNo
- Linguaeng
- CFU6 CFU
- Durata complessiva60 ore
- Distribuzione delle ore36 classroom hours, 24 training hours