Fouten in smart contract-code
Soms hebben smart contracts fouten in de code of zitten er zwakke plekken in het blockchain-ecosysteem. Deze kwetsbaarheden geven aanvallers een potentiële opening om binnen te dringen, waarna ze het contract kunnen manipuleren, fondsen kunnen stelen of schade kunnen aanrichten. Kwetsbaarheden kunnen niet alleen ontstaan door fouten in de code, maar ook door verkeerde configuraties of slechte beveiligingsmaatregelen (zoals bijvoorbeeld onvoldoende beschermde toegangspunten).
Exploit
Een exploit is het actieve gebruik van zo’n kwetsbaarheid door een aanvaller, om het blockchainnetwerk aan te vallen of te misbruiken. Exploits worden vaak uitgevoerd met een specifiek doel, zoals het stelen van crypto-fondsen of toegang krijgen tot gevoelige gegevens. Bedrijven voeren beveiligingsaudits uit om de kwetsbaarheden te kunnen ontdekken en te repareren, voordat kwaadwillenden een exploit-poging kunnen uitvoeren. Echter, gaat dit ook regelmatig mis en zien aanvallers kans om grote bedragen weg te sluizen of flinke schade aan te richten.
Zero-day exploits
Een zero-day exploit treedt op wanneer een kwetsbaarheid door hackers wordt misbruikt, voordat ontwikkelaars het probleem zelfs maar kennen. Dit maakt zero-day-aanvallen erg gevaarlijk, omdat er immers nog geen oplossing of patch beschikbaar is om het systeem te beschermen. Zodra een beveiligingspatch beschikbaar is, neemt het risico af dat een kwetsbaarheid wordt geëxploiteerd (mits de patch wordt geïmplementeerd). Als de patch niet wordt toegepast, blijft de kwetsbaarheid bestaan en is het wachten op een exploit door een aanvaller.
Cryptografische technieken
Smart contracts maken gebruik van verschillende cryptografische technieken om de veiligheid, integriteit en vertrouwelijkheid van transacties te waarborgen, waaronder:
- Public-key cryptografie (assymmetrische cryptografie, zoals ECC en RSA)
- Digitale handtekeningen (zoals Elliptic Curve Digital Signature Algorithm)
- Hashfuncties
- Zero-Knowledge Proofs (ZKP), zoals bijvoorbeeld zk-SNARKs en zk-STARKs
- Homomorfe encryptie
- Merkle trees
De bovenstaande cryptografische technieken zorgen ervoor dat gegevens in een smart contract veilig worden verwerkt, en dat transacties transparant en onveranderlijk zijn. Desondanks kunnen de contracten nog steeds kwetsbaar zijn voor aanvallen.
De meest voorkomende kwetsbaarheden en aanvallen
Hieronder volgt een opsomming van de meest voorkomende kwetsbaarheden en aanvallen binnen blockchain-ecosystemen:
-
Re-entrancy-aanvallen
Bij een re-entrancy-aanval kan een kwaadwillend smart contract meerdere keren toegang krijgen tot dezelfde functie (de functie meerdere keren aanroepen) voordat de eerdere bewerking is voltooid. Dergelijke kwetsbaarheden kunnen leiden tot een leegloop van fondsen. Een bekend voorbeeld van een re-entrency-aanval was de DAO-hack in 2016, waarbij ongeveer 3,6 miljoen ETH werd gestolen.
-
Integer overflows en integer underflows
Deze kwetsbaarheden doen zich voor wanneer een smart contract-account onverwacht over- of onderloopt tijdens rekenkundige operaties, waardoor het systeem incorrecte waarden opslaat. ‘Overlopen’ betekent dat een getal te groot wordt voor de ruimte die is gereserveerd om het op te slaan. Het getal ‘rolt’ dan om naar een heel klein getal of nul. ‘Onderlopen’ gebeurt als een getal te klein wordt en daardoor onder de grens komt van wat kan worden opgeslagen.
Verkeerde berekeningen
Beide fouten (zowel integer overflow als integer underflow) zorgen ervoor dat de smart contracts verkeerd rekenen en er beveiligingsrisico’s ontstaan. Een hacker kan deze fouten uitbuiten om de transactielogica te verstoren en mogelijk toegang te krijgen tot onrechtmatige fondsen. Deze kwetsbaarheden kom vooral voor bij oudere smart contracts.
-
Front-running-aanvallen
Front-running is een veelvoorkomende aanval waarbij aanvallers een transactie zien die in behandeling is, en vervolgens een eigen transactie indienen met hogere gas fees om hun transactie eerder te laten uitvoeren. Dit soort aanvallen komt vaak voor bij decentrale exchanges (DEX’en), waarbij prijsmanipulatie door timing cruciaal is. Een specifiek type van een front-running-aanval is een zogenaamde ‘sandwich-aanval’.
-
Back-running-aanvallen
Back-running is een aanval waarbij een aanvaller profiteert van een grote transactie. Nadat iemand een transactie uitvoert die de prijs beïnvloedt, plaats de aanvaller direct een eigen order om van de prijsschommeling te profiteren. Dit gebeurt (in tegenstelling tot front-running) nadat de originele transactie is verwerkt. Back-running is vaak onderdeel van een bredere strategie, zoals een sandwich-aanval.
-
51%-aanvallen
Een 51%-aanval doet zich voor wanneer een kwaadwillende actor meer dan de helft van de rekenkracht van een blockchainnetwerk controleert. Hierdoor kunnen deze actoren transacties censureren, omkeren of dubbele bestedingen (double spending) uitvoeren. Doorgaans zijn grote blockchainnetwerken zoals Bitcoin of Ethereum minder kwetsbaar voor 51%-aanvallen dan kleinere blockchain-ecosystemen.
-
Sybil-aanvallen
Bij een Sybil-aanval creëert een aanvaller meerdere identiteiten op een netwerk om de werking van het systeem te verstoren of te manipuleren. In blockchain-ecosystemen kunnen dergelijke aanvallen leiden tot manipulatie van consensus-mechanismen, zoals stemmen of transactieverwerking.
-
Phishing-aanvallen
Phishing-aanvallen zijn social-engineeringmethoden waarbij aanvallers blockchain-gebruikers verleiden om hun privésleutel of persoonlijke informatie prijs te geven via vervalste websites of e-mails. Zodra een hacker toegang heeft tot een privésleutel, kan hij de controle krijgen over de crypto-activa van de gebruiker.
-
Timestamp-manipulatie
Timestamp-manipulatie is een aanval waarbij miners de tijdstempels van blokken manipuleren om smart contracts te bedriegen die afhankelijk zijn van tijdgevoelige voorwaarden. Dit kan vooral gevaarlijk zijn bij financiële contracten of wedstrijden op de blockchain.
-
Short adress-aanvallen
Een short adress-aanval doet zich voor wanneer gebruikers slimme contracten gebruiken met onvolledige adresgegevens. Dit kan leiden tot verkeerde interpretaties van gegevens en ervoor zorgen dat fondsen naar de verkeerde accounts worden gestuurd of verloren gaan.
-
Denial of Service (DoS)-aanvallen
In een DoS-aanval probeert een aanvaller een smart contract te overbelasten door een extreem groot aantal transacties te initiëren. Dit kan leiden tot het vastlopen van het contract of het blockchainnetwerk. Een dergelijke situatie kan diensten verstoren en economische schade veroorzaken. Ook Distributed Denial of Service (DDoS) aanvallen komen regelmatig voor binnen blockchain-ecosystemen.
-
Gaslimiet-problemen
Smart contracts op de Ethereum-blockchain vereisen een bepaalde hoeveelheid ‘gas’ om functies uit te voeren. Als een contract onvoldoende gas heeft, kan het vastlopen of mislukken. Aanvallers kunnen dit probleem uitbuiten door gas-gerelateerde bugs te veroorzaken of door transacties te manipuleren, om onterecht veel gas te verbruiken.
-
Zelf-vernietigingsfunctie
Sommige smart contracts bevatten een ‘self-destruct’ functie, waarmee het contract kan worden verwijderd van de blockchain. Als dit niet goed beveiligd is, kan een aanvaller misbruik maken van deze kwetsbaarheid en deze functie activeren, waardoor het contract en de fondsen verloren gaan.
-
Logic bugs
Smart contracts kunnen fouten bevatten in hun code of logica, waardoor ze onverwachte resultaten kunnen produceren. Een klein foutje in de contractcode kan leiden tot grootschalige financiële verliezen of het volledig mislukken van het contract.
-
Random nummer-kwetsbaarheden
Sommige slimme contracten gebruiken willekeurige getallen voor processen zoals loterijen of wedstrijden. Het genereren van echt willekeurige getallen op een blockchain is echter lastig en kan voorspelbaar zijn. Als een aanvaller de ‘willekeurige’ getallen kan voorspellen, kan hij het contract manipuleren in zijn voordeel.
-
Orakel-manipulatie
Smart contracts vertrouwen soms op orakels om externe gegevens naar de blockchain te brengen, zoals bijvoorbeeld marktprijzen of weersomstandigheden. Als een aanvaller controle krijgt over een orakel, kan hij de gegevens manipuleren om het contract in zijn voordeel te wijzigen. Deze kwetsbaarheid is een groot risico bij het gebruik van externe gegevensbronnen.
-
Governance-aanvallen
Bij blockchainprojecten die een gedecentraliseerd bestuur hebben (zoals DAO’s), kunnen aanvallers proberen om de meerderheid van de stemmen te verwerven, en beslissingen in hun voordeel te beïnvloeden. Deze kwetsbaarheid kan resulteren in schadelijke wijzigingen aan het protocol of smart contract.
-
Diefstal van privésleutels
Hoewel diefstal van privésleutels niet direct een exploit van een smart contract is, vormt het stelen ervan een groot risico. Als een aanvaller toegang krijgt tot de private sleutel van een gebruiker of een contractbeheerder, kunnen ze alle fondsen beheren of contracten in hun voordeel aanpassen.
-
Flash loan-aanvallen
Een flash loan is een lening die wordt aangegaan en afgelost binnen één enkele transactie, zonder dat onderpand nodig is. Aanvallers kunnen grote hoeveelheden geld lenen via deze ‘flitsleningen’ om tijdelijk de marktprijs van een activum te manipuleren of zwakke plekken in een contract te misbruiken, voordat de lening is afbetaald. Dit kan leiden tot prijsmanipulatie en het exploiteren van liquiditeitspools.
-
Selfish mining
Selfish mining is een aanval waarbij miners een nieuw blok vinden, maar het nog niet naar het netwerk uitzenden. In plaats daarvan minen ze door op hun eigen geheime blokken, en zodra ze een blokketen hebben die langer is dan die van de rest van het netwerk, sturen ze die in één keer door. Dit geeft hen een grotere kans om meer beloningen te ontvangen.
-
Fake deposit exploit
Een fake deposit exploit is een aanval waarbij een aanvaller een transactie simuleert, zonder daadwerkelijk te betalen. Hij kan het systeem zo laten denken dat er een storting heeft plaatsgevonden, terwijl er in werkelijkheid geen geld is overgedragen.
-
Dusting-aanval
Een dusting-aanval houdt in dat een aanvaller kleine hoeveelheden crypto-activa verstuurt naar meerdere wallets, om uiteindelijk de identiteit van gebruikers achter de wallets te ontdekken. Deze kwetsbaarheid kan worden uitgebuit om gerichte aanvallen uit te voeren ofprivacy van gebruikers te compromitteren.
-
Cross-site scripting
Hoewel cross-site scripting (XSS) niet meer van toepassing is op de interfaces die communiceren met de blockchain, zoals gedecentraliseerde applicaties (dApps), kan een aanvaller via XSS malware of schadelijke scipts in een webinterface injecteren. Dit kan leiden tot de compromittering van smart contracts of gebruikersfondsen, wanneer mensen met die interface omgaan.
-
Race condition
Een race condition is een aanval waarbij meerdere transacties tegelijkertijd proberen om dezelfde functie van een smart contract aan te roepen. Door slimme timing kan een aanvaller voordeel behalen door te anticiperen op hoe transacties precies worden verwerk. Dit kan leiden tot inconsistentie in de output of oneerlijk voordeel.
-
MEV (Miner Extractable Value)
Miner Extractable Value (MEV) is de extra winst die miners kunnen behalen door transacties in blokken op een bepaalde manier te ordenen. Miners kunnen transacties manipuleren, zoals het eerdergenoemde ‘front-running’ of ‘back-running’ om meer winst te genereren. Dit geeft de miners een oneerlijk voordeel ten opzichte van andere deelnemers op de blockchain.
-
Signature replay-aanvallen
Bij een signature replay-aanval kopieert een aanvaller een geldige transactie en voert deze opnieuw uit op een andere blockchain, als dezelfde privésleutel op beide blockchains wordt gebruikt. Deze kwetsbaarheid kan leiden tot onverwachte overdrachten van fondsen of activumwissels.
-
Cloning-aanvallen
Sommige aanvallers klonen een succesvol smart contract en doen alsof ze dezelfde diensten of voordelen bieden. Onoplettende gebruikers kunnen dan worden misleid om te investeren of fondsen naar het verkeerde contract te sturen, waardoor activa verloren gaan.
-
Governance token-aanvallen
In blockchainprojecten met gedecentraliseerde governance (zoals DAO’s) kunnen kwaadwillenden proberen om grote hoeveelheden governance-tokens te kopen of te stelen, om zo de besluitvorming binnen een project te manipuleren. Dit kan leiden tot schadelijke beleidsveranderingen of zelfs contractwijzigingen die de controle volledig naar de aanvaller verschuiven.
-
Long-range-aanvallen
In Proof of Stake (PoS) blockchains kunnen long-range-aanvallen optreden wanneer een aanvaller probeert om de blockchain-geschiedenis te herschrijven door oude privésleutels en nieuwe blokken in een vroegere staat van de keten te genereren. Deze kwetsbaarheid bedreigt de integriteit van de blockchain en kan leiden tot double spending.
-
Cryptojacking
Hoewel cryptojacking niet direct een exploit op een smart contract is, kan het plaatsvinden wanneer aanvallers malware injecteren in apparaten van gebruikers om hun rekenkracht te kapen voor het minen van cryptocurrency’s, zonder hun medeweten. Cryptojacking kan leiden tot verminderde prestaties van het apparaat en hogere energiekosten voor de slachtoffers.
-
Phantom function-aanval
Sommige smart contracts roepen functies op die niet bestaan (spookfuncties) of zijn slecht gedefinieerd. Een aanvaller kan hiervan profiteren door een contract te exploiteren dat reageert op niet-bestaande functies en onverwachte uitvoer veroorzaakt. Dit kan leiden tot verlies van activa of onjuiste uitvoering van het contract.
-
Contract-kaping
Bij contract-kaping kan een kwaadwillende een fout in de contractconstructie of logica gebruiken, om zo controle te krijgen over het contract. Hierdoor kan de aanvaller wijzigingen aanbrengen in de uitvoering van het contract of de activa die door het contract worden beheerd.
-
Unchecked return values
Wanneer een smart contract een externe functie aanroept, kan het falen om het resultaat van die aanroep te controleren. Een aanvaller kan hiervan profiteren door valse waarden terug te sturen naar het contract, waardoor het contract foutieve beslissingen maakt of assets verkeerd beheert.
-
Code-reuse-aanvallen
Veel smart contracts hergebruiken bestaande code of vertrouwen op bibliotheken. Als er een kwetsbaarheid is in de hergebruikte code of bibliotheek, worden alle contracten die die code delen kwetsbaar voor dezelfde aanvallen.
-
Side-channel-aanvallen
Bij een side-channel-aanval op een smart contract proberen aanvallers gevoelige informatie te verkrijgen via indirecte methoden. Aanvallers kunnen bijvoorbeeld het gasverbruik analyseren om inzicht te krijgen in de logica van het contact, of tijdsmetingen gebruiken om te bepalen wanneer functies zijn uitgevoerd. Ook kan de volgorde van transacties op de blockchain waardevolle informatie onthullen. Tevens kunnen aanvallers externe aanroepen en event logs analyseren om kwetsbaarheden of geheime gegevens te achterhalen.
Zorgvuldige codering, audits en continue monitoring
Het voorkomen van exploits binnen blockchain-ecosystemen vereist een zorgvuldige codering, audits en continue monitoring, om de veiligheid van smart contracts, dApps en andere blockchaintoepassingen te waarborgen. Cybercriminelen worden steeds slimmer en vinden voortdurend nieuwe manieren om systemen te misbruiken. Het ontwikkelen en implementeren van nieuwe beveiligingspatches is dan ook noodzakelijk om toekomstige aanvallen op blockchainnetwerken te voorkomen. Zonder de juiste beveiligingsmaatregelen kan de integriteit van blockchainoplossingen niet worden gegarandeerd, en wordt het vertrouwen van gebruikers in gedecentraliseerde toepassingen ernstig geschaad.
Lees ook:
Blockchain en coderen: hoe wordt een smart contract gecodeerd?
Waar kan ik het programmeren van smart contracts leren?
Smart contracts op de Ethereum-blockchain
Tokenomics: de economie achter cryptocurrency
De invloed van de cryptomarkt op de financiële wereld
Web3: het internet van de toekomst
Tokenisatie: vertegenwoordiging van eigendomsrecht of waarde
De regulering van crypto-assets
Op de hoogte blijven van de ontwikkelingen op het gebied van blockchaintechnologie? Meld je dan nu aan voor de blogpost!