Previous Classes

Secure Software Programming and Vulnerability Analysis (183.159)


The importance of computer systems and their increasing inter-connectivity are well known today. As more software is exposed to a growing number of (often anonymous) users, the number of exploits of software vulnerabilities is rising. These vulnerabilities seriously threaten the correct functionality of software systems and people that depend on these systems. This class introduces students to common programming errors. The aim is to understand, identify and, ultimately, to avoid such mistakes and produce more reliable, secure software. Examples are used to highlight general error classes, such as stack overflow and format string vulnerabilities. In addition, the complete software development cycle is analyzed to find ways to design more secure and more robust software. The lecture is intended for students with programming experience that want to improve their skills to implement more secure programs.

The original course web page can be found here.

Internet Security (184.122)


This course presents the principal protocols and applications that are used in the Internet today, discussing in detail the related vulnerabilities and how they are exploited. For each vulnerability, possible protection and detection techniques are examined. The course includes a number of practical lab assignments where participants are required to apply their knowledge as well as a discussion of the current research in the field. Students will learn how the security of networks can be violated and how such attacks can be detected and prevented.

Thomas Toth and I have started this course in its current form in 2001. It is currently taught by Engin Kirda, and I highly recommend it. You can find the course's current page here.

Operating Systems (CS 170B)


The focus of the class is on the design and implementation issues associated with operating systems. In particular, much of the emphasis is on the skills necessary to understand and build a working operating system. The lectures and the book introduce the basic principles of operating system design. The accompanying lab allows students to build their own operating system using Nachos.

The original course web page can be found here.