|
1 |
| -Part I: Requirements, Design, and Reuse |
| 1 | +# Part I: Requirements, Design, and Reuse |
| 2 | + |
2 | 3 | # Course Introduction
|
| 4 | + |
3 | 5 | ## Introduction
|
| 6 | + |
4 | 7 | ## A Note from the Author
|
| 8 | + |
5 | 9 | ## Motivation
|
| 10 | + |
6 | 11 | ### Motivation: Why Is It Important to Secure Software?
|
| 12 | + |
7 | 13 | ### Motivation: Why Take This course?
|
| 14 | + |
8 | 15 | # Security Basics
|
| 16 | + |
9 | 17 | ## What Do We Need?
|
| 18 | + |
10 | 19 | ### What Does “Security” Mean?
|
| 20 | + |
11 | 21 | ### Security Requirements
|
| 22 | + |
12 | 23 | ### What Is Privacy and Why It Is Important
|
| 24 | + |
13 | 25 | ### Privacy Requirements
|
| 26 | + |
14 | 27 | ## How Can We Get There?
|
| 28 | + |
15 | 29 | ### Risk Management
|
| 30 | + |
16 | 31 | ### Development Processes / Defense-in-Breadth
|
| 32 | + |
17 | 33 | ### Protect, Detect, Respond
|
| 34 | + |
18 | 35 | ### Vulnerabilities
|
| 36 | + |
19 | 37 | # Design
|
| 38 | + |
20 | 39 | ## Secure Design Basics
|
| 40 | + |
21 | 41 | ### What Are Security Design Principles?
|
| 42 | + |
22 | 43 | ### Widely-Recommended Secure Design Principles
|
| 44 | + |
23 | 45 | ### Least Privilege
|
| 46 | + |
24 | 47 | ### Complete Mediation (Non-Bypassability)
|
| 48 | + |
25 | 49 | ### The Rest of the Saltzer & Schroeder Design Principles
|
| 50 | + |
26 | 51 | ### Other Design Principles
|
| 52 | + |
27 | 53 | # Reusing External Software
|
| 54 | + |
28 | 55 | ## Supply Chain
|
| 56 | + |
29 | 57 | ### Basics of Reusing Software
|
| 58 | + |
30 | 59 | ### Selecting (Evaluating) Open Source Software
|
| 60 | + |
31 | 61 | ### Downloading and Installing Reusable Software
|
| 62 | + |
32 | 63 | ### Updating Reused Software
|
33 |
| -Part II: Implementation |
| 64 | + |
| 65 | +# Part II: Implementation |
| 66 | + |
34 | 67 | # Basics of Implementation
|
| 68 | + |
35 | 69 | ### Implementation Overview
|
| 70 | + |
36 | 71 | # Input Validation
|
| 72 | + |
37 | 73 | ## Input Validation Basics
|
| 74 | + |
38 | 75 | ### Input Validation Basics Introduction
|
| 76 | + |
39 | 77 | ### How Do You Validate Input?
|
| 78 | + |
40 | 79 | ## Input Validation: Numbers and Text
|
| 80 | + |
41 | 81 | ### Input Validation: A Few Simple Data Types
|
| 82 | + |
42 | 83 | ### Sidequest: Text, Unicode, and Locales
|
| 84 | + |
43 | 85 | ### Validating Text
|
| 86 | + |
44 | 87 | ### Introduction to Regular Expressions
|
| 88 | + |
45 | 89 | ### Using Regular Expressions for Text Input Validation
|
| 90 | + |
46 | 91 | ### Countering ReDoS Attacks on Regular Expressions
|
| 92 | + |
47 | 93 | ## Input Validation: Beyond Numbers and Text
|
| 94 | + |
48 | 95 | ### Insecure Deserialization
|
| 96 | + |
49 | 97 | ### Input Data Structures (XML, HTML, CSV, JSON, & File Uploads)
|
| 98 | + |
50 | 99 | ### Minimizing Attack Surface, Identification, Authentication, and Authorization
|
| 100 | + |
51 | 101 | ### Search Paths and Environment Variables (including setuid/setgid Programs)
|
| 102 | + |
52 | 103 | ### Special Inputs: Secure Defaults and Secure Startup
|
| 104 | + |
53 | 105 | ## Consider Availability on All Inputs
|
| 106 | + |
54 | 107 | ### Consider Availability on All Inputs Introduction
|
| 108 | + |
55 | 109 | # Processing Data Securely
|
| 110 | + |
56 | 111 | ## Processing Data Securely: General Issues
|
| 112 | + |
57 | 113 | ### Prefer Trusted Data. Treat Untrusted Data as Dangerous
|
| 114 | + |
58 | 115 | ### Avoid Default & Hardcoded Credentials
|
| 116 | + |
59 | 117 | ### Avoid Incorrect Conversion or Cast
|
| 118 | + |
60 | 119 | ## Processing Data Securely: Undefined Behavior / Memory Safety
|
| 120 | + |
61 | 121 | ### Countering Out-of-Bounds Reads and Writes (Buffer Overflow)
|
| 122 | + |
62 | 123 | ### Double-free, Use-after-free, and Missing Release
|
| 124 | + |
63 | 125 | ### Avoid Undefined Behavior
|
| 126 | + |
64 | 127 | ## Processing Data Securely: Calculate Correctly
|
| 128 | + |
65 | 129 | ### Avoid Integer Overflow, Wraparound, and Underflow
|
| 130 | + |
66 | 131 | # Calling Other Programs
|
| 132 | + |
67 | 133 | ## Introduction to Securely Calling Programs
|
| 134 | + |
68 | 135 | ### Introduction to Securely Calling Programs - The Basics
|
| 136 | + |
69 | 137 | ## Calling Other Programs: Injection and Filenames
|
| 138 | + |
70 | 139 | ### SQL Injection
|
| 140 | + |
71 | 141 | ### OS Command (Shell) injection
|
| 142 | + |
72 | 143 | ### Other Injection Attacks
|
| 144 | + |
73 | 145 | ### Filenames (Including Path Traversal and Link Following)
|
| 146 | + |
74 | 147 | ## Calling Other Programs: Other Issues
|
| 148 | + |
75 | 149 | ### Call APIs for Programs and Check What Is Returned
|
| 150 | + |
76 | 151 | ### Handling Errors
|
| 152 | + |
77 | 153 | ### Logging
|
| 154 | + |
78 | 155 | ### Debug and Assertion Code
|
| 156 | + |
79 | 157 | ### Countering Denial-of-Service (DoS) Attacks
|
| 158 | + |
80 | 159 | # Sending Output
|
| 160 | + |
81 | 161 | ### Introduction to Sending Output
|
| 162 | + |
82 | 163 | ### Countering Cross-Site Scripting (XSS)
|
| 164 | + |
83 | 165 | ### Content Security Policy (CSP)
|
| 166 | + |
84 | 167 | ### Other HTTP Hardening Headers
|
| 168 | + |
85 | 169 | ### Cookies & Login Sessions
|
| 170 | + |
86 | 171 | ### CSRF / XSRF
|
| 172 | + |
87 | 173 | ### Open Redirects and Forwards
|
| 174 | + |
88 | 175 | ### HTML **target** and JavaScript **window.open()**
|
| 176 | + |
89 | 177 | ### Using Inadequately Checked URLs / Server-Side Request Forgery (SSRF)
|
| 178 | + |
90 | 179 | ### Same-Origin Policy and Cross-Origin Resource Sharing (CORS)
|
| 180 | + |
91 | 181 | ### Format Strings and Templates
|
| 182 | + |
92 | 183 | ### Minimize Feedback / Information Exposure
|
| 184 | + |
93 | 185 | ### Side-Channel Attacks
|
94 |
| -Part III: Verification and More Specialized Topics |
| 186 | + |
| 187 | +# Part III: Verification and More Specialized Topics |
| 188 | + |
95 | 189 | # Verification
|
| 190 | + |
96 | 191 | ## Basics of Verification
|
| 192 | + |
97 | 193 | ### Verification Overview
|
| 194 | + |
98 | 195 | ## Static Analysis
|
| 196 | + |
99 | 197 | ### Static Analysis Overview
|
| 198 | + |
100 | 199 | ### Software Composition Analysis (SCA)/Dependency Analysis
|
| 200 | + |
101 | 201 | ## Dynamic Analysis
|
| 202 | + |
102 | 203 | ### Dynamic Analysis Overview
|
| 204 | + |
103 | 205 | ### Fuzz Testing
|
| 206 | + |
104 | 207 | ### Web Application Scanners
|
| 208 | + |
105 | 209 | ## Other Verification Topics
|
| 210 | + |
106 | 211 | ### Combining Verification Approaches
|
| 212 | + |
107 | 213 | # Threat Modeling
|
| 214 | + |
108 | 215 | ## Threat Modeling/Attack Modeling
|
| 216 | + |
109 | 217 | ### Introduction to Threat Modeling
|
| 218 | + |
110 | 219 | ### STRIDE
|
| 220 | + |
111 | 221 | # Cryptography
|
| 222 | + |
112 | 223 | ## Applying Cryptography
|
| 224 | + |
113 | 225 | ### Introduction to Cryptography
|
| 226 | + |
114 | 227 | ### Symmetric/Shared Key Encryption Algorithms
|
| 228 | + |
115 | 229 | ### Cryptographic Hashes (Digital Fingerprints)
|
| 230 | + |
116 | 231 | ### Public-Key (Asymmetric) Cryptography
|
| 232 | + |
117 | 233 | ### Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
|
| 234 | + |
118 | 235 | ### Storing Passwords
|
| 236 | + |
119 | 237 | ### Transport Layer Security (TLS)
|
| 238 | + |
120 | 239 | ### Other Topics in Cryptography
|
| 240 | + |
121 | 241 | # Other Topics
|
| 242 | + |
122 | 243 | ## Vulnerability Disclosures
|
| 244 | + |
123 | 245 | ### Receiving Vulnerability Reports
|
| 246 | + |
124 | 247 | ### Respond To and Fix the Vulnerability in a Timely Way
|
| 248 | + |
125 | 249 | ### Sending Vulnerability Reports to Others
|
| 250 | + |
126 | 251 | ## Miscellaneous
|
| 252 | + |
127 | 253 | ### Assurance Cases
|
| 254 | + |
128 | 255 | ### Harden the Development Environment (Including Build and CI/CD Pipeline) & Distribution Environment
|
| 256 | + |
129 | 257 | ### Distributing, Fielding/Deploying, Operations, and Disposal
|
| 258 | + |
130 | 259 | ### Artificial Intelligence (AI), Machine Learning (ML), and Security
|
| 260 | + |
131 | 261 | ### Formal Methods
|
| 262 | + |
132 | 263 | ## Top Vulnerability Lists
|
| 264 | + |
133 | 265 | ### OWASP Top 10
|
| 266 | + |
134 | 267 | ### CWE Top 25
|
| 268 | + |
135 | 269 | ## Concluding Notes
|
| 270 | + |
136 | 271 | ### Conclusions
|
137 |
| -Part IV: Supporting Materials Not Part of the Course |
| 272 | + |
| 273 | +# Part IV: Supporting Materials Not Part of the Course |
| 274 | + |
138 | 275 | # Glossary
|
| 276 | + |
139 | 277 | # Further Reading
|
| 278 | + |
140 | 279 | # Old Mappings
|
| 280 | + |
141 | 281 | ## OWASP Top 10 and CWE Top 25
|
| 282 | + |
142 | 283 | ### OWASP Top 10 (2017 edition)
|
| 284 | + |
143 | 285 | ### CWE Top 25 (2019 edition)
|
| 286 | + |
144 | 287 | # References
|
| 288 | + |
0 commit comments