Reverse engineering: hoe technologie wordt gekraakt om haar te begrijpen
Stel je een chef-kok voor die in een restaurant een onbekend gerecht proeft en vervolgens, zonder het recept te kennen, thuis probeert te achterhalen welke ingrediënten en technieken erin zitten. Door te proeven, te ruiken en te experimenteren reconstrueert de kok stap voor stap het recept. Dat is in de kern wat reverse engineering is, maar dan toegepast op techniek: het uit elkaar halen en analyseren van een bestaand product, programma, chip of protocol om te achterhalen hoe het werkt, zonder dat je de originele bouwtekeningen, broncode of specificaties hebt.
Reverse engineering wordt toegepast op heel uiteenlopende dingen: software (een computerprogramma waarvan alleen de uitvoerbare versie beschikbaar is), elektronica (een chip of printplaat), en communicatieprotocollen (de "taal" waarmee apparaten met elkaar praten). Het is geen synoniem voor hacken, al worden de technieken soms wel voor kwaadaardige doelen misbruikt. In de meeste gevallen dient het juist defensieve of maatschappelijk nuttige doelen: het maken van compatibele software, het opsporen van veiligheidslekken, het analyseren van kwaadaardige software, of simpelweg het behouden van oude systemen die niemand meer documenteert.
Wat is het precies?
Bij software-reverse-engineering is het startpunt meestal een binary: het uitvoerbare bestand dat een computer kan draaien, maar dat voor mensen onleesbare machinecode bevat. Onderzoekers gebruiken dan een disassembler, een programma dat machinecode omzet naar assembly: een iets leesbaardere, maar nog altijd zeer technische tussentaal van processorinstructies. Een decompiler gaat een stap verder en probeert van die assembly weer een benadering van de oorspronkelijke programmeercode te maken, bijvoorbeeld in een vorm die lijkt op C. Bekende gereedschappen hiervoor zijn IDA Pro, gemaakt door het Belgische bedrijf Hex-Rays, en Ghidra, een gratis en open-source tool die de Amerikaanse inlichtingendienst NSA in 2019 openbaar maakte.
Naast deze statische analyse (het bestuderen van code zonder die uit te voeren) bestaat er dynamische analyse: het programma daadwerkelijk laten draaien terwijl een debugger meekijkt. Een debugger is software waarmee je een programma stap voor stap kunt uitvoeren, de inhoud van het geheugen kunt bekijken en kunt zien hoe variabelen veranderen. Populaire debuggers zijn x64dbg en OllyDbg. Door statische en dynamische analyse te combineren, bouwen onderzoekers geleidelijk een beeld op van wat een programma doet.
Bij hardware werkt het anders. Om een chip te doorgronden, wordt deze soms letterlijk opengewerkt via decapping: het chemisch of mechanisch verwijderen van de beschermende behuizing, waarna de onderliggende siliciumstructuren onder een microscoop zichtbaar worden en laag voor laag gefotografeerd kunnen worden om de schakelingen te reconstrueren. Bij communicatieprotocollen, de afspraken waarmee bijvoorbeeld een app en een server met elkaar praten, wordt vaak netwerkverkeer onderschept en geanalyseerd met tools als Wireshark, om patronen in de verstuurde data te herkennen en zo het protocol te ontcijferen.
Wat al deze vormen gemeen hebben, is dat het een iteratief proces is: onderzoekers stellen een hypothese op over hoe iets werkt, testen die, passen hem aan op basis van nieuwe waarnemingen, en herhalen dat totdat er een samenhangend en werkend beeld ontstaat. Het is doorgaans traag, arbeidsintensief werk dat specialistische kennis vereist.
Wat wil men ermee bereiken?
Een belangrijk doel is interoperabiliteit: het maken van producten die samenwerken met bestaande systemen, ook als de maker van dat systeem geen documentatie deelt. Denk aan drivers voor apparaten, of software die bestanden van een ander programma kan openen.
Een tweede grote drijfveer is beveiligingsonderzoek. Door software of hardware te reverse-engineeren, kunnen onderzoekers kwetsbaarheden opsporen voordat kwaadwillenden dat doen, kunnen ze kwaadaardige software (malware) analyseren om te begrijpen hoe die werkt en zich verspreidt, en kunnen ze controleren of een product geen verborgen achterdeurtjes (backdoors) bevat.
Daarnaast speelt reverse engineering een rol bij digitaal behoud: veel oude software en videogames draaien niet meer op moderne systemen omdat de originele broncode verloren is gegaan. Door de werking te reconstrueren, kunnen liefhebbers en archivarissen dit erfgoed bewaarbaar en speelbaar houden. Ook in concurrentieanalyse en digitaal forensisch onderzoek, waarbij bijvoorbeeld politie of onderzoeksinstanties bewijsmateriaal op apparaten analyseren, wordt de techniek gebruikt.
Voorbeelden uit de praktijk
Een van de bekendste voorbeelden is het Samba-project, gestart door de Australische programmeur Andrew Tridgell in 1991-1992. Tridgell reverse-engineerde het SMB-protocol van Microsoft, waarmee Windows-computers bestanden en printers delen, zonder toegang tot Microsofts documentatie. Het resultaat maakte het mogelijk om Linux- en Unix-systemen naadloos te laten samenwerken met Windows-netwerken, en Samba wordt tot op de dag van vandaag onderhouden.
In de rechtszaak Sony v. Connectix (uitspraak in 2000) oordeelde een Amerikaans hof van beroep dat het bedrijf Connectix geen inbreuk maakte door via zogeheten "clean room"-reverse-engineering de BIOS-firmware van de originele PlayStation te analyseren om zijn Virtual Game Station-emulator te bouwen. Bij clean-room reverse engineering werkt één team de specificaties uit door analyse, terwijl een gescheiden team, dat de originele code nooit heeft gezien, op basis van die specificaties nieuwe code schrijft, om auteursrechtelijke besmetting te voorkomen.
In 2019 maakte de NSA haar interne reverse-engineeringtool Ghidra gratis en open source beschikbaar, wat de toegankelijkheid van geavanceerde analysemogelijkheden voor onderzoekers en studenten wereldwijd sterk vergrootte.
Na de ontdekking van de computerworm Stuxnet in 2010 ontrafelden beveiligingsonderzoekers van onder meer Symantec en Kaspersky de zeer complexe malware via reverse engineering. Daaruit bleek dat Stuxnet specifiek gericht was op industriële besturingssystemen die werden gebruikt bij Iraanse uraniumverrijkingscentrifuges, wat het beschouwd maakte als een van de eerste bekende cyberwapens gericht op fysieke infrastructuur.
Al in de vroege jaren tachtig reverse-engineerden bedrijven als Phoenix Technologies en Compaq, via de clean-room-methode, de BIOS-firmware van IBM's personal computer. Dit maakte het legaal mogelijk om compatibele "kloon"-pc's te bouwen, wat aan de basis stond van de latere pc-industrie zoals we die nu kennen.
Hoe ver is de techniek?
Reverse engineering is een volwassen vakgebied met decennia aan opgebouwde methodiek, maar het bevindt zich in een voortdurende wapenwedloop. Makers van software en hardware passen steeds geavanceerdere anti-reverse-engineeringtechnieken toe, zoals obfuscatie (het opzettelijk onleesbaar maken van code), packing (het comprimeren en versleutelen van een programma zodat het pas tijdens uitvoering zichtbaar wordt) en code-virtualisatie (het omzetten van code naar een eigen, kunstmatige processortaal die extra vertaalwerk vereist). Ook technieken die het gebruik van een debugger detecteren en blokkeren, worden veel toegepast.
Een relatief nieuwe ontwikkeling is het gebruik van machine learning om decompilatie te verbeteren, bijvoorbeeld door automatisch betekenisvolle namen aan functies en variabelen toe te kennen op basis van patronen die een model heeft geleerd. Dit versnelt het werk, maar vervangt de menselijke analist vooralsnog niet: complexe of zwaar beveiligde software vereist nog altijd doorgewinterd handwerk.
Bij hardware wordt reverse engineering juist moeilijker naarmate chips kleiner en complexer worden. Bij moderne processoren, gemaakt met productietechnieken van enkele nanometers, zijn dure elektronenmicroscopen en zeer gespecialiseerde laboratoria nodig om structuren nog te kunnen onderscheiden.
Juridisch is het beeld gemengd en land-afhankelijk. In de Verenigde Staten bevat de Digital Millennium Copyright Act (DMCA) uitzonderingen die reverse engineering toestaan voor interoperabiliteit en beveiligingsonderzoek, al blijven de precieze grenzen onderwerp van discussie en rechtszaken. Binnen de Europese Unie biedt de Softwarerichtlijn eveneens ruimte voor reverse engineering ten behoeve van interoperabiliteit, onder specifieke voorwaarden. Contractuele bepalingen, zoals gebruikersvoorwaarden die reverse engineering verbieden, kunnen deze wettelijke ruimte in de praktijk echter beperken.
Wie werken eraan?
De NSA is met de gratis tool Ghidra een belangrijke speler geworden in de publieke reverse-engineeringgereedschapskist. Het Belgische bedrijf Hex-Rays is met IDA Pro al decennialang de facto industriestandaard voor professionele analisten. Google Project Zero is een team van beveiligingsonderzoekers dat via reverse engineering en andere technieken kwetsbaarheden opspoort in veelgebruikte software, ook van andere bedrijven.
Antivirus- en beveiligingsbedrijven zoals Kaspersky en ESET zetten reverse engineering dagelijks in om nieuwe malware te ontleden en detectiemethoden te ontwikkelen. Aan academische zijde doen onderzoeksgroepen zoals die van de Ruhr-Universität Bochum in Duitsland en VUSec aan de Vrije Universiteit Amsterdam grondig onderzoek naar zowel offensieve als defensieve kanten van de techniek. Daarnaast is er een levendige gemeenschap van hobbyisten en deelnemers aan zogeheten capture the flag-wedstrijden (CTF's), waarbij reverse-engineeringpuzzels een centraal onderdeel vormen en waaruit regelmatig nieuw talent voor de beveiligingsindustrie voortkomt.