SECURITY IN SOFTWARE APPLICATIONS Single channel
Chair (Coordinator) and Rapporteur: DANIELE FRIOLO
Lecturers
Objectives
General Objectives
The basics of security in software programs
Specific Objectives
Methodology and tools to find and remove the most common software vulnerabilities, and to develop software free of security flaws
Knowledge and Comprehension
Learning the most effective techniques to remove vulnerabilities from code and to develop software satisfying specific security policies
Ability to apply Knowledge and Comprehension
The student is able to transfer the knowledge on the methodologies to the selection of the appropriate techniques and tools to remedy to the presence of vulnerabilities.
Authonomy of judgement
The student learns to analyze the problem and to identify the proper methodologies and tools to solve problems of software security
Ability to Communicate
The student is able to communicate successfully and to defend the choices made in the selection of the appropriate methodologies and tools.
Ability to Learn
The student is able to continue the learning process in authonomy to comprehend new methodologies and the applicability of new tools.
Learning outcomes
General Objectives
The basics of security in software programs and cryptographic solutions
Specific Objectives
Methodology and tools to find and remove the most common software vulnerabilities, and to develop software free of security flaws
Knowledge and Comprehension
Learning the most effective techniques to remove vulnerabilities from code and to develop software satisfying specific security policies
Ability to apply Knowledge and Comprehension
The student is able to transfer the knowledge on the methodologies to the selection of the appropriate techniques and tools to remedy to the presence of vulnerabilities.
Authonomy of judgement
The student learns to analyze the problem and to identify the proper methodologies and tools to solve problems of software security
Ability to Communicate
The student is able to communicate successfully and to defend the choices made in the selection of the appropriate methodologies and tools.
Ability to Learn
The student is able to continue the learning process in authonomy to comprehend new methodologies and the applicability of new tools.
Prerequisites
- Introductory security course
- Elementary OS and DB
- Basic programming skills, in particular C/C++, Java, Bits of PHP and javascript
Programme
The course presents methodological and practical aspects of software security, starting from some of the most widely known vulnerabilities. Topics include attacks on common ciphers like cryptanalysis and side channels, and software attacks like various forms of buffer and heap overflow, problems induced by input formatting, consequences of racing conditions, generation of random numbers, and code injection. The emphasis is on methodologies and tools to identify and eliminate such vulnerabilities. Techniques to prove the absence of vulnerabilities are presented, and approaches to avoid the introduction of vulnerabilities in the SW product discussed (such as the use of types in languages to ensure memory safety, type safety, policy-based information flow, and cryptographic tools). Basic notions of PCC and code/cryptographic obfuscation are also discussed. The students are exposed to methodologies to design software integrating risk analysis and management into the software life cycle.
Improving Existing Code
- Known vulnerabilities: Buffer overflow, SQL/code injection, TOCTOU
- Static and Dynamic Code Analysis and Tools
- Common Vulnerability Scoring System CVSS
Evaluating Security
- Principles
- Testing
Develop Secure Software
- Secure code development / defensive coding
- Java security
Current Approaches
- Language-based security
- Information Flow Control
- Proof-Carrying Code
- Code Obfuscation
Introduction to cryptographic primitives:
- Common ciphers
- Public-Key Encryption
Books
R. Anderson, Security Engineering: a guide to building dependable distributed systems, 2nd ed., John Wiley and Sons 2008
J.Viega, G.McGraw, Building Secure Software, Addison- Wesley 2002
G.McGraw, Software Security: Building Security in, Addison- Wesley 2006
G.Hoglung, G.McGraw, Exploiting Software: how to break code, Addison-Wesley 2004
G.McGraw, E.Felten, Securing Java, John Wiley and Sons 1999,
D.A.Wheeler, Secure Programming for Linux and Unix HOWTO
J. Katz, Y. Lindell, Introduction to Modern Cryptography (Chapman & Hall/CRC Cryptography and Network Security Series)
Bibliography
R. Anderson, Security Engineering: a guide to building dependable distributed systems, 2nd ed., John Wiley and Sons 2008
J.Viega, G.McGraw, Building Secure Software, Addison- Wesley 2002
G.McGraw, Software Security: Building Security in, Addison- Wesley 2006
G.Hoglung, G.McGraw, Exploiting Software: how to break code, Addison-Wesley 2004
G.McGraw, E.Felten, Securing Java, John Wiley and Sons 1999,
D.A.Wheeler, Secure Programming for Linux and Unix HOWTO
J. Katz, Y. Lindell, Introduction to Modern Cryptography (Chapman & Hall/CRC Cryptography and Network Security Series)
Lessons mode
In presence
Frequency
In presence
Exam mode
One or more individual projects
- Static analysis of code fragments
- Assertion-based code analysis
- Testing/Evaluating given application
Project/s are mandatory to pass the exam
- Written exam on the subjects of the course
Example exam questions
Written exams are composed by open questions and exercises about the course subjects
Arguments
- Buffer Overflow
- Format Strings
- Input Validation
- Code Injection
- Design Principles
- Secure Software Design and Development
- Language-Based Security
- Information Flow
- Program Verification and Testing
- Obfuscation
Sustainability goals
- Academic year/1
- Lesson code1047642
- Year and semester2nd year - 1st semester
- Activity typeAttività formative affini ed integrative
- Academic areaAttività formative affini o integrative
- SSDINF/01
- Mandatory presenceNo
- Languageeng
- CFU6 CFU
- Total duration60 hours
- Hours distribution36 classroom hours, 24 training hours