Progettazione di software sicuro

A.A. 2023/2024
6
Crediti massimi
48
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di presentare i principi, i processi e le tecniche per la progettazione e l'analisi di applicazioni software, con particolare attenzione agli aspetti di sicurezza.
Risultati apprendimento attesi
Lo studente sarà in grado di pianificare lo sviluppo di progetti software con aspetti di sicurezza. Saprà affrontare la modellazione dei requisiti, sviluppare il codice dal modello e convalidarlo.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

Periodo
Secondo quadrimestre

Programma
1. SOFTWARE SECURITY. Software properties. Properties of secure software. Software life cycle: software development steps, life cycle models. Security in the software life cycle. The vulnerability cycle. Design-level attacks. Implementation-level attacks. Operations-level attacks.

2. SECURITY ARCHITECTURE. Principles of security architecture. Security architecture guide lines. Criteria for selecting secure technologies The Java sandbox case study.

3. DESIGN OF SECURE SOFTWARE. Properties of secure software models. Specification methods. Finite state machines. Communicating Machines. UML state machines. Design by contract. Java Modeling Language tool.

4. IMPLEMENTATION. Good and bad implementation practices. Security level of programming languages. Security violations in C code. Secure C code. An introduction to the Java Language. From models to code: finite state machines in Java.

5. TESTING. The testing activity within the software life cycle. Kinds of testing. Validation and verification techniques. Testing limits. Program-based testing. Program flow chart. Statement coverage, branch coverage, decision and condition coverage. MCC and MCDC methods. Tools Emma and JUnit.
Prerequisiti
Prerequisiti del corso sono le conoscenze ed i concetti forniti dai corsi di Programmazione e di Sicurezza nei sistemi web e mobili. Il superamento di questi esami è quindi fortemente consigliato.
Metodi didattici
Lezioni ed attività di laboratorio
Materiale di riferimento
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 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.
· G. Pighizzini, M. Ferrari. Dai fondamenti agli oggetti - Corso di Programmazione Java. Terza Edizione. Pearson Education, 2008.

Sito web:
http://ericcobenepss.ariel.ctu.unimi.it/
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di una prova scritta, obbligatoria e della durata di due. La prova d'esame punta ad accertare, tramite domande a risposta aperta ed esercizi, le conoscenze dello studente sugli aspetti teorici dell'insegnamento e le competenze su alcuni strumenti software per la definizione di contratti e la validazione di codice Java.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Docente/i
Ricevimento:
su appuntamento
Dipartimento di Informatica