Course overview
Unsafe languages like C/C++ are widely used for their great promise of
performance. Unfortunately, these languages are prone to a large set of
different types of memory and type errors that allow the exploitation of
several attack vectors such as code reuse, privilege escalation, or
information leaks. On a high level memory and type safety would solve
all these problems. Safe languages can (somewhat) cheaply enforce these
properties. Unfortunately, these guarantees come at a high cost if
retrofitted onto existing languages.
When working with unsafe languages, three fundamental approaches exist
to protect against software flaws: formal verification (proving the
absence of bugs), software testing (finding bugs), and mitigation
(protecting against the exploitation of bugs). In this seminar, we will
primarily focus on the latter two approaches. Formal verification, while
giving strong guarantees, struggles to scale to large software.
This seminar explores three areas: the understanding of attack vectors,
approaches to software testing, and mitigation strategies. First you
need to understand what kind of software flaws exist in low level
software and how those flaws can be exploited.
Each student will pick one topic (one specific testing approach,
mitigation, or attack vector) from the list of topics below. The student
is expected to organize the material and prepare a presentation of the
topic for the other students. The main goals of this seminar are:
- understanding and defining the security policy and corresponding
guarantees/trade-offs implemented by given work;
- reasoning about the power and effectiveness (completeness in regard
to attack vectors covered, strength of the guarantees, and
effectiveness) of different security policies (and being able to
compare between them);
- reasoning on the computational and resource cost of mechanisms and
possible downsides;
- alternative implementations of the policy at other levels of
abstraction.
- developing skills to present a technical topic in computer science to
an audience of peers;
- learning how to identify possible research topics and articulating
differences to existing related work.
Your grade is based on:
- technical presentation of your topic and writing a 1 page summary of
the presentation after your topic (80%);
- active participation in class which includes reading the assigned
papers and asking questions/participating in the discussions (20%).
Topic presentations
The length of presentations for research papers should be between around
30 minutes, followed by 15 minutes of discussion. You can structure the
presentation as follows:
- Motivation of the paper (1-2 slides, ~5 minutes)
- Key research questions (1-2 slides, ~5 minutes)
- Presentation of the core design and implementation of the research
paper (4-8 slides, ~10 minutes)
- Evaluation of the security policy (2-3 slides, ~5 minutes)
- Material for discussion: advantages, disadvantages, limitations of
the approach (2-3 slides, ~5 minutes)
- Summary slide of the paper: policy, defense property (at which point
in memory model), implementation (language, compiler, or runtime)
When preparing the presentation, send a PDF version of your slides to
Manuel and Mathias
before your talk.
Topics
This list is non-exhaustive and the list may be adapted during class and
students may suggest other recent software security papers they are
interested in. The open book Software Security: Principles, Policies,
and Protection provides an overview of many topics but does not go
into depth for each policy.
Software Flaws and Mitigations
- Eternal War in Memory [Mathias, 09/27]
- SoK: Benchmarking Flaws in Systems Security
- Shadow Stacks
- Diversity (SoK)
- Control-Flow Integrity ,
Fuzzing
- Fuzzing: Hack, Art, and Science
- The Art, Science, and Engineering of Fuzzing:A Survey
- Estimating Residual Risk in Greybox Fuzzing
- AFL++: Combining Incremental Steps of Fuzzing Research
- ParmeSan: Sanitizer-guided Greybox Fuzzing
- Constraint-guided Directed Greybox Fuzzing
- GREYONE: Data Flow Sensitive Fuzzing
Sanitization
- SoK: Sanitizing for Security
- AddressSanitizer
- DangSan: Scalable Use-after-free Detection