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

SICUREZZA ED AFFIDABILITA'

Scheda dell'insegnamento

Anno accademico di regolamento: 
2016/2017
Anno di corso: 
3
Anno accademico di erogazione: 
2018/2019
Tipo di attività: 
Obbligatorio a scelta
Lingua: 
Italiano
Crediti: 
8
Ciclo: 
Secondo Semestre
Ore di attivita' didattica: 
72
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

Modalita' di verifica dell'apprendimento: 

La verifica dell'apprendimento comprende una prova scritta e una eventuale colloquio orale.

La prova scritta consiste nella risoluzione di esercizi che richiedono calcolo, esercizi che richiedono sviluppo di una soluzione ad un problema assegnato, domande sulle nozioni presentate, e domande di ragionamento e deduzione. Tutte le domande proposte sono a risposta aperta. Gli esercizi hanno la finalità di controllare le competenze di problem solving acquista durante il corso, e le domande permettono il controllo intensivo delle conoscenze teoriche e sulle capacità di riflessione autonoma su punti critici del programma. Solitamente la prova scritta si compone di 3 esercizi e 5 domande a risposta aperta. Gli esercizi sono valutati in base alla correttezza della soluzione proposta, e le domande aperte in base alla completezza e precisione delle risposte corrispondenti.

Il colloquio orale è opzionale e, se richiesto dallo studente, consiste in un colloquio che verte su tutti i punti del programma. Il risultato del colloquio complementa, in positivo o in negativo, il voto che deriva dalla valutazione della prova scritta.

La verifica dell'apprendimento può inoltre derivare dall'esito di due prove intermedie parziali, svolte in forma scritta con modalità equivalenti alla prova complessiva, ma vertenti sui contenuti di metà del programma ognuna. La prima prova parziale riguarda la parte di programma su convalida di affidabilità, test e analisi del software. La seconda prova parziale riguarda la parte di programma sulla sicurezza informatica. La valutazione finale deriva dalla media delle valutazioni delle due prove parziali, che devono però essere necessariamente entrambe sufficienti.

Valutazione: 
Voto Finale

Obiettivi formativi

Il corso ha l'obiettivo di fornire consapevolezza dei problemi di sicurezza e affidabilità delle applicazioni software, e competenza sulle tecniche per affrontarli. In particolare, alla fine del corso lo studente 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.