Week 5: Automated Reasoning for Code Security

Last week we looked at how security fits into the various activities of the development process. Up to this point we have generally looked at particular software flaws and bugs and how to avoid them through good design and implementation practices.

This week we will look at the testing and validation phases of software development, and in particular how automated reasoning tools can assist developers and testers in finding important security bugs. We will focus on two technologies: static analysis and symbolic execution.

Learning Objectives

After the completion of this week's material, you will:

Video Lectures

This week we cover two code analysis technologies: static analysis, and symbolic execution. The latter is often used as the core of a penetration testing technology called whitebox fuzz testing; we will discuss other fuzz testing techniques next week.

Static Analysis

Symbolic Execution

Break out: Interview with Andy Chou

In August 2014, Mike had the pleasure of interviewing Andy Chou. In 2003, Andy co-founded Coverity, a company that developed static analysis (and other) tools for finding software defects. Coverity's products started from Andy's Ph.D. research at Stanford, and grew as the company grew; the organization was at 300 employees when it was
acquired by SynopSys in 2014. In this interview we discussed principles and practice of static analysis, and the path towards making a practical tool that is now in wide use. Like last week, the interview is optional from an assessment perspective -- there will no quiz questions on it. We hope you find it interesting!

Mike Hicks interviews Andy Chou (32:31). Highlights, indexed by time:

Supplemental Links

Here is some additional reading material, if you are interested in learning more.
Here are some links to static analysis and symbolic execution tools you might find interesting.

Static analyzers

Symbolic executors

SMT solvers

These solvers are used by various of the tools mentioned above.

Quiz

The quiz for this week covers all of the material for this week.

Project

For this week's project you will get your feet wet using a symbolic execution tool called KLEE, and comparing its performance to a black box fuzzing tool called radamsa (which we will learn more about next week). When you finish it, take the on-line assessment, due in three weeks.