Inleiding
Onlangs publiceerden we een artikel over de Secustick. Ondanks de claims op de website bleek de stick niet zo veilig als werd gedacht. Leverancier USB-Secured.com greep dat artikel aan om zijn met vingerafdruk beveiligde sticks ter test bij de redactie aan te bieden. Was dat wel zo verstandig? Huistechneut en inmiddels vermaard usb-stick-hacker Sprite_tm heeft zich enkele uren vermaakt met de sticks.
USB-Secured.com levert twee verschillende uitvoeringen van zijn beveiligde sticks: de witte US-A2 (vreemd genoeg blauw op de afbeeldingen op de website van de leverancier) en de zilverkleurige US-A1. De eerste beschikt over een opslagcapaciteit van 1GB, een met 256bits-aes-encryptie beveiligde partitie voor zaken die de eigenaar graag voor zichzelf wil houden en een onbeveiligde partitie voor minder geheime bestanden. Vingerafdrukherkenning moet garant staan voor een optimale beveiliging. De US-A1 wordt in de markt gezet als de extra beveiligde uitvoering: alle functies zijn beveiligd middels een vingerafdruk. De zilveren versie heeft ook meer mogelijkheden: zo kunnen bestanden met een scan van de vingertop versleuteld worden en wachtwoorden van websites bewaard worden. De stick kan ook een versleuteld virtueel bestandssysteem op de lokale harde schijf creëren en ten slotte kan hij gebruikt worden om de Windows-pc van de eigenaar te ver- en ontgrendelen.
De sticks zijn momenteel niet in de detailhandel verkrijgbaar maar worden alleen in het b2b-kanaal aangeboden voor een bedrag vanaf 69 euro. De leverancier heeft ze in China laten ontwikkelen en voor de software wordt gebruik gemaakt van een pakket van Symwave.

De zilveren usbstick in verpakking
Beide sticks worden geleverd in een kartonnen verpakking, met een kleine gebruiksaanwijzing en een draagkoord en in het geval van het zilverkleurige exemplaar komt daar nog een usb-verlengkabel bij. Deze sticks claimen niet dat ze zichzelf vernietigen, dus we konden zonder risico voor lijf en leden de beide sticks openen. Het demonteren is niet onmogelijk, maar de sticks zijn degelijk genoeg om ze in het dagelijkse gebruik voldoende te beschermen. Zowel de US-A1 als de US-A2 bevat redelijk standaard hardware: een chip die de communicatie tussen de usb-poort, het geheugen en de vingerafdruksensor regelt, 1GB nand-flashgeheugen en een vingerafdruksensor.
De software
De twee sticks worden geleverd met verschillende software, maar het principe van beide programma's is gelijk. De eerste keer dat een stick wordt gebruikt, moet er tenminste één vinger worden gescand. De US-A2 ondersteunt het inloggen op een Windows-computer, dus kunnen ook de Windows-logingegevens ingevoerd worden. Bij de US-A1 kan nog de grootte van de onbeveiligde partitie ingesteld worden.

Schermafbeelding van de software
Beide sticks emuleren een cd-rom-station om gebruik te kunnen maken van de autorunfunctionaliteit die Windows biedt. Op het moment dat een stick in de computer wordt geplugd, start een programma dat om de vingerafdruk vraagt. Als de juiste vinger herkend wordt emuleert de witte variant een extra schijfstation. De zilveren uitvoering geeft dan de beveiligde partitie in het geëmuleerde cd-rom-station weer. Beide sticks hebben een icoon in de taakbalk om de verschillende functies te kunnen gebruiken, maar de zilveren uitvoering moet daartoe eerst een programma installeren. Het zal dus niet mogelijk zijn deze stick te gebruiken zonder over beheerdersrechten te beschikken.
De zilveren stick
Op de site van de leverancier staat dat de gegevens op het zilveren exemplaar met aes-encryptie zijn beveiligd; het lijkt er echter op dat dit alleen bij de witte stick het geval is. We besloten daarom de beveiliging van het zilveren exemplaar als eerste te testen. Er zijn twee Windows-programma’s die gebruikt worden door de stick. Het eerste is het programma dat automatisch opstart bij het gebruiken van de stick en is verantwoordelijk voor het vrijgeven van de beveiligde partitie. Het tweede programma zorgt voor de overige functionaliteit van de stick, zoals het inloggen op websites en toegang tot je favorieten. Beide programma’s maken gebruik van dezelfde database met vingerafdrukken, maar werken voor de rest volledig onafhankelijk van elkaar: als je al bent ‘ingelogd’ op het beveiligde gedeelte van de schijf zul je nogmaals je vinger moeten laten scannen om de andere mogelijkheden te gebruiken.
Zoals gezegd emuleert de stick een cd-romstation op het moment dat hij op een pc aangesloten wordt. Het autorunprogramma dat dan opstart, is in feite een gecomprimeerd bestand dat zichzelf uitpakt naar de tempdirectory van de ingelogde Windows-gebruiker, beheerderrechten zijn daarvoor dus niet nodig. Er worden tijdens het uitpakken verschillende dll-bestanden en een uitvoerbaar bestand in de tijdelijke directory geplaatst. We besloten het .exe-bestand in de debugger te laden.

Na enig onderzoek van de verschillende routines in het programma viel ons oog op een functie in een van de bijgeleverde dll’s. De naam van de routine, MediaChange2Flash, deed een lichtje branden, immers het programma verwisselt het geëmuleerde cd-rom-station voor de beveiligde partitie als een juiste vingerafdruk wordt herkend. Gezien de naam van de routine leek het logisch te veronderstellen dat deze routine hier verantwoordelijk voor is. We probeerden de aanroep van een willekeurige andere functie - CheckSensorStatus - te verwisselen voor een aanroep naar de MediaChange2Flash-routine. Na het starten van het programma kwam er een foutmelding: ‘No device found’. Echter, op hetzelfde moment werd de beveiligde partitie in de Windows-verkenner zichtbaar; de beveiliging van de opgeslagen bestanden was al bezweken. Helemaal waardeloos is de stick op dit moment nog niet, de opgeslagen wachtwoorden, favorieten, het virtuele bestandssysteem en alle andere zaken die door het tweede programma worden afgehandeld hebben voor het benaderen nog steeds een vingerafdruk nodig. We besloten te kijken of dat zo zou blijven.

Na een hoop gezoek door het woud van elkaar aanroepende dll-bestanden bleek dat het valideren van een vingerafdruk in een bepaalde routine plaatsvindt: bHMFVVerify. Door een aantal goede en foute vingerafdrukken in het systeem te traceren konden we de werking van de routine vrij snel achterhalen. In de eerste stappen wordt de kwaliteit van de afdruk gecontroleerd: is de afdruk een normale vingerafdruk? In de daarop volgende routine wordt uiteindelijk de gescande afdruk vergeleken met een afdruk in de database. Het bleek relatief eenvoudig een stukje code te schrijven die de routine aanpast: na het toevoegen van deze code werd iedere willekeurige vingerafdruk als een geldige scan herkend. Door slechts 1 byte in een dll-bestand aan te passen was ook de tweede beveilingsbarriere van de zilveren stick geslecht.
Het is bij de stick overigens ook mogelijk als extra beveiliging een wachtwoord op te geven. We hebben niet meer uitgebreid naar deze mogelijkheid gekeken, maar de ervaring die we bij het bekijken van het programma in de debugger hebben opgedaan sterkt ons in het vermoeden dat deze beveiliging op dezelfde eenvoudige wijze te omzeilen is. De eerste stick heeft het verloren, nu de tweede nog.
De witte stick
De beveiliging van de witte stick werkt zoals gezegd door een gedeelte van de ruimte op de stick te versleutelen met 256bit-aes-encryptie. We hebben niet onderzocht of de gebruikte encryptiemethode werkelijk aes is, maar dat ligt wel voor de hand: het is een zeer betrouwbare en eenvoudig te implementeren techniek. Juist omdat een goede implementatie van het aes-algoritme zo sterk is besloten we onze aandacht op de sleutel te richten. Die moet zich immers op de stick bevinden om de versleutelde data weer vrij te geven. De witte stick gebruikt slechts een enkel programma om alle functies vrij te geven. Een voordeel hiervan is dat er geen extra software op de pc hoeft te worden geïnstalleerd. De werkwijze is verder gelijk aan de vorige stick: het inpluggen van het apparaatje zorgt voor een geëmuleerd cdrom-station en autorun.exe plaatst een aantal bestanden in een tijdelijke directory.

Tijdelijke bestanden van de witte versie
De applicatie werd weer in de debugger geladen en binnen de kortste keren wisten we een routine te vinden in ‘truedisk.dll’ die de verschillende bewerkingen op de versleutelde schijf uitvoert. Ook het commando om het beveiligde gedeelte als onbeveiligde schijf te mounten wordt vanuit deze dll gegeven. We plaatsten een breakpoint in de routine en na het invoeren van een geldige vingerafdruk hadden we de beschikking over de juiste sleutel. Het leek nu eenvoudig de locatie van de opgeslagen sleutel op de stick op te sporen, die hebben we immers nodig om andere sticks waarvan we niet zelf een vingerafdruk hebben ingegeven te kraken. Hoe goed we echter ook zochten, we konden de locatie niet achterhalen - noch in het versleutelde bestand, noch in het geheugen, noch in de programmaroutines was enig spoor van de key te vinden. Een kleine tegenslag.

Debugvenster witte stick, klik voor groter.
We lieten ons echter niet uit het veld slaan. We konden met de kennis van de goede sleutel niet de locatie van de opgeslagen sleutel terugvinden en moesten daarom kiezen voor een andere aanpak: via het programma opsporen welke routines de sleutel aanroepen en zo de locatie proberen te achterhalen. Na enige tijd wisten we de routine te vinden die verantwoordelijk is voor het valideren van de vingerafdruk. Door deze aan te passen op dezelfde manier als bij de zilveren stick leken we al snel resultaat te hebben geboekt: het programma accepteerde een onjuiste vingerafdruk als de juiste. Helaas bleef het hier voorlopig bij. De decryptieroutine in truedisk.dll kreeg blijkbaar niet de juiste sleutel: de ‘ontsleutelde’ data bleek onleesbaar.
Na een aantal uren zweten en - toegegeven - schelden konden we eindelijk achterhalen waar het tot nu toe fout ging. De juiste encryptiesleutel is gekoppeld aan iedere vinger die in de database is ingevoerd. Op het moment dat een afdruk wordt verwijderd via de software, wordt de afdruk niet uit de database verwijderd maar overschreven met willekeurige data. Dit betekent dat als een routine wordt aangepast om een willekeurige vingerafdruk als de juiste te accepteren, een verkeerde sleutel aan de decryptieroutine wordt doorgegeven. We moesten verder graven. Een andere routine werd door ons aangepast zodat de juiste vinger werd herkend. Hier ging het even mis, tijdens het experimenteren bleek dat we per ongeluk de eerste vingerafdruk uit de database hadden verwijderd. Hierdoor werd wederom een verkeerde sleutel gebruikt. De oplossing bleek eenvoudig: eerst een foute scan aan het programma doorgeven en pas daarna een goede afdruk emuleren. Eindelijk werd de goede sleutel gebruikt en waren de opgeslagen gegevens vrij toegankelijk.
Het kostte behoorlijk meer tijd, maar uiteindelijk konden we toch weer bij de versleutelde gegevens. Het is wel lastiger dan bij de vorige sticks, maar nog steeds goed te doen.
Waarom zijn deze sticks kwetsbaar?
Wat is nu de reden dat deze sticks kwetsbaar bleken voor onze hackpogingen? Bij de zilveren stick is het eenvoudig te verklaren. De beveiligde partitie is verborgen door de controller totdat een speciale instructie hem vertelt de gegevens zichtbaar te maken. Door simpelweg deze instructie te vervalsen kunnen deze gegevens ontsluierd worden. De witte stick maakt het door het gebruik van encryptie een stuk lastiger. Het gebruik van vingerafdrukherkenning wordt ook regelmatig als zeer betrouwbaar aangemerkt. Toch maakt het toepassen deze techniek de stick juist kwetsbaarder dan wanneer een wachtwoord gebruikt zou worden. Dat klinkt verrassend, maar we zullen dit toelichten.
Als een programma gebruikmaakt van een wachtwoord als sleutel voor de encryptie van gegevens, hoeft de sleutel niet ergens te worden opgeslagen. Het programma wordt opgestart en met het ingevoerde wachtwoord als key kunnen de gegevens ontsleuteld worden. Nergens in het programma of op de computer staat de goede sleutel opgeslagen. De enige voorwaarde is dat de gebruiker het juiste wachtwoord onthoudt.
Een vingerafdruk is echter verre van precies. Als dezelfde vinger twee keer achter elkaar gescand wordt zullen er al subtiele verschillen in de uitkomst zitten. Onder meer de manier waarop een vinger over de sensor beweegt heeft al invloed op de scan. Bij het vergelijken van een vingerafdruk wordt daarom altijd een beetje tolerantie toegestaan. Je kunt hierdoor niet de vingerafdruk gebruiken als sleutel om gegevens te beveiligen, daarvoor is een exacte sleutel nodig die niet wijzigt. De systemen die gebruik maken van een vingerafdruk zullen dus altijd een iets andere weg moeten bewandelen: ze versleutelen de gegevens met een willekeurige key, en deze sleutel wordt ergens verstopt. Als een juiste vingerafdruk wordt herkend kan de sleutel opgehaald worden en gebruikt worden om de gegevens weer vrij te geven. Het zal inmiddels duidelijk zijn dat dit een ernstige kwetsbaarheid betekent: als de software de sleutel kan benaderen, kan een kwaadwillende dat ook.
Dit probleem is op twee manieren te omzeilen. Ten eerste kan er natuurlijk een wachtwoord gebruikt worden, zoals bijvoorbeeld Truecrypt dat doet, maar dit werkt zoals gezegd niet bij een systeem dat is gebaseerd op een vingerafdruk. De tweede methode is om de toegang tot het programma zo moeilijk mogelijk te maken. Om dit te bereiken zal de controller van de stick de volledige validatie van de vingerafdruk moeten doen. In theorie zou een goede hacker alsnog gegevens van de microcontroller kunnen halen, maar dit is echt vele malen moeilijker dan het hacken van de software. Het nadeel is uiteraard dat een hardwareoplossing ook vele malen duurder is.
Conclusie
Op de vorige test kwamen verschillende reacties - waaronder die van de fabrikant - dat de sticks voldoende veiligheid bieden, immers kan niet iedereen dezelfde dingen uitvoeren als die wij in deze tests hebben gedaan. Het is echter niet onmogelijk, en de kans dat iemand een handig neefje heeft die het wel kan is zeer zeker realistisch. Daarnaast kan in alle gevallen een aangepaste softwareversie via internet worden verspreid zodat iedereen ongeoorloofd gegevens van de stick kan halen, en als dat gebeurt is de beveiliging alsnog vrijwel volledig waardeloos.
In eerste instantie was de leverancier nog niet helemaal zeker van ons onderzoek. Toen we echter de inhoud van een tweede set opgestuurde sticks aan hem konden tonen was hij overtuigd en reageerde hij heel sportief op de resultaten. Hij gaf aan blij te zijn met onze test. 'Ik wil graag een goed product aan mijn klanten leveren, als blijkt dat dat niet het geval is zal ik er alles aan doen om de problemen op te lossen. Alle klanten zullen op de hoogte gesteld worden van de (on)mogelijkheden van de door ons geleverde sticks. We zullen de aanbevelingen die Tweakers.net ons heeft gedaan gaan verwerken in een nieuwe, beter beveiligde, stick.'
In het geval van deze twee sticks zal onze conclusie duidelijk zijn: beide sticks bieden voldoende gebruiksgemak, zo is het inloggen op een website via het lezen van een vingerafdruk wel handig, en - niet onbelangrijk - het gadget- en patsgehalte ligt behoorlijk hoog. Op het punt van beveiliging schieten ze echter te kort en zou ons advies nog steeds een oplossing met Truecrypt of een vergelijkbaar programma zijn.
Tweakers.net is weer veel dank verschuldigd aan Jeroen, alias Sprite_tm. Op zijn website is een Engelse versie van dit artikel te lezen.