Staff:
Instructor David Brumley
Teaching Assistant: Jiyong Jang (office hours: Thu 1:30-2:30pm @ CIC 2206)
Location: WeH 4623
Meets: MW 10:30am-12:20pm
Overview:

Poor software design and engineering are the root causes of most security vulnerabilities in deployed systems today. Moreover, with code mobility now commonplace--particularly in the context of web technologies and digital rights management--system designers are increasingly faced with protecting hosts from foreign software and protecting software from foreign hosts running it. This class takes a close look at software as a mechanism for attack, as a tool for protecting resources, and as a resource to be defended.

This course is a graduate-level class covering research and advanced topics in software security. We will learn about:

  1. Insecure languages and attacks. We first investigate programming in "unsafe" programming languages such as C. We cover typical C/C++ vulnerablities such as buffer overflows, format strings, heap vulnerabilities, and so on. The homework problems should be really fun: you will create working exploits that give you a shell.
  2. Fixing C: Backward compatible defenses. We will cover defenses such as ASLR and DEP that protect otherwise vulenrable programs from exploitation. We will also talk about their limitations and modern attacks, such as return-oriented programming.
  3. Fixing C: Memory and Control Flow Safety. Why can't we just fix C to be safe? We'll explore two different solutions (control flow integrity and CCured) and their limitations.
  4. Model checking: What is this, and how is it used in security?
  5. Web security: hacking both the client and server.
  6. Information flow, both dynamic and static. We'll learn about the idea of non-interference as it applies to software.
  7. Symbolic execution, a verification technique used heavily in computer security. We'll learn about how it works, and applications of it such as proof carrying code.
  8. Secure by construction: weakest preconditions. You've probably heard we should build software that is secure and correct by construction. What does this mean? We'll discuss how this is done using Hoare-style proof systems and weakest preconditions. You'll see just how hard it is.
  9. Separation mechanisms. A standard security practice is to isolate privileges and use the least privilege necessary for an operation. We'll discuss how these ideas can be implemented.
  10. Static analysis and vulnerability discovery. Lately several companies have started selling tools that find vulnerabilities in source code. We'll learn about how these work, and in the process, read research papers that are the key technology behind companies such as Coverity.

Course Design and Goals:

This course first covers state-of-the-practice, and progressively moves toward start-of-the-art in research. We cover both secure software design and attacks. At the end of the course, students should be able to demonstrate mastery of state-of-the-practice by:

  1. Describing and finding common vulnerabilities in programs such as buffer overflows in C programs and SQL injection vulnerabilities against websites.
  2. Create exploits against traditional vulnerabilities.
  3. Describing current defenses

Students will also be able to describe what it means to be secure by design, the different kinds of "safety" we find in security, and the latest research directions. More simply, if someone asks you "What does it mean to be secure?" you should be able to answer by:

  1. Describing how the method works
  2. Describing the sorts of attacks the method catches
  3. Describing weakness and possible attacks not caught or outside the scope of the method

In addition to lecture and homeworks, students will pick the most interesting area to them, and develop a course project which extends current research and state-of-the-art. The course project is intended to synthesize knowledge acquired to make something new. Don't worry: we will help you get to where you can work on novel security research.

Prerequisites:
  1. 18-730 (or instructor permission)
  2. Skills in operating systems and programming languages (C and Java)
  3. Familiarity with UNIX command line utilities (e.g. gcc, ssh, man)
Grading Policy

Approximately:

  1. 5% Class Participation
  2. 30% Homework
  3. 30% Midterm
  4. 35% Project

Exceptional work will be rewarded as appropriate.

Late Policy
Academic Integrity Policy

The course staff will treat all students ethically and fairly. If you have an issue with a grade, please first meet with the TA who graded it, and if it cannot be resolved that way, please feel free to email Prof. Brumley and along with the TA, we will meet to resolve any problems.

Students also promise to behave ethically. Due to the sensitivity and nature of computer security, and some of the offensive techniques we discuss, we take any unethical and/or illegal behavior very seriously. Any potential lapse in ethical behavior will be immediately reported to the appropriate university disciplinary unit. Really. Even if you just have to pass the class, even if you didn't know it was cheating or plagiarism or illegal, and even if it will never happen again.

In particular:

Below we have the CMU and ECE policy, as well as references for more information. If you have any questions, talk to Prof. Brumley.

ECE Academic Integrity Policy

The Department of Electrical and Computer Engineering adheres to the academic integrity policies set forth by Carnegie Mellon University and by the College of Engineering. ECE students should review fully and carefully Carnegie Mellon University's policies regarding Cheating and Plagiarism; Undergraduate Academic Discipline; and Graduate Academic Discipline. ECE graduate student should further review the Penalties for Graduate Student Academic Integrity Violations in CIT outlined in the CIT Policy on Graduate Student Academic Integrity Violations. In addition to the above university and college-level policies, it is ECE's policy that an ECE graduate student may not drop a course in which a disciplinary action is assessed or pending without the course instructor's explicit approval. Further, an ECE course instructor may set his/her own course-specific academic integrity policies that do not conflict with university and college-level policies; course-specific policies should be made available to the students in writing in the first week of class.

This policy applies, in all respects, to this course.

Carnegie Mellon University's Policy on Cheating and Plagiarism states the following:

Students at Carnegie Mellon are engaged in preparation for professional activity of the highest standards. Each profession constrains its members with both ethical responsibilities and disciplinary limits. To assure the validity of the learning experience a university establishes clear standards for student work.

In any presentation, creative, artistic, or research, it is the ethical responsibility of each student to identify the conceptual sources of the work submitted. Failure to do so is dishonest and is the basis for a charge of cheating or plagiarism, which is subject to disciplinary action.

Cheating includes but is not necessarily limited to:

  1. Plagiarism, explained below.
  2. Submission of work that is not the student's own for papers, assignments or exams.
  3. Submission or use of falsified data.
  4. Theft of or unauthorized access to an exam.
  5. Use of an alternate, stand-in or proxy during an examination.
  6. Use of unauthorized material including textbooks, notes or computer programs in the preparation of an assignment or during an examination.
  7. Supplying or communicating in any way unauthorized information to another student for the preparation of an assignment or during an examination.
  8. Collaboration in the preparation of an assignment. Unless specifically permitted or required by the instructor, collaboration will usually be viewed by the university as cheating. Each student, therefore, is responsible for understanding the policies of the department offering any course as they refer to the amount of help and collaboration permitted in preparation of assignments. 9.Submission of the same work for credit in two courses without obtaining the permission of the instructors beforehand.

Plagiarism includes, but is not limited to, failure to indicate the source with quotation marks or footnotes where appropriate if any of the following are reproduced in the work submitted by a student:

  1. A phrase, written or musical.
  2. A graphic element.
  3. A proof.
  4. Specific language.
  5. An idea derived from the work, published or unpublished, of another person.