Software powers everything—from banking systems to mobile apps—but it is also one of the most exploited attack surfaces in cybersecurity.

This course provides a deep dive into how software breaks—and how to defend it.

You will explore the anatomy of software vulnerabilities, starting from fundamental issues such as improper input handling and memory mismanagement, and progressing to more advanced topics like race conditions and exploitation techniques. Rather than treating security as an afterthought, the course positions it as a core engineering discipline.

Through a combination of conceptual discussions, case-based analysis, and hands-on exercises, you will:

  • Understand how attackers think and operate
  • Analyze real-world vulnerabilities and exploitation patterns
  • Apply secure coding practices and defensive strategies
  • Evaluate the strengths and limitations of modern security controls

By the end of the course, you will not only recognize insecure software—you will be equipped to design, build, and assess systems with security in mind.

This course is designed for students and professionals who want to move beyond theory and develop a practical, offensive-and-defensive mindset in securing applications.

Module 1: Intro to Software Security – Instructor Slides / Slide Deck (PDF) for Students

Module 2: Operating System Security – Instructor Slides / Slide Deck (PDF) for Students

Module 3: Requirements and Design – Instructor Slides / Slide Deck (PDF) for Students

Module 4: Secure Architectural Design – Instructor Slides / Slide Deck (PDF) for Students

Module 5: Implementation (Coding) – Instructor Slides / Slide Deck (PDF) for Students

Module 6: Software Security Testing – Instructor Slides / Slide Deck (PDF) for Students

Module 7: Deployment and Maintenance – Instructor Slides / Slide Deck (PDF) for Students