Foundations of Software Security
This course teaches the principles and practice of software security. The course gives an overview of the foundations of computation models and languages. It then builds on this foundation by teaching students how to address software security issues using fundamental techniques such as type systems and program analysis. The course also covers the practical side of software security, such as memory safety issues including buffer overflow, code injection, and code reuse attacks, as well as some of the latest security problems. Through this course, the students will gain a concrete understanding of principles and practices of software security and be prepared for research on software security related problems.