SECURITY IN SOFTWARE APPLICATIONS

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

Canale 1
DANIELE FRIOLO Scheda docente

Programmi - Frequenza - Esami

Programma
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
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
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)
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.
Modalità di erogazione
Il corso si svolge con lezioni che presentano argomenti legati alla sicurezza delle applicaioni software introducendo concetti di sicurezza ed esempi.
DANIELE FRIOLO Scheda docente

Programmi - Frequenza - Esami

Programma
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
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
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)
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.
Modalità di erogazione
Il corso si svolge con lezioni che presentano argomenti legati alla sicurezza delle applicaioni software introducendo concetti di sicurezza ed esempi.
  • Codice insegnamento1047642
  • Anno accademico2025/2026
  • CorsoComputer Science - Informatica
  • CurriculumCurriculum unico
  • Anno2º anno
  • Semestre1º semestre
  • SSDINF/01
  • CFU6