Foreword |
|
ix | |
Preface |
|
xi | |
Acknowledgments |
|
xii | |
About this book |
|
xiv | |
About the author |
|
xvii | |
About the cover illustration |
|
xviii | |
|
Part 1 Defining application security |
|
|
1 | (96) |
|
1 Why do we need application security? |
|
|
3 | (26) |
|
1.1 The role of an application security program |
|
|
5 | (3) |
|
Software from concept to production |
|
|
6 | (1) |
|
Where does application security fit? |
|
|
7 | (1) |
|
1.2 The current state of application security |
|
|
8 | (1) |
|
1.3 Why building security in is challenging |
|
|
9 | (3) |
|
Trying to protect at runtime |
|
|
10 | (1) |
|
Getting output from tools is not enough |
|
|
11 | (1) |
|
Sifting signal from noise in security tools |
|
|
11 | (1) |
|
1.4 Shifting right vs. shifting left in development |
|
|
12 | (8) |
|
Shifting right in the development life cycle |
|
|
14 | (1) |
|
|
15 | (1) |
|
Shifting left in the development life cycle |
|
|
16 | (3) |
|
|
19 | (1) |
|
1.5 Is going left better than going right? |
|
|
20 | (2) |
|
1.6 Application security needs you! |
|
|
22 | (3) |
|
Democratizing application security |
|
|
23 | (1) |
|
|
24 | (1) |
|
1.7 Examples of failing to secure the software |
|
|
25 | (4) |
|
|
25 | (1) |
|
|
26 | (1) |
|
|
27 | (2) |
|
|
29 | (35) |
|
|
30 | (1) |
|
|
30 | (11) |
|
|
31 | (1) |
|
|
32 | (2) |
|
|
34 | (2) |
|
|
36 | (3) |
|
Encryption prior to transmission |
|
|
39 | (1) |
|
|
39 | (1) |
|
|
40 | (1) |
|
|
41 | (1) |
|
|
41 | (5) |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
44 | (1) |
|
Health organizations are still fair game |
|
|
44 | (1) |
|
|
45 | (1) |
|
|
46 | (5) |
|
Integrity starts with access |
|
|
47 | (1) |
|
The role of version control |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
49 | (1) |
|
|
50 | (1) |
|
2.5 Authentication and authorization |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
52 | (4) |
|
|
52 | (1) |
|
|
53 | (1) |
|
|
54 | (1) |
|
|
54 | (1) |
|
Advanced persistent threat |
|
|
55 | (1) |
|
|
55 | (1) |
|
|
56 | (8) |
|
Remediate, mitigate, accept |
|
|
57 | (1) |
|
|
58 | (1) |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
60 | (1) |
|
|
61 | (1) |
|
|
62 | (2) |
|
3 Components of application security |
|
|
64 | (33) |
|
|
65 | (10) |
|
Basic threat modeling terminology |
|
|
66 | (2) |
|
|
68 | (1) |
|
Starting the manual process |
|
|
69 | (1) |
|
Threat modeling with linking bank accounts |
|
|
70 | (2) |
|
What to do with the found threats |
|
|
72 | (1) |
|
Threat modeling using a tool |
|
|
73 | (2) |
|
3.2 Security analysis tools |
|
|
75 | (9) |
|
Static application security testing |
|
|
77 | (1) |
|
Tools in the development environment |
|
|
78 | (2) |
|
Dynamic application security testing |
|
|
80 | (2) |
|
Software composition analysis |
|
|
82 | (2) |
|
|
84 | (2) |
|
3.4 Run-time protection tools |
|
|
86 | (2) |
|
3.5 Vulnerability collection and prioritization |
|
|
88 | (2) |
|
Integrating with defect tracking |
|
|
88 | (1) |
|
Prioritizing vulnerabilities |
|
|
89 | (1) |
|
|
90 | (1) |
|
3.6 Bug bounty and vulnerability disclosure program |
|
|
90 | (3) |
|
Vulnerability disclosure program |
|
|
91 | (1) |
|
|
91 | (1) |
|
Third-party help with vulnerabilities |
|
|
92 | (1) |
|
|
93 | (4) |
|
Part 2 Developing the application security program |
|
|
97 | (86) |
|
|
99 | (28) |
|
|
100 | (2) |
|
|
101 | (1) |
|
4.2 DevOps isn't the only game in town |
|
|
102 | (10) |
|
|
102 | (2) |
|
|
104 | (2) |
|
|
106 | (2) |
|
DevOps supports security better |
|
|
108 | (2) |
|
|
110 | (2) |
|
4.3 Application security tooling in the pipeline |
|
|
112 | (13) |
|
Threat modeling in DevSecOps |
|
|
112 | (2) |
|
|
114 | (1) |
|
DAST and IAST in DevSecOps |
|
|
115 | (4) |
|
|
119 | (1) |
|
Run-time protection in DevSecOps |
|
|
120 | (2) |
|
|
122 | (2) |
|
|
124 | (1) |
|
|
125 | (2) |
|
5 Security belongs to everyone |
|
|
127 | (31) |
|
5.1 Security is everyone's problem |
|
|
128 | (4) |
|
Structure of an application security team |
|
|
129 | (1) |
|
Just hire more application security people |
|
|
130 | (2) |
|
|
132 | (1) |
|
|
132 | (6) |
|
|
133 | (2) |
|
Microlearning and just-in-time training |
|
|
135 | (2) |
|
It's more than just training |
|
|
137 | (1) |
|
5.3 Standards, requirements, and reference architecture |
|
|
138 | (7) |
|
Creating and driving standards |
|
|
139 | (3) |
|
Creating reference architecture |
|
|
142 | (2) |
|
Bringing requirements into the organization |
|
|
144 | (1) |
|
|
145 | (7) |
|
|
146 | (3) |
|
Building Security in Maturity Mode |
|
|
149 | (3) |
|
Addressing your security immaturity |
|
|
152 | (1) |
|
5.5 Decentralized application security |
|
|
152 | (6) |
|
Security champions program |
|
|
153 | (2) |
|
Leveraging the decentralized model |
|
|
155 | (3) |
|
6 Application security as a service |
|
|
158 | (25) |
|
6.1 Managing risk during development |
|
|
159 | (9) |
|
Defining and reducing risk |
|
|
160 | (1) |
|
Define the application risk |
|
|
160 | (3) |
|
|
163 | (5) |
|
6.2 Enablement instead of gates |
|
|
168 | (4) |
|
Automate the release-by-risk |
|
|
169 | (1) |
|
Removing the barriers by adding guardrails |
|
|
170 | (2) |
|
6.3 Bridging engineering and security through services |
|
|
172 | (11) |
|
The application security-as-a-service ecosystem |
|
|
173 | (3) |
|
Services requested through tickets |
|
|
176 | (3) |
|
Ambient application security |
|
|
179 | (4) |
|
Part 3 Deliver and measure |
|
|
183 | (80) |
|
|
185 | (30) |
|
7.1 Getting the current security posture |
|
|
186 | (9) |
|
|
186 | (2) |
|
|
188 | (3) |
|
What vulnerabilities do you have? |
|
|
191 | (2) |
|
What additional information is available? |
|
|
193 | (2) |
|
7.2 Understanding the organization's security goals |
|
|
195 | (2) |
|
|
195 | (1) |
|
The application security goals |
|
|
196 | (1) |
|
Aligning the business and security goals |
|
|
196 | (1) |
|
|
197 | (5) |
|
Finding the immediate gaps |
|
|
198 | (1) |
|
Input into the gap analysis |
|
|
199 | (2) |
|
What to do with the gap analysis |
|
|
201 | (1) |
|
7.4 Sample application security roadmap |
|
|
202 | (13) |
|
Secure engineering education |
|
|
203 | (2) |
|
Educating the application security team |
|
|
205 | (2) |
|
Application security tools roadmap |
|
|
207 | (2) |
|
Aligning engineering and security roadmaps |
|
|
209 | (1) |
|
|
210 | (5) |
|
|
215 | (25) |
|
|
216 | (8) |
|
Measuring the effectiveness of your tools |
|
|
217 | (1) |
|
Tuning the tools based on feedback |
|
|
217 | (3) |
|
Measuring the effectiveness of your processes |
|
|
220 | (1) |
|
Measuring the mean time to remediate |
|
|
221 | (1) |
|
Optimizing the mean time to remediate |
|
|
222 | (2) |
|
8.2 Gathering effectiveness with KPIs |
|
|
224 | (5) |
|
|
224 | (2) |
|
|
226 | (1) |
|
Driving change based on KPIs |
|
|
227 | (2) |
|
|
229 | (3) |
|
Getting feedback from conversations |
|
|
230 | (1) |
|
Getting feedback from surveys |
|
|
230 | (2) |
|
|
232 | (8) |
|
Preparing for the scorecard |
|
|
233 | (2) |
|
Weighting the scores for the scorecard |
|
|
235 | (1) |
|
|
236 | (4) |
|
9 Continuously improving the program |
|
|
240 | (23) |
|
9.1 Keeping ahead of the attacker |
|
|
241 | (4) |
|
|
242 | (2) |
|
|
244 | (1) |
|
|
245 | (5) |
|
Applying the OWASP Top Ten |
|
|
246 | (3) |
|
Applying the MITRE CWE Top 25 |
|
|
249 | (1) |
|
9.3 Staying ahead of engineering |
|
|
250 | (4) |
|
Keeping up with the coding languages |
|
|
251 | (1) |
|
Keeping up with the technology changes |
|
|
251 | (2) |
|
When hiring and training aren't enough |
|
|
253 | (1) |
|
9.4 Stop chasing the shiny new tool |
|
|
254 | (4) |
|
|
255 | (1) |
|
Managing the tool and vendor |
|
|
256 | (1) |
|
|
257 | (1) |
|
9.5 Preparing for the worst |
|
|
258 | (5) |
Appendix Answers to exercises |
|
263 | (6) |
Index |
|
269 | |