Exploiting Software: How to Break Code
Gary McGraw, Greg Hoglund
2004, Addison Wesley
Door Rob Dijkshoorn
In "The Art of War" wordt gesproken over het begrip "Know Your Eemy", ofwel, ken uw vijand, en weet welke methoden van aanval hem ter beschikking zijn. Voor diegenen onder ons die wargames spelen is dit geen onbekend principe. Maar wat heeft dit met een boekrecensie te maken?
Dit boek gaat over software security. Maar anders dan boeken als Writing Secure Software of Writing Secure Code, die vooral kijken naar hoe je je in eerste instantie als programmeur kunt verdedigen tegen veel voorkomende security problemen in software zoals buffer overflows of cross-site scripting attacks, neemt dit boek een hele andere aanpak. Dit boek laat zien wat mensen in de hacking underground al lang weten, namelijk hoe je misbruik kunt maken van zwakheden in software. Het boek behandelt daarvoor tools en technieken om zwakheden in code op te sporen en te exploiteren.
Het boek is echter geen software exploit howto, daarvoor is de informatie die
aangeboden wordt te generiek en ligt het van de lezer verwachte kennisniveau te hoog. Maar daarover later meer. Laten we eerst eens kijken wat voor informatie er eigenlijk aangeboden wordt.
Het boek bevat 447 pagina's, iets meer als je inhoudsopgave, register en literatuurlijst meetelt. Voor een IT-boek niet eens zo veel, als je bedenkt dat een gemiddeld boek al gauw het dubbele aantal pagina's telt. Deze 447 pagina's zijn opgedeeld in acht hoofdstukken. Het eerste hoofdstuk geeft een kort overzicht van de geschiedenis van software, de belangrijkste redenen waarom software zo gemakkelijk te misbruiken is, en er wordt een poging gedaan in de toekomst van software te kijken. Deze toekomstblik komt heel in het kort neer op twee observaties: meer en meer functionaliteit wordt geimplementeerd in software, en uiteindelijk wordt alle software mobile code.
In hoofdstuk twee wordt een poging gedaan een taxonomie van begrippen vast te stellen op basis waarvan een discussie mogelijk is. Denk bij deze begrippen aan het verschil tussen een flaw en een bug. Ook wordt er gekeken naar open systemen, en de impact van open systemen op software security. Met open systemen wordt in dit geval niet open source software bedoeld, maar systemen die door derden uitgebreid kunnen worden, op basis van gepubliceerde API's.
In het derde hoofdstuk begint dan het echte werk. In dit hoofdstuk wordt reverse engineering besproken. Na een beschouwing van de wettelijke aspecten van reverse engineering worden achtereenvolgens concepten, gereedschappen en methodes van reverse engineering besproken. Een van de interessantste aspecten aan dit hoofdstuk is dat het helemaal niet nodig is om source code van een programma te hebben. Een goede reverse engineer kan met behulp van een debugger heel veel te weten komen over de interne werking van een stuk software. In het hoofdstuk worden ook een aantal zelf te bouwen gereedschappen generiek besproken. De schrijvers nemen hierbij een aanpak die ze consequent in het hele boek nemen, namelijk bespreken van concepten, maar niet geen kant en klare oplossingen of tools aandragen.
Hoofdstuk vier gaat over het exploiteren van server software, waarbij onder meer elevatie van privileges en untrusted input en input validatie aan bod komen. In dit hoofdstuk wordt er expliciet van uit gegaan dat de server de applicatie is die aangevallen wordt en dat de client bij de aanvaller op een machine draait. In hoofdstuk vijf, dat eigenlijk een mirror image is van hoofdstuk vier, is precies het omgekeerde het geval. In hoofdstuk vijf wordt de client als verdacht beschouwd, met technieken als cross-site scripting en hack-back pogingen, ofwel een server die onder aanval is slaat terug.
In hoofdstuk vier is al gesproken over input, en dat wordt in hoofdstuk zes uitgebreid. Onder meer het gebruiken van alternatieve encodingmecahnismen als unicode of UTF om equivalente strings te bouwen of intrusion detection systemen om de tuin te leiden worden besproken. Uiteraard worden voorbeelden als Nimda gebruikt om het geheel te illustreren. ,Hoofdstuk zeven wordt helemaal geweid aan het grootste probleem in software security, namelijk de buffer overflow. Er worden meerdere varianten besproken, zoals de stack- en heapoverflow. Ook wordt er shellcode voor zowel x86 als RISC architecturen besproken. Uiteraard geldt ook hier dat je na lezing van dit boek geen shell code expert op Solaris bent... daarvoor dienen andere bronnen dan dit boek.
Het achtste en laatste hoofdstuk is wellicht het meest interessant. Dit hoofdstuk handelt over rootkits. Uit de naam kun je opmaken dat dit wellicht een specifiek op UNIX gerichte aanvalsmethode is, maar niets is minder waar. Sinds de komst van het wijdverspreide Windows XP is de rootkit ook zeer populair bij mensen die zich richten op Windows. De auteurs presenteren een simpele rootkit, bespreken joe files en directories verborgen kunen worden, en brengen zaken als keystroke logging en hardware virussen ter sprake. Ook wordt er besproken hoe je direct, zonder tussenkomst van het operating system, met de hardware kunt communiceren.
Met een literatuurlijst en diverse registers wordt vervolgens het boek besloten. Vooral de literatuurlijst biedt voldoende bronnen om een geinteresseerde lezer ruim voldoende extra kennis te doen vergaren.
Zoals in de inleiding al gezegd, dit boek biedt veel informatie waarvan mensen zich zeker afvragen in hoeverre het een goed idee is om deze informatie beschikbaar te maken. Deze informatie is al heel lang beschikbaar, vooral in online vorm. Een artikel als "Smashing the Stack for Fun and Profit" is al jaren beschikbaar. Daarnaast bestaat er een levendige handel binnen de "hacker underground" in dit soort informatie. Desondanks zou je mensen op een idee kunnen brengen met het beschikbaar maken van dit soort informatie. Met deze vraag komen we op het niveau van het boek.
Dit boek is namelijk een boek wat mijns inziens nogal wat kennis en ervaring op het gebied van hardware, software en operating systems vraagt. Het boek biedt geen kant en klaar recepten, er wordt heel veel zelfwerkzaamheid verwacht. De algemene principes worden getoond, hoe een en ander zich vertaalt in software of werkbare exploits is voor de schrijvers geen relevante vraag. Derhalve denk ik dat het met dat "uitlokken tot hacken" wel mee zal vallen.
Voor welk publiek is dit boek geschreven? Ik denk dat dit boek verplichte kost zou moeten zijn voor iedereen die professioneel software schrijft. Ook iedereen die geinteresseerd is in software exploits zou dit boek moeten lezen, maar bedenk wel dat er nogal wat technische bagage van de lezer verwacht wordt. Ook security managers zouden dit boek moeten lezen, om hun beveiligingsperspectief helder te krijgen. In een verkorte versie, die minder diep ingaat op de technische uitwerking van de diverse exploits, zou dit boek ook veer gebruikers van computerfaciliteiten zeer geschikt zijn als een stukje bewustwording van beveiligingsaspecten van de software waar ze dagelijks mee werken.
Uiteraard zijn er ook groepen voor wie dit boek niet zo geschikt is. In de eerste plaats uiteraard de groep script kiddies. Dit boek biedt geen cut-and-paste exploits. Ook de groep administrators die blind geloven in security die door de vendor aangeboden wordt en de groep die blind de patches installeert die door een vendor aangeboden worden (of juist niet), voor hen is dit boek wellicht ook iets te hoog gegrepen. Dat het boek ook niet geschikt is voor mensen die denken dat security stopt na de implementatie van een firewall is bijna de moeite van het vermelden niet waard.
Tot slot brengt dit boek nieuwe ammunitie op tafel voor het debat "Wat is veiliger? Open source of closed source?". Ik kan na lezing van dit boek wel concluderen dat het voor de veiligheid van software niet uit maakt of de code open source is of niet. Het is voor iemand die gewapend is met debuggers en disassemblers een koud kunstje om de werking van de code te achterhalen. Hoe dit binnen het debat over source code beschikbaarheid en de security hiervan past is voer voor een ander artikel.
Heeft u ook een interessant boek gelezen en wilt u dit anderen laten weten, stuur dan uw recensie naar redactie@security.nl
Deze posting is gelocked. Reageren is niet meer mogelijk.