Progettazione di software sicuro

A.A. 2016/2017
Insegnamento per
6
Crediti massimi
60
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
Il corso si propone di presentare i principi architetturali e le principali tecniche di progettazione per lo sviluppo di applicazioni software. L'obiettivo è quello di fornire le conoscenze necessarie per la progettazione di software sicuro e per l'analisi di sicurezza del codice sorgente attraverso test e tecniche di analisi statica e dinamica del flusso esecutivo.
Alla fine del corso lo studente sarà in grado di pianificare lo sviluppo di progetti software con aspetti di sicurezza. Saprà affrontare la modellazione di requisiti del software tramite macchine a stati finiti, sviluppare codice Java dal modello ed eseguirne testing di codice.

Struttura insegnamento e programma

Edizione attiva
Moduli o unità didattiche
Unita' didattica laboratorio
INF/01 - INFORMATICA - CFU: 1
Laboratori: 24 ore

Unita' didattica lezioni
INF/01 - INFORMATICA - CFU: 4
Lezioni: 36 ore

Informazioni sul programma
Alla fine del corso lo studente sarà in grado di pianificare lo sviluppo di progetti software con aspetti di sicurezza. Saprà affrontare la modellazione di requisiti del software tramite macchine a stati finiti, sviluppare codice Java dal modello ed eseguirne testing di codice.
Propedeuticità
Programmazione, Tecnologie per la sicurezza e la privatezza
Prerequisiti e modalità di esame
Le conoscenze ed i concetti forniti dai corsi di Programmazione, di Tecnologie per la sicurezza e la privatezza.
Scritto e prova pratica.
Metodi didattici
Lezioni frontali
Unita' didattica lezioni
Programma
1. SICUREZZA DEL SOFTWARE. Proprietà del software. Proprietà del software sicuro. Ciclo di vita del software: fasi di sviluppo del software, modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità. Attacchi a livello di progettazione, di implementazione ed di funzionalità.
2. ARCHITETTURE E TECNOLOGIE SICURE. Principi di architetture sicure. Linee guida e principi per architetture sicure. Criteri di scelta di tecnologie sicure. Il caso di studio di Java sandbox.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE SICURO. Proprietà di specifiche di software sicuro. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Macchine di stato UML. Design by contract. Il tool JML.
4. IMPLEMENTAZIONE. Linee guida per la programmazione sicura. Tipici errori. Sicurezza dei linguaggi di programmazione. Alcune violazioni di sicurezza in C. Programmi sicuri in C. Introduzione al linguaggio Java. Dalla specifica al codice: macchine a stati finiti in Java.
5. TESTING. Il testing nel ciclo di vita del software. Tipi di testing. Tecniche per la validazione e verifica. I limiti del testing. Testing basato sui programmi. Grafo di flusso di un programma. Copertura delle istruzioni e degli archi. Copertura delle decisioni e delle condizioni. I metodi MCC e MCDC. Valutare la copertura con Emma. Il tool JUnit.
Metodi didattici
Lezioni
Materiale didattico e bibliografia
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· John Viega, Gary McGraw. Building secure software : how to avoid security problems the right way. Addison-Wesley, 2002.
· John C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003.
· Ghezzi Carlo, Jazayeri Mehdi, Mandrioli Dino. Ingegneria del software. Fondamenti e principi. Pearson Education Italia, 2004, 2ª ed.
· Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas. The Art of Software Testing. John Wiley & Sons; 2 edition, 2004.
· Broy, M.; Jonsson, B.; Katoen, J.-P.; Leucker, M.; Pretschner, A. (Eds.). Model-Based Testing of Reactive Systems. Springer, LNCS 3472, 2005.
Unita' didattica laboratorio
Programma
1. SICUREZZA DEL SOFTWARE. Proprietà del software. Proprietà del software sicuro. Ciclo di vita del software: fasi di sviluppo del software, modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità. Attacchi a livello di progettazione, di implementazione ed di funzionalità.
2. ARCHITETTURE E TECNOLOGIE SICURE. Principi di architetture sicure. Linee guida e principi per architetture sicure. Criteri di scelta di tecnologie sicure. Il caso di studio di Java sandbox.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE SICURO. Proprietà di specifiche di software sicuro. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Macchine di stato UML. Design by contract. Il tool JML.
4. IMPLEMENTAZIONE. Linee guida per la programmazione sicura. Tipici errori. Sicurezza dei linguaggi di programmazione. Alcune violazioni di sicurezza in C. Programmi sicuri in C. Introduzione al linguaggio Java. Dalla specifica al codice: macchine a stati finiti in Java.
5. TESTING. Il testing nel ciclo di vita del software. Tipi di testing. Tecniche per la validazione e verifica. I limiti del testing. Testing basato sui programmi. Grafo di flusso di un programma. Copertura delle istruzioni e degli archi. Copertura delle decisioni e delle condizioni. I metodi MCC e MCDC. Valutare la copertura con Emma. Il tool JUnit.
Metodi didattici
Lezioni
Materiale didattico e bibliografia
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· John Viega, Gary McGraw. Building secure software : how to avoid security problems the right way. Addison-Wesley, 2002.
· John C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003.
· Ghezzi Carlo, Jazayeri Mehdi, Mandrioli Dino. Ingegneria del software. Fondamenti e principi. Pearson Education Italia, 2004, 2ª ed.
· Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas. The Art of Software Testing. John Wiley & Sons; 2 edition, 2004.
· Broy, M.; Jonsson, B.; Katoen, J.-P.; Leucker, M.; Pretschner, A. (Eds.). Model-Based Testing of Reactive Systems. Springer, LNCS 3472, 2005.
Periodo
Primo semestre
Periodo
Primo semestre
Modalità di valutazione
Esame
Giudizio di valutazione
voto verbalizzato in trentesimi
Docente/i
Ricevimento:
Su appuntamento via e-mail
Dipartimento di Informatica - sede di Crema o sede di via Celoria 18
Ricevimento:
su appuntamento
Dipartimento di Informatica