Book description
"What makes this book so important is that it reflects the experiences of two of the industry's most experienced hands at getting real-world engineers to understand just what they're being asked for when they're asked to write secure code. The book reflects Michael Howard's and David LeBlanc's experience in the trenches working with developers years after code was long since shipped, informing them of problems." --From the Foreword by Dan Kaminsky, Director of Penetration Testing, IOActive
Eradicate the Most Notorious Insecure Designs and Coding Vulnerabilities
Fully updated to cover the latest security issues, 24 Deadly Sins of Software Security reveals the most common design and coding errors and explains how to fix each one-or better yet, avoid them from the start. Michael Howard and David LeBlanc, who teach Microsoft employees and the world how to secure code, have partnered again with John Viega, who uncovered the original 19 deadly programming sins. They have completely revised the book to address the most recent vulnerabilities and have added five brand-new sins. This practical guide covers all platforms, languages, and types of applications. Eliminate these security flaws from your code:
- SQL injection
- Web server- and client-related vulnerabilities
- Use of magic URLs, predictable cookies, and hidden form fields
- Buffer overruns
- Format string problems
- Integer overflows
- C++ catastrophes
- Insecure exception handling
- Command injection
- Failure to handle errors
- Information leakage
- Race conditions
- Poor usability
- Not updating easily
- Executing code with too much privilege
- Failure to protect stored data
- Insecure mobile code
- Use of weak password-based systems
- Weak random numbers
- Using cryptography incorrectly
- Failing to protect network traffic
- Improper use of PKI
- Trusting network name resolution
Table of contents
- Cover Page
- 24 Deadly Sins Of Software Security
- Copyright Page
- Contents
- Foreword
- Acknowledgments
- Introduction
-
Part I Web Application Sins
- 1 SQL Injection
-
2 Web Server–Related Vulnerabilities (XSS, XSRF, and Response Splitting)
- Overview of the Sin
- CWE References
- Affected Languages
-
The Sin Explained
- DOM-Based XSS or Type 0
- Reflected XSS, Nonpersistent XSS, or Type 1
- Stored XSS, Persistent XSS, or Type 2
- HTTP Response Splitting
- Cross-Site Request Forgery
- Sinful Ruby on Rails (XSS)
- Sinful Ruby on Rails (Response Splitting)
- Sinful CGI Application in Python (XSS)
- Sinful CGI Application in Python (Response Splitting)
- Sinful ColdFusion (XSS)
- Sinful ColdFusion (XSS)
- Sinful C/C++ ISAPI (XSS)
- Sinful C/C++ ISAPI (Response Splitting)
- Sinful ASP (XSS)
- Sinful ASP (Response Splitting)
- Sinful ASP.NET Forms (XSS)
- Sinful ASP.NET (Response Splitting)
- Sinful JSP (XSS)
- Sinful JSP (Response Splitting)
- Sinful PHP (XSS)
- Sinful PHP (Response Splitting)
- Sinful CGI Using Perl (XSS)
- Sinful mod_perl (XSS)
- Sinful mod_perl (Response Splitting)
- Sinful HTTP Requests (XSRF)
- Spotting the Sin Pattern
- Spotting the XSS Sin During Code Review
- Testing Techniques to Find the Sin
- Example Sins
- Redemption Steps (XSS and Response Splitting)
- Redemption Steps (XSRF)
- Extra Defensive Measures
- Other Resources
- Summary
- 3 Web Client–Related Vulnerabilities (XSS)
- 4 Use of Magic URLs, Predictable Cookies, and Hidden Form Fields
-
Part II Implementation Sins
- 5 Buffer Overruns
- 6 Format String Problems
- 7 Integer Overflows
- 8 C++ Catastrophes
- 9 Catching Exceptions
- 10 Command Injection
- 11 Failure to Handle Errors Correctly
- 12 Information Leakage
- 13 Race Conditions
- 14 Poor Usability
-
15 Not Updating Easily
- Overview of the Sin
- CWE References
- Affected Languages
-
The Sin Explained
- Sinful Installation of Additional Software
- Sinful Access Controls
- Sinful Prompt Fatigue
- Sinful Ignorance
- Sinfully Updating Without Notifying
- Sinfully Updating One System at a Time
- Sinfully Forcing a Reboot
- Sinfully Difficult Patching
- Sinful Lack of a Recovery Plan
- Sinfully Trusting DNS
- Sinfully Trusting the Patch Server
- Sinful Update Signing
- Sinful Update Unpacking
- Sinful User Application Updating
- Spotting the Sin Pattern
- Spotting the Sin During Code Review
- Testing Techniques to Find the Sin
- Example Sins
-
Redemption Steps
- Installation of Additional Software Redemption
- Access Control Redemption
- Prompt Fatigue Redemption
- User Ignorance Redemption
- Updating Without Notifying Redemption
- Updating One System at a Time Redemption
- Forcing a Reboot Redemption
- Difficult Patching Redemption
- Lack of a Recovery Plan Redemption
- Trusting DNS Redemption
- Trusting the Patch Server Redemption
- Update Signing Redemption
- Update Unpacking Redemption
- User Application Updating Redemption
- Extra Defensive Measures
- Other Resources
- Summary
- 16 Executing Code with Too Much Privilege
- 17 Failure to Protect Stored Data
- 18 The Sins of Mobile Code
-
Part III Cryptographic Sins
-
19 Use of Weak Password-Based Systems
- Overview of the Sin
- CWE References
- Affected Languages
-
The Sin Explained
- Password Compromise
- Allowing Weak Passwords
- Password Iteration
- Not Requiring Password Changes
- Default Passwords
- Replay Attacks
- Storing Passwords Instead of Password Verifiers
- Brute-Force Attacks Against Password Verifiers
- Revealing Whether a Failure Is Due to an Incorrect User or Password
- Online Attacks
- Returning a Forgotten Password
- Related Sins
- Spotting the Sin Pattern
- Spotting the Sin During Code Review
- Testing Techniques to Find the Sin
- Example Sins
- Redemption Steps
- Extra Defensive Measures
- Other Resources
- Summary
- 20 Weak Random Numbers
-
21 Using Cryptography Incorrectly
- Overview of the Sin
- CWE References
- Affected Languages
-
The Sin Explained
- Using Home-Grown Cryptography
- Creating a Protocol from Low-Level Algorithms When a High-Level Protocol Will Do
- Using a Weak Cryptographic Primitive
- Using a Cryptographic Primitive Incorrectly
- Using the Wrong Cryptographic Primitive
- Using the Wrong Communication Protocol
- Failing to Use Salt
- Failing to Use a Random IV
- Using a Weak Key Derivation Function
- Failure to Provide an Integrity Check
- Failure to Use Agile Encryption
- Related Sins
- Spotting the Sin Pattern
-
Spotting the Sin During Code Review
- Using Home-Grown Cryptography (VB.NET and C++)
- Creating a Protocol from Low-Level Algorithms When a High-Level Protocol Will Do
- Using a Weak Cryptographic Primitive (C# and C++)
- Using a Cryptographic Primitive Incorrectly (Ruby, C#, and C++)
- Using the Wrong Cryptographic Primitive
- Using the Wrong Communication Protocol
- Testing Techniques to Find the Sin
- Example Sins
-
Redemption Steps
- Using Home-Grown Cryptography Redemption
- Creating a Protocol from Low-Level Algorithms When a High-Level Protocol Will Do Redemption
- Using a Weak Cryptographic Primitive Redemption
- Using a Cryptographic Primitive Incorrectly Redemption
- Using the Wrong Cryptographic Primitive Redemption
- Failing to Use Salt Redemption
- Failing to Use a Random IV Redemption
- Using a Weak Key Derivation Function Redemption
- Failure to Provide an Integrity Check Redemption
- Failure to Use Agile Encryption Redemption
- Using the Wrong Communication Protocol Redemption
- Extra Defensive Measures
- Other Resources
- Summary
-
19 Use of Weak Password-Based Systems
-
Part IV Networking Sins
- 22 Failing to Protect Network Traffic
- 23 Improper Use of PKI, Especially SSL
- 24 Trusting Network Name Resolution
- Index
Product information
- Title: 24 Deadly Sins of Software Security: Programming Flaws and How to Fix Them
- Author(s):
- Release date: September 2009
- Publisher(s): McGraw-Hill
- ISBN: 9780071626767
You might also like
book
The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities
“There are a number of secure programming books on the market, but none that go as …
book
Designing Secure Software
Designing Secure Software consolidates Loren Kohnfelder's more than twenty years of experience into a concise, elegant …
book
97 Things Every Information Security Professional Should Know
Whether you're searching for new or additional opportunities, information security can be vast and overwhelming. In …
book
Secure Coding: Principles and Practices
Practically every day, we read about a new type of attack on computer systems and networks. …