Hacking: The Art of Exploitation

From Wikipedia, the free encyclopedia

Hacking: The Art of Exploitation (ISBN 1-59327-007-0) is a book written by Jon "Smibbs" Erickson and published by No Starch Press in 2003. It is a computer security and network security book. All of the examples in the book were developed, compiled, and tested on Gentoo Linux.

Contents

[edit] Content

The content of Hacking moves between programming, networking, and cryptography. While well explained, it is a technical piece; some C programming experience is essential, although a basic understanding of networking and cryptography helps as well.

While Hacking is packed with technically accurate, detailed information, it is still a basic introduction to the subject of computer security. Hacking also does not use any notable measure of real-world examples; discussions rarely bring up specific worms and exploits that had previously existed, such as the PNG library overflows or the Blaster worm and related RPC service overflow. Thus, an inexperienced reader may not immediately make the connection between the theory and the reality of attack.

[edit] Programming

The programming portion of Hacking makes up over half of the book's total content. This section goes into the development, design, construction, and testing of exploit code, and thus involves some basic assembly programming. The demonstrated attacks range from simple buffer overflows on the stack to complex techniques involving overwriting the global offset table.

While Erickson discusses some countermeasures such as a non-executable stack and how to evade them with return-to-libc attacks, he does not dive into deeper matters without known guaranteed exploits such as address space layout randomization. Most protections afforded by the Openwall, GrSecurity, and PaX projects appear to be out of scope for Hacking; as do kernel exploits.

It has been suggested that Hacking be used to teach "basic computer programming fundamentals" in one review included in the opening pages of the book. Although these reviews are placed in the text for marketing purposes, the programming section of the book is technically accurate and does convey a lot of information not taught in typical introductory computer programming classes. Whether its use as a fundamental teaching tool would lead to more security-conscious and security-competent programmers overall is, however, neither studied nor proven.

[edit] Networking

The networking segment of Hacking has control of less than half of the remaining text. It explains the basics of the OSI model and basic networking concepts; packet sniffing; connection hijacking; denial of service; and port scanning.

Although technically accurate, the networking section of Hacking only serves as a basic introduction to network security. Countermeasures such as complex firewalls; Stateful Packet Inspection; network address translation, the threat of firewalking, and countermeasures thereof; intrusion detection and prevention; and virtual private networks are not discussed.

[edit] Cryptology

The cryptology section of Hacking consumes the rest of the book's pages. This is another bottom-up section, starting off with basic information theory and moving through symmetric and asymmetric encryption. It winds out in cracking WEP utilizing the Fluhrer, Mantin, and Shamir Attack.

This section appears to be miscellaneous information for the aspiring cryptology scholar. Besides the basics, including man-in-the-middle attacks, dictionary attacks, and the use of John the Ripper; Hacking discusses quantum key distribution, Lov Grover's Quantum Search Algorithm, and Peter Shor's Quantum Factoring Algorithm for breaking RSA encryption using a very large quantum computer.

[edit] Trivia

  • The front cover of Hacking is the complete cycle, from reverse engineering to carrying out the attack, of developing an exploit for a program that dies of a buffer overflow over long command line arguments. The example is very specific and does not necessarily reflect reverse engineering any similar exploit.

[edit] See also

[edit] References