Motivation:Security vulnerabilities often arise due to programming errors in the source code of an application. Recent programming errors with severe security implications include Heartbleed (buffer over-read), Shellshock (code injection), and goto-fail (ill-formated code). Programming languages can help developers to prevent programming errors like these by defining coding principles and detecting violations of those principles through dynamic and static code analysis. Such language-based countermeasures relieve software developers of part of the burden of ensuring software security. But how to select and apply language-based countermeasures?

Synopsis:This course studies dynamic and static code analysis techniques as language-based countermeasures to security vulnerabilities. In particular, we will investigate and compare the trade-offs of the following countermeasures:

To facilitate a precise study and comparison, we will define the above techniques formally in class. To facilitate student experimentation and exploration of trade-offs, students will implement the above techniques in homework assignments.

Study Goals

Students are able to:

- Describe the nature of security vulnerabilities in software systems.- Explain different language-based countermeasures to security vulnerabilities and compare their respective trade-offs.- Formally define variations of the dynamic and static analyses discussed in class.- Contrast programming languages based on the set of countermeasures they provide.