Anno di corso: 1

Crediti: 8
Crediti: 8
Crediti: 8
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale

Anno di corso: 2

Anno di corso: 3

Crediti: 8
Crediti: 8
Crediti: 16
Tipo: A scelta dello studente
Crediti: 4
Tipo: Lingua/Prova Finale
Crediti: 13
Tipo: Altro

SICUREZZA ED AFFIDABILITA'

Scheda dell'insegnamento

Anno accademico di regolamento: 
2014/2015
Anno di corso: 
3
Anno accademico di erogazione: 
2016/2017
Tipo di attività: 
Obbligatorio a scelta
Crediti: 
8
Ciclo: 
Secondo Semestre
Ore di attivita' didattica: 
76
Prerequisiti: 

Nessun prerequisito essenziale. E' utile la comprensione di alcuni concetti base trattati negli insegnamenti di Fondamenti dell'informatica, di Programmazione 1, di Programmazione 2, di Reti e Sistemi Operativi, e di Analisi e Progettazione del Software.

Moduli

Metodi di valutazione

Tipo di esame: 
Orale
Modalita' di verifica dell'apprendimento: 

La verifica dell'apprendimento comprende una prova scritta e una eventuale discussione del risultato.
La verifica dell'apprendimento può inoltre derivare dall'esito di prove intermedie parziali.

Valutazione: 
Voto Finale

Obiettivi formativi

Alla fine del corso lo studente avrà maturato consapevolezza dei problemi di sicurezza e affidabilità delle applicazioni software. In particolare, avrà maturato la capacità di analizzare i punti di rischio e criticità nei sistemi informatici, di amministrare gli strumenti di difesa dei sistemi, di comprendere le fasi di un attacco osservato, e di analizzare e progettare soluzioni nei contesti applicativi che richiedono la convalida di affidabilità del software.

Contenuti

Origine del problema della sicurezza informatica. Eterogeneità delle competenze richieste nel settore sicurezza. Ruoli di attacco e di difesa nei sistemi informatici. Il problema di convalidare l'affidabilità del software. Metodi per il test del software: test funzionale, test strutturale, test basato su modelli. Infrastrutture per l'esecuzione del test. Tecniche di analisi statica e dinamica di programmi.

Programma esteso

1 "Rischi nell'uso dei sistemi informativi, ruoli e competenze
"

2 "Tecniche e protocolli per la sicurezza:
- Crittografia, errori di implementazione e attacchi
- Sicurezza nei sistemi operativi e nelle strutture di rete"

3 "
Programmazione sicura:
- Errori di sicurezza nelle applicazioni
- Analisi di noti programmi che presentano vulnerabilita'

"

4 Programmi pericolosi: troiani, back-door, bombe logiche, virus, worm

5 Difese: Intrusion Detection System, attacchi di verifica, firewall

6 Convalida di affidabilità del software: dimensioni del problema.

7 " Testing:
- Test funzionale: fonti di informazione per derivare casi di test, il test funzionale o black-box, vantaggi e svantaggi rispetto ad un approccio random.
- Test Combinatorio: partizione delle categorie, combinazioni a coppie.
- Test Strutturale: copertura delle istruzioni, decisioni, condizioni e cammini.
- Test basato su modelli: macchine a stati finiti, strutture di decisione e grafi di flusso.
- Infrastrutture per l'esecuzione dei test: driver, stub e oracoli"

8 "Analisi dei programmi:
- Distinzione fra analisi statica e analisi dinamica
- Tecniche di analisi dinamica: analisi di memoria e lockset analysis
- Tecniche di analisi statica: analisi basata su modelli data-flow, analisi simbolica"

Bibliografia consigliata

C.L. Pfleeger, S.L. Pfleeger. Sicurezza in informatica. 2 ed, Pearson, 2008
Mauro Pezzè, Michal Young. Software Testing and Analysis: Process, Principles and Techniques. John Wiley, 2008

Metodi didattici

Lezioni ed esercitazioni in aula. Attività di laboratorio assistita in aula.