Mag Skype worden gereverse engineered?

see-figure-one.pngEen beveiligingsonderzoeker heeft het gedrag van de VoIP-software Skype onderzocht. Op basis van die reverse engineering heeft hij een groot deel van de code achterhaald, meldde Webwereld vrijdag. Daarop, zo meldde Phoronix, vloog Skype meteen in de tegenaanval, met gestrekt been, Zidane-kopstoot én kruistrap:

This unauthorized use of our application for malicious activities like spamming/phishing infringes on Skype’s intellectual property. We are taking all necessary steps to prevent/defeat nefarious attempts to subvert Skype’s experience. Skype takes its users’ safety and security seriously and we work tirelessly to ensure each individual has the best possible experience.

Nu kun je natuurlijk “gatver wat een rotopmerking” zeggen, maar we zijn hier een keurig juridisch blog (niet lachen daar achterin), dus laten we eens kijken naar de achterliggende vraag: mag je Skype reverse engineeren en daarmee je eigen Voice-over-IP-client op de markt brengen?

Reverse engineeren is een algemene term voor het uit elkaar halen van een product (of software) om te zien hoe dit opgebouwd is. Specifiek voor software worden ook wel termen als disassembleren of decompileren gebruikt, maar algemeen gesproken komen ze op hetzelfde neer: de software wordt uit elkaar geplozen en geanalyseerd om te zien hoe deze werkt. Omdat hierbij een kopie van de software wordt gemaakt, valt dit in principe onder het auteursrecht.

De Auteurswet zegt dat software mag worden gereverse-engineerd om interoperabiliteit van zelf ontwikkelde software met andere software tot stand te brengen. Zo mag een ontwikkelaar een eigen driver maken om de (embedded) software in de grafische kaart te kunnen besturen. Hij mag daarvoor de bestaande driver pakken en deze disassembleren: de binaire code uit elkaar halen om zo in één keer te zien wat de driver allemaal voor commando’s kan versturen en ontvangen. Ook mag hij het communicatieprotocol observeren en daarmee achterhalen hoe zijn eigen software moet werken.

Een lastige beperking aan het recht om te reverse engineeren is dat het moet gaan om het interoperabel maken van eigen software. In veel gevallen is het doel van reverse engineering eerder het maken van eigen software die hetzelfde doet als de software die uit elkaar wordt gehaald. Het “klonen” van software via reverse engineering is echter expliciet verboden. Het voorbeeld van de driver hierboven is een grensgeval: weliswaar wordt de driver een soort van gekloond, maar het doel is om de eigen software met de software in de kaart te laten werken.

In de praktijk is dit lastig werkbaar: wie een driver disassembleert en dan een nieuwe driver maakt, zal al héél snel ” bewust of onbewust ” auteursrechtelijk beschermde delen overnemen. Als best practice geldt daarom het principe van de “Chinese muur”, waarbij twee teams samenwerken bij de ontwikkeling van software op basis van reverse engineering. Team A haalt de oorspronkelijke software uit elkaar en documenteert de functionaliteit. Team B ontvangt alleen deze documentatie en krijgt geen toegang tot de oorspronkelijke software. Daarmee kan team B zelf software maken zonder “besmet” te zijn met de gereverse-engineerde broncode.

Speciaal voor protocollen ligt het net weer anders: je mag netwerkverkeer observeren en daaruit achterhalen hoe een protocol werkt. Als je dan zonder andermans client of server te bekijken je eigen implementatie van dat protocol maakt, is er juridisch niets aan de hand. Dat reverse engineeren van een protocol is niet waar de Auteurswet op doelt. Maar in het Skype-geval is niet alleen netwerkverkeer geanalyseerd maar ook de client van Skype zelf.

Arnoud<br/> Afbeelding: Revealing Skype Traffic: When Randomness Plays with You, Dario Bonfiglio et al., SIGCOMM”07, August 27″31, 2007, Kyoto, Japan.

25 reacties

  1. Specifiek voor software worden ook wel termen als disassembleren of decompileren gebruikt… Een koe is wel een dier, maar een dier is niet altijd een geen koe. Ik heb meer dan eens “ge-reverse-engineerd” zonder dat daar een disassembler of decompiler bij te pas kwam, bijvoorbeeld met ethernet- en rs232 sniffers.

  2. @ikke: Het gaat hier om software zoals jezelf in je 1e zin quote. Bij sniffing van ethernet/rs232 kijk je naar pakketten/frames en dat zijn slechts een rijtje enen en nullen en niet specifiek een code van doe dit of doe dat..

  3. > Hij mag daarvoor de bestaande driver pakken en > deze disassembleren: de binaire code uit elkaar > halen om zo in één keer te zien […]

    Nou, in één keer, dat valt nog wel tegen, denk ik. C-code is al moeilijk te lezen (zelfs als ik die zelf jaren geleden geschreven én gedocumenteerd heb), die van een ander nog moeilijker, assemblercode is weer lastiger, en de assembler uit een disassembler bevat bovendien vaak (altijd?) geen symbolische namen.

    Dus: razend moeilijk werk, heel vaak opnieuw beginnen, blijven pietepeuteren.

  4. Mijn gedachte bij “in één keer” was dat het sneller is dan protocollen blijven bekijken, omdat je bij disassembleren alle gevallen kunt bekijken en bij het protocol in actie niet. Er zitten vast corner cases in de software die je nooit tegenkomt in jouw situatie, maar uiteraard wel bij je eerste alfatester. Die corner cases kun je dan opsporen in de disassembled broncode.

  5. Beetje offtopic maar ik realiseer me ineens dat ik het hele idee van beschermde software wat vreemd vind. Ik snap dat broncode beschermd is door het auteursrecht. Maar executeerbare software (Gecompileerd naar een binair iets) levert een produkt op wat in de verste verte niet meer lijkt op de broncode. En de verandering is gedaan door een compiler waar de auteur niet zoveel mee te maken heeft. Waarom is een programma in binaire vorm dan nog steeds beschermd? Ik mis vast iets.

  6. @Sebastiaan: ik help het je hopen, maar er zijn helaas nog steeds er weinig XMPP-gebasseerde clients. In tegenstelling tot e-mail is standardizatie van chat en VoIP nooit echt van de grond gekomen. Alleen webconference hardware gebruikt wel allemaal een standaard (H.264 en soms SIP). Ook daar zijn gratis clients voor (en andere features, zoals koppeling met gewone telefoonnummers), maar blijkbaar sluit dit niet aan bij de belevingswereld van de meeste consumenten: die gebruiken liever een gesloten product als Skype, MSN of iets dergelijks. Ik vermoed omdat de gesloten producten een centraal systeem hebben: je kan alleen bij Skype of MSN registereren, terwijl de meeste standaarden schaalbaarder zijn: je kan je op meerdere plaatsen registreren, en dat is lastig (mijn conclussie: de meeste consumenten willen maar een beperkt aantal keuzes.)

    Arnoud, dank voor deze nuttige post. Het is erg nuttig om te weten dat het onderzoeken van een protocol gewoon mag. Of je er tegenwoordig veel aan hebt is een tweede: ik neem aan dat de meeste protocollen versleuteld zijn, wat het bestuderen ervan een stuk minder triviaal maakt (zelfs als je een eigen sleutel kan maken, want daarvoor moet je eerste een client geschreven hebben, en daarvoor is het handig om het protocol te kennen…)

  7. Het leuke van reverse enginering is natuurlijk dat je dat kunt “outsourcen” naar een locatie waar de wetgeving “reverse-engineer friendly” is. Daar plaats je dus je team A, die dan de kennis teruggeven naar een team B, wat overal kan zijn.

    Skype gebruikt een waanzinnige reeks trucs om reverse enginering moeilijk te maken, waardoor het sniffen van netwerkverkeer alleen volslagen onvoldoende is om te achterhalen hoe het werkt. Je zult echt in de code moeten kijken om een interoperable client te maken, en daarbij de nodige beveiligingen moeten doorbreken. Bovendien verwacht ik een wapenwedloop van updates die interoperabiliteit breken zodra een concurrerende client uitkomt, dus ik zou er zelf niet eens aan beginnen.

    Beter zou het zijn als Skype gedwongen kon worden zijn protocolspecificaties vrij te geven, zoals dat ook gebeurt is met Samba voor Microsoft, op grond van misbruik van een monopolie ontstaan door Skypes gedrag.

    Nog beter zou het zijn als een concurrent gebaseerd op open standaarden (SIP, etc.) een kans zou krijgen. Het business-model van Skype is me voor mijn gevoel net iets te veel gebaseerd op het eerst gratis weggeven, later zien we wel hoe we ze uitknijpen model waar een andere bedrijfstak ook om berucht is.

  8. @Jeroen: Het zou mij niet verbazen als Microsoft op termijn verplicht wordt om de documentatie van het protocol te publiceren vanuit antimonopoliewetgeving. De catch zou dan kunnen zijn dat de encryptiesleutels niet vrijgegeven hoeven worden, wat welliswaar de weg opent om een eigen client te schrijven, maar niet om in te loggen op het Skype netwerk. Natuurlijk is het een kwestie van tijd voordat de sleutel publiek is via talloze websites.

  9. Er is nog een ander issue. De communicatie tussen skype clienten en servers is in feite encrypted. Dit is een vorm van beveiliging.

    In Nederland bijvoorbeeld is het niet toegestaan de beveiliging van een computer te verbreken. Het inzetten van een reverseengineered Skype client zou de beveiling van computer die Skype draaien compromiteren. Skype klanten hebben een overeenkomst met Skype om verkeer van andere Skype klanten over hun computers te leiden maar niet met willekeurige andere partijen die op het netwerk van Skype clients inbreken.

    Een vervelend bijkomstigheid is ook dat door het reverse-engineeren het mogelijk zou worden om Skype-achtige clients te ontwikkelen die alleen maar leachen op het netwerk en zelf geen onderdeel van het netwerk vormen en daardoor het netwerk qua traffic vol kan lopen ten nadele van de normale Skype gebruikers.

  10. Het zou mij niet verbazen als Microsoft op termijn verplicht wordt om de documentatie van het protocol te publiceren vanuit antimonopoliewetgeving

    Skype vormt geen monopoly in de telecommunicatiewereld. In de telecom wereld zijn veel grote speleres en bestaat voldoende concurrentie en is dus ingrijpen van overheden niet voor de hand liggend.

  11. Het leuke bij mededingingsrecht is dat je eerst moet vaststellen wat de markt is, en dat geeft eindeloze discussies. Is de markt “telecommunicatie” of “voice over ip” of “internetbellen”? Hoe specifieker de markt naar Skype-achtige toepassingen gaat, hoe machtiger Skype is in die markt en hoe eerder een licentieweigering verboden zou zijn.

    Het inzetten van een reverseengineered Skype client zou de beveiling van computer die Skype draaien compromiteren.

    Kun je dit toelichten? Bedoel je dat Skype zo lek is dat je er zo kunt binnendringen als je weet hoe de client werkt?

  12. Als Skype op een client draait is Skype een onderdeel van dat systeem. Als een niet skype client data over het skype netwerk wil versturen moeten die niet-skype client dus de beveiligde toegang tot die Skype clients doorbreken om zonder toestemming van de gebruiker de data over die systemen te routeren. Dat is dan toch effectief een computermisdrijf.

  13. We moeten allemaal klikken op “ik accepteer de voorwaarden” om Skype te kunnen gebruiken. Daarin staat dat je belooft niet te reverse engineeren of daartoe aan te zetten. Me dunkt dat Skype wel mag aannemen dat dit bedrijf tenminste een Skype-gebruiker heeft die die voorwaarde heeft geschonden. Uit eerdere bijdragen hier heb de indruk dat zo’n overeenkomst in elk geval niet bij voorbaat volkomen ongeldig is.

    Maar is daarmee ook het bedrijf als zodanig aan die overeenkomst gebonden? (Bij mijn werkgever is dat wel zo als ik het goed begrijp: als ik als werknemer iets iemand anders iets beloof doe ik dat impliciet namens mijn werkgever, zelfs als ik dat van die werkgever helemaal niet mag. Maar dat heb ik alleen ooit eens ergens gehoord in een bepaalde context; ik weet niet of het nog van het soort belofte afhangt.)

  14. Bedenk wel dat Skype vooral “reverse engineering” probeert te blokkeren omdat het product goed beveiligd dient te zijn! Vandaar de diverse truuks om hackers te misleiden. En natuurlijk ook de reden waarom ze helemaal niet blij zijn indien de code reverse ge-engineerd wordt. De Skype-beveiliging is deels gebaseerd op obfuscation. En hoe machtig is de markt van Skype? Tja, de meest populaire client is die voor mobiele devices. Met een onbeperkte internet-verbinding over WiFi of GPRS kun je gratis via Skype bellen terwijl dat anders geld kost. Een groot aantal telecom-bedrijven zijn daar ook helemaal niet blij om. Maar voor bedrijven zijn er alternatieve mogelijkheden. Dan denk ik b.v. aan het Asterisk project, waarmee iedereen met een computer een eigen telefooncentrale kan bouwen. Met wat extra software en een netwerk-verbinding kun je dan in je bedrijf alle interne telefonie gewoon over het netwerk sturen en voor extern bellen via het netwerk naar de Asterisk server en verder naar buiten over het telefoonlijntje. Of je koppelt Asterisk aan Skype. 🙂 Er zijn verder ook commerciele VOIP toepassingen maar veel hebben problemen om te concurreren met Skype en Asterisk. Immers, commercieel tegen gratis… Maar het gaat alleen maar om communicatie-middelen en dit is een enorm complexe markt, zeker op technisch gebied. Macht over deze markt is meestal nooit van lange duur omdat de competitie altijd weer met iets beters wil komen. In dit geval ging het om een beveiligings-expert die de code wilde onderzoeken op zwakke punten. Zie ik geen kwaad in want Hackers doen dit ook, maar dan veel minder opvallend en met meer risico’s dat ze slagen. Skype moet eigenlijk niet vertrouwen op obfuscatie maar gewoon op een goed-ontwikkeld en degelijk gebouwd protocol. Het zou juist heel mooi zijn indien anderen hun eigen Skype-clients kunnen ontwikkelen! 🙂

  15. Als een niet skype client data over het skype netwerk wil versturen moeten die niet-skype client dus de beveiligde toegang tot die Skype clients doorbreken om zonder toestemming van de gebruiker de data over die systemen te routeren.

    De gekloonde Skype-client authenticeert zich op dezelfde manier als de echte: middels het wachtwoord van de gebruiker, dat deze legaal verkregen heeft van de dienstaanbieder. (Of in de AV staat dat dit niet mag, is een contractueel iets tussen hem en de aanbieder; profiteren van wanprestatie is niet verboden.)

    Ik zie werkelijk niet waar de gekloonde Skype-client een geheim of truc gebruikt om wederrechtelijk binnen te dringen op het Skype netwerk. Welk wachtwoord, welke code, welke bypass zet hij in die uit de echte Skype-client is afgekeken?

    Wie bedoel je met ‘de gebruiker’ wiens toestemming ontbreekt? De gebruiker die de kloon runt, geeft natuurlijk toestemming voor het werken met de kloon. De wederpartij in de conversatie communiceert via het Skype protocol en autoriseert daarmee communicatie via het Skype-protocol.

    De stelling “een pakketje verzonden naar een openstaande service is computervredebreuk als de afzender een illegale kloon is” is apert onjuist. Je dringt niet binnen in die service; die staat open voor precies dit soort berichten. Als ik met telnet een SMTP client naboots, dring ik dan binnen in jouw mailserver?

  16. Een lastige beperking aan het recht om te reverse engineeren is dat het moet gaan om het interoperabel maken van eigen software. In veel gevallen is het doel van reverse engineering eerder het maken van eigen software die hetzelfde doet als de software die uit elkaar wordt gehaald.

    Punt is natuurlijk wel dat de Skype client voor linux geen **** voorstelt. Wat dat betreft kan je stellen dat jouw eigen concurrende product geen kloon is, maar gewoon een product wat voortborduurt op de skype client for linux, maar dan eentje die /wel/ gewoon werkt. (Bij skype voor linux is het altijd maar weer bidden dat je geluid het doet, en dat de andere partij dat ook hoort).

  17. @Arnoud, #18: Skype gebruikt soms andere peers die niet in het gesprek betrokken zijn om door NAT/firewalls te komen. Nu weet ik niet of ze zo onhandig zijn om de encryptie van het gesprek op te breken in die tussenliggende node (i.e. of je daar kunt tappen), maar op zijn minst maakt het Skype nodes tot potentiële portscanners by proxy / DDoS clients. Daarnaast is het heel goed mogelijk dat de (tot nu toe vrijwel onondoorbroken) encryptie laag problemen met de onderliggende protocol of implementatie beschermd heeft.

    Misschien dat daar de computervredebreuk in zit? Ja zo heel overtuigend vind ik het zelf ook niet.

  18. Een lastige beperking aan het recht om te reverse engineeren is dat het moet gaan om het interoperabel maken van eigen software. In veel gevallen is het doel van reverse engineering eerder het maken van eigen software die hetzelfde doet als de software die uit elkaar wordt gehaald.

    Wat is het verschil tussen reverse engineeren voor het interoperabel maken van eigen software en reverse engineeren voor het maken van eigen software die interoperabel is?

    Iets anders: interessant dat de legaliteit van het reverse engineeren van een hardwaredriver afhankelijk is van de vraag of de hardware firmware bevat.

  19. @Bram(#6):

    Ik snap dat broncode beschermd is door het auteursrecht. Maar executeerbare software (Gecompileerd naar een binair iets) levert een produkt op wat in de verste verte niet meer lijkt op de broncode. En de verandering is gedaan door een compiler waar de auteur niet zoveel mee te maken heeft. Waarom is een programma in binaire vorm dan nog steeds beschermd? Ik mis vast iets.
    Wat je mist is dat de gecompileerde software wel degelijk lijkt op de broncode, althans daarvan een bewerking is in de zin van art. 13 Aw:
    Onder de verveelvoudiging van een werk van letterkunde, wetenschap of kunst wordt mede verstaan de vertaling, de muziekschikking, de verfilming of tooneelbewerking en in het algemeen iedere geheele of gedeeltelijke bewerking of nabootsing in gewijzigden vorm, welke niet als een nieuw, oorspronkelijk werk moet worden aangemerkt.
    (Een computerprogramma is voor de Auteurswet een werk van letterkunde, wetenschap of kunst, zie art. 10 lid 1 sub 12 Aw.)

  20. Ik zei “hetzelfde doet”, niet “interoperabel zijn”. En met “hetzelfde doen” doelde ik op artikel 45m lid 2 sub c, dat verbiedt de gereverseëngineerde informatie

    te gebruiken voor de ontwikkeling, de produktie of het in de handel brengen van een computerprogramma, dat niet als een nieuw, oorspronkelijk werk kan worden aangemerkt
    waarmee wordt bedoeld een programma dat in feite een kopie (verveelvoudiging) is van het programma dat je hebt gereverseëngineerd. Oftewel simpelweg klonen. Dat kan namelijk ook zonder dat je broncodes overtypt, net zoals het in je eigen woorden navertellen van een geheel boek of complete film een inbreuk op het auteursrecht is.

    Een eigen programma maken dat hetzelfde doet en géén inbreuk maakt, is natuurlijk wel legaal. De vraag is alleen wel hoe je dan informatie verkregen door reverse engineering daarbij kunt gebruiken, want zodra die informatie in je eigen programma terechtkomt, is sprake van een inbreukmakend fragment. Hoewel je dan weer kunt stellen dat het programma op zich wel een nieuw, oorspronkelijk werk is (net zoals een boek dat blijft ondanks een geplagieerde passage), maar dat zal een kwestie zijn van hoe veel er gebaseerd is op de reverse engineering.

  21. Arnoud, kan je dat niet eenvoudig afvangen door een chat programma te maken dat universeel is en op alle grote standaarden werkt? Dan bied je een universeel communicatie programma in plaats van een programma specifiek voor een enkel netwerk is en doe je dus meer dan Skype alleen doet.

    Is ook reauze handig als de helft van je vrienden google talk gebruikt en de andere helft skype, dus het is ook nuttig en niet een kunstgreep alleen om onder auteursrechten uit te komen.

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.