21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

tecture-specific checks to determine whether the environment is safe for execution.<br />

These checks can be benign (such as ensuring that the minimum amount of<br />

memory or CPU speed is met) or aggressive (such as searching for the presence<br />

of a debugger). Environment validation can be bypassed by running the software<br />

in an emulator, removing the dependency on the environment check, or<br />

modifying the signatures and behavior of software and hardware components on<br />

the local system.<br />

Integrity validation<br />

The software examines itself and its components in memory or on disk to determine<br />

whether it has been modified since compilation. This often takes the form<br />

of producing a digital signature for the software and comparing it with a valid<br />

signature, although the comparison may be eliminated by using the signature, or<br />

a transformation thereof, as critical code or data during the execution of the software.<br />

Each of these approaches has its advantages, and each has its flaws. Input validation<br />

is trivial to implement and sells well because of the illusion that strong encryption<br />

provides strong protection. However, it is trivial to detect, and the input can always<br />

be intercepted during a valid execution of the software in order to crack the protection.<br />

Hardware validation is difficult to bypass and is effective against debugging and<br />

disassembly of the software. On the downside, it is expensive, difficult to implement<br />

effectively, and requires that the hardware itself be trusted, which is virtually never<br />

the case. Network validation is also proof against debugging and disassembly<br />

because all validation is performed remotely and required code or data is supplied by<br />

the server upon validation. However, it requires that the network itself be trusted<br />

(which is not necessarily the case on a local network with no Internet access) and can<br />

be broken once a valid execution of the software has been monitored. Environment<br />

validation is effective at demanding more skill from a potential attacker. It is trivial to<br />

detect, relatively easy to bypass, and very costly in terms of development and debugging<br />

time. Integrity validation is simple to implement and addresses the issue at the<br />

core of software protection. It is also easy to spot and can quickly be bypassed when<br />

the signatures used to verify integrity are stored locally.<br />

There is no single, correct technique. The best results are obtained by combining a<br />

number of different techniques: for example, using the correct signature from an<br />

integrity validation as the key to decrypt portions of the software during an input validation.<br />

It is difficult to name any specific technique, or even a combination of techniques,<br />

that can be considered a reliable protection mechanism.<br />

Discussion<br />

The key to writing a good software protection mechanism is in knowing and not<br />

underestimating the typical software protection cracker, and assessing the goals and<br />

costs of protecting against attack.<br />

Understanding the <strong>Problem</strong> of Software Protection | 649<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!