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
Copy file name to clipboardExpand all lines: secure_software_development_fundamentals.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -172,7 +172,7 @@ Choose the material that will provide you with the information you want to learn
172
172
173
173
With that, let’s begin.
174
174
175
-
# 1. Security Basics
175
+
# Security Basics
176
176
177
177
This chapter provides a high-level overview about security, including definitions of security and privacy, requirements, and risk management.
178
178
@@ -756,7 +756,7 @@ Identifying common kinds of vulnerabilities has another advantage, too: It will
756
756
757
757
(x) Avoiding common kinds of vulnerabilities is not enough by itself to make software secure, but it can be a significant help.
758
758
759
-
# 2. Design
759
+
# Design
760
760
761
761
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.
762
762
@@ -1100,7 +1100,7 @@ A good example of this is the Content Security Policy (CSP) supported by modern
1100
1100
1101
1101
[ ] Include control (including programs) with data, so that how to manipulate the data is easily provided with the code. {{ selected: That can be useful, but it is also dangerous from a security point of view. If an attacker manages to slip in “extra” information into data, this design can make it easy to cause a potentially-malicious program to be executed. Sometimes it is important to do this anyway, but it does create more complications when developing secure software. }}
1102
1102
1103
-
# 3. Reusing External Software
1103
+
# Reusing External Software
1104
1104
1105
1105
This chapter describes how to reuse software with security in mind, including selecting, downloading, installing, and updating such software.
1106
1106
@@ -1304,13 +1304,13 @@ This is false. Sure, there are risks when reusing software, but there are risks
1304
1304
1305
1305
[Explanation]
1306
1306
1307
-
# Part I Final Exam
1307
+
# Part I: Final Exam
1308
1308
1309
1309
* Not included as part of the free version of the course.
1310
1310
1311
1311
# Part II: Implementation
1312
1312
1313
-
# 1. Basics of Implementation
1313
+
# Basics of Implementation
1314
1314
1315
1315
### Implementation Overview
1316
1316
@@ -1939,7 +1939,7 @@ Note that if you force attackers to make many requests (e.g., via paging), the a
1939
1939
1940
1940
Rate limiting is not a complete solution, but it is an easy and inexpensive approach that increases the costs and efforts for attackers.
1941
1941
1942
-
# 2. Processing Data Securely
1942
+
# Processing Data Securely
1943
1943
1944
1944
This chapter describes how to process data within software 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.
1945
1945
@@ -2295,7 +2295,7 @@ No. The range of possible values varies by language and types used, but attacker
2295
2295
[Explanation]
2296
2296
2297
2297
2298
-
# 3. Calling Other Programs
2298
+
# Calling Other Programs
2299
2299
2300
2300
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.
2301
2301
@@ -3063,7 +3063,7 @@ Make sure that you have backups of important datasets and a workable recovery pr
3063
3063
3064
3064
[ ] None of the above
3065
3065
3066
-
# 4. Sending Output
3066
+
# Sending Output
3067
3067
3068
3068
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.
3069
3069
@@ -3658,13 +3658,13 @@ If you need to counter these kinds of attacks, beyond what is required for crypt
3658
3658
3659
3659
Thankfully, other than attacks on cryptographic systems, side-channel attacks are less common today. Most developers need to focus on the other issues discussed in this course, and only then (in more specialized circumstances) do they need to worry about side-channel attacks. Attackers will typically not bother trying to implement a side-channel attack if the software is riddled with easier-to-find vulnerabilities such as XSS and buffer overflows.
3660
3660
3661
-
# Part II Final Exam
3661
+
# Part II: Final Exam
3662
3662
3663
3663
* Not included as part of the free version of the course.
3664
3664
3665
3665
# PART III: Verification and More Specialized Topics
3666
3666
3667
-
# 1. Verification
3667
+
# Verification
3668
3668
3669
3669
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.
3670
3670
@@ -4077,7 +4077,7 @@ If you are using OSS, consider preferring OSS who have earned a badge. If you ar
4077
4077
4078
4078
[ ] None of the above
4079
4079
4080
-
# 2. Threat Modeling
4080
+
# Threat Modeling
4081
4081
4082
4082
This chapter describes the basics of threat modeling along with a specific threat modeling approach called STRIDE.
4083
4083
@@ -4185,7 +4185,7 @@ Threat modeling may be overkill if you do not have significant security threats,
4185
4185
4186
4186
[ ] The point of STRIDE is to examine each design element to see if there as a threat of information disclosure or tampering with data. {{ selected: No, that is only part of the story. Yes, you should consider information disclosure (violating confidentiality) and tampering with data (violating integrity). But those are just the “I” and “T” of STRIDE. You should also consider spoofing of identity, repudiation, denial of service, and elevation of privilege. }}
4187
4187
4188
-
# 3. Cryptography
4188
+
# Cryptography
4189
4189
4190
4190
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).
4191
4191
@@ -4605,7 +4605,7 @@ Similarly, seek advice from experts, and weigh that advice carefully. Errors in
4605
4605
4606
4606
[ ] If powerful “general-purpose” quantum computers are developed, they will render all encryption algorithms useless. {{ selected: No. Such computers will render useless common *public-key* algorithms that are popular in 2020. However, while they will halve the effective bit length of symmetric encryption algorithms, they will not render them useless; a 256-bit key for a symmetric encryption algorithm will effectively become a 128-bit key, which is still adequately secure for most purposes. In addition, new public-key algorithms are being developed that resist attacks from such quantum computers. }}
4607
4607
4608
-
# 4. Other Topics
4608
+
# Other Topics
4609
4609
4610
4610
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.
4611
4611
@@ -5568,7 +5568,7 @@ As you develop your software:
5568
5568
5569
5569
In real life security is a process - a journey - and not a simple endpoint. We hope that this course has made you far more prepared to take this journey. We wish you the best as you develop software that will help protect people’s reputation, property, and even lives.
5570
5570
5571
-
# Part III Final Exam
5571
+
# Part III: Final Exam
5572
5572
5573
5573
* Not included as part of the free version of the course.
0 commit comments