På sikkerhetsmodellen til programvarelommebøker | Ledger

På sikkerhetsmodellen til programvarelommebøker | Ledger

Kilde node: 2671485

Vi kan skille mellom to utbredte typer lommebøker: programvare- og maskinvarelommebøker. De fyller samme funksjon, men på en annen måte. Programvarelommebøker anses som enklere å bruke: et enkelt program er nok til å opprette, validere og signere transaksjoner. Med en programvarelommebok er det ikke nødvendig å opprette transaksjonen på programvaren og bekrefte den på en maskinvareenhet.

To uker siden, Forbudte historier avduket et målrettet angrep mot tusenvis av mennesker over hele verden. Dette angrepet utnyttet sårbarheter på Android og iOS, for å installere spyware utviklet av NSO Group: Pegasus. Denne skadelige programvaren er i stand til å overvåke hele aktiviteten til enheten, og å eksfiltrere personlig informasjon: SMS-, WhatsApp- og signalsamtaler, telefonsamtaler osv. Denne artikkelen forklarer hvordan, under disse forholdene, en slik skadevare vil kunne trekke ut alle hemmelighetene til programvarelommebøker, og forskjellene fra et sikkerhetssynspunkt mellom programvarelommebøker på mobiltelefoner og stasjonære datamaskiner.

Denne artikkelen er ment å være lite teknisk. For å holde det relativt enkelt, vil bare grunnleggende funksjoner bli diskutert.

Beskytter hemmeligheter

Hva lagres i en kryptolommebok?

Lommebøker lagrer faktisk ikke brukernes kryptovalutaer: de lagrer bare hemmelighetene, spesielt de private nøklene, som gir tilgang til kryptovalutaene og muligheten til å bruke dem. Disse private nøklene er for det meste ECC (elliptic curve cryptography) private nøkler på forskjellige kurver avhengig av blokkjeden. De vanligste kurvene er secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) eller BLS12-381 (Ethereum 2).

Disse nøklene brukes til å signere transaksjoner, og mer generelt til å samhandle med blokkjede-aktiva.

Oppbevaringen av disse nøklene avhenger av typen lommebok: deterministisk eller ikke. En hierarkisk deterministisk (HD) lommebok gjør det mulig å lage et tre med nøkler fra en enkelt hovedhemmelighet kalt frøet (jf. BIP44). Dette frøet er ofte avledet fra en mnemonisk sekvens på 12, 18 eller 24 ord tilfeldig generert eller valgt av brukeren (jf.BIP39). Disse minnene tillater å begrense antall nøkler som skal lagres: de kan beregnes på nytt når som helst fra frøet. HD-lommebøker lagrer kun denne mnemonikken eller frøet.

Ikke-deterministiske lommebøker genererer en ny nøkkel for hver bruk og må lagre dem alle. Ikke-deterministiske lommebøker kan ikke enkelt migreres til en annen lommebok siden sikkerhetskopier ikke er kompatible.

De viktigste sikkerhetsfunksjonene til en lommebok består i å generere, lagre og bruke disse hemmelighetene riktig. Det er ulike nivåer av sikkerhet mot ulike typer trusler:

  • Beskyttelse mot "onde hushjelp"-angrep: En angriper med midlertidig tilgang til lommeboken må ikke kunne legge til en bakdør inne i lommeboken som gjør det mulig å stjele PIN-koden eller passordbeskyttende hemmeligheter.
  • Sikkert kryptografisk materiale: Nøkler og nonce generert av lommeboken må aldri være forutsigbare. Videre vil kunnskapen om hemmeligheter (unntatt frøet) som genereres på et tidspunkt ikke tillate å forutsi hemmeligheten som skal genereres i fremtiden.
  • Beskyttelse i hvile: Hvis en angriper får vedvarende data fra en programvarelommebok, må de ikke kunne trekke ut nøklene.
  • Beskyttelse under hemmelig bruk: Når lommeboken er låst opp, må nøklene ikke være tilgjengelige for en angriper eller skadelig programvare.
Maskinvare lommebøker

Sikkerhetsmodellen til en maskinvarelommebok tar sikte på å unngå disse sikkerhetstruslene. Maskinvare lommebøker beskytter mot skadelig programvare ved design. De er uavhengige enheter som signerer transaksjoner på egenhånd. Det kryptografiske materialet forblir alltid inne i enheten og sendes aldri til programvaren de kommuniserer med. Kommunikasjonsgrensesnittet er alltid enkelt, noe som drastisk reduserer angrepsflaten. Det kan være USB, Micro SD eller kamera + skjerm (gjennom QR-kode), eller Bluetooth Low Energy.

Videre legger maskinvarelommebøker inn en skjerm direkte i enheten som lar brukeren bekrefte handlingene han skal gjøre når han samhandler med de hemmelige nøklene sine. Disse manuelle kontrollene på enheter er et svært effektivt mottiltak mot skadelig programvare på datamaskinen/mobilen. Der skadevare på en datamaskin/mobil enhet kan få tilgang til hemmelighetene (frø eller private nøkler) eller til og med bytte/endre adresser eller beløp når brukeren utfører en transaksjon, er dette ikke mulig med en maskinvarelommebok.

Maskinvare-lommebøker er også designet for å beskytte mot "onde hushjelp"-angrep og mot en angriper med fysisk tilgang. Avhengig av maskinvarelommeboken har de forskjellige sikkerhetsnivåer, men i alle tilfeller er de designet for å sikre seg mot disse truslene. Du finner en detaljert beskrivelse av Ledger Nano-trusselmodeller her..

Programvare lommebøker

Vanlige programvarelommebøker beskytter hemmeligheter med vanlige midler: sikkerhetsmekanismer for operativsystemet de kjører på og noen ganger en tilgangskontroll basert på en PIN-kode eller et passord.

I det følgende vurderes stasjonære (Windows, macOS, Linux) lommebøker og mobile lommebøker. Hovedforskjellene mellom dem er for det meste avhengige av sikkerhetsmekanismene som tilbys av operativsystemet.

Programvare lommebøker på en datamaskin

Flere populære lommebøker, som Electrum, Exodus, Atomic eller Bitcoin core, kjører på datamaskiner.

På en datamaskin er sikkerhetsmekanismer som tilbys av operativsystemet for å isolere en lommebokprosess fra andre prosesser begrenset. De fleste apper kjøres av samme bruker, og apper har lov til å lese andre appers data.

Sikkerheten til disse programvarelommebøkene er hovedsakelig avhengig av sikkerheten til passordet som beskytter dem, og også på det faktum at ingen skadelig programvare kjører på operativsystemet (noe som er ganske vanskelig å garantere, se nylige nyheter om Pegasus).

Mesteparten av tiden er frøet lagret i en kryptert beholder beskyttet av et passord. Et enkelt angrep består, for en malware eller et eksternt administrasjonsverktøy, å hente denne krypterte beholderen og sende den til angriperen. Da kan passordet enten være brute-forced eller fås ved å bruke en keylogger.

I et scenario der en angriper bare klarer å få tilgang til den krypterte beholderen (angriperen finner en USB-nøkkel som inneholder en lommebok, eller installerer skadelig programvare på en datamaskin, men offeret aldri åpner lommebokapplikasjonen sin), må angriperen bruttforce passordet.

De fleste passord er dårlig. Det er milliarder av passord som har lekket ut på nettet, og mange mennesker har en tendens til å gjenbruke passordene sine til flere tjenester. Ferdige verktøy lar deg hente passord til kryptovaluta-lommebøker, som f.eks btcrecover or hashcat. Passord kan være komplekse, men bak hver lommebok er det ekte penger, og angripere vil derfor ikke nøle med å investere ressurser for å bryte slike passord.

To grunnleggende sikkerhetsprinsipper for å holde passordene dine sikre er å bruke en passordbehandling, og aldri gjenbruke passordet til forskjellige formål.

Den mest bekymringsfulle trusselen for programvarelommebøker er dedikert skadelig programvare og tyvere, utviklet spesielt for å tappe pengene dine. Slik skadelig programvare, som KPOT eller ElectroRAT, trenger ikke engang å bruteforce passordet ditt: de kan fange det direkte når du skriver det inn, dekryptere lommebokkonfigurasjonsdataene og eksfiltrere frøet.

Her er en lekeapplikasjon, utviklet for denne artikkelen, som retter seg mot Electrum-lommeboken (selv om det kunne vært en annen programvarelommebok). Den simulerer en skadelig programvare som stjeler brukerpassordet når det tastes inn av offeret. Passordet brukes deretter til å dekryptere lommebokdataene og vise frøet:

Som du ser, selv om passordet er komplekst, er appen i stand til å hente det ettersom den snuser det direkte i minnet.

Dette eksemplet er veldig likt det siste .SCR skadelig programvare kampanjer som brukes til å stjele kryptovalutaer. Kriminelle brukte sosiale ingeniørteknikker for å lure brukere til å laste ned en ondsinnet skjermsparer. Denne skjermspareren stjal faktisk informasjon fra datamaskinens offer, inkludert informasjon om lommebok og kryptovaluta.

For å konkludere med programvarelommebøker som kjører på datamaskiner:

  • I de fleste tilfeller beskytter programvarelommebøker som kjører på datamaskiner brukerens frø ved å bruke et passord.
  • Tilgangskontrollen for disse lommebokfilene er hovedsakelig avhengig av sikkerheten til datamaskinen. I praksis er det vanskelig å beskytte datamaskiner mot skadelig programvare, og etter hvert som kryptovalutaer blir mainstream, vil angrep mot lommebøker bli mer og mer sofistikerte.
  • Å bruke slike programvarelommebøker for å sikre digitale eiendeler er ikke en god idé. Enhver spesialisert skadelig programvare vil kunne hente lommebokfilene og finne passordene offline, eller få passordet gjennom en keylogger.
Programvare lommebøker på en smarttelefon

Android- og iOS-smarttelefoner tilbyr som standard sikkerhetsfunksjoner som ikke er mye brukt på stasjonære operativsystemer.

Mobiloperativsystemer tilbyr app- og brukerdatabeskyttelse. Spesielt er app-sandkasser obligatoriske for alle apper. Dette er ikke tilfelle på for eksempel Windows: Som standard kan alle applikasjoner få tilgang til brukerdata.

Derfor kan ikke en ondsinnet app lese data fra en annen app, unntatt hvis:

  • Den finner en sårbarhet på den appen.
  • Eller den klarer å eskalere privilegier, for eksempel ved å utnytte en kjernesårbarhet som lar den få root-tilgang til systemet.

Dessverre finnes slike angrep. De er mye enklere på utdaterte versjoner av Android og iOS, og på eldre eller billige enheter der tredjepartskode ofte er mindre sikker.

På et oppdatert OS er disse angrepene vanskeligere, men ikke ugjennomførbare. For eksempel viste Ian Beer en ekstremt imponerende null-klikks angrep på iOS 13.5 i desember 2020. Guang Gong presenterte en utnytte kjede å fjernrotere et bredt spekter av Qualcomm-baserte Android-enheter i juni 2020. Og for to uker siden, Forbudte historier avduket at NSO Group brukte en utnyttelseskjede for å målrette mot nyere iOS- og Android-enheter ved å bruke 0-dagers sårbarheter.

Mindre sofistikerte angripere kan bruke lokale sårbarheter som lar dem trekke ut lommebokdata fra en ondsinnet applikasjon. Sårbarhetsmeglere som Zerodium betaler opp til $ 200,000 for en rettighetseskalering til å roote på Android og iOS, men opptil $1,500,000 XNUMX XNUMX for eksterne angrep.

Vi studerte et par Android/iOS-lommebøker. Sikkerheten deres avhenger av selve appen, men også av sikkerhetsfunksjonene til det underliggende operativsystemet. Selvfølgelig, når sikkerheten til operativsystemet er beseiret, er applikasjonen ikke sikker lenger

To metoder for å beskytte frøet er ofte brukt:

  • Passordbeskyttelse – lommebokdata er beskyttet av et passord angitt av brukeren. Designet er det samme som for stasjonære lommebøker. I praksis er data vanskeligere å trekke ut enn fra en datamaskin, da det er teknisk vanskeligere å hente appdata fra en ondsinnet app, av årsakene som er forklart ovenfor. Imidlertid er det i praksis enklere å hente passordet når dataene er stjålet: Det er kjedelig å skrive inn komplekse passord på mobiltelefoner, og brukere har derfor en tendens til å velge enklere. Dessuten er nøkkelavledningsmekanismer (brukt til å lage en nøkkel fra et passord) på mobile enheter vanligvis enklere å bryte, siden de ofte er lettere av ytelsesgrunner.
  • Coinomi og Metamask er eksempler på slike lommebøker.

I den følgende videoen viser vi en annen leke-app utviklet for denne artikkelen. Det er en skadelig programvare forkledd som en falsk Bitcoin ticker-widget. Skadelig programvare utnytter en kjent sårbarhet på en uopprettet enhet for å få root-tilgang på enheten, og for å eksfiltrere det krypterte frøet til en ekstern server. Serveren tvinger deretter passordet til å dekryptere frøet.

Denne metoden er ikke spesifikk for en lommebok. Den kan (mer eller mindre) enkelt tilpasses til enhver passordbeskyttet lommebok. Her er det samme eksempelet med Coinbase Wallet:

[Innebygd innhold]

  • Sikkerhet basert på Android Keystore (eller iOS nøkkelring) – I dette tilfellet er lommebokdata kryptert med en krypteringsnøkkel som er lagret i Android Keystore (iOS Keychain). Disse tjenestene ble opprinnelig designet for å lagre krypteringsnøkler på en sikker måte, og mange apper bruker dem til å generere en nøkkel som vil kryptere alle sensitive brukerdata. Applikasjoner som bruker Keystore implementerer følgende mekanisme:
    • Appen ber nøkkellageret generere en krypteringsnøkkel for en gitt identifikator. Keystore genererer nøkkelen og lagrer den sikkert.
    • Når appen ønsker å kryptere eller dekryptere en blob, sender den bloben sammen med nøkkelidentifikatoren til nøkkellageret.
    • Til slutt sjekker nøkkellageret om appen faktisk har rettighetene til å bruke denne nøkkelen og sender deretter utdata til appen.

Med denne modellen kan ikke appen vite verdien av nøkkelen, men kan bruke den. Det er også mulig å knytte ekstra tilgangskontroller til nøkkelen: for eksempel kan nøkkeltilgang betinges til en brukerautentisering (be om en PIN-kode eller opplåsingsmønster).

Denne mekanismen kan gi ekstra sikkerhet sammenlignet med passordbasert beskyttelse. Faktisk, på nyere telefoner, er nøkkellageret støttet av et Trusted Execution Environment (TEE), eller noen ganger et Secure Element.

Det betyr at en angriper med root-privilegier ikke vil kunne trekke ut krypteringsnøkler fra nøkkellageret. Likevel vil de kunne bruke nøkkellageret som et dekrypteringsorakel, og kryptere eller dekryptere alle data de ønsker.

Keystore tilbyr kryptering, men også signeringstjenester. Så kan en lommebok beskytte krypteringsnøklene, noe som gjør dem vanskelige å trekke ut? Svaret er dessverre nei: programvarelommebøker bruker ikke Keystore til å signere transaksjonerog private nøkler blir alltid manipulert i klartekst av appen.

Dette er av en enkel grunn: KeyStore og KeyChain tilbyr generiske signatur- og krypteringstjenester, men støtter ikke kryptografien som brukes i kryptovalutaer. For eksempel implementerer KeyStore ECDSA Signature, men bare på NIST-kurver definert i FIPS 186-4 (P-224, P-256, P-384 og P-521). Bitcoin bruker en annen kurve, sekp256k1, som ikke støttes ennå.

For å oppsummere, Keystore og Keychain er gode tjenester å beskytte hemmelige og private nøkler. De kan tilby en viss sikkerhet ved å kryptere sensitive data: noen klasser av sårbarheter (for eksempel vilkårlig fillesing) vil bli taklet av Keystore-kryptering. Imidlertid, hvis en opptrapping av rotprivilegier ikke er nok til å trekke ut nøkkelverdiene fra en maskinvarestøttet nøkkellager, er det tilstrekkelig å dekryptere sensitive data. En angriper som er i stand til å instrumentere appen, er i stand til å hente hemmeligheter.

For å konkludere med mobillommebøker:

  • Isolasjonsmekanismen mellom apper levert av iOS/Android hever standarden for sikkerhet sammenlignet med en programvarelommebok som kjører på en datamaskin. Angriperen trenger først en rettighetseskalering for å få tilgang til appdata. Dette er mulig på utdaterte enheter. Dyktige angripere (Ian Beer gjorde det på 6 måneder alene, men... Det er Ian Beer) kan også gjøre det på nyere, lappede enheter.
  • Nøkkelbeskyttelsestjenester (KeyStore, KeyChain) kan legge til et ekstra lag med sikkerhet for å beskytte hemmeligheter i ro. Likevel, siden de ikke støtter kryptografiske algoritmer for kryptovalutaapplikasjoner, kan nøkkelen fortsatt trekkes ut.
  • I alle tilfeller kan en angriper med root-tilgang enten hente frøet i hvile, når det brukes, eller utnytte brukerens rettigheter til å tømme lommeboken ved å bruke programvarelommeboken som et orakel.

Her er et siste eksempel på et spionprogram som er rettet mot Blockchain.com-lommeboken (selv om dette like enkelt kan utføres på mange andre lommebøker). Den installeres eksternt, og overvåker lommeboken. Når brukeren har autentisert med fingeravtrykket, låses krypteringsnøkkelen opp og lommebokdata dekrypteres. Spionvaren instrumenterer appen til å hente denne krypteringsnøkkelen. Den eksfiltrerer deretter nøkkelen og lommebokdataene til en ekstern server:

[Innebygd innhold]

konklusjonen

Som en konklusjon har programvarelommebøker forskjellige sikkerhetsnivåer. Trusselmodellen deres dekker imidlertid ikke tilfellet med skadelig programvare som kjører på operativsystemet med en rettighetseskalering. Dette er ved design: lommebok-appen kan ikke være sikrere enn operativsystemet den kjører på.

  • Isolasjonsmekanismen mellom apper levert av iOS/Android hever standarden for sikkerhet sammenlignet med en programvarelommebok som kjører på en datamaskin. Angriperen trenger først en rettighetseskalering for å få tilgang til appdata.
  • Nøkkelbeskyttelsestjenester (KeyStore, KeyChain) kan legge til et ekstra lag med sikkerhet for å beskytte hemmeligheter i ro. Likevel, siden de ikke støtter kryptografiske algoritmer for kryptovalutaapplikasjoner, må nøkler manipuleres direkte fra appen, så de tilbyr en begrenset beskyttelse.
  • I alle tilfeller kan en angriper med root-tilgang enten hente frøet i hvile, når det brukes, eller utnytte brukerens rettigheter til å tømme lommeboken ved å bruke programvarelommeboken som et orakel.

Tidstempel:

Mer fra Ledger