An excerpt from Greg Hoglund and Gary McGraw's 'Exploiting Software: How to Break Code.'

Page 1  2
The following is an excerpt from "Exploiting Software: How to Break Code" by Greg Hoglund and Gary McGraw. Tune in to tonight's episode of "The Screen Savers" to watch Hoglund and McGraw discuss how software breaks, hacking techniques, and the security you'll need to protect yourself.

The future of software

The software security problem is likely to get worse before it gets better. The problem is that software itself is changing faster than software security technology. The trinity of trouble has a significant impact on many of the trends outlined in this section.

At the risk of being seriously wrong, we now consult our crystal ball and peer into the future of software. Our mission is to understand where things are going and think about how they will impact software security and the art of exploiting software... (Of course, anyone who purports to predict what is coming is destined to be wrong. So take these musings with a grain of salt.)

An acknowledgment is in order. This material was developed with the input of many people, not the least of whom make up Cigital's Technical Advisory Board. Major contributors include Jeff Payne (Cigital), Peter Neumann (SRI), Fred Schneider (Cornell), Ed Felten (Princeton), Vic Basilli (Maryland), and Elaine Weyuker (AT&T). Of course any errors and omissions are our fault.

The medium-term future: 2005-2007

Short-term trends are likely to evolve, resulting in a new set of salient ideas. Keep in mind that the further we peer into our crystal ball, the more likely we are to be wrong.


Special-purpose computational units
Devices that serve one and only one computational purpose are likely to emerge. Many such computational objects exist in telecommunications systems today. The emergence of everyday devices with embedded software is interesting from a security perspective, especially if these devices are network enabled. The famed "Internet toaster" may become a reality, with the downside being a risk that your breakfast will be maliciously burned by a bad guy.

Emergence of true objects
Objects in the physical world have form and function. Computational capability will be added to many "ordinary" objects to enhance their capabilities. Whether the new capability will take the form of a universal computer that accepts mobile code to determine its function is an open question. From a user perspective, "smart objects" will be the result. Software will play a major role in smart objects, and compromising such objects from a security perspective is likely to involve exploiting software.

.NET and Java
Systems involving virtual machines (VMs) that run the same code on many diverse platforms will become much more common. (Sun's pithy way of putting this is "write once; run anywhere.") Since the introduction of Java in 1995, the JVM has taken the software world by storm. .NET is Microsoft's response to the Java phenomenon. Although VM technology allows for the use of advanced language-based security models, VMs are also a critical extensibility driver, and extensibility can be dangerous.

Encapsulation of OS
OS encapsulation spearheaded by Java and .NET will continue to gain prominence. The proliferation of such platforms brings the idea of a VM that can really deliver "write once; run anywhere" capability closer to reality. Embedded devices with hardware implementations of VMs will become more common. The end game of this trend may well be "special-purpose" OSes that are built specifically for the device they support. An early example is the Palm OS. Because OS kernels typically run with privilege, the idea of privileged code and superuser (SUID) capability will be transferred to the device itself. This is a likely area for exploitation.

Widespread wireless and embedded systems
The concept of a wireless network will become deeply entrenched and widespread. Security concerns will grow as more business-critical applications come to include a wireless component.

Geographically distributed systems
Logically distributed systems such as Win32 will evolve into geographically distributed systems as special-purpose computational units come into play. Once these systems begin to use the network as a communications medium, security concerns are raised. Transport-level security through cryptography can help to address these concerns, but "person-in-the-middle" attacks will become commonplace, as will timing-related attacks such as race conditions. Software exploitation in a geographically distributed system is interesting because the range of protections offered by various different hosts in the system is likely to vary. Because security is only as strong as the weakest link, part of an attack strategy will be to determine which of a number of distributed hosts is the weakest.

Adoption of outsourced computation
Computation may come to be more like electricity, with cycles available for the taking simply by "plugging something in." There are myriad security concerns invoked by the idea of outsourcing computation. Questions like How can you trust an answer? How can you protect knowledge about the problem you are solving from the host doing the computation? And how long can you properly delegate resources and charge for use? will become commonplace. The impact on exploiting software will be large, because an attacker will need to determine not only how to attack, but where, and redundancy will be used to detect attacks.

Software distribution
The idea of installing copies of an enterprise-grade program on every machine will begin to make less sense. Instead, software functionality will be delivered according to need, and users will be charged for the functions they use. The Application Service Provider (ASP) model of software licensing is likely to catch on. Software companies are preparing for this by changing the way they license and charge for software today. A new class of software attacks directed at surreptitiously stealing functions will evolve.

Mobile code taking over
Because of the pervasiveness of networking, all code in the future will be mobile code. The term mobile code will fall out of use because it will be redundant. Language-based security models will take on more importance, and attacks against these kinds of security mechanisms (many of which were invented in the mid 1990s) will be seen in the wild.


Software practitioners interested in reacting to these trends and protecting code against exploit should learn as much as possible about the following ideas:

  • Object-oriented thinking
  • Understanding temporal implications
  • Distributed systems
  • Security in a hostile environment
  • Assume nothing
  • Programming languages
  • Simplicity
  • Fault injection
  • Privacy and control


Exploiting Software: How to Break Code

From the book "Exploiting Software: How to Break Code" by Greg Hoglund and Gary McGraw. Copyright 2004 by Pearson Education, Inc. Reprinted with permission. All Rights Reserved.

Page 1  2