Programming Books C Java PHP Python Learn more Browse Programming Books
The Art of Software Security Assessment and over one million other books are available for Amazon Kindle. Learn more
  • List Price: $74.99
  • Save: $49.24 (66%)
Rented from apex_media
To Rent, select Shipping State from options above
Due Date: Dec 21, 2014
FREE return shipping at the end of the semester. Access codes and supplements are not guaranteed with rentals.
Qty:1
  • List Price: $74.99
  • Save: $20.78 (28%)
In Stock.
Ships from and sold by Amazon.com.
Gift-wrap available.
Add to Cart
Trade in your item
Get a $18.97
Gift Card.
Have one to sell? Sell on Amazon
Flip to back Flip to front
Listen Playing... Paused   You're listening to a sample of the Audible audio edition.
Learn more
See all 2 images

The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities Paperback – November 30, 2006

ISBN-13: 978-0321444424 ISBN-10: 0321444426 Edition: 1st

Buy New
Price: $54.21
Rent
Price: $25.75
40 New from $48.00 35 Used from $37.92
Rent from Amazon Price New from Used from
eTextbook
"Please retry"
Paperback
"Please retry"
$25.75
$54.21
$48.00 $37.92

Free%20Two-Day%20Shipping%20for%20College%20Students%20with%20Amazon%20Student



Frequently Bought Together

The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities + The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws
Price for both: $83.95

Buy the selected items together

NO_CONTENT_IN_FEATURE

Shop the new tech.book(store)
New! Introducing the tech.book(store), a hub for Software Developers and Architects, Networking Administrators, TPMs, and other technology professionals to find highly-rated and highly-relevant career resources. Shop books on programming and big data, or read this week's blog posts by authors and thought-leaders in the tech industry. > Shop now

Product Details

  • Paperback: 1200 pages
  • Publisher: Addison-Wesley Professional; 1 edition (November 30, 2006)
  • Language: English
  • ISBN-10: 0321444426
  • ISBN-13: 978-0321444424
  • Product Dimensions: 9.1 x 7.1 x 2.4 inches
  • Shipping Weight: 4 pounds (View shipping rates and policies)
  • Average Customer Review: 4.9 out of 5 stars  See all reviews (21 customer reviews)
  • Amazon Best Sellers Rank: #85,099 in Books (See Top 100 in Books)

Editorial Reviews

About the Author

Mark Dowd is a principal security architect at McAfee, Inc. and an established expert in the field of application security. His professional experience includes several years as a senior researcher at Internet Security Systems (ISS) X-Force, and the discovery of a number of high-profile vulnerabilities in ubiquitous Internet software. He is responsible for identifying and helping to address critical flaws in Sendmail, Microsoft Exchange Server, OpenSSH, Internet Explorer, Mozilla (Firefox), Checkpoint VPN, and Microsoft’s SSL implementation. In addition to his research work, Mark presents at industry conferences, including Black Hat and RUXCON.

 

John McDonald is a senior consultant with Neohapsis, where he specializes in advanced application security assessment across a broad range of technologies and platforms. He has an established reputation in software security, including work in security architecture and vulnerability research for NAI (now McAfee), Data Protect GmbH, and Citibank. As a vulnerability researcher, John has identified and helped resolve numerous critical vulnerabilities, including issues in Solaris, BSD, Checkpoint FireWall-1, OpenSSL, and BIND.

 

Justin Schuh is a senior consultant with Neohapsis, where he leads the Application Security Practice. As a senior consultant and practice lead, he performs software security assessments across a range of systems, from embedded device firmware to distributed enterprise web applications. Prior to his employment with Neohapsis, Justin spent nearly a decade in computer security activities at the Department of Defense (DoD) and related agencies. His government service includes a role as a lead researcher with the National Security Agency (NSA) penetration testing team–the Red Team.

Excerpt. © Reprinted by permission. All rights reserved.

Preface

Preface

"If popular culture has taught us anything, it is that someday mankind must face and destroy the growing robot menace."

Daniel H. Wilson, How to Survive a Robot Uprising

The past several years have seen huge strides in computer security, particularly in the field of software vulnerabilities. It seems as though every stop at the bookstore introduces a new title on topics such as secure development or exploiting software.

Books that cover application security tend to do so from the perspective of software designers and developers and focus on techniques to prevent software vulnerabilities from occurring in applications. These techniques start with solid security design principles and threat modeling and carry all the way through to implementation best practices and defensive programming strategies. Although they serve as strong defensive foundations for application development, these resources tend to give little treatment to the nature of vulnerabilities; instead, they focus on how to avoid them. What's more, every development team can't start rebuilding a secure application from the ground up. Real people have to deal with huge existing codebases, in-place applications, and limited time and budget. Meanwhile, the secure coding mantra seems to be "If it smells bad, throw it out." That's certainly necessary in some cases, but often it's too expensive and time consuming to be reasonable. So you might turn your attention to penetration testing and ethical hacking instead. A wide range of information on this topic is available, and it's certainly useful for the acid test of a software system. However, even the most technically detailed resources have a strong focus on exploit development and little to no treatment on how to find vulnerabilities in the first place. This still leaves the hanging question of how to find issues in an existing application and how to get a reasonable degree of assurance that a piece of software is safe.

This problem is exactly the one faced by those in the field of professional software security assessment. People are growing more concerned with building and testing secure systems, but very few resources address the practice of finding vulnerabilities. After all, this process requires a deep technical understanding of some very complex issues and must include a systematic approach to analyzing an application. Without formally addressing how to find vulnerabilities, the software security industry has no way of establishing the quality of a software security assessment or training the next generation in the craft. We have written this book in the hope of answering these questions and to help bridge the gap between secure software development and practical post-implementation reviews. Although this book is aimed primarily at consultants and other security professionals, much of the material will have value to the rest of the IT community as well. Developers can gain insight into the subtleties and nuances of how languages and operating systems work and how those features can introduce vulnerabilities into an application that otherwise appears secure. Quality assurance (QA) personnel can use some of the guidelines in this book to ensure the integrity of in-house software and cut down on the likelihood of their applications being stung by a major vulnerability. Administrators can find helpful guidelines for evaluating the security impact of applications on their networks and use this knowledge to make better decisions about future deployments. Finally, hobbyists who are simply interested in learning more about how to assess applications will find this book an invaluable resource (we hope!) for getting started in application security review or advancing their current skill sets.

Prerequisites

The majority of this book has been targeted at a level that any moderately experienced developer should find approachable. This means you need to be fairly comfortable with at least one programming language, and ideally, you should be familiar with basic C/C++ programming. At several stages throughout the book, we use Intel assembly examples, but we have attempted to keep them to a minimum and translate them into approximate C code when possible. We have also put a lot of effort into making the material as platform neutral as possible, although we do cover platform specifics for the most common operating systems. When necessary, we have tried to include references to additional resources that provide background for material that can't be covered adequately in this book.

How to Use This Book

Before we discuss the use of this book, we need to introduce its basic structure. The book is divided into three different parts:

  • Part I: Introduction to Software Security Assessment (Chapters 1–4)—These chapters introduce the practice of code auditing and explain how it fits into the software development process. You learn about the function of design review, threat modeling, and operational review—tools that are useful for evaluating an application as a whole, and not just the code. Finally, you learn some generic high-level methods for performing a code review on any application, regardless of its function or size.
  • Part II: Software Vulnerabilities (Chapters 5–13)—These chapters shift the focus of the book toward practical implementation review and address how to find specific vulnerabilities in an application's codebase. Major software vulnerability classes are described, and you learn how to discover high-risk security flaws in an application. Numerous real-world examples of security vulnerabilities are given to help you get a feel for what software bugs look like in real code.
  • Part III: Software Vulnerabilities in Practice (Chapters 14–18)—The final portion of the book turns your attention toward practical uses of lessons learned from the earlier chapters. These chapters describe a number of common application classes and the types of bugs they tend to be vulnerable to. They also show you how to apply the technical knowledge gained from Part II to real-world applications. Specifically, you look at networking, firewalling technologies, and Web technologies. Each chapter in this section introduces the common frameworks and designs of each application class and identifies where flaws typically occur.

You'll get the most value if you read this book straight through at least once so that you can get a feel for the material. This approach is best because we have tried to use each section as an opportunity to highlight techniques and tools that help you in performing application assessments. In particular, you should pay attention to the sidebars and notes we use to sum up the more important concepts in a section.

Of course, busy schedules and impending deadlines can have a serious impact on your time. To that end, we want to lay out a few tracks of focus for different types of reviews. However, you should start with Part 1 (Chapters 1–4) because it establishes a foundation for the rest of the book. After that, you can branch out to the following chapters:

  • UNIX track (Chapters 5–10, 13)—This chapter track starts off by covering common software vulnerability classes, such as memory corruption, program control flow, and specially formatted data. Then UNIX-centered security problems that arise because of quirks in the various UNIX operating systems are addressed. Finally, this track ends with coverage of synchronization vulnerabilities common to most platforms.
  • Windows track (Chapters 5–8, 11–13)—This track starts off similarly to the UNIX track, by covering platform-neutral security problems. Then two chapters specifically address Windows APIs and their related vulnerabilities. Finally, this track finishes with coverage of common synchronization vulnerabilities.
  • Web track (Chapters 8, 13, 17, 18)—Web auditing requires understanding common security vulnerabilities as well as Web-based frameworks and languages. This track discusses the common vulnerability classes that pertain to Web-based languages, and then finishes off with the Web-specific chapters. Although the UNIX and Windows chapters aren't listed here, reading them might be necessary depending on the Web application's deployment environment.
  • Network application track (Chapters 5–8, 13, 16)—This sequence of chapters best addresses the types of vulnerabilities you're likely to encounter with network client/server applications. Notice that even though Chapter 16 is targeted at selected application protocols, it has a section for generic application protocol auditing methods. Like the previous track, UNIX or Windows chapters might also be relevant, depending on the deployment environment.
  • Network analysis track (Chapters 5–8, 13–16)—This track is aimed at analyzing network analysis applications, such as firewalls, IPSs, sniffers, routing software, and so on. Coverage includes standard vulnerability classes along with popular network-based technologies and the common vulnerabilities in these products. Again, the UNIX and Windows chapters would be a good addition to this track, if applicable.

© Copyright Pearson Education. All rights reserved.


More About the Authors

Discover books, learn about writers, read author blogs, and more.

Customer Reviews

4.9 out of 5 stars
5 star
18
4 star
3
3 star
0
2 star
0
1 star
0
See all 21 customer reviews
Much of it will be things you once knew and forgot.
Stephen Northcutt
Unlike many books with multiple authors, this is an extremely well put together book that flows naturally from chapter to chapter.
David Aitel
This book is The Bible for anyone in the security vulnerability research or security software engineering field.
Kris Hunt

Most Helpful Customer Reviews

31 of 31 people found the following review helpful By David Aitel on December 1, 2006
Format: Paperback
The temptation with a massive book, such as this one, is to use it as a reference. While no doubt valuable as a quick reference for people looking to know the exact problems with any given C API ("snprintf does what differently on Windows and Unix?"), this book is best read page by page. There are surprises sprinkled throughout. Vulnerable example code is taken from real software applications, such as OpenBSD 3.6, Netscape, and OpenSSH. Of course, more than just a collection of code with mistakes highlighted, this book has a powerful methodology, complete with "Desk-checking", "Scorecards" and other useful tricks.

This book is not about binary analysis; assembly language is used only to demonstrate tricky C code.

Unlike many books with multiple authors, this is an extremely well put together book that flows naturally from chapter to chapter. The chapters on C auditing are amazing. The chapters on web assessment, while not the most in-depth chapters in the book, still contain a lot of information that is covered nowhere else (servlet race conditions, for example).

In fact, almost everything in this book is, if not new, covered more expertly than anywhere I've seen. For anyone doing software security assessment, this book is required reading. All 1200 pages of it.

Score: 5/5
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
21 of 22 people found the following review helpful By Michael Schuerig on November 29, 2008
Format: Paperback
This book was like a blow to the head for me. I'm not a security person, I'm not coveting ever more arcane vulnerabilities. Rather, I'm the poor guy at the other end of things: I'm a programmer. It's my job to avoid all the known and imaginable vulnerabilities while at the same time providing some useful functionality to my customers.

You bet I wouldn't like some self-styled security "researcher" tear apart my poor little programs and expose all their failings. What's troubling me, after reading this book, is that it looks very much like I hardly stand a chance. Security would be hard with the best of tools, unfortunately, at least when it comes to systems programming, the tools -- C, low-level APIs -- are dubious at best and introduce lots and lots of problems of their own. These tools hail from a happier time long ago when we were still trusting trust. I was overcome by a mixture of horror and chagrin when I saw proof in this book that not even the people writing sensitive security software (such as OpenSSH) wield these tools artfully enough to avoid vulnerabilities.

And this is where I come to the only beef I have with an otherwise comprehensive book. It's like a field guide to dangerous beasts that teaches you to recognize sabre-toothed tigers, but doesn't tell you how to get rid of them. Contrary to what the subtitle promises about preventing software vulnerabilities, there is just too little about it. This is a considerable shortcoming, in my view, as a lot of the demonstrated vulnerabilities don't have trivial remedies even after they are exposed.

Wrapping up, I feel left alone in the twilight and I think I saw a tiger over there.
2 Comments Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
15 of 16 people found the following review helpful By David Maynor on December 6, 2006
Format: Paperback
As a security researcher it is often hard to recommend books to people. A lot of the things you know come from actually doing it and I find it hard to explain to people the how and the why of what I do. That problem is now solved with the publication of the Art of Software Security Assessment. The book was written by 3 people very familiar with the problems of software security and even more so 3 people who actually know what they are talking about when it comes to what a bug hunter looks for in bad code. Out of all the chapters I have read I have to be honest and say the chapter on Windows IPC (Chapter 12) is worth the price of admission alone. It describes Windows messaging and mailslots to a degree I have never seen publicly explained before but the crown jewel is the in-depth and concise explanation of the Windows implementation of RPC. A lot of the major worms you have heard of, like Blaster and Zotob are based on RPC exploits. One of the challenges for developers and security professionals alike is that RPC is generally very blackbox, meaning a developer uses a few functions to communicate but never really knows what's going on under the hood. This book solves the problem by explaining all the concepts and how to look for bad code.

I can not recommend this book enough if you are serious about security.
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
14 of 15 people found the following review helpful By Stephen Northcutt on December 18, 2006
Format: Paperback
This should have been the third book in line to be reviewed, but as I leafed through it, once, twice, and a third time I started to realize this is one of those rare security books that has a chance to revolutionize the industry like Applied Cryptography, Snort 2.0, or Hacking Exposed. The longer you wait to read this book, the further you will fall behind. Nuff said?

Every week that goes by we see an increasing understanding in the community about how important secure software is and that it takes the appropriate development process to create secure software. This book is hitting the marketplace at the perfect time, I hope the authors and publishing team have a runaway success, you deserve it. I also hope people will be encouraged by this book, secure software development is certainly possible, this book clearly shows that. It takes management support in terms of resources, training and good process, but it can certainly be done.

At 1128 content pages, much of this material will be things that you have picked up in other places, such as other books or courses you have taken. Much of it will be things you once knew and forgot. But this is the most complete book on software security out there covering Windows, Unix, Network Protocols, Web and other Applications.

What I particularly love is the how approachable the majority of the information is. Please do not get me wrong, if you have never written a line of code you are going to be lost during the code examples, the only signpost you get is the occasional bolded line, but you will still be able to clearly follow the discussion before the code example and right after the code example.

Section 1 of the book is called an Introduction to Software Security Assessment.
Read more ›
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again

Customer Images

Most Recent Customer Reviews

Search