- •Exploiting Software How to Break Code
- •Table of Contents
- •Copyright
- •Praise for Exploiting Software
- •Attack Patterns
- •Foreword
- •Preface
- •What This Book Is About
- •How to Use This Book
- •But Isn't This Too Dangerous?
- •Acknowledgments
- •Greg's Acknowledgments
- •Gary's Acknowledgments
- •Bad Software Is Ubiquitous
- •The Trinity of Trouble
- •The Future of Software
- •What Is Software Security?
- •Conclusion
- •Chapter 2. Attack Patterns
- •A Taxonomy
- •An Open-Systems View
- •Tour of an Exploit
- •Attack Patterns: Blueprints for Disaster
- •An Example Exploit: Microsoft's Broken C++ Compiler
- •Applying Attack Patterns
- •Attack Pattern Boxes
- •Conclusion
- •Into the House of Logic
- •Should Reverse Engineering Be Illegal?
- •Reverse Engineering Tools and Concepts
- •Approaches to Reverse Engineering
- •Methods of the Reverser
- •Writing Interactive Disassembler (IDA) Plugins
- •Decompiling and Disassembling Software
- •Decompilation in Practice: Reversing helpctr.exe
- •Automatic, Bulk Auditing for Vulnerabilities
- •Writing Your Own Cracking Tools
- •Building a Basic Code Coverage Tool
- •Conclusion
- •Chapter 4. Exploiting Server Software
- •The Trusted Input Problem
- •The Privilege Escalation Problem
- •Finding Injection Points
- •Input Path Tracing
- •Exploiting Trust through Configuration
- •Specific Techniques and Attacks for Server Software
- •Conclusion
- •Chapter 5. Exploiting Client Software
- •Client-side Programs as Attack Targets
- •In-band Signals
- •Cross-site Scripting (XSS)
- •Client Scripts and Malicious Code
- •Content-Based Attacks
- •Conclusion
- •Chapter 6. Crafting (Malicious) Input
- •The Defender's Dilemma
- •Intrusion Detection (Not)
- •Partition Analysis
- •Tracing Code
- •Reversing Parser Code
- •Misclassification
- •Audit Poisoning
- •Conclusion
- •Chapter 7. Buffer Overflow
- •Buffer Overflow 101
- •Injection Vectors: Input Rides Again
- •Buffer Overflows and Embedded Systems
- •Database Buffer Overflows
- •Buffer Overflows and Java?!
- •Content-Based Buffer Overflow
- •Audit Truncation and Filters with Buffer Overflow
- •Causing Overflow with Environment Variables
- •The Multiple Operation Problem
- •Finding Potential Buffer Overflows
- •Stack Overflow
- •Arithmetic Errors in Memory Management
- •Format String Vulnerabilities
- •Heap Overflows
- •Buffer Overflows and C++
- •Payloads
- •Payloads on RISC Architectures
- •Multiplatform Payloads
- •Prolog/Epilog Code to Protect Functions
- •Conclusion
- •Chapter 8. Rootkits
- •Subversive Programs
- •A Simple Windows XP Kernel Rootkit
- •Call Hooking
- •Trojan Executable Redirection
- •Hiding Files and Directories
- •Patching Binary Code
- •The Hardware Virus
- •Low-Level Disk Access
- •Adding Network Support to a Driver
- •Interrupts
- •Key Logging
- •Advanced Rootkit Topics
- •Conclusion
- •References
- •Index
An Open-Systems View
Building a taxonomy of software vulnerabilities is not a new idea. However, the few published approaches are outdated, and in general they fail to take a systemwide view of the problem. The tradition of building fault taxonomies often attempts to separate coding faults and
• |
Table of Contents |
|
|
"emergent faults" (those related to configuration and so forth), and treat them as separate, |
|||
• |
Index |
[6] |
The problem is that software risk can only be |
independent problems [Krusl, 1998]. |
|
ExploitingmeasuredSoftwareand assessedHow to Brrelativeak Codeto a particular environment. This is because, in some cases,
a potentially fatal attack ultimately poses no risk if the firewall successfully blocks it.
ByGreg Hoglund,Gary McGraw
Although a given piece of target software may itself be exploitable, the surrounding environment may protect it from harm (if a firewall gets lucky or an intrusion detection system catches an attack before any damage is done). Software is always part of a larger
system of connected hardware, language technologies, and protocols. The environment issue
ISBN: 0-201-78695-8
is a double-edge sword, however, because many times the environment has a negative
Pages: 512
impact on software risk.
[6] The 1978 Protection Analysis study (called PA) and the 1976 RISOS study are early attempts at
vulnerability classification.
The concept of "open systems" was first introduced in thermodynamics by von Bertalanffy.[7]
How does software break? How do attackers make software break on purpose? Why are The fundamental concept is that almost every technical system exists as a part of a larger
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? whole, and all the components are in a state of constant interaction. As a result, risk analysis
What tools can be used to break software? This book provides the answers.
has evolved to consider the system at many levels: both supersets and subsets. Some
approaches for measuring software risk may not consider the environment as an essential
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and part of the story, but risk cannot be measured out of context.
techniques used by bad guys to break software. If you want to protect your software from
attack,[7] you must first learn how real attacks are really carried out.
To learn about Ludwig von Bertalanffy, go to http://www.isss.org/lumLVB.htm.
ThisA classicmustexample-have bookof anmayenvirshocknmentalyou—andeffectit willis demonstratedcertainly educateby takingyou.Gettinga pro rambeyondthattheas
scriptbeen successfullykiddie treatmentrun withfoundnoinsecuritmany hackingproblemsboforks,yearsyouonwillalearnproprietaryabout network and
putting it on the Internet. The risks change, immediately and radically. For reasons like
these, it makes little sense to consider code separate from any knowledge about the firewall
Why software exploit will continue to be a serious problem
or the business context in which the software will operate. Likewise it doesn't make sense to
treat intrusion detection as an atomic network-level component divorced from the software
When network security mechanisms do not work
that should be monitored. The fact is, software communicates over networks, and simple
configuration settings can leave gaping security holes. Then again, proper firewall settings
Attack patterns
can sometimes choke off an attack that would otherwise wipe out a Web server.
Reverse engineering
In the end, separating code from the environment that it ultimately runs in turns out to be an
artificial and misleading way of drawing a boundary in the system. In fact, such boundaries Classic attacks against server software
end up being of little real use. The complicating factor is that a system can be broken down
into many hierarchical components of varying degrees of detail. A system viewed this way is Surprising attacks against client software
a collection of many components or objects existing at myriad levels. Each piece of software
in a systemTechniquescan likewisefor craftingbe viewedmaliciousas ainputcollection of many components or objects at different
levels. At almost any level of granularity, these objects communicate with each other.
The technical details of buffer overflows
Modern systems are complex and involve interactions at many different levels. The upshot of
all thisRootkitsis that the standard Tower-of-Hanoi–like conception of "stacked" applications (Figure
2-1) is very misleading. High-level applications call directly into very low-level OS constructs
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break (even at the BIOS level), more often than many people think. So instead of a nice, clean,
software.
organized communication hierarchy with everything neatly calling only its "immediately surrounding" levels, almost everything can communicate with almost everything else on all sorts of disjoint levels. This makes building a protection domain somewhat tricky, if not nigh on impossible. Groups and domains can exist around any set of objects, and ultimately any object involves both code and configuration. Ultimately, environment really matters, and trying to treat code separate from the environment is doomed to fail.
Figure 2-1. A typical conceptual view of software applications (App) as nested hierarchical structures. The reality is that applications are not as nicely "stacked" as they appear to be here. This figure was created by Ed Felten of Princeton University.
•
•
Exploiting Software
ByGreg Hoglund
Publisher:
Pub Date:
ISBN: 0-
Pages: 512
How does |
Why are |
firewalls, |
bad guys? |
What tools |
|
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from
Most (network) security books focus only on the environment around software. They talk attack, you must first learn how real attacks are really carried out.
about fixing security problems at the router, the firewall, or by installing intrusion detection Thissoftwaremust.-Onlyhaverecentlybook may(inshock2001)youwere—andtheitfirstwillbookscertainlydedicatededucatesolelyyou.Gettingtodevelopingbeyondsecurethe softwarecriptkiddiereleasedtreatment(BuildingfoundSecurein manySoftwarehackingbybooks,Viega andyou willMcGrawlearn[2001],about and Writing Secure Code by Michael Howard and David LeBlanc [2002]).
Why software exploit will continueinto be a serious problem
We find it useful to divide approaches two distinct subfields: software security and
application security.
When network security mechanisms do not work
Software security defends against software exploit by building software to be secure in the
Attack patterns
first place, mostly by getting the design right (which is hard) and avoiding common mistakes
(which is easy). Issues critical to this subfield include: software risk management,
Reverse engineering
programming languages and platforms, auditing software, designing for security, security
flaws (buffer overflows, race conditions, access control and password problems, randomness,
Classic attacks against server software
cryptographic errors, and so on), and testing for security. Software security is mostly
concerned with designing software to be secure, making sure that software is secure, and Surprising attacks against client software
educating software developers, architects, and users.
Techniques for crafting malicious input
Application security defends against software exploit in a post facto way, after
development is complete. Application security technology enforces reasonable policy about The technical details of buffer overflows
the kinds of things that can run, how they can change, and what the software does as it is
running. Issues critical to this subfield include sandboxing code, protecting against malicious Rootkits
code, locking down executables, monitoring programs as they run, enforcing software use
policyExploitingwith technology,Softwareisandfilledealingwiththewithtools,extensibleconcepts,systemsand knowledge. necessary to break software.
Note that both of these subfields must be considered when exploiting software.
Risk
By giving particular sorts of vulnerabilities a name, we can begin to attribute risk levels to these vulnerabilities. Once a risk is associated with a named software bug or flaw, an enterprise can calculate where budgets need to be allocated to reduce risk. On the other
hand, an attacker can use the same data to calculate the likelihood of leveraging the most "bang for the bug." Clearly, some vulnerabilities cost less to exploit, just as some vulnerabilities cost less to mend.
Risk describes the likelihood that a given activity or combination of activities will lead to a software or system failure and, as a result, unacceptable resource damage will occur. To some degree, all activities expose software to potential faulty behavior. The level of exposure may vary depending on the reliability of the software, the amount of QA testing performed
•Table of Contents
against the software, and the runtime environment of the software.
•Index
Exploiting Software How to Break Code
Flaws and bugs lead to risk; however, risks are not exploits. Risks capture the probability
thatByGrega Hoglundflaw or,GarybugMcGrawwill be exploited (our view is that high, medium, and low seem to work
better as parameters for this than exact numbers). Risks also capture the potential damage
that will occur. A very high risk is not only likely to happen, but is also likely to cause great |
||
Publisher: Addison Wesley |
|
|
harm. Risks can be managed by technical and nontechnical means. Software risk |
|
|
Pub Date: February 17, 2004 |
|
|
management takes into account software risks and attempts to manage the risks |
|
|
ISBN: 0-201-78695-8 |
|
|
appropriately given a particular situation. |
|
|
Pages: 512 |
|
|
What follows is an abbreviated treatment for measuring software risk in an environment. |
|
|
Note that unlike some approaches, our approach does not take into account a deep |
|
|
understanding of the attacker—only the target software. We ignore the problem of |
|
|
categorizing and describing potential attackers in this book. Other books provide a |
|
|
reasonable treatment of assessing the threat profile |
attackers [Denning, 1998; Jones et |
|
How does software break? How do attackers make software break on purpose? Why are |
|
|
al., 2002]. Thus, the risk equation we present here |
meant only to measure |
to |
firewalls, intrusion detection systems, and antivirusisoftware not keeping out the bdamageguys?
software assuming that a capable attacker exists. Of course, if there are no capable What tools can be used to break software? This book provides the answers.
attackers, then there is no risk.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from
attack, you must first learn how real attacks are really carried out.
Damage Potential
This must-have book may shock you—and it will certainly educate you.Getting beyond the
In our model, if the target software is exploitable and the firewall does nothing to protect it script kiddie treatment found in many hacking books, you will learn about
from attack, the result is extreme risk. It is important to understand that risk in this sense amounts only to the risk that the software will fail. We do not attempt to measure the value or theWhycostsoftwthatrefailureexploit. Inwillothercontinuewords,towbe adon'tserioustell youproblemhow much your stolen database
was worth. True risk assessment must measure the cost of a failure. In this case we take the
When network security mechanisms do not work
first step toward classifying risk—gathering the information about a potential software failure
but not calculating asset x value, potential cascading failures, and damage control. Attack patterns
Given our definitions, the equation for damage potential is
Reverse engineering
Attack Potency (given) ranging from 1 to 10 x
Classic attacks against server software
Target Exposure (measure or assume 100%) from 0 to 1.0 =
Surprising attacks against client software
Damage Potential (result is in the range 0 to 10) x 10
Techniques for crafting malicious input
Damage potential is a quantitative measurement. For example, if an attack is rated 10 points
The technical details of buffer overflows
on a scale from 1 to 10 points and you are 100% exposed to the attack (1.0 in the range
specified), then your site damage potential is 10 x 10 = 100%. This means your asset will be
Rootkits
100% compromised or destroyed.
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break Every attack has the real potential to create damage. We assess this potential by determining
software.
the potency of an attack. High-potency attacks are more likely to cause noticeable problems with applications (that is, things that users can see). Low-potency attacks do not cause noticeable problems.
Exposure and Potency
Another dimension, exposure, is a measure of how easy or difficult it is to carry out an
attack. Exposure can also be measured. If an attack is blocked at the firewall, it is said to have low exposure. By testing the fire wall, we can measure exposure for a given attack.
High-potency attacks, by definition, cause noticeable problems when they do their thing. High-exposure attacks that are also high potency will cause a system to crash, but these kinds of high-potency attacks usually indicate only that the firewall is not configured properly. That is, they can in many cases be mitigated with reasonable firewall configurations.
• |
Table of Contents |
• |
Index |
On the other hand, medium-exposure attacks that cause high-potency problems indicate a
Exploiting Software How to Break Code
weak target that is easily compromised. By definition, these attacks are not very likely to be stoppedByGreg Hoglundby firewall,Gary McGrawrules alone. Thus they make excellent fodder for software exploit. Highpotency attack patterns that have medium-exposure dimensions include authentication
hijacking, protocol attacks, and extreme load situations. As we said, these kinds of attack
Publisher: Addison Wesley
only sometimes can be prevented/mitigated using firewalls, intrusion detection, and other common network security techniques. But note that these are attacks that cannot be easily
prevented by a particular software application because they tend to take advantage of
Pages: 512
weaknesses at the communications level.
Input-driven attacks at the application level are usually high-exposure attacks. This means they easily slip under the radar of standard firewall or network-level technologies. There are many varieties of this kind of attack. Common attack patterns include malformed fields,
manipulated input variables, and representation manipulation. Generally speaking, these How does software bre k? How do attackers make software break on purpose? Why are
kinds of attack attempt to stretch and manipulate the input space of the program. firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys?
What tools can be used to break software? This book provides the answers.
We have described two important variables that can be measured during risk assessment:
exposure and potency. In every case, at least one of these variables must be measured to Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
make use of the simple equation presented in the next section. Because determining actual techniques used by bad guys to break software. If you want to protect your software from
values for these variables costs money and resources, a single variable can be measured and attack, you must first learn how real attacks are really carried out.
used in the equation as long as the other variable is assumed to be 100%.
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
Actual Risk
Why software exploit will continue to be a serious problem
Even if you are 100% exposed to an attack, but the attack itself does nothing to affect the target,Whenthennetworkthe attacksecurityis meaninglessmechanisms. Thisdoisnotknownworkin risk analysis circles as impact. Actual
risk measures the effect of an attack while at the same time considering the potential for
Attack patterns
damage. If the software is fully exposed to database injection attacks, the damage potential
might be 100%. But if the database has no data, the impact is zero—thus the actual risk is
Reverse engineering
zero. This amounts to saying, "The attack is possible and if it were carried out it would be
devastating, but the attack is not useful because the database has no value." Classic attacks against server software
The equation for actual risk is
Surprising attacks against client software
Damage Potential (range) 0–10 x Impact (measure or assume 100%) = Actual Risk x
Techniques for crafting malicious input 10
The technical details of buffer overflows
Measuring damage potential is fairly inexpensive and easy because doing so only requires
analysis of firewalls and other large-scale, network-level filtering devices. A complete
Rootkits
software environment can be analyzed from a single gateway. However, note that in many
cases a firewall or gate way is not configured to stop application-layer traffic such as Web Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
requests. This is when the second equation kicks in and reveals whether an attack pattern software.
actually causes any damage. What may come as a surprise is that attack patterns that are genericallyassumed to have little or no damage potential can sometimes end up causing a great deal of damage when a particular, individual site is tested.
Our equations turn out to be useful in practice because they reflect what happens in the real world. For example, if a high-potency attack pattern is discovered, the site damage can clearly be mitigated by reducing the exposure. In many cases this can be accomplished by adding a new firewall rule—a relatively inexpensive solution. Of course, stopping all application-level attacks at the firewall does not scale well. A better alternative is to fix the
application to reduce the potency of an attack pattern.
•Table of Contents
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
How does software break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from attack, you must first learn how real attacks are really carried out.
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
Why software exploit will continue to be a serious problem
When network security mechanisms do not work
Attack patterns
Reverse engineering
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.