Book description
Many of the software books available clearly highlight the problems with current software development but don't provide comprehensive, easily actionable, ground-level solutions. Covering the entire secure software development life cycle that ties all development together, this book presents quality software development strategies and practices stressing resilience requirements with precise, actionable, and ground-level inputs that connect directly with their creators. The text helps developers understand fundamental problems and provides them with best practices, principles, design methodology, programming guidance, and testing practices.
Table of contents
- Preliminaries
- Preface
- About the Authors
- Acknowledgments
- Chapter 1 How Does Software Fail Thee? Let Us Count the Ways
-
Chapter 2 Characteristics of Secure and Resilient Software
- Chapter Overview
- 2.1 Functional Versus Nonfunctional Requirements
- 2.2 Testing Nonfunctional Requirements
- 2.3 Families of Nonfunctional Requirements
- 2.4 Availability
- 2.5 Capacity
- 2.6 Efficiency
- 2.7 Interoperability
- 2.8 Manageability
- 2.9 Cohesion
- 2.10 Coupling
- 2.11 Maintainability
- 2.12 Performance
- 2.13 Portability
- 2.14 Privacy
- 2.15 Recoverability
- 2.16 Reliability
- 2.17 Scalability
- 2.18 Security
- 2.19 Serviceability/Supportability
- 2.20 Characteristics of Good Requirements
- 2.21 Eliciting Nonfunctional Requirements
- 2.22 Documenting Nonfunctional Requirements
- Summary
- 2.23 References
- Chapter 3 Security and Resilience in the Software Development Life Cycle
-
Chapter 4 Proven Best Practices for Resilient Applications
- Chapter Overview
- 4.1 Critical Concepts
- 4.2 The Security Perimeter
- 4.3 Attack Surface
- 4.4 Application Security and Resilience Principles
- 4.5 Practice 1: Apply Defense in Depth
- 4.6 Practice 2: Use a Positive Security Model
- 4.7 Practice 3: Fail Securely
- 4.8 Practice 4: Run with Least Privilege
- 4.9 Practice 5: Avoid Security by Obscurity
- 4.10 Practice 6: Keep Security Simple
- 4.11 Practice 7: Detect Intrusions
- 4.12 Practice 8: Don’t Trust Infrastructure
- 4.13 Practice 9: Don’t Trust Services
- 4.14 Practice 10: Establish Secure Defaults
- 4.15 Mapping Best Practices to Nonfunctional Requirements
- Summary
- 4.16 References
- Chapter 5 Designing Applications for Security and Resilience
-
Chapter 6 Programming Best Practices
- Chapter Overview
- 6.1 The Evolution of Software Attacks
-
6.2 The OWASP Top 10
- 6.2.1 A1: Injection
- 6.2.2 A2: Cross-Site Scripting
- 6.2.3 A3: Broken Authentication and Session Management
- 6.2.4 A4: Insecure Direct Object References
- 6.2.5 A5: Cross-Site Request Forgery
- 6.2.6 A6: Security Misconfiguration
- 6.2.7 A7: Failure to Restrict URL Access
- 6.2.8 A8: Unvalidated Redirects and Forwards
- 6.2.9 A9: Insecure Cryptographic Storage
- 6.2.10 A10: Insufficient Transport Layer Protection
- 6.3 OWASP Enterprise Security API (ESAPI)
- 6.4 Cross-Site Scripting
- 6.5 Injection Attacks
- 6.6 Authentication and Session Management
- 6.7 Cross-Site Request Forgery
- 6.8 Session Management
- 6.9 Access Control
- 6.10 Cryptography
- 6.11 Error Handling
-
6.12 Ajax and Flash
- 6.12.1 AJAX Application Traffic
- 6.12.2 AJAX Client Requests
- 6.12.3 Server Responses
- 6.12.4 Typical Attacks Against AJAX Applications
- 6.12.5 Security Recommendations for AJAX Applications
- 6.12.6 Adobe Flash—Sandbox Security Model
- 6.12.7 Cross-Domain Policy
- 6.12.8 Restrict SWF Files Embedded in HTML
- 6.12.9 Attacking Flash Applications
- 6.12.10 Securing Flash Applications
- 6.13 Additional Best Practices for Software Resilience
- 6.14 Top 10 Secure Coding Practices
- 6.15 Fifty Questions to Improve Software Security
- Summary
- 6.16 References
- Chapter 7 Special Considerations for Embedded Systems, Cloud Computing, and Mobile Computing Devices
-
Chapter 8 Security Testing of Custom Software Applications
- Chapter Overview
- 8.1 Fixing Early Versus Fixing After Release
- 8.2 Testing Phases
- 8.3 Unit Testing
- 8.4 Manual Source Code Review
- 8.5 The Code Review Process
- 8.6 Automated Source Code Analysis
- 8.7 Acquiring Commercial or Open-Source Analysis Tools
- 8.8 Deployment Strategy
- 8.9 Regulatory Compliance
- 8.10 Benefits of Using Source Code Analyzers
- 8.11 Penetration (Pen) Testing
- Summary
- 8.12 References
- Chapter 9 Testing Commercial off-the-Shelf Systems
-
Chapter 10 Implementing Security and Resilience Using CLASP
- Chapter Overview
- 10.1 Comprehensive, Lightweight Application Security Process (CLASP)
- 10.2 CLASP Concepts
- 10.3 Overview of the CLASP Process
-
10.4 CLASP Key Best Practices
- 10.4.1 Best Practice 1: Institute Awareness Programs
- 10.4.2 Best Practice 2: Perform Application Assessments
- 10.4.3 Best Practice 3: Capture Security Requirements
- 10.4.4 Best Practice 4: Implement Secure Development Practices
- 10.4.5 Best Practice 5: Build Vulnerability Remediation Procedures
- 10.4.6 Best Practice 6: Define and Monitor Metrics
- 10.4.7 Best Practice 7: Publish Operational Security Guidelines
- 10.5 CLASP Security Activities to Augment Software Development Processes
- 10.6 Applying CLASP Security Activities to Roles
- 10.7 Re-engineering Your SDLC for CLASP
- 10.8 Sample CLASP Implementation Roadmaps
- Summary
- 10.9 References
-
Chapter 11 Metrics and Models for Security and Resilience Maturity
- Chapter Overview
- 11.1 Maturity Models for Security and Resilience
- 11.2 Software Assurance Maturity Model—OpenSAMM
- 11.3 The Building Security In Maturity Model (BSIMM)
-
11.4 BSIMM Activities
- 11.4.1 Governance: Strategy and Metrics
- 11.4.2 Governance: Compliance and Policy
- 11.4.3 Governance: Training
- 11.4.4 Intelligence: Attack Models
- 11.4.5 Intelligence: Security Features and Design
- 11.4.6 Intelligence: Standards and Requirements
- 11.4.7 SSDL Touchpoints : Architecture Analysis
- 11.4.8 SSDL Touchpoints: Code Review
- 11.4.9 SSDL Touchpoints: Security Testing
- 11.4.10 Deployment: Penetration Testing
- 11.4.11 Deployment: Software Environment
- 11.4.12 Deployment: Configuration Management and Vulnerability Management
- 11.5 Measuring Results with BSIMM
- 11.6 Helpful Resources For Implementing BSIMM
- 11.7 Applying BSIMM to the Financial Services Domain
- Summary
- 11.8 References
-
Chapter 12 Taking It to the Streets
- Chapter Overview
-
12.1 Getting Educated
- 12.1.1 DEVELOPER 522: Defending Web Applications
- 12.1.2 DEVELOPER 530: Essential Secure Coding in Java/JEE
- 12.1.3 DEVELOPER 541: Secure Coding in Java/JEE: Developing Defensible Applications
- 12.1.4 DEVELOPER 542: Web App Penetration Testing and Ethical Hacking
- 12.1.5 DEVELOPER 544: Secure Coding in .NET: Developing Defensible Applications
- 12.1.6 DEVELOPER 545: Secure Coding in PHP: Developing Defensible Applications
- 12.1.7 DEVELOPER 534: Secure Code Review for Java Web Apps
- 12.1.8 DEVELOPER 543: Secure Coding in C/C++: Developing Defensible Applications
- 12.1.9 Aspect Security Inc.
- 12.1.10 CERT Software Engineering Institute (SEI)
- 12.1.11 SEI Secure Coding in C and C++ Course
- 12.2 Getting Certified
-
12.3 Getting Involved
-
12.3.1 Web Application Security Consortium
- 12.3.1.1 How to Contribute to WASC
- 12.3.1.2 WASC Projects
- 12.3.1.3 Web Security Articles
- 12.3.1.4 The Web Hacking Incidents Database
- 12.3.1.5 Web Application Security Scanner Evaluation Criteria
- 12.3.1.6 The Script Mapping Project
- 12.3.1.7 Web Security Glossary
- 12.3.1.8 WASC Threat Classification v2
- 12.3.1.9 Web Application Firewall Evaluation Criteria
- 12.3.1.10 Web Application Security Statistics
-
12.3.1 Web Application Security Consortium
- 12.4 Reaching Out for Research
- 12.5 Last Call
- 12.6 Conclusion
- 12.7 References
- Glossary
-
Appendix A 2010 CWE/SANS Top 25 Most Dangerous Programming Errors
- Overview
- A.1 Brief Listing of the Top 25
-
A.2 Detailed CWE Descriptions
- A.2.1 CWE-79: Failure to Preserve Web Page Structure (“Cross-Site Scripting”)
- A.2.2 CWE-89: Improper Sanitization of Special Elements Used in an SQL Command (“SQL Injection”)
- A.2.3 CWE-120: Buffer Copy Without Checking Size of Input (“Classic Buffer Overflow”)
- A.2.4 CWE-352: Cross-Site Request Forgery (CSRF)
- A.2.5 CWE-285: Improper Access Control (Authorization)
- A.2.6 CWE-807: Reliance on Un-trusted Inputs in a Security Decision
- A.2.7 CWE-22: Improper Limitation of a Pathname to a Restricted Directory (“Path Traversal”)
- A.2.8 CWE-434: Unrestricted Upload of File with Dangerous Type
- A.2.9 CWE-78: Improper Sanitization of Special Elements Used in an OS Command (“OS Command Injection”)
- A.2.10 CWE-311: Missing Encryption of Sensitive Data
- A.2.11 CWE-798: Use of Hard-Coded Credentials
- A.2.12 CWE-805: Buffer Access with Incorrect Length Value
- A.2.13 CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program (“PHP File Inclusion”)
- A.2.14 CWE-129: Improper Validation of Array Index
- A.2.15 CWE-754: Improper Check for Unusual or Exceptional Conditions
- A.2.16 CWE-209: Information Exposure Through an Error Message
- A.2.17 CWE-190: Integer Overflow or Wraparound
- A.2.18 CWE-131: Incorrect Calculation of Buffer Size
- A.2.19 CWE-306: Missing Authentication for Critical Function
- A.2.20 CWE-494: Download of Code Without Integrity Check
- A.2.21 CWE-732: Incorrect Permission Assignment for Critical Resource
- A.2.22 CWE-770: Allocation of Resources Without Limits or Throttling
- A.2.23 CWE-601: URL Redirection to Site (“Open Redirect”)
- A.2.24 CWE-327: Use of a Broken or Risky Cryptographic Algorithm
- A.2.25 CWE-362: Race Condition
- Appendix B Enterprise Security API
Product information
- Title: Secure and Resilient Software Development
- Author(s):
- Release date: June 2010
- Publisher(s): Auerbach Publications
- ISBN: 9781498759618
You might also like
book
Secure and Resilient Software
Detailing a comprehensive set of requirements for secure and resilient software development and operation, this book …
book
Secure, Resilient, and Agile Software Development
This book is written with a contemporary view on securing all types of software development practices …
book
Secure by Design
Secure by Design teaches developers how to use design to drive security in software development. This …
book
Agile Application Security
Agile continues to be the most adopted software development methodology among organizations worldwide, but it generally …