did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

We're the #1 textbook rental company. Let us show you why.

9780321304865

The Art of Software Security Testing Identifying Software Security Flaws

by ; ; ;
  • ISBN13:

    9780321304865

  • ISBN10:

    0321304861

  • Edition: 1st
  • Format: Paperback
  • Copyright: 2006-11-17
  • Publisher: Addison-Wesley Professional

Note: Supplemental materials are not guaranteed with Rental or Used book purchases.

Purchase Benefits

  • Free Shipping Icon Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • eCampus.com Logo Get Rewarded for Ordering Your Textbooks! Enroll Now
  • Complimentary 7-Day eTextbook Access - Read more
    When you rent or buy this book, you will receive complimentary 7-day online access to the eTextbook version from your PC, Mac, tablet, or smartphone. Feature not included on Marketplace Items.
List Price: $59.99 Save up to $27.60
  • Rent Book $32.39
    Add to Cart Free Shipping Icon Free Shipping

    TERM
    PRICE
    DUE

    7-Day eTextbook Access 7-Day eTextbook Access

    USUALLY SHIPS IN 24-48 HOURS
    *This item is part of an exclusive publisher rental program and requires an additional convenience fee. This fee will be reflected in the shopping cart.

Supplemental Materials

What is included with this book?

Summary

Keep bugs to a minimum and track them down when they occur.

Author Biography

Chris Wysopal is CTO of Veracode Lucas Nelson is the technical manager for Symantec's New York region

Table of Contents

Forewordp. xiii
Prefacep. xvii
Acknowledgmentsp. xxix
About the Authorsp. xxxi
Introductionp. 2
Case Your Own Joint: A Paradigm Shift from Traditional Software Testingp. 3
Security Testing Versus Traditional Software Testingp. 5
SQL Injection Attack Patternp. 7
The Paradigm Shift of Security Testingp. 8
High-Level Security Testing Strategiesp. 9
The Fault Injection Model of Testing: Testers as Detectivesp. 9
Think Like an Attackerp. 11
Prioritizing Your Workp. 13
Take the Easy Road: Using Tools to Aid in the Detective Workp. 14
Learn from the Vulnerability Tree of Knowledgep. 15
Testing Recipe: Summaryp. 16
Endnotesp. 17
How Vulnerabilities Get into All Softwarep. 19
Design Versus Implementation Vulnerabilitiesp. 20
Common Secure Design Issuesp. 22
Poor Use of Cryptographyp. 22
Tracking Users and Their Permissionsp. 24
Flawed Input Validationp. 25
Weak Structural Securityp. 26
Other Design Flawsp. 28
Programming Language Implementation Issuesp. 29
Compiled Language: C/C++p. 30
Interpreted Languages: Shell Scripting and PHPp. 38
Virtual Machine Languages: Java and C#p. 42
Platform Implementation Issuesp. 44
Problem: Symbolic Linkingp. 44
Problem: Directory Traversalp. 45
Problem: Character Conversionsp. 46
Generic Application Security Implementation Issuesp. 47
SQL Injectionp. 47
Cross-Site Scriptingp. 48
Problems During the Development Processp. 49
Poorly Documented Security Requirements and Assumptionsp. 49
Poor Communication and Documentationp. 50
Lack of Security Processes During the Development Processp. 50
Weak Deploymentp. 51
Vulnerability Root Cause Taxonomyp. 52
Summary: Testing Notesp. 53
Endnotesp. 53
The Secure Software Development Lifecyclep. 55
Fitting Security Testing into the Software Development Lifecyclep. 56
Security Guidelines, Rules, and Regulationsp. 59
Security Requirements: Attack Use Casesp. 60
Sample Security Requirementsp. 62
Architectural and Design Reviews/Threat Modelingp. 63
Secure Coding Guidelinesp. 64
Black/Gray/White Box Testingp. 65
Determining Exploitabilityp. 65
Deploying Applications Securelyp. 66
Patch Management: Managing Vulnerabilitiesp. 66
Roles and Responsibilitiesp. 67
SSDL Relationship to System Development Lifecyclep. 68
Summaryp. 70
Endnotesp. 71
Risk-Based Security Testing: Prioritizing Security Testing with Threat Modelingp. 73
Information Gatheringp. 74
Meeting with the Architectsp. 74
Runtime Inspectionp. 75
Windows Platformp. 76
UNIX Footprintingp. 80
Finalizing Information Gatheringp. 82
The Modeling Processp. 83
Identifying Threat Pathsp. 83
Identifying Threatsp. 87
Identifying Vulnerabilitiesp. 88
Ranking the Risk Associated with a Vulnerabilityp. 89
Determining Exploitabilityp. 90
Endnotep. 91
Shades of Analysis: White, Gray, and Black Box Testingp. 93
White Box Testingp. 93
Black Box Testingp. 94
Gray Box Testingp. 95
Setting Up a Lab for Testingp. 96
Fuzzersp. 97
Sniffersp. 97
Debuggersp. 98
Hardwarep. 98
Commercial Testing Appliancesp. 98
Network Hardwarep. 99
Staging Application Attacksp. 99
Lab Environmentp. 99
Network Attacksp. 101
Endnotep. 104
Performing the Attacks
Generic Network Fault Injectionp. 107
Networksp. 107
Port Discoveryp. 108
netstat and Local Toolsp. 108
Port Scanningp. 112
Proxiesp. 113
The Simplest Proxy: Random TCP/UDP Fault Injectorp. 114
Building the Fault Injection Data Setp. 118
Man-in-the-Middle Proxiesp. 121
Conclusionp. 122
Summaryp. 123
Endnotesp. 123
Web Applications: Session Attacksp. 125
Targeting the Applicationp. 125
Authentication Versus Authorizationp. 126
Brute-Forcing Session and Resource IDsp. 127
Cookie Gatheringp. 131
Determining SID Strength: Phase Space Analysisp. 133
Cross-Site Scriptingp. 136
Conclusionp. 139
Summaryp. 139
Endnotep. 139
Web Applications: Common Issuesp. 141
Bypassing Authorizationp. 142
SQL Injectionp. 144
The Basicsp. 144
Database Schema Discoveryp. 149
Executing Commands on the SQL Serverp. 154
Uploading Executable Content (ASP/PHP/bat)p. 157
File Enumerationp. 159
Source Code Disclosure Vulnerabilitiesp. 162
Hidden Fields in HTTPp. 164
Conclusionp. 167
Summaryp. 168
Endnotesp. 168
Web Proxies: Using WebScarabp. 169
WebScarab Proxyp. 169
Conclusionp. 182
Summaryp. 182
Endnotesp. 183
Implementing a Custom Fuzz Utilityp. 185
Protocol Discoveryp. 185
SOAP and the WSDLp. 189
The SOAPpy Libraryp. 190
Conclusionp. 199
Summaryp. 199
Endnotesp. 199
Local Fault Injectionp. 201
Local Resources and Interprocess Communicationp. 201
Windows NT Objectsp. 202
UNIX set-user-id Processes and Interprocess Communicationp. 205
Threat-Modeling Local Applicationsp. 206
Enumerating Windows Application Resourcesp. 207
Enumerating UNIX Application Resourcesp. 207
Testing Scriptable ActiveX Object Interfacesp. 209
Identifying "Safe" Scriptable Objectsp. 211
Testing Object Interfacesp. 213
Manual Interface Testingp. 213
Automated ActiveX Interface Testingp. 215
Evaluating Crashesp. 216
Fuzzing File Formatsp. 216
File Corruption Testingp. 217
Automated File Corruptionp. 218
Command-Line Utility Fuzzingp. 219
Immunity ShareFuzzp. 219
Brute-Force Binary Testerp. 221
CLI Fuzzp. 221
Shared Memoryp. 225
Summaryp. 228
Endnotesp. 228
Analysis
Determining Exploitabilityp. 233
Classifying a Vulnerabilityp. 233
Timep. 234
Reliability/Reproducibilityp. 234
Accessp. 235
Positioningp. 236
Memory Trespass and Arbitrary Code Executionp. 237
Computer Architecturep. 238
The Stackp. 240
Stack Buffer Overflowsp. 240
The Heapp. 241
Determining Exploitabilityp. 244
Process Crash Dumpsp. 244
Controlled Memory and Registersp. 245
Mitigating Factors: Stack and Heap Protectionsp. 249
Further Resourcesp. 250
Indexp. 251
Table of Contents provided by Ingram. All Rights Reserved.

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Excerpts

Foreword and Preface Foreword Who can argue with testing things before you allow yourself to depend on them? No onecanargue. No onewillargue. Therefore, if testing is not done, the reasons have to be something other than a reasoned objection to testing. There seem to be exactly three: I can't afford it, I can get along without it, and I don't know how. Not being able to afford it--Allowing for economists to disagree over fine points, the cost of anything is the foregone alternative. If you do testing, what didn't you do? If it is to add yet another feature, perhaps you deserve congratulations on choosing a simpler product. Simpler products are in fact easier to test (and for good reason: the chief enemy of security is complexity, and nothing breeds complexity like creeping featuritis). If you didn't do testing, the usual reason given is to "get the product out on time." That reason is insufficient if not petulant. The sort of testing taught in this book is about the future even more than getting the product out on time is about the future. Only CEOs intoxicated on visions of wealth are immune to thinking about the future in ways that preclude testing. Testing is about controlling your future rather than allowing it to control you. Testing accelerates the inevitable future failure of products into the present. When William Gibson famously said, "The future is already here--it's just unevenly distributed," he wasn't thinking of testing as we mean it here. What you explicitly want is to unevenly distribute the future so that your product gets to see its future before your customers (and opponents) do. Since you are reading this paragraph, it's pretty likely you are of a testing frame of mind, so we'll drop the argument and move on. Getting along without it--Some products probably don't need much testing. They are not subject to innovation; they're nonperishable commodities, or something equally boring. That's not why we are here. We are here to protect security-sensitive products. Which products are those? A product is security-sensitive if, in its operation, it faces sentient opponents. If the only perils it faces are cluelessness ("Hey, watch this!") or random happenstance (alpha particles), the product may well not be security-sensitive. But with software and networks being as they are, nearly everything is security-sensitive because, if nothing else, every sociopath is your next-door neighbor. The burden of perfection is no longer on the criminal to commit the perfect crime but rather is on the defender to commit the perfect defense. Sure, you can get away with not testing, just as you can get away with never wearing protective gear while you band-saw aluminum, mountain-bike in Moab, or scrub down a P3 containment lab. There's always someone who has gotten away with that and more. That doesn't apply here. Why? Because the more successful and widespread your product is, the more those sociopaths, the more those sentient opponents, will adopt you as a special project. Just ask Microsoft. If you want to get widespread adoption, you will be tested. The only question is "Tested by whom?" Not knowing how--And so we come to the purpose of this book. You are ready, willing, and unable. Or you want to make sure that you're as up to date as your opponents. Or you need raw material for even more extreme sports than what is outlined here. You've come to a right place (there is no "the" right place). This is (let's be clear) a very right place. The authors are proven, and the techniques are current. Although techniques in security have the terrible beauty of never being "done," you won't

Rewards Program