This course will introduce and survey the emerging field of "Language-based Security", in which techniques from compilers and programming language theory are leveraged to address issues in computer security. Topics include: Proof-Carrying Code, In-lined Reference Monitoring, Typed Intermediate Languages, Typed Assembly Language, Certifying Compilers, and Software Fault Isolation.
The aim of the course is to allow each student to develop a solid understanding of at least one of these topics, along with a more general familiarity with the range of research in the field. In-course discussion will highlight opportunities for cutting-edge research in each area. If your research involves computer security, this course will provide you with an array of powerful tools for addressing software security issues. If your research involves programming languages and compilers, this course will show you how to take techniques that you might already know and apply them in new and interesting ways.
The course is open to Ph.D. students, and to Masters students with permission of instructor.
Suggested prerequisite: CS 6371 Advanced Programming Languages (or concurrently), or a basic familiarity with type theory. (If not, the student is advised to consult one of the texts on type theory listed later on this page.)
Homework: Homeworks will consist of assigned readings—approximately two papers per class session. Material presented in class will assume that students have read the assigned material before coming to class, so please do the readings ahead of time!
Presentations (40%): Each student will be assigned two days during the semester during which they will present to the class a summary of the assigned readings for that day. The presentation should provide a technical overview of the paper, a description of how the paper fits into the broader context of the material covered in the course, and should pose some interesting questions or challenges for in-class discussion.
Class Participation (20%): Students are expected to come to each class having read the assigned papers, and prepared with questions, critiques, and discussion topics. Regular participation in in-class discussion will count 20% towards students' grades in the course.
Projects (40%): Students taking the course for a letter grade will work individually or in a team of two to four to complete a course-related project. All project ideas are individually approved by the instructor. Proposals are due by mid-semester. A typical project would involve implementing one of the concepts described in one of the assigned readings, or using one or more of the research-level software packages covered in class to do an interesting program analysis or to address a non-trivial security vulnerability.
The course has no required textbook, but several of the course topics will draw heavily from material in:
Date | Topic | Presenter(s) |
Introduction and Review | ||
Tue 1/9 |
Course overview and introduction to Language-based Security
|
Instructor |
Thur 1/11 |
A Crash Course in Type Theory: Part I Simple Types, Operational Semantics Properties of Type Systems: Preservation, Progress, Soundness, Completeness Suggested (non-mandatory) readings:
|
Instructor |
Tue 1/16 |
A Crash Course in Type Theory: Part II First-class Functions, Parametric Polymorphism, and Dependent Types Types as Logical Predicates: Hoare Logic, Curry-Howard Isomorphism Suggested (non-mandatory) readings:
|
Instructor |
Thur 1/18 |
A Crash Course in Computer Security Security Goals: Confidentiality, Integrity, Availability Security Principles: Least Privilege, Minimal Trusted Computing Base Security Policies: Memory Safety, Control Flow Safety, Coarse-grained RBAC Attacks: Buffer Overrun, Privilege Escalation, Denial of Service, Dictionary Attacks, Phishing Suggested (non-mandatory) readings:
|
Instructor |
Memory Safety and Control-Flow Safety | ||
Tue 1/23 |
Software Fault Isolation
|
Sandeep |
Thur 1/25 |
Control Flow Integrity
|
Nathalie |
Minimizing the Trusted Computing Base | ||
Tue 1/30 |
Proof-Carrying Code
|
Instructor |
Thur 2/1 |
Proof-Carrying Code
|
Srividya |
Tue 2/6 |
Typed Assembly Language
|
Instructor |
Thur 2/8 |
Dependently Typed Assembly Language
|
Ryan |
Tue 2/13 |
Foundational Proof-Carrying Code
|
Instructor |
Thur 2/15 |
Combining TAL and PCC
|
Jungin |
Securing Legacy Code | ||
Tue 2/20 |
Cyclone: A TAL-Targeting, C-like Language
|
Ryan |
Thur 2/22 |
CCured: A PCC-Targeting, C-like Language
|
Srividya |
In-lined Reference Monitors | ||
Tue 2/27 |
In-lined Reference Monitoring
|
Sandeep |
Thur 3/1 |
Certified In-lined Reference Monitoring
|
Instructor |
Tue 3/6 | Spring Break | N/A |
Thur 3/8 | Spring Break | N/A |
Tue 3/13 |
Composable Policies
|
Ajay |
Thur 3/15 |
Computational Theory of In-lined Reference Monitors
|
Instructor |
Information Flow | ||
Tue 3/20 |
Overview of Language-based Information Flow
|
Ajay |
Thur 3/22 |
Information Flow for Java
|
Nathalie |
Tue 3/27 |
Distributed Information Flow
|
Jungin |
Obfuscation and Randomization | ||
Thur 3/29 |
Address Space Randomization
|
Vishwath |
Tue 4/3 |
Instruction Set Randomization
|
Vishwath |
Thur 4/5 |
Obfuscation and Type Systems
|
Mohammad |
Wrap-up and Conclusions | ||
Tue 4/10 |
Course Evaluations Course summary, Q&A, Extended discussion |
Instructor |
Thur 4/12 |
Guest speaker: Dr. Gopal Gupta Buffer overflow protection research at UTD |
Dr. Gupta |
Tue 4/17 |
Project Presentations
|
Various |
Thur 4/19 |
Project Presentations
|
Various |