Wanneer is een API reverse engineeren computervredebreuk?

chip-paspoort.jpgEen lezer vroeg me:

Onlangs is de OV-Chipkaart app uitgekomen. Uit analyse blijkt dat de app per request een specifieke signature meestuurt, en zonder die signature komt er geen reactie vanuit de server van Trans Link Systems. De methode waarop de signature gemaakt wordt is te achterhalen met decompileren en daarna eenvoudig na te maken. Het is erg moeilijk te achterhalen door puur naar het verkeer te kijken. Mijn vraag is: als iemand API calls doet op basis van die kennis, is er dan sprake van computervredebreuk?

Als ik het goed begrijp, dan doet die app dus aanroepen op de server van TLS. Om te bewijzen dat de app echt de app is, wordt daarbij een signature/code gemaakt op basis van een sleutel die in de app aanwezig zit. Heb je de sleutel, dan kun je dus de code namaken en je eigen aanroepen als echt presenteren.

Van computervredebreuk is sprake als je binnendringt in andermans computer. Een ov-chipkaart is een computer, en die heb je te leen van TLS. Binnendringen daarin is dus mogelijk. Maar een app op je eigen telefoon, daar kun je niet in binnendringen. De app is geen ‘geautomatiseerd werk’, de telefoon wel maar die is van jezelf.

Binnendringen in de server van TLS is mogelijk en dat kan wel computervredebreuk zijn. Alleen, er moet dan sprake zijn van binnendringen zonder recht, wederrechtelijk dus. Je zegt dan, je mag inloggen met de app maar handmatig/eigen app inloggen mag niet. Ik twijfel of dat werkt. Als ik zeg “hier is de sleutel” en jij maakt een sleutel erbij, dan pleeg je geen huisvredebreuk als je met die extra sleutel binnengaat. Het gaat om de plek waar je mag zijn, niet het middel waarmee je daar komt. Een undocumented feature aanroepen door de API-URL te manipuleren (misschien doet &debug=1 iets leuks?) zou ik wel computervredebreuk noemen.

Auteursrechtelijk is het spannender. Je decompileert en achterhaalt de werking van de app. Als het doel dan is een kloon van de app te maken, dan botst dat met het auteursrecht op de app. Maar ‘kloon’ is een beperkt begrijp. En een nieuwe app die alleen dezelfde API calls doet, zou ik niet snel een ‘kloon’ noemen. De wet hanteert “computerprogramma, dat niet als een nieuw, oorspronkelijk werk kan worden aangemerkt” als criterium. Dus echt pure nabouw, dezelfde functionaliteit en layout.

Je kunt je ook afvragen of je wel de ‘werking’ van de app aan het achterhalen bent. Je wilt in feite alleen het algoritme voor het maken van de code achterhalen, en natuurlijk het element zelf dat daarvoor nodig is. Hoe de rest van de app werkt, is minder van belang.

Arnoud

28 reacties

  1. Een ov-chipkaart is een computer, en die heb je te leen van TLS.

    Is dat zo? In 2007 heb ik wel eens een OV-chipkaart uit een automaat getrokken, en daarbij betaalde ik 7,50 euro borg. Echter, tegenwoordig is er geen sprake meer van borg, en is het volgens mij zo dat je de kaart koopt voor dat zelfde bedrag.

    Overigens was in 2012 iedereen bij ’t GVB en TLS vergeten dat ze in 2007 een borg rekenden. Op de vraag of ik daar nog een kwitantie van had kon ik niet positief antwoorden…

        1. Ik vind dat ook hoogst dubieus, zeker omdat (zoals Alex hieronder zegt) de AV twijfelachtig ter hand gesteld worden.

          @Alex: bij automaten mag je volstaan met melden dát er AV zijn en waar je die kunt opvragen. Het is dan niet redelijk dat de automaat ze uitprint of dat er een giga-sticker op moet zitten met de tekst.

          1. De keer dat ik een (anonieme) OV-Chipkaart uit een NS automaat trok werd niet eens vermeld dat er algemene voorwaarden (van wie dan ook) van toepassing waren. Terwijl er alle ruimte op het scherm van een NS-kaartautomaat is.

  2. Puur het maken van een kloon (zelfde functionaliteit, vergelijkbare UI) is toch niet verboden? Als je maar geen code kopieert. Het alleen kopiëren van een authenticatiesleutel zou geen probleem moeten zijn, omdat je aannemelijk kunt maken dat die sleutel de enige is die KAN werken, dus dat er geen creativiteit zit in de sleutel zelf.

    Als iemand een kloon maakt zonder code te kopiëren, dan heeft die kloon vrijwel altijd significante meerwaarde boven het origineel: anders zou de auteur nooit de moeite hebben genomen om de kloon te maken. Zelfs als de kloon helemaal geen nieuwe functionaliteit bevat, kan er meerwaarde zijn: * de kloon kan veel goedkoper zijn dan het origineel (in wezen betekent dit dat het origineel veel te duur was, aangezien er een vergelijkbare hoeveelheid werk in de productie van beide zit) * de kloon kan open source zijn, wat bijv. het voordeel heeft dat er geen verborgen backdoors zijn, en dat anderen het kunnen uitbreiden * iemand kan het voor zichzelf leuk en leerzaam vinden om zo’n kloon te maken

    Als een kloon de zelfde UI heeft, de zelfde API gebruikt en de zelfde functionaliteit biedt, maar wel geheel is herschreven (op de API-key na), en op de bovengenoemde punten voordelen biedt, kan het dan nog gezien worden als een “computerprogramma, dat niet als een nieuw, oorspronkelijk werk kan worden aangemerkt”?

      1. Klopt, en er zijn mogelijk nog wel meer manieren waarop een kloon meerwaarde kan hebben.

        Mijn punt was vooral dat zelfs een echte kloon (met de zelfde UI en functionaliteit) significante meerwaarde kan hebben; mijn opsomming dient slechts als voorbeeld, en ik verwacht niet dat die opsomming compleet is.

  3. Door een app te bouwen die zich presenteert als de OV Chipkaart app presenteer je aan de poort van de server informatie die niet overeenkomt met de waarheid, teneinde informatie van die server te verkrijgen. Dat is computervredebreuk, niet anders dan een – strafbare – SQL injectie. Het strafbare zit erin dat je informatie presenteert die niet met de waarheid overeenkomt, met het doel informatie te verkrijgen uit de server.

    1. Dat gaat me wat snel. Bij een SQL injectie laat je commando’s uitvoeren waar de interface niet op ontworpen is. Maar in dit geval herhaal je precies het originele commando. Is handmatig een GET commando met basic-auth en User-agent headers naar een webserver typen dan ook computervredebreuk omdat ik me dan voordoe als Firefox?

      Als de app meer gaat doen dan de originele app kan (de debug=1 die ik noemde) dan zou ik een heel eind met je meegaan.

      1. Volgens mij valt de sleutel verkrijgen uit de app (en het intikken van een user-agent) gewoon onder met behulp van valse signalen of een valse sleutel, of door het aannemen van een valse hoedanigheid. Je doet je door de user-agent voor als Firefox, terwijl je dat niet bent. En door de sleutel uit de app te halen, doe je je voor als de app terwijl je dat niet bent.

        Maar in dit geval herhaal je precies het originele commando.

        Als ik iemands verbinding sniff en exact die commando’s naar de server stuur, is het dan geen computervrede breuk? Die sleutel in de app lijkt er voor gemaakt te zijn dan alleen de app kan communiceren met de server en verder niemand. Als je die sleutel dan gaat namaken (reverse engineeren) dan is het toch een valse sleutel of in elk geval een valse identiteit?

          1. Uit analyse blijkt dat de app per request een specifieke signature meestuurt, en zonder die signature komt er geen reactie vanuit de server van Trans Link Systems.

            Volgens mij is de belangrijkste vraag wat die signature doet. Bevat deze het commando (signature=35019214, haal alle transacties van gebruiker 350 op 19-02-2014) óf fungeert de signature als sleutel (transacties.php?id=350&date=19022014&signature=aj4SN*w)

            Het lijkt er op alsof deze signature geen enkel ander doel heeft dan het verifiëren van de herkomst van de call. TLS wil er dus zeker van zijn dat de call komt uit de app. Als je dit gaat omzeilen door deze signature na te maken en mee te sturen, is dat toch echt hetzelfde als het namaken van een sleutel.

            Als de signature het commando bevat dan is het wellicht anders want dan gaat het om het verschil tussen

            file.php?id=350&date=19022014
            en
            file.php?sign=aj4SN*w
            Maar uit de vraagstelling lijk ik op te maken dat de signature iets van een sleutel is.

            [edit] Je schreef zelf in eerdere blogs (http://blog.iusmentis.com/2012/12/27/wanneer-url-manipulatie-strafbaar-is-als-computervredebreuk/)

            Zodra je ergens bent waarvan je wéét dat je er niet mag zijn, ben je formeel al in overtreding.

            Dat is bij deze calls toch niet anders. Zonder een ingewikkelde methode van reverse engineering heb je onmogelijk toegang tot het systeem. Dan kan je toch niet met droge ogen beweren dat je niet wist dat je daar niet mocht komen?

            1. Jawel maar je mág zijn in de server van TLS, je bent immers gebruiker 350 en je vraagt je eigen gegevens op.

              Stel ik huur een garagebox en ik laat een sleutel bijmaken bij de schoenmaker op de hoek. Pleeg ik dan lokaalvredebreuk door die box binnen te gaan met deze ‘valse’ sleutel? Dat is immers niet de echte sleutel die de verhuurder me gaf.

              1. Op zich heb je gelijk als je stelt dat je gewoon die gegevens mag opvragen en dus toegang hebt tot het systeem. Maar alles in mij zegt dat als je zoveel moeite moet doen om toegang tot een systeem te krijgen dat je dan aan het binnendringen* bent. Je voert overduidelijk iets uit op het systeem wat de beheerder niet bedoeld heeft.

                Je zou namelijk ook kunnen zeggen dat TLS de app toegang geeft tot het systeem en niet jou als gebruiker. De app heeft immers de sleutel en deze is niet aan de gebruiker gegeven.

                Als mijn buurman zegt, je mag je motor wel in mijn schuur zetten en hij mij de sleutel geeft, dan mag ik die sleutel toch niet aan een vriend geven zodat hij de schuur in mag?

                Een stapje verder dan: Als de vragensteller nu een nieuwe app bouwt en deze distribueert, plegen de nieuwe gebruikers (die de originele app niet hebben!) dan wel computervredebreuk? Immers TLS heeft die gebruikers geen toegang tot het systeem gegeven. Ze hebben alleen de gebruikers/bezitters van de originele app toegang gegeven.

                *Waarschijnlijk is binnendringen niet de juiste term

                1. Ik snap je gevoel. Als iemand een officiële route openstelt en jij doet heel veel moeite om daar omheen te komen, dan voelt dat ergens onzorgvuldig in het maatschappelijk verkeer zeg maar (art. 6:162 BW). Ook al is het eindresultaat op zich misschien rechtmatig. Zeg maar, ik zet een ladder tegen de muur van een parkeergarage en klim zo naar de bovenste verdieping om aldaar in mijn auto te stappen. Dat is best wel niet de bedoeling hoewel ik in die garage mag zijn op grond van de bewaarnemingsovereenkomst die ik met de exploitant heb. Maar om dan te zeggen dat ik stráfbaar ben?

                  Het is lastig analogieën te bedenken, want dit soort dingen doet niemand. Nou ja hooguit die sleutel namaken maar dat is zo’n bagatel daar ligt niemand wakker van. Maar in ICT-land doen mensen wél zulke dingen. Want die officiële app die is stom en beperkt en niet configureerbaar en heeft een interface waar je gek van wordt. Dus dan klus je zelf een app die normaal doet en aan de hackerverwachtingen voldoet. Het aldus hacken van garageboxen of voordeuren komt veel minder vaak voor.

        1. Oei, dus als ik een onbekende browser gebruik en daar een andere user-agent in plaats in de instellingen omdat ik anders bepaalde sites niet kan openen, dan ben ik dus strafbaar omdat ik de browser zich laat voordoen als een andere browser? Dat zou wel raar zijn, dan vraag ik me af waarom dat in diverse browsers zit ingebouwd en bij andere browsers de extensies om dit te doen niet allang verbannen zijn…

  4. Als automobilist vind ik het huidige systeem maar knap vervelend. Die enkele keer dat ik een kaartje nodig had (mijn auto had een grote beurt nodig) ging ik naar een automaat, koop een kaartje en ga er van uit dat deze geldig is. Nee, je moet dan ook nog eens inchecken en uitchecken. Maar goed, nu weet ik dat dus weer… 🙂 Toch voelt het alsof ik het kaartje koop en niet in bruikleen heb. Als het in bruikleen was afgegeven dan verwacht ik dat ik het kaartje in dezelfde automaat weer kan terugstoppen na gebruik.

    Wel balen. Door het in/uitchecken te vergeten heb ik nu nog steeds een geldig kaartje waar je een uur mee kunt reizen in het OV. Als ik er niet mee mag doen wat ik wil, wat moet ik er dan mee? 🙂

    Maar goed, de discussie hier gaat niet over de chipkaart zelf maar een app. Een app die voor mij geen waarde heeft. Maar zelfs als deze interessant zou zijn voor mij dan mis ik toch de Windows-varianten. Mijn Windows 8 Phone, mijn Windows 8 RT tablet en mijn grote desktop worden niet ondersteund door deze app. En dat is een ernstig gebrek en reverse engineeren zou kunnen helpen om alsnog een Windows-versie op de markt te kunnen krijgen. Dus in hoeverre zou ik in problemen komen als ik een kloon maak van die chipkaart-App voor Windows?

  5. Ik zit hier nog even over te denken…

    Het woord binnendringen heeft volgens het eindverslag van de Tweede Kamer dezelfde betekenis als bij normaal 138sr, waar het moet worden gezien als “toegang verschaffen tegen de onmiskenbare wil van de rechthebbende”. Daar zou, gezien de moeite die ze hebben genomen om je buiten te houden (je moet decompileren, etc.), voor te pleiten zijn.

    Evenzeer geldt dat, mijnsinziens, voor “valse sleutel”. Dat zou je dan meer overdrachtelijk moeten zien. De sleutel is namelijk niet als zodanig aan jou verstrekt als ik het goed begrijp, het is meer alsof je weet dat de sleutel onder de bloempot ligt en dat je nu dan maar zelf die sleutel pakt om binnen te treden.

  6. Auteursrechtelijk is het spannender. Je decompileert en achterhaalt de werking van de app. Als het doel dan is een kloon van de app te maken, dan botst dat met het auteursrecht op de app.

    Gaat het auteursrecht niet alleen over openbaarmakingen? Als ik een app decompileer, de code op twee regels aanpas, en vervolgens uitsluitend op mijn eigen telefoon installeer, dan maak ik toch niks openbaar?

  7. Mijn vraag is: als iemand API calls doet op basis van die kennis, is er dan sprake van computervredebreuk?

    Als ik het goed begrijp vinden deze API calls plaats met de server. Als ik het goed begrijp zijn die sleutels bedoelt om aan de server duidelijk te maken dat deze te maken heeft met de OV-Chipkaart app. Van binnendringen is al spraken wanneer je een valse signaal of valse sleutel gebruikt of een valse hoedanigheid.

    Maar een app op je eigen telefoon, daar kun je niet in binnendringen. De app is geen ‘geautomatiseerd werk’, de telefoon wel maar die is van jezelf.

    De conclusie van de vorige discussie was dat binnen dringen op een eigen eigendom wel mogelijk was, omdat dit uit de definitie van binnendringen volgt. De stelling dat een app geen geautomatiseerd werk zou zijn vraagt om een toelichting. Het begrip werk is mijn inziens dezelfde als het auteursrechtelijke begrip werk.

    Binnendringen in de server van TLS is mogelijk en dat kan wel computervredebreuk zijn. Alleen, er moet dan sprake zijn van binnendringen zonder recht, wederrechtelijk dus. Je zegt dan, je mag inloggen met de app maar handmatig/eigen app inloggen mag niet. Ik twijfel of dat werkt.

    Ik zou niet weten waarom dit niet zou werken. Als ik aan een buur een sleutel geef dan heeft hij daarmee nog niet een onvoorwaardelijk recht gekregen om mijn huis binnen te komen. In noodgevallen natuurlijk wel of als ik hem vraag om de planten water te geven. Standaard verwacht ik dat hij gebruik maakt van de bel.

    1. Probleem bij deze redenering is dat de sleutel slechts bedoeld is om de applicatie te beperken niet de persoon.

      Jij mag van de api gebruik maken en je krijgt zelfs de sleutel in een app van ze. Hoe kan jij dan nog binnendringen als je informatie van de server opvraagt met deze sleutel? Computervrede breuk is het dus niet. Als persoon heb je immers toestemming gekregen met het downloaden van de originele app.

      1. Waaruit maak jij op dat de sleutel is bedoeld om de app te beperken? Als dat zo zou zijn dan was er geen sleutel nodig want de app hoef je niet te beperken. Wat je niet inbouwt in de app, komt er ook niet uit.

        Volgens mij mag je van de app gebruik maken en mag de app (dmv de sleutel) gebruik maken van de api. Als je gebruik zou mogen maken van de api dan had je zelf wel de sleutel gekregen (en documentatie over de api).

        1. Als je de OV-Chipkaart App gebruikt, dan gebruik je de API. Het is dus duidelijk dat jij toestemming hebt om daarvan gebruik te maken. Is het dan computervredebreuk als je de informatie opvraagt met een ander programma via exact dezelfde aanroepen?

          En ja je hebt om een twitter client te maken bijvoorbeeld een consumer key en consumer secret nodig om de app toegang te geven. En een user key en user secret om toegang te krijgen tot een user account. Die laatste heb je als twitter gebruiker, die eerste zit ingebakken in je app. En over die key hebben we het hier, want dat is de key die independant implementations verhindert.

          Deze key regelt dus niet of een persoon toegang heeft of niet, maar of je met een specifieke toegang krijgt. Om bij twitter te blijven, het lijkt mij moeilijk vol te houden dat je geen toestemming hebt om de data op op de server via de API te raadplegen, wanneer je de officiele ytwitter app gebruikt en het dan computervredebreuk te noemen als je de sluetel uit dit programma achterhaalt en een eigen programma schrijft om dezelfde informatie te achterhalen. Je hebt immers een twitter account.

          Hoogstens zie ik gebeuren dat Twitter er achter komt en zegt dat je je niet aan de algemene voorwaarden houd en je account opzegt. Op dat moment heb je geen toegang meer, ook niet meer met de officiele client. Wat er dus weer voor spreekt dat jouw toegang niet afhangt van die api key en dus er geen sprake kan zijn geweest van computervrede breuk.

          1. Maar jij gaat ervan uit dat TLS je toegang geeft tot de API en ik zeg dat ze je toegang geven tot de app. Uit niets blijkt dat ze je toegang geven tot de API. Bij twitter kan je een key aanvragen en documentatie over de API. Bij TLS krijg je alleen de app.

            Ik betwijfel zeer sterk of het hetzelfde zou zijn als ik op deze manier probeer contact probeer te maken met de API van telebankieren. Of met de systemen van de belastingdienst via de API van DigiD.

            Misschien is het geen computervredebreuk (daar ben ik nog niet helemaal uit). Analogieën uit de echte wereld gaan zelden op dus alle genoemde voorbeelden halen het niet bij de digitale werkelijkheid. Ik denk wel dat het bijna niet anders dan kan leiden tot computervredebreuk. Wat wil je met de API gaan doen als het je is gelukt? Je kan niet een eigen app maken en die distribueren omdat TLS die gebruikers géén toestemming hebben gegeven tot het gebruik van de app. En ze eerst verplichten om de officiële app te installeren gaat natuurlijk niet gebeuren.

            Als het dan nog geen computervredebreuk is, dan is het waarschijnlijk wel het in voorbereiding hebben van. Net als dat je met een koevoet en een bivakmuts op straat wordt aangehouden door de politie. Of met de bouwtekeningen van Schiphol en de recepten voor een zelfgemaakte bom.

            Tot slot kan je het volgens mij gewoon tegen gaan door iets in je algemene voorwaarden op te nemen dat iemand niet direct gebruik mag maken van de systemen van TLS behalve met de door TLS uitgegeven producten (app/kaart/automaten op station). Je mag immers iemand verbieden om contact te maken met de server en volgens mij mag ik ook bij mij thuis zeggen dat er alleen mensen met een blauwe hoed naar binnen mogen….

    2. Over jouw voorbeeld met de sleutel aan de buren: als de buren ongewenst met jouw sleutel binnenkomen is dat wat anders als wanneer ze geen sleutel hebben. Het zal bijvoorbeeld geen inbraak zijn, omdat er geen sprake is van braak…

Geef een reactie

Handige HTML: <a href=""> voor hyperlinks, <blockquote> om te citeren, <UL>/<OL> voor lijsten, en <em> en <strong> voor italics en vet.