- Software Security and Testing
- Summary
Course Syllabus
Obiettivi
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 sintetici
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"
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.
Modalità didattica
Lezioni ed esercitazioni in aula. Attività di laboratorio assistita in aula. Lingua di erogazione: italiano.
Nel periodo di emergenza Covid-19 le lezioni si svolgeranno in modalità mista: parziale presenza, lezioni videoregistrate asincrone, eventi in videoconferenza sincrona.
Materiale didattico
Testi di riferimento
Ross Anderson. Security Engineering. 2 ed, Wiley 2008
Mauro Pezzè, Michal Young. Software Testing and Analysis: Process, Principles and Techniques. John
Wiley, 2008
Periodo di erogazione dell'insegnamento
Secondo semestre
Modalità di verifica del profitto e valutazione
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.
Nel periodo di emergenza Covid-19 gli esami orali saranno solo telematici. Verranno svolti utilizzando la piattaforma WebEx e nella pagina e-learning dell'insegnamento verrà riportato un link pubblico per l'accesso all'esame di possibili spettatori virtuali. Gli esami scritti strano svolti remotamente con il supporto di sistemi di proctoring.
Orario di ricevimento
Su appuntamento
Aims
This course aims to provide knowledge of the problems of software security and software validation, and competencies on techniques to address these problems. In particular, by the end of this course, the perspective students will be capable of analyzing risks and critical points of an information system, administering tools for defending information systems, understanding the phases of an attack, and analyzing and designing solutions in application contexts that require software validation.
Contents
The problem of information security. Heterogeneity of expertise required
in the field of security. Attack and defense roles in information systems. The
problem of software validation. Methods of software testing: functional
testing, structural testing, model-based testing. Infrastructures for test
execution. Static and dynamic analysis of programs.
Detailed program
1 "Risks when using an information system, and related roles and expertise"
2 "Techniques and protocols for security
- Criptography, implementation errors and attacks
- Security in operating systems and networks"
3 "Secure programming
- Security errors in applications
- Analysis of known programs that exhibit vulnerabilities"
4 Malicious software: troians, back-doors, locgical bombs, viruses, worms
5 Defenses: Intrusion Detection System, verification attacks, firewall
6 Software validation: dimensions of the problem.
7 " Testing:
- Functional testing: sources of information to design tests, functional (black-box) testing, pros and cons in comparison to the random approach
- Combinatorial testing: category partition, pairwise combinations.
- Structural testing: coverage of statements, branches, conditions and paths.
- Model based testing: finite state machines, decision structures and flow graphs.
- Test infrastructures: driver, stub and oracles"
8 "Program analysis:
- The difference between static and dynamic analysis
- Dynamic analysis: memory analysis and lockset analysis
- Static analysis: techniques based on data-flow models, symbolic analysis"
Prerequisites
No
essential prerequisite. It can be useful to master the base concepts from the
following courses: Fondamenti dell'informatica, Programmazione 1, Programmazione
2, Reti e Sistemi Operativi, Analisi e Progettazione del Software
Teaching form
Lessons in class. Laboratory work in class. Lessons will be given in Italian.
During the Covid-19 emergency the course will be given in blended mode: partially in class, partially with asynchronous video-lessons, partially with synchronous teleconferences.Textbook and teaching resource
Textbooks:
Ross Anderson. Security Engineering. 2 ed, Wiley 2008
Mauro Pezzè, Michal Young. Software Testing and Analysis: Process, Principles and Techniques. John Wiley, 2008
Semester
Second semester
Assessment method
The assessment method consists of a written exam, and possibly of an oral exam.
The written exam consists of exercises that require calculations, exercises that require to solve an assigned problem, questions on the presented notions, and questions that require reasoning and deductions. All questions are open questions. The exercises aim to control the problem solving competencies acquired as a result of the course, and the open questions allow for in-depth control of the theoretical topics and on the capability of the students to autonomously and critically reflect on the critical points of the course programme. Usually the written exam includes 3 exercises and 5 open questions. The exercises are evaluates based on the correctness of the proposed solution, and the open questions based on the completeness and precision of the corresponding answers.
The oral exam is options and, if requested by a student, consists on a discussion on all points of the course programme. The result of the oral exam complements, either positively or negatively, the grade that derives from the evaluation of the written exam.
Furthermore the assessment can be accomplished with two separate partial exams, which are both written exams and evaluated with in the same way as the entire written exam explained above. Each partial exam addresses half of the course programme. The first partial exam focuses and the programme on software validation, test and analysis. The second partial exam focuses on the programme on software security. The final evaluation is the average of the evaluations of the partial exams, which must necessarily be both sufficient.
During the Covid-19 emergency oral exams will be held in teleconference mode, using WebEx. In the e-learning page of the course there will be a public link to access the exam to possible virtual audience. The written exams will be held remotely with the support of proctoring software.
Office hours
By appointment