Ethereum - A tale of two hacks nl

Door Rannasha op donderdag 20 juli 2017 10:00 - Reacties (10)
CategorieŽn: Computers/ICT, Cryptocurrency, Views: 6.457

Het was ongeveer een jaar geleden toen ik op een zonnige maar, zoals meestal het geval is, te warme zomerdag een wandeling maakte in het gebied aan de voet van het Franse Jura-gebergte met mijn vrouw en jongste dochter. Ik heb ook een oudere dochter, die zeker nog niet in staat is om alleen thuis te blijven, maar zij was er niet bij. Ik weet eigenlijk niet precies waar ze wel was. Maar ze was ongetwijfeld ergens en het heeft hoe dan ook geen problemen opgeleverd.

Niet lang voor die wandeling had ik een kleine long-positie geopend in Ethereum, want ik was van mening dat de koers na een sterke daling wat terug zou veren. Zoals gebruikelijk, bewoog de koers in eerste instantie de verkeerde kant op, wat mij enigszins frustreerde gezien ik niet van verliezende posities hou (wat een van de redenen is waarom ik nauwelijks handel in cryptocurrencies). Gelukkig draaide de wind en kon ik de positie nadat ik weer thuis was met een kleine winst sluiten.

TheDAO

De achterliggende reden voor de eerder genoemde sterke daling was de hack van TheDAO. Voor wie het allemaal niet meer zo goed weet: Ethereum biedt de mogelijkheid om "smart contracts" te maken, stukjes code die bepalen onder welke voorwaarden crypto-tokens worden verstuurd en die geheel onafhankelijk en decentraal draaien. Het bekendste smart contract destijds was TheDAO, waar DAO staat voor "decentralized autonomous organization".

TheDAO zou een decentraal investeringsfonds moeten worden. Investeerders konden met hun Ethers aandelen (tokens) van TheDAO kopen en deze tokens konden worden gebruikt om te stemmen op investeringsvoorstellen. Als een voorstel voldoende stemmen zou krijgen, dan volgde automatisch een overboeking van de juiste hoeveelheid Ether naar de ontvanger, met natuurlijk de hoop dat op een later moment het bedrijf waar zojuist in was geinvesteerd een deel van een forse winst terug zou storten. Het geheel was opgezet in de vorm van een aantal smart contracts en draaide volledig zonder inmenging van mensen.

Er werd voor zo'n $150.000.000 in TheDAO geinvesteerd, wat op dat moment ongeveer 15% van alle Ether was. Veel grote namen in de Ethereum gemeenschap deden mee.

Hack

Helaas mocht het allemaal niet zo mooi zijn en werd TheDAO gehacked, waarbij er zo'n $50.000.000 aan Ether werd gestolen. Althans, is dat wel zo? In de tijd dat dit speelde was een van de slogans die het team achter Ethereum vaak gebruikte "Code is Law", oftewel: de code is de wet. Wat er geprogrammeerd is, bepaalt wat er moet gebeuren.

De code van TheDAO maakte het mogelijk voor een gebruiker om Ether uit de set van smart contracts weg te halen. De hacker maakte gebruik van een mogelijkheid die geboden werd door de code van TheDAO. En als de code de wet is binnen Ethereum, was dit dan diefstal of een legitieme, maar onvoorziene, transactie?

Het staat buiten kijf dat voor de meeste mensen deze actie moreel gezien fout was. Het is nooit de bedoeling geweest van de ontwikkelaars van TheDAO om de mogelijkheid te bieden om zomaar het geld uit de smart contracts weg te halen. De hacker heeft een foutje in de code gevonden en dit gebruikt om zich de Ether toe te eigenen.

Fork

Direct nadat de hack begon, werd deze opgemerkt door Ethereum-gebruikers. Een groep white hat hackers is vervolgens aan de slag gegaan om het overgebleven geld uit TheDAO weg te halen en veilig te stellen.

Vervolgens begon de onvermijdelijke discussie over de vraag: Wat nu? Na stevige discussie en mislukte tijdelijke oplossingen, kwam de conclusie om een zogenaamde hard fork uit te voeren: Een wijziging in de regels van het protocol waardoor het contract van TheDAO werd aangepast zodat de oorspronkelijke investeerders, niet de hacker, het geld konden weghalen.

Opeens was de code geen wet meer, want hij werd overruled door een hogere autoriteit. Hoewel de hard fork de steun had van een groot deel van de Ethereum community, was het zeker geen unanieme beslissing. Tegenstanders spraken erover dat de keuze om deze hack terug te draaien enigszins arbitrair was, want er waren wel eerder hacks geweest op smart contracts, al waren die veel kleinschaliger in omvang. Toen is er niet ingegrepen, maar hebben er mensen alsnog geld verloren.

Ook zou het een slecht precedent zetten, want een grote hack zou in de toekomst mogelijk weer kunnen plaatsvinden (bedenk zelf even wat dreigende muziek die op de achtergrond op komt zetten bij het lezen van die laatste zin). Bovendien werden er beschuldigingen van belangenverstrengeling geuit aan het adres van belangrijke personages binnen Ethereum, die voor de fork betoogden, maar zelf een flinke hoeveelheid geld in TheDAO hadden geinvesteerd.

Maar goed, ondanks de oppositie, was de meerderheid voor dit plan en zo gezegd, zo geforked. TheDAO investeerders kregen hun geld terug. Een klein gedeelte van de gebruikers deed niet mee en splitste zich af naar een andere tak, die tegenwoordig Ethereum Classic heet, maar de rest van Ethereum ging rustig verder, met afgelopen maanden een forse prijsstijging.

Alles was vergeten en vergeven. Tot dat ...

De "Parity hack"

Je voelde hem aankomen. Toch? Ik bedoel, de titel van de blogpost en de met dreigende muziek ondersteunde "foreshadowing" een paar alinea's terug zouden voldoende aanwijzing moeten zijn geweest.

Gisteren, bijna 1 jaar na de hard fork om TheDAO, heeft een hacker zo'n $30.000.000 aan Ether buitgemaakt dankzij een bug in de Parity wallet software, die blijkbaar al maanden aanwezig is. Dan vind ik dat de hacker best 2 dagen had kunnen wachten om zijn aanval op de verjaardag van de hard fork uit te voeren. Dat zijn de dingen waar ik me dan weer aan kan ergeren.

Nu zul je wellicht zeggen: "Parity is een wallet-app en een bug in een wallet is toch heel anders dan een smart contract met code die onbedoelde gevolgen heeft?" Op zich wel, maar de twee hebben meer gemeen dan je op het eerste gezicht zou zeggen.

De bug in Parity heeft te maken met zogenaamde "multi-sig" accounts. Multi-sig is een methode waarbij meerdere mensen (of autonome blockchain-entiteiten) moeten tekenen voor een transactie. Het heeft allerlei handige toepassingen die met gewoon geld een stuk lastiger zijn om uit te voeren. Multi-sig bestaat voor vrijwel iedere cryptocurrency, al werkt het in Ethereum wat anders dan in op Bitcoin gebaseerde cryptocurrencies.

Parity maakte voor multi-sig accounts speciale smart contracts aan die vervolgens op het netwerk werden gezet. Deze smart contracts zijn te activeren door de juiste set aan digitale handtekeningen te versturen, waarna het geld doorgestuurd wordt. De bug in Parity zorgde er echter voor dat deze smart contract een mogelijkheid hadden voor een willekeurige gebruiker om de inhoud van deze multi sig smart contracts naar een adres naar keuze door de sturen.

Er is voor zo'n $30.000.000 uit diverse multi-sig accounts weggehaald door de aanvaller, waarna er wederom een groep white hat hackers opgestaan is om alle andere multi sig accounts gemaakt door Parity te legen en het geld veilig te stellen.

To fork or not to fork?

En nu komen we weer terug bij de vraag: Is de code de wet? De hacker heeft gebruik gemaakt van de smart contract code zoals deze op het netwerk stond. Voor zover bekend is er geen gebruik gemaakt van malware, phishing, social engineering of dergelijke zaken. De hacker heeft de code van het smart contract bekeken en deze op een zeer specifieke, maar geldige manier gebruikt.

Hoewel het nieuws nog vrij vers is, zie ik deze keer veel minder oproepen om de boel terug te draaien met een hard fork. Maar waarom is dat? Feitelijk is deze hack niet fundamenteel anders dan de hack op TheDAO. De hoeveelheid geld die in eerste instantie is buitgemaakt is vergelijkbaar.

Je kunt het argument maken dat dankzij de stijging van de koers van Ethereum, de relatieve schade ten opzichte van de totale waarde van het netwerk deze keer een stuk lager is dan vorig jaar. Dat is zeker waar, maar tegen de groep mensen die geld zijn verloren zeggen "hoewel jullie verlies niet veel minder groot is, is het nu een stuk minder relevant" is nogal cru.

Vertrouwen in het vertrouwenloze

Een belangrijk argument voor cryptocurrencies en smart contract platforms is dat ze "vertrouwenloos" ("trustless") zijn. Dat is niet hetzelfde als "niet te vertrouwen", maar het betekent dat je als gebruiker niet hoeft te vertrouwen in een persoon, groep personen of organisatie om de juiste beslissingen te maken. Het draait onafhankelijk door volgens de regels van het protocol.

De hard fork na TheDAO was een breuk hiermee. Een geldig smart contract werd ongedaan gemaakt omdat een groep mensen de uitkomst onwenselijk of zelfs moreel verwerpelijk vond. Ik verwacht niet dat de Parity hack op dezelfde manier ongedaan gemaakt wordt. In dat geval moeten de slachtoffers de verliezen slikken.

Maar wat betekent het voor de toekomst als een gebruiker niet meer kan vertrouwen op de vertrouwenloosheid van het systeem? Stel dat ik een serie smart contracts maak voor iets dat volkomen legaal is, maar dat ieder logisch dekend mens totaal onwenselijk vindt (bijvoorbeeld: de financiele administratie van een decentrale Heineken-fanclub). Kan ik er dan op rekenen dat mijn smart contracts blijven bestaan?

Of als er een zakelijk conflict is tussen twee partijen om een zeer grote hoeveelheid geld. Als de smart contracts geprogrammeerd zijn om de kant van A te kiezen, terwijl de meeste gebruikers de kant van B kiezen. Kan er dan op worden gerekend dat A z'n contractuele gelijk krijgt? Zelfs als A gebruik heeft gemaakt van een loophole in het contract?

Tot slot

Het is weer een zonnige, te warme, zomerdag hier in het Frans-Zwitserse grensgebied. Net als een jaar geleden maakt Ethereum groeipijnen door, in de schaduw van de potentiele ontknoping van de Bitcoin-burgeroorlog. Decentrale, vertrouwenloze systemen zoals Bitcoin en Ethereum zijn nog heel erg nieuw. En er zijn nog talloze vraagstukken die moeten worden opgelost. Voor een smart contract platform zoals Ethereum is de mate waarin "Code is Law" een werkbaar principe is, een van de belangrijkste vraagstukken.

Volgende: Bitcoin op 1 augustus: UASF & SegWit2X - Wat, wanneer & waarom 06-07 Bitcoin op 1 augustus: UASF & SegWit2X - Wat, wanneer & waarom

Reacties


Door Tweakers user DonJunior, donderdag 20 juli 2017 11:30

"Maar wat betekent het voor de toekomst als een gebruiker niet meer kan vertrouwen op de vertrouwenloosheid van het systeem?"
Dan lijkt het me dat de gebruiker niet meer investeert in het 'systeem' en dus zal het 'systeem' met de tijd langzaam doodbloeien. Immers als niemand het meer vertrouwd dan zal niemand meer investeren.. of denk ik dan te simpel?

Door Tweakers user Blackboard, donderdag 20 juli 2017 11:34

Mooie blogpost, goed en informatief. Denk dat het ook belangrijk is om te benoemen dat de Ether bij de DAO hack gelocked zat in een smart contract en via een hardfork kon worden ''geannuleerd''. Nu is er door een bug losse Ether vervreemd uit drie grote wallets, zonder smart contract. Met andere woorden, de Ether kan nu vrij verplaatst worden wat het extreem lastig maakt om daar nu een hard-fork op te maken.

Zie ook: https://twitter.com/VitalikButerin/status/887783867129745412
(Twitter account van Ethereum founder)

Door Tweakers user Qwerty-273, donderdag 20 juli 2017 11:41

De hardfork na het DAO incident zou eigenlijk de ondergang moeten zijn geweest van ethereum, een "geldige" transactie werd terug gedraaid op basis van gevoelens etc. Dat maakt deze blockchain natuurlijk ongelovig, want waarom zou dat niet weer opnieuw gebeuren in de toekomst?

Maar juist door de berg investeerders, de juiste hype rond ethereum, etc. etc. heeft het van een ondergang behoedt en men is driftig verder gegaan met ontwikkelen en speculeren. Het zal nu ook weer de vraag gaan worden hoe de rechtmatige eigenaar van de door de whitehats verplaatste ether een claim kan indienen? En hoe het verder afgehandeld gaat worden. Ik zou er niet verbaasd van opkijken (als de juiste mensen hier wederom geld verloren hebben) dat er toch weer een hardfork komt.

Voor zowel het DAO incident als dit Parity incident, zou ik zelf zo iets hebben "Deal with it". Het smart contract bevatte een gat en daar is gewoon gebruik van gemaakt. In de "oude" financiele wereld doen bedrijven dat ook aan de lopende band (tussen elkaar of met belastingdiensten).

Door Tweakers user Rannasha, donderdag 20 juli 2017 11:48

Qwerty-273 schreef op donderdag 20 juli 2017 @ 11:41:
Het zal nu ook weer de vraag gaan worden hoe de rechtmatige eigenaar van de door de whitehats verplaatste ether een claim kan indienen?
Dat zal geen groot probleem worden. Alle smart contracts zijn immers door iedereen te zien en de whitehats kunnen dan ook een nieuw smart contract maken met dezelfde multi-sig regels als het oude contract, maar zonder de exploit die Parity er in stopte. Vervolgens storten de whitehats het juiste bedrag in dit nieuwe smart contract. Dit doen ze voor alle smart contracts en daarna publiceren ze een lijst met koppelingen tussen de adressen van de oude smartcontracts en de adressen van de nieuwe ("geld van 0xABC staat nu op 0xDEF", enz...). Gezien alles in de blockchain staat is zo'n lijst niet eens echt nodig, want men kan het zelf ook opzoeken.

De oorspronkelijk eigenaren hoeven niets te doen om het geld te claimen, ze zullen enkel in hun administratie het adres van het smart contract waar het geld staat moeten updaten.

Door Tweakers user GrooV, donderdag 20 juli 2017 13:15

Tja multi-sig zit niet standaard in ETH en is gemaakt dmv een smart contract, als je dat er dus afhaalt of omzeilt dan is er geen beveiliging meer.

Staan er ergens details over de hack? Lees namelijk nergens hoe het in detail is gebeurd

Door Tweakers user Jogai, donderdag 20 juli 2017 15:38

Vertrouwen in het vertrouwenloze
Je vertrouwt niet meer op (een groep) personen maar op code. Het probleem is alleen dat niet iedereen code kan lezen, en dat er dus bugs in zitten. Men vertrouwt nu op de ontwikkelaar van een smart contract. Eigenlijk ben je dan een stap achteruit gegaan.
Bij vertrouwen op een persoon kun je mis zijn, en opgelicht worden. Jammer dan. Bij vertrouwen op een ontwikkelaar kun je net zo goed mis zijn, maar daar bovenop kan de ontwikkelaar, ondanks ter goeder trouw, een bug introduceren.

Hopelijk was je weer long gegaan op ETH toen je deze blog schreef :Y)

Door Tweakers user Giesber, zaterdag 22 juli 2017 09:31

DonJunior schreef op donderdag 20 juli 2017 @ 11:30:
"Maar wat betekent het voor de toekomst als een gebruiker niet meer kan vertrouwen op de vertrouwenloosheid van het systeem?"
Dan lijkt het me dat de gebruiker niet meer investeert in het 'systeem' en dus zal het 'systeem' met de tijd langzaam doodbloeien. Immers als niemand het meer vertrouwd dan zal niemand meer investeren.. of denk ik dan te simpel?
Ik dacht initieel net hetzelfde, maar ik denk dat het ook ingewikkelder is.

Met Ethereum is een hoop geld gemoeid. En er zijn potentieel enorme winsten mee te behalen. Dat maakt dat voor sommige mensen het gebrek aan vertrouwen niet meer uit maakt, of dat ze hunzelf beginnen wijs te maken dat het systeem 100% te vertrouwen is.

Dat is ook de reden waarom een Ponzi scheme dikwijls werkt.

Door Tweakers user Camulos, zondag 23 juli 2017 11:47

mooie en informatieve blogpost!

Vooral interessant is het stuk Code = Law.. maar vaker is een stukje moreel ook law.. want uiteindelijk Law = Law . Het gedecentraliseerde vertrouwensloze van de blockchain is zeer aantrekkelijk, maar aan de andere kant nog steeds voor velen een onbekend gebied.

Ik vraag me hardop af wat er gebeurd als er een juridisch bindinde uitspraak verteld dat een Smart Contract nullified moet worden; want uiteindelijk gaat de wet/law nog steeds voor op het middel van vastleggen.

Door Tweakers user Qwerty-273, maandag 24 juli 2017 12:46

Camulos schreef op zondag 23 juli 2017 @ 11:47:
...een juridisch bindinde uitspraak....
Onder de wetgeving van welk land?
Stel Liechtenstein beslist in hun rechtspraak dat een bepaald Smart Contract nullified moet worden. Moet dit dan wereldwijd doorgevoerd worden, tot onvrede van gebruikers in alle andere landen? Of moet er dan een aanpassing komen om Ethereum anders te laten gedragen in Liechtenstein? Of ervoor kiezen om Liechtenstein uit te sluiten van Ethereum.
Wat als het niet Liechtenstein is, maar bijvoorbeeld de Verenigde Staten?

Door Tweakers user kdekker, woensdag 9 augustus 2017 16:30

Als code == law is, dan weet je zeker dat er dingen fout zullen gaan, aangezien code nooit 100% bug free is. Uiteraard geldt ook voor wetten, maar dan hebben we nog rechtspraak. Voor een trustless en onpersoonlijk ding heb je die mogelijkheid w.s. niet (wie is er aansprakelijk). De (ogenschijnlijke?) verbondenheid van crypto currencies met rechteloosheid maakt deze 'munt' toch onbruikbaar voor grootschalig gebruik?

Reactie formulier
(verplicht)
(verplicht, maar wordt niet getoond)
(optioneel)

Voer de code van onderstaand anti-spam plaatje in: