 |
Secure Coding in C and C++ View Larger Image | Robert C. Seacord Addison-Wesley, Paperback, Published September 2005, 352 pages, ISBN 0321335724 | List Price: $44.99 Our Price: $34.95 You Save: $10.04 (22% Off)
| | | Availability: Out-Of-Stock |
Read an excerpt:
Chapter 5: Integer Security
Excerpt provided courtesy of Addison-Wesley Professional. Copyright © Addison-Wesley. Written permission from the publisher is required for any use of this material.
|
Customer Reviews: 1 Average Customer Rating:      Write a Review and tell the world about this title! People who purchase this book frequently purchase: - Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd Edition; Scott Meyers, $38.95, 22% Off!
- Rootkits: Subverting the Windows Kernel; Greg Hoglund, et al, $34.50, 37% Off!
- Beyond the C++ Standard Library: An Introduction to Boost; Bjorn Karlsson, $42.95, 22% Off!
- 19 Deadly Sins of Software Security; Michael Howard, et al, $25.50, 39% Off!
Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:
"The security of information systems has not improved at a rate consistent
with the growth and sophistication of the attacks being made against them.
To address this problem, we must improve the underlying strategies and techniques
used to create our systems. Specifically, we must build security in from
the start, rather than append it as an afterthought. That's the point of
Secure Coding in C and C++. In careful detail, this book shows software
developers how to build high-quality systems that are less vulnerable to
costly and even catastrophic attack. It's a book that every developer should
read before the start of any serious project."
--Frank Abagnale, author, lecturer, and leading consultant on fraud prevention
and secure documents
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 nearly 18,000 vulnerability reports over
the past 10 years, the CERT/Coordination Center (CERT/CC) has determined
that a relatively small number of root causes account for most of them.
This book identifies and explains these causes and shows the steps that
can be taken to prevent exploitation. Moreover, this book encourages programmers
to adopt security best practices and develop a security mindset that can
help protect software from tomorrow's attacks, not just today's.
Drawing on the CERT/CC's reports and conclusions, Robert 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/C++ application
- Thwart buffer overflows and stack smashing 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: integer overflows, sign errors,
and truncation errors
- Correctly use formatted output functions without introducing format
string vulnerabilities
- Avoid I/O vulnerabilities, including race conditions
Secure Coding in C and C++ 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.
Preface
The CERT Coordination Center (CERT/CC) was formed by the Defense Advanced
Research Projects Agency (DARPA) in November 1988 in response to the Morris
worm incident, which brought ten percent of Internet systems to a halt in
November 1988. The CERT/CC is located in Pittsburgh, Pennsylvania, at the
Software Engineering Institute (SEI), a federally funded research and development
center sponsored by the U.S. Department of Defense.
The initial focus of the CERT/CC was incident response and analysis. Incidents
include successful attacks such as compromises and denial of service, as
well as attack attempts, probes, and scans. Since 1988, the CERT/CC has
received more than 22,665 hotline calls reporting computer security incidents
or requesting information, and has handled more than 319,992 computer security
incidents. The number of incidents reported each year continues to grow.
Responding to incidents, while necessary, is insufficient to secure the
Internet and interconnected information systems. Analysis indicates that
the majority of incidents are caused by trojans, social engineering, and
the exploitation of software vulnerabilities, including software defects,
design decisions, configuration decisions, and unexpected interactions between
systems. The CERT/CC monitors public sources of vulnerability information
and regularly receives reports of vulnerabilities. Since 1995, more than
16,726 vulnerabilities have been reported. When a report is received, the
CERT/CC analyzes the potential vulnerability and works with technology producers
to inform them of security deficiencies in their products and to facilitate
and track their response to those problems.
Similar to incident reports, vulnerability reports continue to grow at
an alarming rate. While managing vulnerabilities pushes the process upstream,
it is again insufficient to address the issues of Internet and information
system security. To address the growing number of both vulnerabilities and
incidents, it is increasingly apparent that the problem must be attacked
at the source by working to prevent the introduction of software vulnerabilities
during software development and ongoing maintenance. Analysis of existing
vulnerabilities indicates that a relatively small number of root causes
account for the majority of vulnerabilities. The goal of this book is
to educate developers about these root causes and the steps that can be
taken so that vulnerabilities are not introduced.
Audience
Secure Coding in C and C++ should be useful to anyone involved in
the development or maintenance of software in C and C++.
- For a C/C++ programmer, this book will teach you how to identify
common programming errors that result in software vulnerabilities, understand
how these errors are exploited, and implement a solution in a secure fashion.
- For a software project manager, this book identifies the risks
and consequences of software vulnerabilities to guide investments in developing
secure software.
- For a computer science student, this book will teach you programming
practices that will help you to avoid developing bad habits and enable
you to develop secure programs during your professional career.
- For a security analyst, this book provides a detailed description
of common vulnerabilities, identifies ways to detect these vulnerabilities,
and offers practical avoidance strategies.
Organization and Content
Secure Coding in C and C++ provides practical advice on secure practices
in C and C++ programming. Producing secure programs requires secure designs.
However, even the best designs can lead to insecure programs if developers
are unaware of the many security pitfalls inherent in C and C++ programming.
This book provides a detailed explanation of common programming errors in
C and C++ and describes how these errors can lead to code that is vulnerable
to exploitation. The book concentrates on security issues intrinsic to the
C and C++ programming languages and associated libraries. It does not emphasize
security issues involving interactions with external systems such as databases
and web servers, as these are rich topics on their own. The intent is that
this book be useful to anyone involved in developing secure C and C++ programs
regardless of the specific application.
Secure Coding in C and C++ is organized around functional capabilities
commonly implemented by software engineers that have potential security
consequences, such as formatted output and arithmetic operations. Each chapter
describes insecure programming practices and common errors that can lead
to vulnerabilities, how these programming flaws can be exploited, the potential
consequences of exploitation, and secure alternatives. Root causes of software
vulnerabilities, such as buffer overflows, integer type range errors, and
invalid format strings, are identified and explained where applicable. Strategies
for securely implementing functional capabilities are described in each
chapter, as well as techniques for discovering vulnerabilities in existing
code.
This book contains the following chapters:
- Chapter 1 provides an overview of the problem, introduces security
terms and concepts, and provides insight as to why so many vulnerabilities
are found in C and C++ programs.
- Chapter 2 describes string manipulation in C and C++, common
security flaws, and resulting vulnerabilities including buffer overflow
and stack smashing. Both code and arc injection exploits are examined.
- Chapter 3 introduces arbitrary memory write exploits that
allows an attacker to write a single address to any location in memory.
This chapter describes how these exploits can be used to execute arbitrary
code on a compromised machine. Vulnerabilities resulting from arbitrary
memory writes are discussed in later chapters.
- Chapter 4 describes dynamic memory management. Dynamically allocated
buffer overflows, writing to freed memory, and double-free vulnerabilities
are described.
- Chapter 5 covers integral security issues (security issues dealing
with integers) including integer overflows, sign errors, and truncation
errors.
- Chapter 6 describes the correct and incorrect use of formatted
output functions. Both format string and buffer overflows vulnerabilities
resulting from the incorrect use of these functions are described.
- Chapter 7 describes common vulnerabilities associated with file
I/O including race conditions and time of creation, time of use (TOCTOU)
vulnerabilities.
- Chapter 8 recommends specific development practices for improving
the overall security of your C / C++ application. These recommendations
are in addition to the recommendations included in each chapter for addressing
specific vulnerability classes.
Secure Coding in C and C++ contains hundreds of examples of secure
and insecure code as well as sample exploits. Almost all of these examples
are in C and C++, although comparisons are drawn with other languages. The
examples are implemented for Windows and Linux operating systems. Unless
otherwise stated, Microsoft Windows examples are compiled using Visual C++
.NET and tested on Windows 2000 Professional platform with an Intel Pentium
4 processor while Linux examples are compiled with GNU gcc/g++ and tested
running Red Hat Linux 9 on an Intel Pentium 4 processor.
While the specific examples have typically been compiled and tested in
one or more of these environments, vulnerabilities are evaluated to determine
whether they are specific to or generalizable across compiler version, operating
system, microprocessor, applicable C or C++ standards, little or big endian
architectures, and execution stack architecture.
This book focuses on programming flaws in C and C++ that are the most common
causes of software vulnerabilities. However, because of size and space constraints,
not every potential source of vulnerabilities is covered. Vulnerabilities
discussed in the book are also cross-referenced with real-world examples
from the US-CERT Vulnerability Notes Database at www.kb.cert.org/vuls/.
Table of Contents
Preface.
1. Running
with Scissors.
Gauging the Threat.
Security Concepts
C and C++.
Development Platforms.
Summary.
For Further Reading.
2. Strings.
String Characteristics.
Common String Manipulation Errors.
String Vulnerabilities.
Process Memory Organization.
Stack
Smashing.
Code Injection.
Arc Injection.
Mitigation Strategies.
Notable Vulnerabilities.
Summary.
For Further Reading.
3. Pointer
Subterfuge.
Data Locations.
Function Pointers.
Data Pointers.
Modifying the Instruction Pointer.
Global Offset Table.
The .dtors Section.
Virtual Pointers.
The atexit() and on_exit() Functions.
The longjmp() Function.
Exception Handling.
Mitigation Strategies.
Summary.
For Further Reading.
4. Dynamic
Memory Management.
Dynamic Memory Management.
Common Dynamic Memory Management Errors.
Doug Lea's Memory Allocator.
RtlHeap.
Mitigation Strategies.
Notable Vulnerabilities.
Summary.
For Further Reading.
5. Integer
Security.
Integers.
Integer Conversions.
Integer Error Conditions.
Integer Operations.
Vulnerabilities.
Non-Exceptional Integer Logic Errors.
Mitigation Strategies.
Notable Vulnerabilities.
Summary.
For Further Reading.
6. Formatted
Output.
Variadic Functions.
Formatted Output Functions.
Exploiting Formatted Output Functions.
Stack Randomization.
Mitigation Strategies.
Notable Vulnerabilities.
Summary.
For Further Reading.
7. File
I/O.
Concurrency.
Time of Check, Time of Use.
Files as Locks and File Locking.
File System Exploits.
Mitigation Strategies.
Summary.
8. Recommended
Practices.
Secure Software Development Principles.
Systems Quality Requirements Engineering.
Threat Modeling.
Use/Misuse Cases.
Architecture and Design.
Off-the-Shelf Software.
Compiler Checks.
Input Validation.
Data Sanitization.
Static Analysis.
Quality Assurance.
Memory Permissions.
Defense in Depth.
TSP-Secure.
Summary.
Further Reading.
References.
Acronyms.
Index.
About the Author
Robert C. Seacord is a senior technical staff member at the SEI.
He has over 17 years of development experience, including extensive work with
Enterprise JavaBeans, CORBA, and Web technologies. He has previously been a
technical staff member at the X Consortium and IBM.
Customer Reviews
Customer Reviews: 1 Average Customer Rating:      Dec 27, 2005     G. Wade Johnson from Houston, TX A must-read for C and C++ programmers One very real problem in software today is the rise in security exploits. A large number of those exploits are the result of a small number of programming mistakes. Unfortunately, most of us in software development have never been formally taught how to avoid security problem in our code.
In this book, Robert Seacord reviews several specific coding mistakes and dangerous practices that can lead directly to security problems in C and C++ code. In each chapter, he takes a particular class of programming practice and shows some of the security implications of errors in that area. Among other topics, he covers the security implications of C-style strings, integer overflow, and dynamic memory errors. He also shows ways to exploit these errors.
Each chapter explains the errors that may result in a security vulnerability, some of the implications, and suggests practices to reduce the risk of vulnerabilities. Although the presentation is sometimes a little dry, the material is pretty compelling if you develop software.
The most important chapter in the book is the final one, "Recommended Practices". If you have a background in computer security, many of the topics in this chapter will be familiar. Since most programmers do not have a security background, this chapter is a must-read. Unlike the rest of the book, this chapter covers overall strategy. It explains topics like the principle of least privilege, defense in depth, misuse cases, threat modeling, and many others.
If you develop software for use by anyone other than yourself, this book is definitely recommended. Even if you do not code in C and C++, the recommended practices are important.
|
 |