You are previewing Secure Coding in C and C++, Second Edition.
O'Reilly logo
Secure Coding in C and C++, Second Edition

Book Description

Learn the Root Causes of Software Vulnerabilities and How to Avoid Them

Commonly exploited software vulnerabilities are usually caused by avoidable software defects. Having analyzed tens of thousands of vulnerability reports since 1988, CERT has determined that a relatively small number of root causes account for most of the vulnerabilities.

Secure Coding in C and C++, Second Edition, identifies and explains these root causes and shows the steps that can be taken to prevent exploitation. Moreover, this book encourages programmers to adopt security best practices and to develop a security mindset that can help protect software from tomorrow’s attacks, not just today’s. Drawing on the CERT’s reports and conclusions, Robert C. Seacord systematically identifies the program errors most likely to lead to security breaches, shows how they can be exploited, reviews the potential consequences, and presents secure alternatives.

Coverage includes technical detail on how to

  • Improve the overall security of any C or C++ application

  • Thwart buffer overflows, stack-smashing, and return-oriented programming attacks that exploit insecure string manipulation logic

  • Avoid vulnerabilities and security flaws resulting from the incorrect use of dynamic memory management functions

  • Eliminate integer-related problems resulting from signed integer overflows, unsigned integer wrapping, and truncation errors

  • Perform secure I/O, avoiding file system vulnerabilities

  • Correctly use formatted output functions without introducing format-string vulnerabilities

  • Avoid race conditions and other exploitable vulnerabilities while developing concurrent code

  • The second edition features

  • Updates for C11 and C++11

  • Significant revisions to chapters on strings, dynamic memory management, and integer security

  • A new chapter on concurrency

  • Access to the online secure coding course offered through Carnegie Mellon’s Open Learning Initiative (OLI)

  • Secure Coding in C and C++, Second Edition, presents hundreds of examples of secure code, insecure code, and exploits, implemented for Windows and Linux. If you’re responsible for creating secure C or C++ software–or for keeping it safe–no other book offers you this much detailed, expert assistance.

    Table of Contents

    1. Title Page
    2. Copyright Page
    3. Dedication Page
    4. Contents
    5. Foreword
      1. About Secure Coding in C and C++
    6. Preface
      1. Audience
      2. Organization and Content
    7. Acknowledgments
    8. About the Author
    9. Chapter 1. Running with Scissors
      1. 1.1. Gauging the Threat
      2. 1.2. Security Concepts
      3. 1.3. C and C++
      4. 1.4. Development Platforms
      5. 1.5. Summary
      6. 1.6. Further Reading
    10. Chapter 2. Strings
      1. 2.1. Character Strings
      2. 2.2. Common String Manipulation Errors
      3. 2.3. String Vulnerabilities and Exploits
      4. 2.4. Mitigation Strategies for Strings
      5. 2.5. String-Handling Functions
      6. 2.6. Runtime Protection Strategies
      7. 2.7. Notable Vulnerabilities
      8. 2.8. Summary
      9. 2.9. Further Reading
    11. Chapter 3. Pointer Subterfuge
      1. 3.1. Data Locations
      2. 3.2. Function Pointers
      3. 3.3. Object Pointers
      4. 3.4. Modifying the Instruction Pointer
      5. 3.5. Global Offset Table
      6. 3.6. The .dtors Section
      7. 3.7. Virtual Pointers
      8. 3.8. The atexit() and on_exit() Functions
      9. 3.9. The longjmp() Function
      10. 3.10. Exception Handling
      11. 3.11. Mitigation Strategies
      12. 3.12. Summary
      13. 3.13. Further Reading
    12. Chapter 4. Dynamic Memory Management
      1. 4.1. C Memory Management
      2. 4.2. Common C Memory Management Errors
      3. 4.3. C++ Dynamic Memory Management
      4. 4.4. Common C++ Memory Management Errors
      5. 4.5. Memory Managers
      6. 4.6. Doug Lea’s Memory Allocator
      7. 4.7. Double-Free Vulnerabilities
      8. 4.8. Mitigation Strategies
      9. 4.9. Notable Vulnerabilities
      10. 4.10. Summary
    13. Chapter 5. Integer Security
      1. 5.1. Introduction to Integer Security
      2. 5.2. Integer Data Types
      3. 5.3. Integer Conversions
      4. 5.4. Integer Operations
      5. 5.5. Integer Vulnerabilities
      6. 5.6. Mitigation Strategies
      7. 5.7. Summary
    14. Chapter 6. Formatted Output
      1. 6.1. Variadic Functions
      2. 6.2. Formatted Output Functions
      3. 6.3. Exploiting Formatted Output Functions
      4. 6.4. Stack Randomization
      5. 6.5. Mitigation Strategies
      6. 6.6. Notable Vulnerabilities
      7. 6.7. Summary
      8. 6.8. Further Reading
    15. Chapter 7. Concurrency
      1. 7.1. Multithreading
      2. 7.2. Parallelism
      3. 7.3. Performance Goals
      4. 7.4. Common Errors
      5. 7.5. Mitigation Strategies
      6. 7.6. Mitigation Pitfalls
      7. 7.7. Notable Vulnerabilities
      8. 7.8. Summary
    16. Chapter 8. File I/O
      1. 8.1. File I/O Basics
      2. 8.2. File I/O Interfaces
      3. 8.3. Access Control
      4. 8.4. File Identification
      5. 8.5. Race Conditions
      6. 8.6. Mitigation Strategies
      7. 8.7. Summary
    17. Chapter 9. Recommended Practices
      1. 9.1. The Security Development Lifecycle
      2. 9.2. Security Training
      3. 9.3. Requirements
      4. 9.4. Design
      5. 9.5. Implementation
      6. 9.6. Verification
      7. 9.7. Summary
      8. 9.8. Further Reading
    18. References
    19. Acronyms
    20. Index
    21. Ad Page