You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update the video intro text to eliminate duplication
LF Education & Training doesn't want the video text to *also*
be displayed as duplicate text, so let's mark it as "video"
but not duplicate it. I also tweaked the text to try to briefly
explain *why* certain chapters were important (so hopefully
the learner will be motivated to learn it).
Signed-off-by: David A. Wheeler <[email protected]>
Copy file name to clipboardExpand all lines: secure_software_development_fundamentals.md
+10-29Lines changed: 10 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,9 +176,7 @@ With that, let’s begin.
176
176
177
177
# Security Basics
178
178
179
-
> 🎥 This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management. We need to know these security basics so we can understand how to develop software that supports these basics.
180
-
181
-
This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management.
179
+
> 🎥 This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management. We need to know these security basics so we can understand how to develop software that supports these basics. It's hard to implement security and privacy if we don't know what it is, and we must have a basic idea of what the software needs to do before we can implement it. In addition, we should take reasonable steps to *manage* risks so that the risks taken are acceptable.
182
180
183
181
Learning Objectives:
184
182
@@ -762,9 +760,8 @@ Identifying common kinds of vulnerabilities has another advantage, too: It will
762
760
763
761
# Design
764
762
765
-
> 🎥 This chapter describes how to design software to be secure, focusing on key secure design principles such as least privilege, complete mediation, and input validation. These principles will help you avoid common problems and make your software harder to attack.
766
763
767
-
This chapter describes how to design software to be secure, focusing on key secure design principles such as least privilege, complete mediation, and input validation.
764
+
> 🎥 Non-trivial software needs to broken into smaller components that work together, and that breakdown is often called design or architectural design. This chapter describes how to design software to be secure, focusing on key secure design principles such as least privilege, complete mediation, and input validation. These principles will help you avoid common problems and make your software harder to attack.
768
765
769
766
Learning objectives:
770
767
@@ -1108,9 +1105,9 @@ A good example of this is the Content Security Policy (CSP) supported by modern
1108
1105
1109
1106
# Reusing External Software
1110
1107
1111
-
> 🎥 Hi, I'm CRob. I work at Intel corporation and lead the Open Source Security Foundation Best Practices Working Group. When developing software today we typically don't develop everything from scratch, but instead we typically reuse a lot of existing software. This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1108
+
<!-- Have CRob do this intro? -->
1112
1109
1113
-
This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1110
+
> 🎥 When developing software today we typically don't develop everything from scratch, we typically reuse a lot of existing software. In fact, on average, software products are mostly reused software. This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software. Reusing more secure software generally produces more secure results.
1114
1111
1115
1112
Learning objectives:
1116
1113
@@ -1344,9 +1341,7 @@ Practically all programs have to accept input. So we will begin examining how to
1344
1341
1345
1342
# Input Validation
1346
1343
1347
-
> 🎥 The first step in developing secure software is to only input that should be accepted. This chapter describes how to validate input, including how to validate numbers and text, the importance of minimizing attack surfaces, and how to improve availability by considering the inputs.
1348
-
1349
-
This chapter describes how to validate input, including how to validate numbers and text, the importance of minimizing attack surfaces, and how to improve availability by considering the inputs.
1344
+
> 🎥 A key part of implementing secure software is to only accept input that should be accepted. This chapter describes how to validate input, including how to validate numbers and text, the importance of minimizing attack surfaces, and how to improve availability by considering the inputs. Limiting input won't counter every attack, but it will tend to make the software harder to attack.
1350
1345
1351
1346
Learning objectives:
1352
1347
@@ -1960,8 +1955,6 @@ Rate limiting is not a complete solution, but it is an easy and inexpensive appr
1960
1955
1961
1956
> 🎥 This chapter describes how to process data with security in mind, including treating untrusted data as dangerous, avoiding default and hardcoded credentials, avoiding memory safety issues (such as buffer overflows), and avoiding undefined behavior.
1962
1957
1963
-
This chapter describes how to process data with security in mind, including treating untrusted data as dangerous, avoiding default and hardcoded credentials, avoiding memory safety issues (such as buffer overflows), and avoiding undefined behavior.
1964
-
1965
1958
Learning objectives:
1966
1959
1967
1960
1. Discuss how to process data securely (e.g., treat untrusted data as dangerous).
@@ -2316,9 +2309,7 @@ No. The range of possible values varies by language and types used, but attacker
2316
2309
2317
2310
# Calling Other Programs
2318
2311
2319
-
> 🎥 Real-world programs often call out to other programs, such as the operating system, database, and supporting browser. This chapter describes how to call other programs securely, including how to counter injection attacks (including SQL injection and OS command injection) and how to properly handle filenames/pathnames.
2320
-
2321
-
This chapter describes how to call other programs securely, including how to counter injection attacks (including SQL injection and OS command injection) and how to properly handle filenames/pathnames.
2312
+
> 🎥 Real-world programs often call out to other programs. On a server-side application these programs might include the operating system or a database. On a client-side application this might include the supporting browser. This chapter describes how to call other programs securely. We'll discuss in particular on how to counter injection attacks, including SQL injection and OS command injection, as well as how to properly handle filenames and pathnames.
2322
2313
2323
2314
Learning objectives:
2324
2315
@@ -3097,9 +3088,7 @@ Make sure that you have backups of important datasets and a workable recovery pr
3097
3088
3098
3089
# Sending Output
3099
3090
3100
-
> 🎥 This chapter describes how to send output securely, including how to counter cross-site scripting (XSS) attacks, using HTTP hardening headers, and securely using formatting systems.
3101
-
3102
-
This chapter describes how to send output securely, including how to counter cross-site scripting (XSS) attacks, using HTTP hardening headers, and securely using formatting systems.
3091
+
> 🎥 This chapter describes how to send output securely. This includes how to counter cross-site scripting (XSS) attacks, how to use HTTP hardening headers, and how to securely use formatting systems.
3103
3092
3104
3093
Learning objectives:
3105
3094
@@ -3700,9 +3689,7 @@ Thankfully, other than attacks on cryptographic systems, side-channel attacks ar
3700
3689
3701
3690
# Verification
3702
3691
3703
-
> 🎥 This chapter describes how to verify for security, including the limitations of tools, the meaning of *static analysis* and *dynamic analysis*, and common types of tools such as security code scanners/static application security testing (SAST) tools, fuzzers, and web application scanners.
3704
-
3705
-
This chapter describes how to verify for security, including the limitations of tools, the meaning of *static analysis* and *dynamic analysis*, and common types of tools such as security code scanners/static application security testing (SAST) tools, fuzzers, and web application scanners.
3692
+
> 🎥 This chapter describes how to verify for security, including the limitations of tools, the meaning of *static analysis* and *dynamic analysis*, and common types of tools that can help improve security. These tool types include security code scanners aka static application security testing (SAST) tools, fuzzers, and web application scanners.
3706
3693
3707
3694
Learning objectives:
3708
3695
@@ -4115,9 +4102,7 @@ If you are using OSS, consider preferring OSS who have earned a badge. If you ar
4115
4102
4116
4103
# Threat Modeling
4117
4104
4118
-
> 🎥 This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4119
-
4120
-
This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4105
+
> 🎥 This chapter describes the basics of threat modeling, along with a specific threat modeling approach called STRIDE. The point of threat modeling is to try to *think like an attacker* when considering your software, including looking for threats and proactively countering them.
4121
4106
4122
4107
Learning objectives:
4123
4108
@@ -4225,9 +4210,7 @@ Threat modeling may be overkill if you do not have significant security threats,
4225
4210
4226
4211
# Cryptography
4227
4212
4228
-
> 🎥 This chapter describes the basics of how to use cryptography to help develop secure software, including the basics of symmetric/shared key encryption algorithms, cryptographic hashes, public-key (asymmetric) encryption, how to securely store passwords, cryptographically secure pseudo-random number generators (CSPRNG), and Transport Layer Security (TLS).
4229
-
4230
-
This chapter describes the basics of how to use cryptography to help develop secure software, including the basics of symmetric/shared key encryption algorithms, cryptographic hashes, public-key (asymmetric) encryption, how to securely store passwords, cryptographically secure pseudo-random number generators (CSPRNG), and Transport Layer Security (TLS).
4213
+
> 🎥 This chapter describes the basics of how to use cryptography to help develop secure software. Developing secure software involves a lot more than cryptography, but many secure systems depend vitally on cryptography, so to have secure systems we often need to know how to correctly use cryptography. We will cover the basics of symmetric/shared key encryption algorithms, cryptographic hashes, public-key (asymmetric) encryption, how to securely store passwords, cryptographically secure pseudo-random number generators (CSPRNG), and Transport Layer Security (TLS).
4231
4214
4232
4215
Learning objectives:
4233
4216
@@ -4652,8 +4635,6 @@ Similarly, seek advice from experts, and weigh that advice carefully. Errors in
4652
4635
4653
4636
> 🎥 This chapter describes topics on the fundamentals of developing secure software that have not been covered elsewhere, including handling vulnerability disclosures, assurance cases, the basics after development, formal methods, and top vulnerability lists.
4654
4637
4655
-
This chapter describes topics on the fundamentals of developing secure software that have not been covered elsewhere, including handling vulnerability disclosures, assurance cases, the basics after development, formal methods, and top vulnerability lists.
4656
-
4657
4638
Learning objectives:
4658
4639
4659
4640
1. Understand how to properly handle vulnerability disclosures.
0 commit comments