Progettazione di software sicuro

Struttura insegnamento e programma

Edizione attiva
Moduli o unità didattiche
Unità didattica laboratorio
ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI - CFU: 1
Laboratori: 24 ore

Unità didattica lezioni
ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI - CFU: 4
Lezioni: 36 ore

Informazioni sul programma
Il corso si propone di presentare i principi architetturali e le principali tecniche di progettazione per lo sviluppo di applicazioni software. L'obiettivi è 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.
Propedeuticità
Programmazione, Tecnologie per la sicurezza e la privatezza
Prerequisiti e modalità di esame
Prerequisiti
Le conoscenze ed i concetti forniti dai corsi di Programmazione, di Tecnologie per la sicurezza e la privatezza
Modalità di esame
Scritto e prova pratica
Metodi didattici
Lezioni frontali e laboratorio
Unità 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.
Propedeuticità consigliate
Programmazione, Tecnologie per la sicurezza e la privatezza
Materiale di riferimento
· 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.
Materiale didattico e bibliografia
Materiale di riferimento
· 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.
Unità 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.
Propedeuticità consigliate
Programmazione, Tecnologie per la sicurezza e la privatezza
Materiale di riferimento
· 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.
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.
Prerequisiti
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