Onderzoekers hebben verschillende kwetsbaarheden ontdekt in de BitcoinJS-bibliotheek. Hierdoor kunnen Bitcoin-wallets die tien jaar geleden online werden gezet, gehackt worden. Het voornaamste probleem is dat de privésleutels voor deze crypto wallets met een veel grotere voorspelbaarheid werden gegenereerd dan de ontwikkelaars van de bibliotheek hadden verwacht.
Kwetsbaarheden en gevolgen van randstorm
Laten we bij het begin beginnen. Onderzoekers van Unciphered, een bedrijf gespecialiseerd in het herstellen van de toegang tot crypto wallets, hebben een aantal kwetsbaarheden ontdekt en omschreven in de BitcoinJS JavaScript-bibliotheek. Deze wordt gebruikt door veel online platforms voor cryptovaluta. Een aantal van deze diensten zijn erg populair, met name Blockchain.info, die nu bekend staat als Blockchain.com. De onderzoekers noemden deze reeks kwetsbaarheden ‘Randstorm’.
Hoewel de kwetsbaarheden in de BitcoinJS-bibliotheek al in 2014 zijn verholpen, strekt het probleem zich uit tot de resultaten van het gebruik van deze bibliotheek: crypto wallets die begin 2010 zijn gemaakt met BitcoinJS zijn mogelijk onveilig (in de zin dat het veel makkelijker is om hun privésleutels te vinden dan de onderliggende Bitcoin-cryptografie veronderstelt).
De onderzoekers schatten dat enkele miljoenen wallets, met een totaal van ongeveer 1,4 miljoen BTC, mogelijk gevaar lopen door Randstorm. Van de potentieel kwetsbare wallets is volgens de onderzoekers 3 tot 5% daadwerkelijk kwetsbaar voor echte aanvallen. Op basis van de geschatte wisselkoers van Bitcoin van ongeveer $ 36.500 op het moment van publicatie, betekent dit dat aanvallers die Randstorm met succes kunnen inzetten een totale buit van $ 1,5 tot 2,5 miljard kunnen maken.
De onderzoekers beweren dat de kwetsbaarheden van Randstorm gebruikt kunnen worden voor werkelijke aanvallen op crypto wallets. Bovendien hebben ze deze kwetsbaarheden succesvol misbruikt om de toegang te herstellen tot verschillende crypto wallets die voor maart 2012 op Blockchain.info waren aangemaakt. Om ethische redenen publiceerden ze geen experimentele versie van de aanval, omdat dit tienduizenden crypto wallets direct aan het risico van diefstal zou hebben blootgesteld.
De onderzoekers hebben al contact opgenomen met de online cryptovalutadiensten waarvan bekend is dat ze kwetsbare versies van de BitcoinJS-bibliotheek hebben gebruikt. Deze diensten brachten op hun beurt klanten op de hoogte die mogelijk door Randstorm konden worden getroffen.
Kenmerken van Randstorm-kwetsbaarheden
Laten we eens dieper ingaan op hoe deze kwetsbaarheden eigenlijk werken. De privésleutel staat centraal in de beveiliging van de Bitcoin-wallet. Net als elk modern cryptografisch systeem is Bitcoin afhankelijk van een geheime en niet te kraken sleutel. Ook hier worden, zoals in elk modern cryptografisch systeem, hele lange willekeurige getallen gebruikt.
En om de gegevens die beschermd worden door de privésleutel veilig te houden, moeten de getallen zo willekeurig mogelijk zijn. Als het getal dat als sleutel wordt gebruikt erg voorspelbaar is, wordt het voor een aanvaller die over informatie beschikt over de sleutelgeneratieprocedure makkelijker en sneller om de sleutel te kraken.
Onthoud dat het genereren van een echt willekeurig getal geen peulenschil is. En computers zijn daar door hun eigenschappen uitermate ongeschikt voor, omdat ze te voorspelbaar zijn. Daarom gebruiken we meestal pseudo-willekeurige getallen en om de entropie van de generatie te verhogen (cryptografische uitdrukking voor de mate van onvoorspelbaarheid) gebruiken we speciale functies.
En nu terug naar de BitcoinJS-bibliotheek. Om pseudo-willekeurige getallen van ‘hoge kwaliteit’ te verkrijgen, gebruikt deze bibliotheek een andere JavaScript-bibliotheek genaamd JSBN (JavaScript Big Number), en dan met name de SecureRandom-functie. Zoals de naam al aangeeft, is deze functie ontworpen om pseudo-willekeurige getallen te genereren die geschikt zijn voor gebruik in cryptografie. Om hun entropie te verhogen, vertrouwt SecureRandom op de browserfunctie window.crypto.random.
Daar ligt het probleem: hoewel de functie window.crypto.random al bestond in de browserfamilie Netscape Navigator 4.x, waren deze browsers al verouderd tegen de tijd dat webdiensten actief gebruik begonnen te maken van de BitcoinJS-bibliotheek. En in de populaire browsers van die tijd (Internet Explorer, Google Chrome, Mozilla Firefox en Apple Safari) was de functie window.crypto.random eenvoudigweg niet geïmplementeerd.
Helaas hebben de ontwikkelaars van de JSBN-bibliotheek geen enkele controle of foutmelding ingebouwd. Als gevolg daarvan passeerde de functie SecureRandom de stap van het verhogen van de entropie ongemerkt, waardoor de taak van het maken van privésleutels werd overgedragen aan de standaard pseudo-willekeurige getallengenerator Math.random.
Dit is op zich al een slechte zaak, omdat Math.random niet geschikt is voor cryptografische doeleinden. Het wordt echter nog ingewikkelder doordat de implementatie van Math.random in de populaire browsers van 2011 tot 2015, met name Google Chrome, bugs bevatte die resulteerden in nog minder willekeurige getallen dan het geval zou moeten zijn.
Omgekeerd heeft de BitcoinJS-bibliotheek alle bovengenoemde problemen geërfd van JSBN. Als gevolg hiervan kregen platformen die het gebruikten om privésleutels voor crypto wallets te genereren, veel minder willekeurige getallen van de SecureRandom-functie dan de ontwikkelaars van de bibliotheek verwachtten. En omdat deze sleutels met grote voorspelbaarheid worden gegenereerd, zijn ze veel gemakkelijker aan te vallen met brute kracht, waardoor kwetsbare crypto wallets kunnen worden gehackt.
Zoals hierboven vermeld, is dit geen theoretisch maar een praktisch gevaar; het Unciphered-team was in staat om deze kwetsbaarheden te benutten om de toegang tot verschillende oude crypt wallets te herstellen die waren aangemaakt op Blockchain.info (met andere woorden, ethisch te hacken).
Wie loopt het risico op Randstorm?
BitcoinJS gebruikte de kwetsbare JSBN-bibliotheek al vanaf de introductie in 2011 tot 2014. Let er echter op dat sommige cryptovalutaprojecten al enige tijd een minder recente versie van de bibliotheek gebruiken. De bugs in Math.random in populaire browsers waren in 2016 verholpen door het wijzigen van de algoritmen voor het genereren van pseudo-willekeurige getallen. Bij elkaar opgeteld komt dit neer op een tijdsbestek van 2011 tot 2015 voor de periode waarin de potentieel kwetsbare cryptowallets werden gemaakt.
De onderzoekers benadrukken dat BitcoinJS begin 2010 erg populair was, dus het is moeilijk om een volledige lijst samen te stellen van diensten die een kwetsbare versie ervan hadden kunnen gebruiken. Hun rapport geeft een lijst van platformen die volgens hen een risico vormen:
- BitAddress – nog steeds actief.
- BitCore (BitPay) – nog steeds actief.
- Bitgo – nog steeds actief
- info – nog steeds actief al Blockchain.com.
- Blocktrail – leidt om naar
https://btc.com
ofhttps://blockchair.com
. - BrainWallet – niet actief.
- CoinKite – verkoopt nu hardwarewallets
- CoinPunk – niet actief.
- Dark Wallet – leidt om naar
https://crypto-engine.org
. - DecentralBank – niet actief.
- info (Block.io) – nog steeds actief.
- EI8HT – niet actief.
- GreenAddress – leidt om naar
https://blockstream.com/green/
. - QuickCon – niet actief.
- Robocoin – niet actief.
- Skyhook ATM – leidt om naar
https://yuan-pay-group.net
.
Naast Bitcoin-wallets kunnen ook wallets van Litecoin, Zcash en Dogecoin gevaar lopen, omdat er voor deze cryptocurrencies ook BitcoinJS-gebaseerde bibliotheken zijn. Het is logisch om aan te nemen dat deze bibliotheken gebruikt kunnen worden om privésleutels te genereren voor de respectievelijke crypto wallets.
Het Unciphered-rapport beschrijft nog veel meer ingewikkelde zaken die met Randstorm te maken hebben. Maar waar het eigenlijk op neerkomt is dat wallets die tussen 2011 en 2015 zijn gemaakt met gebruik van de kwetsbare bibliotheek kwetsbaar kunnen zijn in verschillende niveaus, afhankelijk van de specifieke omstandigheden.
Jezelf beschermen tegen Randstorm
Zoals de onderzoekers zelf al aangeven, volstaat het niet om de kwetsbaarheid in de software te verhelpen. Het is niet mogelijk om de privésleutels van wallet-eigenaren te ‘patchen’ en ze te vervangen door veilige sleutels. Ondanks het feit dat de bugs al lang verholpen zijn, hebben ze nog steeds invloed op crypto wallets die zijn gemaakt toen de BitcoinJS-bibliotheek werd getroffen door de hierboven besproken fouten. Dit betekent dat kwetsbare wallet-eigenaren zelf beschermende maatregelen moeten nemen.
Omdat het moeilijk is om een volledige lijst op te stellen van cryptovalutaplatforms die de kwetsbare bibliotheek gebruikten, is het beter om het zekere voor het onzekere te nemen en elke crypto wallet die online is gemaakt tussen 2011 en 2015 als mogelijk onveilig te beschouwen (tenzij je zeker weet dat dat niet zo is). En natuurlijk geldt: hoe dikker de portemonnee, hoe verleidelijker voor criminelen.
De voor de hand liggende (en enige) oplossing voor het probleem is om nieuwe crypto wallets te maken en alle fondsen van potentieel kwetsbare wallets daarheen te verplaatsen.
En aangezien je dit sowieso moet doen, is het verstandig om dit keer uiterst voorzichtig te werk te gaan. Cryptobescherming is een proces dat uit meerdere stappen bestaat. Daarom hebben we een uitgebreide checklist voor je samengesteld met veel extra informatie die je via de links kunt vinden:
- Ontdek de belangrijkste cryptodreigingen en beschermingsmethoden in detail.
- Krijg inzicht in de verschillen tussen hot en cold crypto wallets en de meest voorkomende manieren om ze aan te vallen.
- Gebruik een hardware (cold) wallet voor langdurige opslag van de belangrijkste cryptoactiva, en een hot wallet met minimaal saldo voor dagelijkse transacties.
- Voordat je al het geld van de oude wallet naar de nieuwe wallet overzet, moet je al je apparaten voorzien van betrouwbare bescherming. Beschermt je smartphone of computer tegen Trojaanse paarden die wachtwoorden en privésleutels proberen te stelen of clippers die adressen van cryptowallets vervangen in het klembord, en beschermt je computer tegen kwaadaardige cryptominers en ongeautoriseerde toegang op afstand.
- Bewaar nooit een foto of schermafbeelding van je inlogzin op je smartphone, plaats je inlogzin nooit in openbare clouds, verstuur deze nooit via berichtendiensten of e-mail en voer hem nergens in, behalve als je een verloren privésleutel herstelt.
- Sla je privésleutel en inlogzin veilig op voor herstel. Dit kan met een wallet met identiteitsbescherming in Kaspersky Premium, die alle opgeslagen gegevens codeert met AES-256. Het wachtwoord bevindt zich alleen in je hoofd (tenzij het natuurlijk op een plakbriefje op je beeldscherm staat) en is niet te achterhalen, dus de enige die toegang heeft tot je persoonlijke documenten ben jijzelf.
- Een andere optie is om een cold crypto wallet te gebruiken, die geen inlogzin nodig heeft om een back-up van de privésleutel te maken. Zo werkt bijvoorbeeld de hardwarewallet Tangem.