Zephyrnet-logo

Over het beveiligingsmodel van software wallets | Grootboek

Datum:

We kunnen twee veel voorkomende soorten portemonnees onderscheiden: software- en hardware-wallets. Ze vervullen dezelfde functie, maar op een andere manier. Softwareportefeuilles worden als eenvoudiger in gebruik beschouwd: één enkel programma is voldoende om transacties aan te maken, te valideren en te ondertekenen. Met een software wallet is het niet nodig om de transactie op de software aan te maken en deze op een hardwareapparaat te bevestigen.

Twee weken geleden, Verboden verhalen een gerichte aanval onthuld tegen duizenden mensen over de hele wereld. Bij deze aanval werd misbruik gemaakt van kwetsbaarheden op Android en iOS om spyware te installeren die was ontwikkeld door de NSO Group: Pegasus. Deze malware is in staat de hele activiteit van het apparaat te monitoren en persoonlijke informatie te exfiltreren: sms-, WhatsApp- en Signal-gesprekken, telefoontjes, enz. In dit artikel wordt uitgelegd hoe een dergelijke malware onder deze omstandigheden alle geheimen van softwareportefeuilles, en de verschillen vanuit veiligheidsoogpunt tussen softwareportefeuilles op mobiele telefoons en desktopcomputers.

Dit artikel is niet erg technisch bedoeld. Om het relatief eenvoudig te houden, worden alleen de basisfuncties besproken.

Geheimen beschermen

Wat wordt er in een crypto-portemonnee opgeslagen?

Portefeuilles slaan niet daadwerkelijk de cryptocurrencies van de gebruikers op: ze slaan alleen de geheimen op, met name de privésleutels, die toegang geven tot de cryptocurrencies en de mogelijkheid om deze uit te geven. Deze privésleutels zijn meestal ECC-privésleutels (elliptic curve cryptography) met verschillende curves, afhankelijk van de blockchain. De meest voorkomende curven zijn secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) of BLS12-381 (Ethereum 2).

Deze sleutels worden gebruikt om transacties te ondertekenen, en meer in het algemeen om te communiceren met blockchain-activa.

De opslag van deze sleutels is afhankelijk van het type portemonnee: deterministisch of niet. Een Hiërarchisch Deterministische (HD) portemonnee maakt het mogelijk een sleutelboom te creëren op basis van één enkel hoofdgeheim, het zaad genoemd (vgl. BIP44). Dit zaad is vaak afgeleid van een geheugensteuntje van 12, 18 of 24 woorden, willekeurig gegenereerd of gekozen door de gebruiker (vgl.BIP39). Deze geheugensteuntjes maken het mogelijk om het aantal sleutels dat moet worden opgeslagen te beperken: ze kunnen op elk moment opnieuw worden berekend vanuit het zaad. HD-portemonnees slaan alleen dit geheugensteuntje of het zaad op.

Niet-deterministische portemonnees genereren voor elk gebruik een nieuwe sleutel en moeten deze allemaal opslaan. Niet-deterministische portemonnees kunnen niet eenvoudig naar een andere portemonnee worden gemigreerd, omdat back-ups niet compatibel zijn.

De belangrijkste beveiligingskenmerken van een portemonnee bestaan ​​uit het correct genereren, opslaan en gebruiken van deze geheimen. Er zijn verschillende beveiligingsniveaus tegen verschillende soorten bedreigingen:

  • Bescherming tegen “evil maid”-aanvallen: Een aanvaller met tijdelijke toegang tot de portemonnee mag geen achterdeur in de portemonnee kunnen toevoegen waarmee hij de pincode of het wachtwoord kan stelen dat geheimen beschermt.
  • Veilig cryptografisch materiaal: Sleutels en nonce gegenereerd door de portemonnee mogen nooit voorspelbaar zijn. Bovendien zal de kennis van geheimen (behalve het zaad) die op een bepaald moment in de tijd worden gegenereerd, het niet mogelijk maken om te voorspellen welk geheim in de toekomst zal worden gegenereerd.
  • Bescherming in rust: Als een aanvaller persistente gegevens van een softwareportemonnee bemachtigt, mag hij of zij de sleutels niet kunnen extraheren.
  • Bescherming tijdens geheim gebruik: Wanneer de portemonnee ontgrendeld is, mogen de sleutels niet toegankelijk zijn voor een aanvaller of malware.
Hardware wallets

Het beveiligingsmodel van een hardware wallet is erop gericht deze veiligheidsbedreigingen te ondervangen. Hardware wallets beschermen door hun ontwerp tegen malware. Het zijn onafhankelijke apparaten die zelfstandig transacties ondertekenen. De cryptografische materialen blijven altijd in het apparaat en worden nooit naar de softwareapplicatie gestuurd waarmee ze communiceren. De communicatie-interface is altijd eenvoudig, waardoor het aanvalsoppervlak drastisch wordt verkleind. Het kan USB, Micro SD of camera + scherm (via QR-code) of Bluetooth Low Energy zijn.

Bovendien integreren hardware wallets een scherm rechtstreeks in het apparaat, waardoor de gebruiker de acties kan verifiëren die hij gaat doen wanneer hij met zijn geheime sleutels communiceert. Deze handmatige controles op apparaten zijn een zeer efficiënte tegenmaatregel tegen malware op de computer/mobiel. Waar malware op een computer/mobiel apparaat toegang zou kunnen krijgen tot de geheimen (seed- of privésleutels) of zelfs adressen of bedragen zou kunnen uitwisselen/wijzigen wanneer de gebruiker een transactie uitvoert, is dit niet mogelijk met een hardware wallet.

Hardware wallets zijn ook ontworpen om te beschermen tegen ‘evil meid’-aanvallen en tegen een aanvaller met fysieke toegang. Afhankelijk van de hardware wallet hebben ze verschillende beveiligingsniveaus, maar in alle gevallen zijn ze ontworpen om te beschermen tegen deze bedreigingen. Een gedetailleerde beschrijving van Ledger Nano-bedreigingsmodellen kunt u vinden hier.

Software-portefeuilles

Reguliere software wallets beschermen geheimen met reguliere middelen: beveiligingsmechanismen van het besturingssysteem waarop ze draaien en soms een toegangscontrole op basis van een pincode of een wachtwoord.

Hieronder worden desktopportefeuilles (Windows, macOS, Linux) en mobiele portefeuilles beschouwd. De belangrijkste verschillen tussen beide zijn grotendeels afhankelijk van de beveiligingsmechanismen die door het besturingssysteem worden aangeboden.

Softwareportefeuilles op een computer

Verschillende populaire portemonnees, zoals Electrum, Exodus, Atomic of Bitcoin core, draaien op computers.

Op een computer zijn de beveiligingsmechanismen die door het besturingssysteem worden aangeboden om een ​​portemonneeproces te isoleren van andere processen beperkt. De meeste apps worden door dezelfde gebruiker uitgevoerd en apps mogen de gegevens van andere applicaties lezen.

De veiligheid van deze software wallets hangt vooral af van de veiligheid van het wachtwoord dat ze beschermt, en ook van het feit dat er geen malware op het besturingssysteem draait (wat vrij lastig te garanderen is, zie recent nieuws over Pegasus).

Meestal wordt het zaad opgeslagen in een gecodeerde container die is beveiligd met een wachtwoord. Een eenvoudige aanval bestaat uit het ophalen van deze gecodeerde container door middel van malware of een tool voor extern beheer en deze naar de aanvaller te sturen. Dan kan het wachtwoord bruut geforceerd zijn of verkregen worden via een keylogger.

In een scenario waarin een aanvaller er alleen in slaagt toegang te krijgen tot de gecodeerde container (de aanvaller vindt een USB-sleutel met daarin een portemonnee, of installeert malware op een computer, maar het slachtoffer opent nooit zijn portemonnee-applicatie), moet de aanvaller het wachtwoord bruut forceren.

De meeste wachtwoorden zijn dat wel slecht. Er zijn miljarden wachtwoorden gelekt op internet, en veel mensen hebben de neiging hun wachtwoorden voor verschillende diensten te hergebruiken. Met kant-en-klare tools kunt u wachtwoorden ophalen voor portefeuilles met cryptocurrencies, zoals btcrecover or hasjkat. Wachtwoorden kunnen complex zijn, maar achter elke portemonnee zit echt geld. Daarom zullen aanvallers niet aarzelen om middelen te investeren om dergelijke wachtwoorden te kraken.

Twee fundamentele beveiligingsprincipes om uw wachtwoorden veilig te houden, zijn het gebruik van een wachtwoordbeheerder en het nooit hergebruiken van uw wachtwoord voor andere doeleinden.

De meest zorgwekkende bedreiging voor softwareportefeuilles zijn specifieke malware en stealers, speciaal ontwikkeld om uw geld af te tappen. Dergelijke malware, zoals KPOT of ElektroRAT, hoeven uw wachtwoord niet eens bruut te forceren: ze kunnen het direct vastleggen wanneer u het invoert, de configuratiegegevens van de portemonnee decoderen en het zaad exfiltreren.

Hier is een speelgoedapplicatie, ontwikkeld voor dit artikel, die zich richt op de Electrum-portemonnee (hoewel het ook een andere softwareportemonnee had kunnen zijn). Het simuleert malware die het gebruikerswachtwoord steelt wanneer het door het slachtoffer wordt ingevoerd. Het wachtwoord wordt vervolgens gebruikt om de portefeuillegegevens te decoderen en om het zaad weer te geven:

Zoals u ziet, kan de app, zelfs als het wachtwoord complex is, het ophalen omdat het het rechtstreeks in het geheugen opspoort.

Dit voorbeeld lijkt sterk op het recente .SCR-malware campagnes die worden gebruikt om cryptocurrencies te stelen. Criminelen gebruikten social engineering-technieken om gebruikers te misleiden zodat ze een kwaadaardige screensaver downloadden. Deze screensaver stal feitelijk informatie van het slachtoffer van de computer, inclusief informatie over de uitwisseling van portemonnees en cryptocurrency.

Tot slot over softwareportefeuilles die op computers draaien:

  • In de meeste gevallen beschermen softwareportefeuilles die op computers draaien het zaad van de gebruiker met een wachtwoord.
  • De toegangscontrole voor deze portemonneebestanden is voornamelijk afhankelijk van de beveiliging van de computer. In de praktijk is het moeilijk om computers tegen malware te beschermen, en naarmate cryptocurrencies mainstream worden, zullen aanvallen op portemonnees steeds geavanceerder worden.
  • Het gebruik van dergelijke softwareportefeuilles om digitale activa te beveiligen is geen goed idee. Elke gespecialiseerde malware kan de portemonneebestanden ophalen en de wachtwoorden offline vinden, of het wachtwoord achterhalen via een keylogger.
Softwareportefeuilles op een smartphone

Android- en iOS-smartphones bieden standaard beveiligingsfuncties die niet veel worden gebruikt op desktopbesturingssystemen.

Mobiele besturingssystemen bieden app- en gebruikersgegevensbescherming. Met name app-sandboxen zijn verplicht voor alle apps. Op bijvoorbeeld Windows is dit niet het geval: standaard heeft iedere applicatie toegang tot gebruikersgegevens.

Een kwaadaardige app kan dus geen gegevens van een andere app lezen, behalve als:

  • Er wordt een kwetsbaarheid in die app gevonden.
  • Of het slaagt erin privileges te escaleren, bijvoorbeeld door misbruik te maken van een kernelkwetsbaarheid waardoor het root-toegang tot het systeem kan krijgen.

Helaas bestaan ​​dergelijke aanvallen. Ze zijn veel gemakkelijker op verouderde versies van Android en iOS, en op oudere of goedkope apparaten waarop code van derden vaak minder veilig is.

Op een up-to-date besturingssysteem zijn deze aanvallen moeilijker, maar niet onhaalbaar. Ian Beer liet bijvoorbeeld een uiterst indrukwekkende zero-click-aanval op iOS 13.5 in december 2020. Guang Gong presenteerde een exploiteren keten om in juni 2020 een breed scala aan op Qualcomm gebaseerde Android-apparaten op afstand te rooten. En twee weken geleden Verboden verhalen onthulde dat NSO Group een exploitketen gebruikte om recente iOS- en Android-apparaten aan te vallen met behulp van 0-day-kwetsbaarheden.

Minder geavanceerde aanvallers kunnen lokale kwetsbaarheden gebruiken, waardoor ze portefeuillegegevens uit een kwaadaardige applicatie kunnen halen. Kwetsbaarheidsmakelaars zoals Zerodium betalen tot $ 200,000 voor een escalatie van privileges om te rooten op Android en iOS, maar tot $ 1,500,000 voor aanvallen op afstand.

We hebben een aantal Android/iOS-wallets bestudeerd. Hun beveiliging is afhankelijk van de app zelf, maar ook van de beveiligingsfuncties van het onderliggende besturingssysteem. Wanneer de beveiliging van het besturingssysteem wordt verslagen, is de applicatie uiteraard niet meer veilig

Er worden vaak twee methoden gebruikt om het zaad te beschermen:

  • Wachtwoordbeveiliging – portemonneegegevens worden beschermd door een wachtwoord dat door de gebruiker wordt ingevoerd. Het ontwerp is hetzelfde als voor desktop portemonnees. In de praktijk zijn gegevens moeilijker te extraheren dan van een computer, omdat het ophalen van app-gegevens uit een kwaadaardige app technisch moeilijker is, om de hierboven uiteengezette redenen. Het achterhalen van het wachtwoord nadat de gegevens zijn gestolen, is in de praktijk echter eenvoudiger: het invoeren van complexe wachtwoorden op mobiele telefoons is vervelend, waardoor gebruikers de neiging hebben om eenvoudigere wachtwoorden te kiezen. Bovendien zijn sleutelafleidingsmechanismen (die worden gebruikt om van een wachtwoord een sleutel te maken) op mobiele apparaten doorgaans eenvoudiger te doorbreken, omdat ze vanwege prestatieredenen vaak lichter zijn.
  • Coinomi en Metamask zijn voorbeelden van dergelijke portemonnees.

In de volgende video laten we een andere speelgoed-app zien die voor dit artikel is ontwikkeld. Het is malware vermomd als een nep-Bitcoin-tickerwidget. Malware maakt misbruik van een bekende kwetsbaarheid op een niet-gepatcht apparaat om root-toegang op het apparaat te krijgen en om het gecodeerde zaad naar een externe server te exfiltreren. De server forceert vervolgens het wachtwoord om het zaad te decoderen.

Deze methode is niet specifiek voor een portemonnee. Het kan (min of meer) eenvoudig worden aangepast aan elke met een wachtwoord beveiligde portemonnee. Hier is hetzelfde voorbeeld met Coinbase Wallet:

[Ingesloten inhoud]

  • Beveiliging op basis van de Android Keystore (of iOS-sleutelhanger) – In dit geval worden de portefeuillegegevens gecodeerd met een coderingssleutel die is opgeslagen in de Android Keystore (iOS-sleutelhanger). Deze services zijn in eerste instantie ontworpen om coderingssleutels veilig op te slaan, en veel apps gebruiken ze om een ​​sleutel te genereren die alle gevoelige gebruikersgegevens versleutelt. Toepassingen die de Keystore gebruiken, implementeren het volgende mechanisme:
    • De app vraagt ​​de Keystore om een ​​encryptiesleutel te genereren voor een bepaalde identificatie. Keystore genereert de sleutel en bewaart deze veilig.
    • Wanneer de app een blob wil versleutelen of ontsleutelen, stuurt deze de blob samen met de sleutel-ID naar de Keystore.
    • Ten slotte controleert de keystore of de app daadwerkelijk de rechten heeft om deze sleutel te gebruiken en stuurt vervolgens uitvoergegevens terug naar de app.

Met dit model kan de app de waarde van de sleutel niet kennen, maar deze wel gebruiken. Het is ook mogelijk om extra toegangscontroles aan de sleutel te koppelen: sleuteltoegang kan bijvoorbeeld worden gekoppeld aan een gebruikersauthenticatie (verzoek om een ​​pincode of ontgrendelingspatroon).

Dit mechanisme kan extra beveiliging bieden, vergeleken met op wachtwoorden gebaseerde beveiliging. Op recente telefoons wordt de Keystore inderdaad ondersteund door een Trusted Execution Environment (TEE), of soms een Secure Element.

Dat betekent dat een aanvaller met rootrechten geen encryptiesleutels uit de sleutelopslag kan halen. Niettemin zullen ze de Keystore als decoderingsorakel kunnen gebruiken en alle gewenste gegevens kunnen coderen of decoderen.

Keystore biedt encryptie, maar ook ondertekeningsdiensten. Zou een portemonnee zijn encryptiesleutels kunnen beschermen, waardoor ze moeilijk te extraheren zijn? Het antwoord is helaas nee: softwareportefeuilles gebruiken Keystore niet om transacties te ondertekenen en privésleutels worden altijd in leesbare tekst door de app gemanipuleerd.

Dit is om een ​​eenvoudige reden: KeyStore en KeyChain bieden generieke handtekening- en encryptiediensten, maar ondersteunen niet de cryptografie die in cryptocurrencies wordt gebruikt. De KeyStore implementeert bijvoorbeeld de ECDSA-handtekening, maar alleen op NIST-curven gedefinieerd in FIPS 186-4 (P-224, P-256, P-384 en P-521). Bitcoin gebruikt een andere curve, sec256k1, dat nog niet wordt ondersteund.

Samenvattend zijn Keystore en Keychain goede diensten om te beschermen geheime en privésleutels. Ze kunnen enige beveiliging bieden door gevoelige gegevens te versleutelen: sommige soorten kwetsbaarheden (bijvoorbeeld het lezen van willekeurige bestanden) zullen worden aangepakt door Keystore-versleuteling. Als een escalatie van rootbevoegdheden echter niet voldoende is om de sleutelwaarden uit een door hardware ondersteunde Keystore te extraheren, is het voldoende om gevoelige gegevens te ontsleutelen. Een aanvaller die de app kan instrumenteren, kan de geheimen ervan achterhalen.

Tot slot over mobiele portemonnees:

  • Het isolatiemechanisme tussen apps van iOS/Android legt de lat op het gebied van beveiliging hoger in vergelijking met een softwareportemonnee die op een computer draait. De aanvaller heeft eerst een escalatie van bevoegdheden nodig om toegang te krijgen tot app-gegevens. Dit is mogelijk op verouderde apparaten. Ervaren aanvallers (Ian Beer deed het alleen al in zes maanden, maar... Het is Ian Beer) kunnen het ook doen op recente, gepatchte apparaten.
  • Sleutelbeschermingsdiensten (KeyStore, KeyChain) zouden een extra beveiligingslaag kunnen toevoegen voor het beschermen van verborgen geheimen. Niettemin kan de sleutel nog steeds worden geëxtraheerd, omdat ze geen cryptografische algoritmen voor cryptocurrency-toepassingen ondersteunen.
  • In alle gevallen kan een aanvaller met root-toegang óf het zaad in rust ophalen, wanneer het wordt gebruikt, óf de gebruikersrechten benutten om de portemonnee leeg te maken, waarbij hij de softwareportemonnee als orakel gebruikt.

Hier is een laatste voorbeeld van speelgoedspyware die zich richt op de Blockchain.com-portemonnee (hoewel dit net zo gemakkelijk op veel andere portemonnees zou kunnen worden uitgevoerd). Het wordt op afstand geïnstalleerd en bewaakt de portemonnee. Zodra de gebruiker zich heeft geauthenticeerd met zijn vingerafdruk, wordt de coderingssleutel ontgrendeld en worden de portemonneegegevens gedecodeerd. De spyware zorgt ervoor dat de app deze coderingssleutel ophaalt. Vervolgens exfiltreert het de sleutel en de portefeuillegegevens naar een externe server:

[Ingesloten inhoud]

Conclusie

Kortom, softwareportefeuilles hebben verschillende beveiligingsniveaus. Hun dreigingsmodel dekt echter niet het geval van malware die op het besturingssysteem draait met een escalatie van bevoegdheden. Dit is inherent aan het ontwerp: de portemonnee-app kan niet veiliger zijn dan het besturingssysteem waarop deze draait.

  • Het isolatiemechanisme tussen apps van iOS/Android legt de lat op het gebied van beveiliging hoger in vergelijking met een softwareportemonnee die op een computer draait. De aanvaller heeft eerst een escalatie van bevoegdheden nodig om toegang te krijgen tot app-gegevens.
  • Sleutelbeschermingsdiensten (KeyStore, KeyChain) zouden een extra beveiligingslaag kunnen toevoegen voor het beschermen van verborgen geheimen. Niettemin moeten sleutels, omdat ze geen cryptografische algoritmen voor cryptocurrency-toepassingen ondersteunen, rechtstreeks vanuit de app worden gemanipuleerd, zodat ze een beperkte bescherming bieden.
  • In alle gevallen kan een aanvaller met root-toegang ofwel het zaad in rust ophalen, wanneer het wordt gebruikt, ofwel de rechten van de gebruiker gebruiken om de portemonnee leeg te maken, waarbij hij de softwareportefeuille als orakel gebruikt.
spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?