This course will focus on architectural approaches to designing and building secure and trustworthy software systems, motivated by a discussion of threat models and vulnerabilities exploited in practice. We will analyze various enabling mechanisms (e.g., virtualization, trusted hardware) in terms of their abstractions, implementations, security guarantees, and hardware-software decompositions. We will survey systems that have leveraged such approaches across a wide range of application scenarios. Towards the end of the course, we will also consider other approaches to improving the security of software systems (e.g., program verification). This course will be primarily driven by reading research papers, with in-class presentations and discussions, and will include a research project component.
For more information, please see the course syllabus.