Om säkerhetsmodellen för mjukvaruplånböcker | Huvudbok

Om säkerhetsmodellen för mjukvaruplånböcker | Huvudbok

Källnod: 2671485

Vi kan urskilja två vanliga typer av plånböcker: mjukvara och hårdvara. De fyller samma funktion, men på ett annat sätt. Programvaruplånböcker anses vara enklare att använda: ett enda program räcker för att skapa, validera och signera transaktioner. Med en mjukvaruplånbok är det inte nödvändigt att skapa transaktionen på programvaran och bekräfta den på en hårdvaruenhet.

Två veckor sedan, Förbjudna berättelser avslöjade en riktad attack mot tusentals människor runt om i världen. Denna attack utnyttjade sårbarheter på Android och iOS för att installera spionprogram som utvecklats av NSO Group: Pegasus. Denna skadliga programvara kan övervaka enhetens hela aktivitet och exfiltrera personlig information: SMS, WhatsApp och signalkonversationer, telefonsamtal, etc. Den här artikeln förklarar hur, under dessa förhållanden, en sådan skadlig kod skulle kunna extrahera alla hemligheter för en mjukvaruplånbok, och skillnaderna ur säkerhetssynpunkt mellan mjukvaruplånböcker på mobiltelefoner och stationära datorer.

Den här artikeln är inte avsedd att vara särskilt teknisk. För att hålla det relativt enkelt kommer endast grundläggande funktioner att diskuteras.

Skydda hemligheter

Vad lagras i en kryptoplånbok?

Plånböcker lagrar faktiskt inte användarnas kryptovalutor: de lagrar bara hemligheterna, särskilt de privata nycklarna, som gör det möjligt att komma åt kryptovalutorna och möjligheten att spendera dem. Dessa privata nycklar är för det mesta ECC (elliptic curve cryptography) privata nycklar på olika kurvor beroende på blockchain. De vanligaste kurvorna är secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) eller BLS12-381 (Ethereum 2).

Dessa nycklar används för att signera transaktioner, och mer allmänt för att interagera med blockchain-tillgångar.

Lagringen av dessa nycklar beror på typen av plånbok: deterministisk eller inte. En hierarchical deterministic (HD) plånbok tillåter skapandet av ett träd av nycklar från en enda huvudhemlighet som kallas fröet (jfr. BIP44). Detta frö är ofta härlett från en mnemonisk sekvens av 12, 18 eller 24 ord som genereras slumpmässigt eller valts av användaren (jfr.BIP39). Dessa mnemonics tillåter att begränsa antalet nycklar som ska lagras: de kan beräknas om när som helst från fröet. HD-plånböcker lagrar bara detta minnesminne eller fröet.

Icke deterministiska plånböcker genererar en ny nyckel för varje användning och måste lagra alla. Icke-deterministiska plånböcker kan inte enkelt migreras till en annan plånbok eftersom säkerhetskopior inte är kompatibla.

De viktigaste säkerhetsfunktionerna i en plånbok består i att generera, lagra och använda dessa hemligheter på rätt sätt. Det finns olika säkerhetsnivåer mot olika typer av hot:

  • Skydd mot attacker från "ond jungfru": En angripare med tillfällig åtkomst till plånboken ska inte kunna lägga till en bakdörr inuti plånboken som tillåter att stjäla PIN-koden eller lösenordsskyddande hemligheter.
  • Säkert kryptografiskt material: Nycklar och nonce som genereras av plånboken får aldrig vara förutsägbara. Vidare ska kunskapen om hemligheter (förutom fröet) som genereras vid någon tidpunkt inte tillåta att förutsäga hemligheten som kommer att genereras i framtiden.
  • Skydd i vila: Om en angripare får beständiga data från en programvaruplånbok, får de inte kunna extrahera nycklarna.
  • Skydd vid hemlig användning: När plånboken är upplåst får nycklarna inte vara tillgängliga för en angripare eller skadlig programvara.
Hårdvara plånböcker

Säkerhetsmodellen för en hårdvaruplånbok syftar till att undvika dessa säkerhetshot. Hårdvaruplånböcker skyddar mot skadlig programvara genom design. De är oberoende enheter som signerar transaktioner på egen hand. Det kryptografiska materialet stannar alltid inuti enheten och skickas aldrig till programvaran som de kommunicerar med. Kommunikationsgränssnittet är alltid enkelt vilket drastiskt minskar attackytan. Det kan vara USB, Micro SD eller kamera + skärm (via QR-kod), eller Bluetooth Low Energy.

Dessutom bäddar hårdvaruplånböcker in en skärm direkt i enheten så att användaren kan verifiera de åtgärder han ska göra när han interagerar med sina hemliga nycklar. Dessa manuella kontroller av enheter är en mycket effektiv motåtgärd mot skadlig programvara på datorn/mobilen. Där skadlig programvara på en dator/mobil enhet kan komma åt hemligheterna (frö eller privata nycklar) eller till och med byta/ändra adresser eller belopp när användaren utför en transaktion, är detta inte möjligt med en hårdvaruplånbok.

Hårdvaruplånböcker är också utformade för att skydda mot attacker från "evil maid" och mot en angripare med fysisk åtkomst. Beroende på hårdvaruplånboken har de olika säkerhetsnivåer, men i alla fall är de designade för att skydda mot dessa hot. En detaljerad beskrivning av Ledger Nano-hotmodeller finns här..

Programvaruplånböcker

Vanliga programvaruplånböcker skyddar hemligheter med vanliga medel: säkerhetsmekanismer för operativsystemet som de körs på och ibland en åtkomstkontroll baserad på en PIN-kod eller ett lösenord.

I det följande övervägs stationära (Windows, macOS, Linux) plånböcker och mobila plånböcker. De huvudsakliga skillnaderna mellan dem beror mest på säkerhetsmekanismerna som erbjuds av operativsystemet.

Programvara plånböcker på en dator

Flera populära plånböcker, som Electrum, Exodus, Atomic eller Bitcoin core, körs på datorer.

På en dator är säkerhetsmekanismer som operativsystemet erbjuder för att isolera en plånboksprocess från andra processer begränsade. De flesta appar körs av samma användare och appar tillåts läsa andra appars data.

Säkerheten för dessa mjukvaruplånböcker bygger främst på säkerheten för lösenordet som skyddar dem, och även på det faktum att ingen skadlig programvara körs på operativsystemet (vilket är ganska svårt att garantera, se senaste nyheterna om Pegasus).

För det mesta lagras fröet i en krypterad behållare som skyddas av ett lösenord. En enkel attack består, för en skadlig programvara eller ett fjärradministrationsverktyg, att hämta denna krypterade behållare och skicka den till angriparen. Då kan lösenordet antingen vara brute-forced eller erhållas genom att använda en keylogger.

I ett scenario där en angripare bara lyckas komma åt den krypterade behållaren (angriparen hittar en USB-nyckel som innehåller en plånbok, eller installerar skadlig programvara på en dator, men offret aldrig öppnar sin plånboksapplikation), måste angriparen bruteforce lösenordet.

De flesta lösenord är illa. Det finns miljarder lösenord som läckt ut på webben, och många människor tenderar att återanvända sina lösenord för flera tjänster. Färdiga verktyg låter dig hämta lösenord för kryptovaluta plånböcker, som t.ex btcrecover or haschcat. Lösenord kan vara komplexa, men bakom varje plånbok finns riktiga pengar, därför kommer angripare inte att tveka att investera resurser för att bryta sådana lösenord.

Två grundläggande säkerhetsprinciper för att hålla dina lösenord säkra är att använda en lösenordshanterare och att aldrig återanvända ditt lösenord för olika ändamål.

Det mest oroande hotet mot programvaruplånböcker är dedikerade skadliga program och stjälare, utvecklade speciellt för att tömma dina pengar. Sådan skadlig kod, som KPOT eller ElectroRAT, behöver inte ens bruteforce ditt lösenord: de kan direkt fånga det när du anger det, dekryptera plånbokens konfigurationsdata och exfiltrera fröet.

Här är en leksaksapplikation, utvecklad för den här artikeln, som riktar sig till Electrum-plånboken (även om det kunde ha varit en annan mjukvaruplånbok). Det simulerar en skadlig kod som stjäl användarlösenordet när det skrivs in av offret. Lösenordet används sedan för att dekryptera plånboksdata och för att visa fröet:

Som du ser, även om lösenordet är komplext, kan appen hämta det eftersom det direkt sniffar det i minnet.

Detta exempel är mycket likt det senaste .SCR skadlig programvara kampanjer som används för att stjäla kryptovalutor. Brottslingar använde social ingenjörsteknik för att lura användare att ladda ner en skadlig skärmsläckare. Denna skärmsläckare stal faktiskt information från datorns offer, inklusive information om plånbok och kryptovaluta.

För att dra slutsatser om programvaruplånböcker som körs på datorer:

  • I de flesta fall skyddar mjukvaruplånböcker som körs på datorer användarens frön med ett lösenord.
  • Åtkomstkontrollen för dessa plånboksfiler är huvudsakligen beroende av datorns säkerhet. I praktiken är det svårt att skydda datorer från skadlig kod, och i takt med att kryptovalutor blir vanliga kommer attacker mot plånböcker att bli mer och mer sofistikerade.
  • Att använda sådana mjukvaruplånböcker för att säkra digitala tillgångar är inte en bra idé. Alla specialiserade skadliga program kommer att kunna hämta plånboksfilerna och hitta lösenorden offline, eller få lösenordet via en keylogger.
Programvara plånböcker på en smartphone

Android- och iOS-smarttelefoner erbjuder som standard säkerhetsfunktioner som inte används i stor utsträckning på stationära operativsystem.

Mobila operativsystem erbjuder app- och användardataskydd. I synnerhet är appsandlådor obligatoriska för alla appar. Detta är inte fallet på till exempel Windows: som standard kan alla program komma åt användardata.

Därför kan en skadlig app inte läsa data från en annan app, förutom om:

  • Den hittar en sårbarhet i den appen.
  • Eller så lyckas den eskalera privilegier, till exempel genom att utnyttja en kärnsårbarhet som gör att den kan få root-åtkomst till systemet.

Tyvärr finns sådana attacker. De är mycket enklare på föråldrade versioner av Android och iOS, och på äldre eller billiga enheter där tredjepartskod ofta är mindre säker.

På ett uppdaterat operativsystem är dessa attacker svårare men inte helt omöjliga. Till exempel visade Ian Beer en extremt imponerande nollklicksattack på iOS 13.5 i december 2020. Guang Gong presenterade en utnyttja kedjan att fjärrrota ett brett utbud av Qualcomm-baserade Android-enheter i juni 2020. Och för två veckor sedan, Förbjudna berättelser avslöjade att NSO Group använde en exploateringskedja för att rikta in sig på senaste iOS- och Android-enheter med 0-dagars sårbarheter.

Mindre sofistikerade angripare kan använda lokala sårbarheter så att de kan extrahera plånboksdata från ett skadligt program. Sårbarhetsmäklare som Zerodium betalar upp till $ 200,000 för en privilegieskalering för att rota på Android och iOS, men upp till $1,500,000 XNUMX XNUMX för fjärrattacker.

Vi studerade ett par Android/iOS-plånböcker. Deras säkerhet beror på själva appen, men också på säkerhetsfunktionerna i det underliggande operativsystemet. Naturligtvis, när säkerheten för operativsystemet besegras, är applikationen inte säker längre

Två metoder för att skydda fröet används vanligtvis:

  • Lösenordsskydd – plånboksdata skyddas av ett lösenord som angetts av användaren. Designen är densamma som för stationära plånböcker. I praktiken är data svårare att extrahera än från en dator, eftersom det är tekniskt svårare att hämta appdata från en skadlig app, av de skäl som förklaras ovan. Men det är i praktiken enklare att hämta lösenordet när data har stulits: att ange komplexa lösenord på mobiltelefoner är tråkigt, därför tenderar användare att välja enklare. Dessutom är nyckelhärledningsmekanismer (som används för att skapa en nyckel från ett lösenord) på mobila enheter vanligtvis enklare att bryta, eftersom de ofta är mer lätta av prestandaskäl.
  • Coinomi och Metamask är exempel på sådana plånböcker.

I följande video visar vi en annan leksaksapp utvecklad för den här artikeln. Det är en skadlig kod förklädd som en falsk Bitcoin-ticker-widget. Skadlig programvara utnyttjar en känd sårbarhet på en oparpad enhet för att få root-åtkomst på enheten och för att exfiltrera det krypterade kärnan till en fjärrserver. Servern bruteforce sedan lösenordet för att dekryptera fröet.

Denna metod är inte specifik för en plånbok. Den kan (mer eller mindre) enkelt anpassas till vilken lösenordsskyddad plånbok som helst. Här är samma exempel med Coinbase Wallet:

[Inbäddat innehåll]

  • Säkerhet baserad på Android Keystore (eller iOS Keychain) – I det här fallet krypteras plånboksdata med en krypteringsnyckel som lagras i Android Keystore (iOS Keychain). Dessa tjänster designades från början för att säkert lagra krypteringsnycklar, och många appar använder dem för att generera en nyckel som kommer att kryptera alla känsliga användardata. Applikationer som använder Keystore implementerar följande mekanism:
    • Appen ber Keystore att generera en krypteringsnyckel för en given identifierare. Keystore genererar nyckeln och lagrar den säkert.
    • När appen vill kryptera eller dekryptera en blob, skickar den bloben tillsammans med nyckelidentifieraren till Keystore.
    • Slutligen kontrollerar nyckelarkivet om appen faktiskt har rättigheterna att använda denna nyckel och skickar tillbaka utdata till appen.

Med den här modellen kan appen inte veta värdet på nyckeln men kan använda den. Det är också möjligt att koppla ytterligare åtkomstkontroller till nyckeln: till exempel kan nyckelåtkomst villkoras till en användarverifiering (begära en PIN-kod eller upplåsningsmönster).

Denna mekanism kan ge ytterligare säkerhet, jämfört med lösenordsbaserat skydd. Faktum är att på nyare telefoner stöds Keystore av en Trusted Execution Environment (TEE), eller ibland ett Secure Element.

Det betyder att en angripare med root-privilegier inte kommer att kunna extrahera krypteringsnycklar från nyckellagret. Ändå kommer de att kunna använda Keystore som ett dekrypteringsorakel och för att kryptera eller dekryptera vilken data de vill.

Keystore erbjuder kryptering, men även signeringstjänster. Så, kan en plånbok skydda sina krypteringsnycklar, vilket gör dem svåra att extrahera? Svaret är tyvärr nej: mjukvaruplånböcker använder inte Keystore för att signera transaktioneroch privata nycklar manipuleras alltid i klartext av appen.

Detta är av en enkel anledning: KeyStore och KeyChain erbjuder generiska signatur- och krypteringstjänster, men stöder inte den kryptografi som används i kryptovalutor. Till exempel implementerar KeyStore ECDSA Signature men endast på NIST-kurvor definierade i FIPS 186-4 (P-224, P-256, P-384 och P-521). Bitcoin använder en annan kurva, sekp256k1, som inte stöds ännu.

För att sammanfatta, Keystore och Keychain är bra tjänster att skydda hemliga och privata nycklar. De kan erbjuda viss säkerhet genom att kryptera känsliga data: vissa klasser av sårbarheter (t.ex. godtycklig filläsning) kommer att hanteras av Keystore-kryptering. Men om en eskalering av rootprivilegier inte räcker för att extrahera nyckelvärdena från en hårdvarustödd nyckelbutik, är det tillräckligt att dekryptera känslig data. En angripare som kan instrumentera appen kan hämta dess hemligheter.

För att avsluta om mobila plånböcker:

  • Isoleringsmekanismen mellan appar som tillhandahålls av iOS/Android höjer ribban för säkerhet jämfört med en mjukvaruplånbok som körs på en dator. Angriparen behöver först en privilegieskalering för att komma åt appdata. Detta är möjligt på föråldrade enheter. Skickliga angripare (Ian Beer gjorde det ensam på 6 månader men... Det är Ian Beer) kan också göra det på nyare, patchade enheter.
  • Nyckelskyddstjänster (KeyStore, KeyChain) kan lägga till ett extra lager av säkerhet för att skydda hemligheter i vila. Ändå, eftersom de inte stöder kryptografiska algoritmer för kryptovalutaapplikationer, kan nyckel fortfarande extraheras.
  • I alla fall kan en angripare med root-åtkomst antingen hämta utsädet i vila, när det används, eller utnyttja användarens rättigheter att tömma plånboken med hjälp av mjukvaruplånboken som ett orakel.

Här är ett sista exempel på ett leksaksspionprogram som riktar sig mot Blockchain.com-plånboken (även om detta kan utföras på många andra plånböcker lika enkelt). Den är fjärrinstallerad och övervakar plånboken. När användaren har autentiserats med sitt fingeravtryck låses krypteringsnyckeln upp och plånboksdata dekrypteras. Spionprogrammet instrumenterar appen för att hämta denna krypteringsnyckel. Det exfiltrerar sedan nyckeln och plånbokens data till en fjärrserver:

[Inbäddat innehåll]

Slutsats

Som en slutsats har mjukvaruplånböcker olika säkerhetsnivåer. Deras hotmodell täcker dock inte fallet med skadlig programvara som körs på operativsystemet med en privilegieskalering. Detta är designat: plånboksappen kan inte vara säkrare än operativsystemet den körs på.

  • Isoleringsmekanismen mellan appar som tillhandahålls av iOS/Android höjer ribban för säkerhet jämfört med en mjukvaruplånbok som körs på en dator. Angriparen behöver först en privilegieskalering för att komma åt appdata.
  • Nyckelskyddstjänster (KeyStore, KeyChain) kan lägga till ett extra lager av säkerhet för att skydda hemligheter i vila. Ändå, eftersom de inte stöder kryptografiska algoritmer för kryptovalutaapplikationer, måste nycklar manipuleras direkt från appen, så de erbjuder ett begränsat skydd.
  • I alla fall kan en angripare med root-åtkomst antingen hämta utsädet i vila, när det används, eller utnyttja användarens rättigheter att tömma plånboken med hjälp av mjukvaruplånboken som ett orakel.

Tidsstämpel:

Mer från Ledger