Course Description Class Logistics & Grading Topics Important Dates
Instructor: Prateek Saxena (prateeks at comp dot nus dot edu dot sg)

Aashish Kolluri and Teodora Baluta (cs5231.ta at

Room & Timings: LT18, Friday 6:30 - 8:30 pm
IVLE Page: CS5231
Semester: AY 2018/2019 Semester 1


Course Description

Security breaches cost billions of dollars worth of damage to the computing industry. Today, cybercriminals control armies consisting of several millions of compromised machines. Attacks are increasingly being perpetrated towards enterprises, individuals, critical infrastructure and even governments. At the same time, our computer systems and platforms are fast evolving to meet the demands of the industry. Increasing use of personalized devices, and our growing dependence on legacy computer systems that weren't designed with security in mind is a challenge ahead. Have you thought about how computer systems can be designed to secure against the practical challenges for the next 10 years and beyond?

In this course, we will study the design of existing and next-generation systems software from a security perspective.This course introduces you to the field of systems security: that is, how to analyze and develop secure systems. The course covers fundamental concepts of systems design, low-level vulnerability exploitation, design flaws in design of operating systems and languages, and a few advanced research topics.

The goal of this class is to enable students to:

  • Critically audit systems code for security flaws.
  • Design and implement exploits for real security bugs.
  • Develop analysis tools.
  • Critique defense solutions.

Schedule & Syllabus

The table below lists the schedule of topics.

DateTopic ReadingsAnnouncements
16 Aug

Introduction to Computer Security

Lecture Notes  
23 Aug Memory Errors

Smashing The Stack For Fun And Profit

Exploiting Format String Vulnerabilities


30 Aug No class - Instructor Out-of-town    
6 Sep

(I) Type Errors

(II) Exploits

SoK: Eternal War in Memory

Return-oriented programming without returns

Assgt. 1 out
13 Sep

Defenses for Memory Exploits: Mem Safety, CFI, Randomization, Pointer Integrity

Control-flow integrity

CETS: Compiler-Enforced Temporal Safety for C

CCured: Type-Safe Retrofitting of Legacy Code

20 Sep

(I) Isolation & Sandboxing

(II) Privilege Separation

Efficient software-based fault isolation

Preventing Privilege Escalation / The Security Architecture of the Chromium Browser

27 Sep Recess Week --- No Class


4 Oct Detection, Diagnosis & Bug-finding: Static Methods

Lecture Notes

All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution

Assgt 1 due

Project List out

11 Oct Detection, Diagnosis & Bug-finding: Dynamic Methods

Americal Fuzzy Loop

Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software

KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs


18 Oct


SoK: Introspections on Trust and the Semantic Gap

On the Limits of Information Flow Techniques for Malware Analysis and Containment


25 Oct

Trusted Computing

Terra: A Virtual Machine-Based Platform for Trusted Computing

PodArch or Intel SGX

1 Nov

Advanced Topics: Blockchains

Lecture Notes

On the Security of Blockchain Consensus Protocols

8 Nov Advanced Topics: Privacy

A Practical Attack to De-Anonymize Social Network Users

Lecture Notes

Project presentation

15 Nov

Midterm - In class

Open Book



Class Logistics & Grading

This class is relatively heavy and requires hands-on programming and experimentation. I will explain the detailed logistics of the course in the first lecture. There will be no final exam, labs or tutorials for the course.

Grade distribution is as follows:

  • Assignment : Exploits! (35%)
  • Midterm (35%)
  • Project (25%)
  • Class & Forum Participation (5%)

Both the assignments and projects will be done in groups of 2-3. In each project, the team members are expected to individually implement certain parts and declare their collaborative contributions explicitly. The midterm is in-class and open-book.

Each student is expected to have access to his own laptop / desktop. All project assignments are distributed as VirtualBox VMs or Docker images; you are expected to be able to setup and run these VMs. If you do not have access to your own laptop / desktop, please approach the instructor within the first week of the course. There are on-campus facilities that you can use.


Who should take this class?

This is a graduate-level class for students interested in security, both conceptually and operationally. The class is designed to be somewhat self-paced and self-taught; all graded assignments are done at home. Lectures will only cover topics at a conceptual level. Being a graduate class, you are expected to pick-up and learn new things on your own with help from your friends / teammates and from the web. The IVLE forum is your best friend --- if you get stuck, ask questions and exchange ideas freely on the forum or consult the web. The instructor and TAs will *not* help debug your code, or tell you how to overcome technical difficulties in coding assignments. You are not permitted to copy code or take external help on assignments from prior students or instructors. Other than that, there is no restriction on your communication with your colleagues, so be prepared to ask around and pick things up on your own. If you take any help outside your group, please declare it explicitly in your submission.


The prerequisite is good undergraduate level understanding of computer science and having taken a undergraduate or graduate course in security. Exceptions to prerequisite requirements are allowed with the official permission of the graduate office solely.

Note on Ethics & Academic Honesty

In this class, you will be exposed to several powerful attack techniques. This class is not an invitation exploit vulnerabilities in the wild without informed consent of all involved parties. Attacking someone else's computer system is an offence; you are expected to use your knowledge with discretion. All students must comply with NUS academic honesty policies.

You should cite any permitted external sources, which include papers at academic conferences, online textbooks available through NUS online / physical library, and resources provided by instructors/TA. The permitted sources are your notes from this class and prior ones you've taken for all assignments and exams. You are not allowed to search the Internet, or seek help from any person outside your class or NUS, without prior approval from the instructor.

For all readings and assignments, please feel free to discuss with your peers but write down your own solutions. In joint assignments, clearly identify which parts are done individually and independently. If you derived significant help from someone, please acknowledge their name in your submission. If someone helped you resolve a "key peice" which led you to the solution, please thank them explicitly. These acknowledgements are encouraged and don't impact your scores.