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

  • Goal4
  • Goal8
  • 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