UW, UAB and TrustedCI logos

Introduction to Software Security

Elisa Heymann and Barton P. Miller

Contacts: elisa@cs.wisc.edu and bart@cs.wisc.edu.

© 2025 Elisa Heymann and Barton P. Miller.

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Instructors: You can find the Instructors' Page with teaching information and directions to access the active learning exercises and quizzes. You will need to request access permission from us for these resources.

Students: This is a free and open resource for you to use to help you learn about software security. If you would like to support this effort and help us keep it up to date and expand the content, please feel free to donate $5 - $10 - $20 - $50 - or click here to donate any amount you want.

Important note about chapter numbering:
• Chapter numbers are changing.
• Links to the new chapter versions will be different.
 
Once a chapter is updated, the old links will not work anymore.  
In preparation for publishing our chapters in a book, over the next year chapter numbers will change. The current system of module.unit will change a simple chapter number. For example, Chapter 5.2 became Chapter 30. The page style and formatting is also being updated.
 
All new chapters will use the new number system. After we complete those chapters, we will start to move the existing units to the new chapter numbers. If you have links to individual units, then those will need to be updated.
 
Sorry for any confusion that this causes!

Module 1: Introduction
Chapter 1
Welcome and Overview

Link to video Link to text chapter
2 (1.2.1)
Introduction (part 1)
Basic Terminology

Link to video Link to text chapter
Closed caption English, Español
2 (1.2.2)
Introduction (part 2)
Threats

Link to video Link to text chapter
Closed caption English, Español
2 (1.2.3)
Introduction (part 3)
Risks and Basic Concepts

Link to video Link to text chapter
Closed caption English, Español
3 (1.3)
Thinking Like an Attacker: Owning the Bits

Link to video Link to text chapter
Closed caption English, Español
Module 2: Thinking Like a Designer
4 (2.1)
Secure Design Principles

Link to video Link to text chapter Link to hands-on exercise
5 (2.2)
Overview of Threat Modeling

Link to video Link to text chapter Link to hands-on exercise
6 (2.3)
Microsoft Security Design Lifecycle and Threat Modeling Methodology

Link to video Link to text chapter Link to hands-on exercise
7 (2.4)
Microsoft DREAD Threat Categories

Link to video Link to text chapter Link to hands-on exercise
8 (2.5)
PASTA Threat Modeling Methodology

Link to video Link to text chapter Link to hands-on exercise
Module 3: Thinking Like an Programmer: Secure Programming
9 (3.1)
Pointers and Strings

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
10 (3.2)
Numeric Errors: Integers

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
11
Numeric Errors: Floating Point

Link to video Link to text chapter Link to hands-on exercise
12 (3.3)
Directory Traversal

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
13 (3.4)
Exceptions

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
14 (3.5)
Serialization

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
15 (3.8)
Introduction to Injection Attacks

Link to video Link to text chapter
Closed caption English, Español
16 (3.8.1)
SQL Injections

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
17 (3.8.2)
Command Injections

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
18 (3.8.3)
Code Injections

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
19 (3.8.4)
XML Injections

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
20 (3.9.1)
Web Attacks:
Background

Link to video Link to text chapter
Closed caption English, Español
21 (3.9.2)
Web Attacks:
Cross Site Scripting (XSS)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
22 (3.9.3)
Web Attacks:
Cross Site Request Forgery (CSRF)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
23 (3.9.4)
Web Attacks:
Session Management

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
24 (3.9.4b)
Web Attacks:
CORS

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
3.9.5
Web Attacks:
Redirection

Link to video Link to text chapter
Closed caption English, Español
25 (3.10.1)
Mobile: Background

Link to video Link to text chapter
Closed caption English, Español
25 (3.10.2)
Mobile: Attacks

Link to video Link to text chapter Link to hands-on exercise
Closed caption English, Español
Module 4: Defensive Techniques
26 (4.1)
Address Space Layout Randomization (ASLR)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
27 (4.2)
Memory Safety Checks

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
28 (4.3)
Control Flow Integrity Checks

Link to video Link to text chapter Link to hands-on exercise
Module 5: Thinking Like an Analyst: In-Depth Vulnerability Assessment
29 (5.1)
Introduction to FPVA, First Principles Vulnerability Assessment

Link to video Link to text chapter
Closed caption English
30 (5.2.1)
FPVA Step 1: Architectural Analysis (part 1)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
30 (5.2.2)
FPVA Step 1: Architectural Analysis (part 2)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
31 (5.3)
FPVA Step 2: Resource Identification

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
32 (5.4)
FPVA Step 3: Trust and Privilege Analysis

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
33 (5.5.1)
FPVA Step 4: Component Analysis (part 1)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
33 (5.5.2)
FPVA Step 4: Component Analysis (part 2)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
33 (5.5.3)
FPVA Step 4: Component Analysis (part 3)

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
34 (5.6)
FPVA Step 5: Dissemination of Results

Link to video Link to text chapter Link to hands-on exercise
35 (5.7)
The Manager's Point of View: Responding to a Vulnerability

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
Module 6: Thinking Like an Analyst: Automated Assessment Tools
36 (6.1)
Static Analysis Tools Concepts

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
(6.3)
Tools for C and C++

Link to video Link to text chapter Link to hands-on exercise
(6.4)
Tools for Java

Link to video Link to text chapter Link to hands-on exercise
37 (6.5.1)
Dependency Analysis Tools: Conceptual Background

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
37 (6.5.2)
Dependency Tools: How to Use the Tools

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
6.6
Using Tools in the SWAMP

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
Module 7: Dynamic Techniques (Fuzz Testing and Other Checkers)
38 (7.1)
Introduction to Fuzz Testing

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
(7.2.1)
Classic Fuzz Testing:
Background

Link to video
Closed caption English
39 (7.2.2)
Classic Fuzz Testing:
The Command Line Studies

Link to video Link to text chapter
Closed caption English
40 (7.2.3)
Classic Fuzz Testing:
The GUI-Based Studies

Link to video Link to text chapter
Closed caption English
41 (7.2.4)
Classic Fuzz Testing:
Other Studies

Link to video Link to text chapter
Closed caption English
42 (7.3)
Fuzz Testing with AFL++

Link to video Link to text chapter Link to hands-on exercise
Closed caption English
43 (7.4)
Memory Error Checking Tools

Link to video Link to text chapter Link to hands-on exercise
(7.2.1)
Classic Fuzz Web Resources

Link to text chapter
Closed caption English
Module 8: Secure Use of Cryptography
(8.1)
Basic Cryptography Concepts

Link to video Link to text chapter
Closed caption English
(8.2)
Java Crypto API Misuses and Cryptoguard

Link to video Link to text chapter
Closed caption English
Supplementary Sections
Glossary of Terms
Link to text chapter


Valid HTML 4.01 Transitional
Last modified: Sat Dec 27 09:07:05 AM CST 2025 by bart