O varnostnem modelu programskih denarnic | Ledger

O varnostnem modelu programskih denarnic | Ledger

Izvorno vozlišče: 2671485

Ločimo dve prevladujoči vrsti denarnic: programsko in strojno denarnico. Izpolnjujejo isto funkcijo, vendar na drugačen način. Programske denarnice veljajo za enostavnejše za uporabo: za ustvarjanje, potrjevanje in podpisovanje transakcij zadostuje en sam program. S programsko denarnico ni treba ustvariti transakcije v programski opremi in jo potrditi v strojni napravi.

Pred dvema tednoma, Prepovedane zgodbe razkril ciljni napad na tisoče ljudi po vsem svetu. Ta napad je izkoristil ranljivosti v sistemih Android in iOS za namestitev vohunske programske opreme, ki jo je razvila skupina NSO: Pegasus. Ta zlonamerna programska oprema lahko spremlja celotno dejavnost naprave in izloči osebne podatke: pogovore SMS, WhatsApp in Signal, telefonske klice itd. Ta članek pojasnjuje, kako bi lahko pod temi pogoji taka zlonamerna programska oprema izvlekla vse skrivnosti programskih denarnic ter razlike z varnostnega vidika med programskimi denarnicami na mobilnih telefonih in namiznih računalnikih.

Ta članek naj ne bi bil zelo tehničen. Da bo razmeroma enostavno, bomo obravnavali le osnovne funkcije.

Varovanje skrivnosti

Kaj je shranjeno v kripto denarnici?

Denarnice pravzaprav ne shranjujejo kriptovalut uporabnikov: hranijo samo skrivnosti, zlasti zasebne ključe, ki omogočajo dostop do kriptovalut in možnost njihove porabe. Ti zasebni ključi so večinoma zasebni ključi ECC (kriptografija z eliptično krivuljo) na različnih krivuljah, odvisno od verige blokov. Najpogostejše krivulje so secp256k1 (Bitcoin, Ethereum ...), Ed25519 (Monero) ali BLS12-381 (Ethereum 2).

Ti ključi se uporabljajo za podpisovanje transakcij in na splošno za interakcijo s sredstvi verige blokov.

Shranjevanje teh ključev je odvisno od vrste denarnice: deterministična ali ne. Hierarchical Deterministic (HD) denarnica omogoča ustvarjanje drevesa ključev iz ene same glavne skrivnosti, imenovane seme (prim. BIP44). To seme je pogosto izpeljano iz mnemoničnega zaporedja 12, 18 ali 24 besed, ki jih naključno ustvari ali izbere uporabnik (prim.BIP39). Ti mnemoniki omogočajo omejitev števila ključev, ki jih je treba shraniti: kadar koli jih je mogoče znova izračunati iz semena. HD denarnice hranijo samo to mnemoniko ali seme.

Nedeterministične denarnice ustvarijo nov ključ za vsako uporabo in jih morajo shraniti vse. Nedeterminističnih denarnic ni mogoče enostavno preseliti v drugo denarnico, ker varnostne kopije niso združljive.

Glavne varnostne funkcije denarnice so pravilno ustvarjanje, shranjevanje in uporaba teh skrivnosti. Obstajajo različne stopnje varnosti pred različnimi vrstami groženj:

  • Zaščita pred napadi "zle služkinje": Napadalec z začasnim dostopom do denarnice ne sme imeti možnosti, da v denarnico doda stranska vrata, ki bi omogočila krajo kode PIN ali skrivnosti za zaščito gesla.
  • Varen kriptografski material: Ključi in nonce, ki jih ustvari denarnica, nikoli ne smejo biti predvidljivi. Poleg tega znanje o skrivnostih (razen semena), ustvarjenih v nekem trenutku, ne bo omogočalo predvidevanja skrivnosti, ki bo ustvarjena v prihodnosti.
  • Zaščita v mirovanju: Če napadalec pridobi obstojne podatke programske denarnice, ne sme biti sposoben izvleči ključev.
  • Zaščita med tajno uporabo: Ko je denarnica odklenjena, ključi ne smejo biti dostopni napadalcu ali zlonamerni programski opremi.
Strojna denarnica

Varnostni model strojne denarnice je namenjen izogibanju tem varnostnim grožnjam. Strojne denarnice ščitijo pred zlonamerno programsko opremo že po zasnovi. So neodvisne naprave, ki same podpisujejo transakcije. Kriptografski materiali vedno ostanejo v napravi in ​​se nikoli ne pošljejo programski aplikaciji, s katero komunicirajo. Komunikacijski vmesnik je vedno preprost, kar drastično zmanjša površino napada. Lahko je USB, Micro SD ali kamera + zaslon (prek kode QR) ali Bluetooth Low Energy.

Poleg tega strojne denarnice vdelajo zaslon neposredno v napravo, kar uporabniku omogoča, da preveri dejanja, ki jih namerava izvesti, ko komunicira s svojimi skrivnimi ključi. Ta ročna preverjanja naprav so zelo učinkovit protiukrep proti zlonamerni programski opremi v računalniku/mobilnem telefonu. Kadar bi lahko zlonamerna programska oprema na računalniku/mobilni napravi dostopala do skrivnosti (semena ali zasebnih ključev) ali celo zamenjala/spremenila naslove ali zneske, ko uporabnik izvaja transakcijo, to ni mogoče s strojno denarnico.

Strojne denarnice so zasnovane tudi za zaščito pred napadi "zle služkinje" in pred napadalcem s fizičnim dostopom. Odvisno od strojne denarnice imajo različne ravni varnosti, vendar so v vseh primerih zasnovani za zaščito pred temi grožnjami. Podroben opis modelov groženj Ledger Nano je na voljo tukaj.

Programska denarnica

Običajne programske denarnice ščitijo skrivnosti z običajnimi sredstvi: varnostnimi mehanizmi operacijskega sistema, v katerem se izvajajo, in včasih nadzorom dostopa na podlagi kode PIN ali gesla.

V nadaljevanju so obravnavane namizne (Windows, macOS, Linux) denarnice in mobilne denarnice. Glavne razlike med njimi so predvsem v varnostnih mehanizmih, ki jih ponuja operacijski sistem.

Programske denarnice na računalniku

Več priljubljenih denarnic, kot so Electrum, Exodus, Atomic ali Bitcoin core, deluje na računalnikih.

V računalniku so varnostni mehanizmi, ki jih ponuja operacijski sistem za izolacijo procesa denarnice od drugih procesov, omejeni. Večino aplikacij izvaja isti uporabnik in aplikacijam je dovoljeno brati podatke drugih aplikacij.

Varnost teh programskih denarnic je v glavnem odvisna od varnosti gesla, ki jih ščiti, in tudi od dejstva, da se v operacijskem sistemu ne izvaja zlonamerna programska oprema (kar je precej težko zagotoviti, glejte nedavne novice o Pegasusu).

Večino časa je seme shranjeno v šifriranem vsebniku, zaščitenem z geslom. Neposreden napad je sestavljen iz tega, da zlonamerna programska oprema ali orodje za oddaljeno skrbništvo pridobi ta šifrirani vsebnik in ga pošlje napadalcu. Potem je mogoče geslo nasilno vsiliti ali pridobiti z uporabo a keylogger.

V primeru, ko napadalec uspe samo dostopati do šifriranega vsebnika (napadalec najde ključ USB, ki vsebuje denarnico, ali namesti zlonamerno programsko opremo v računalnik, vendar žrtev nikoli ne odpre svoje aplikacije denarnice), mora napadalec na silo uporabiti geslo.

Večina gesel je slabo. V splet je pricurljalo na milijarde gesel in veliko ljudi svoja gesla uporablja za več storitev. Že pripravljena orodja vam omogočajo pridobitev gesel za denarnice s kriptovalutami, kot npr btcrecover or hashcat. Gesla so lahko zapletena, vendar se za vsako denarnico skriva pravi denar, zato napadalci ne bodo oklevali vložiti sredstva za zlom takih gesel.

Dve osnovni varnostni načeli za varovanje vaših gesel sta uporaba upravitelja gesel in nikoli ponovna uporaba gesla za različne namene.

Najbolj zaskrbljujoča grožnja za programske denarnice so namenska zlonamerna programska oprema in kraji, razviti posebej za črpanje vaših sredstev. Takšna zlonamerna programska oprema, kot je KPOT oz ElectroRAT, vam sploh ni treba nasilno uporabiti gesla: lahko ga neposredno zajamejo, ko ga vnesete, dešifrirajo konfiguracijske podatke denarnice in izločijo seme.

Tukaj je aplikacija za igrače, razvita za ta članek, ki je namenjena denarnici Electrum (čeprav bi lahko bila druga programska denarnica). Simulira zlonamerno programsko opremo, ki ukrade uporabniško geslo, ko ga žrtev vnese. Geslo se nato uporabi za dešifriranje podatkov denarnice in za prikaz semena:

Kot vidite, ga aplikacija lahko pridobi, tudi če je geslo zapleteno, saj ga neposredno prevoha v pomnilniku.

Ta primer je zelo podoben nedavnemu .SCR zlonamerna programska oprema kampanje, ki se uporabljajo za krajo kriptovalut. Kriminalci so uporabili tehnike socialnega inženiringa, da bi uporabnike pretentali v prenos zlonamernega ohranjevalnika zaslona. Ta ohranjevalnik zaslona je žrtvi računalnika dejansko ukradel podatke, vključno s podatki o denarnici in menjavi kriptovalut.

Za zaključek o programskih denarnicah, ki se izvajajo na računalnikih:

  • V večini primerov programske denarnice, ki se izvajajo na računalnikih, ščitijo uporabnikovo seme z geslom.
  • Nadzor dostopa do teh datotek denarnice je v glavnem odvisen od varnosti računalnika. V praksi je težko zaščititi računalnike pred zlonamerno programsko opremo in ko bodo kriptovalute postale običajne, bodo napadi na denarnice postajali vse bolj izpopolnjeni.
  • Uporaba takšnih programskih denarnic za zaščito digitalnih sredstev ni dobra ideja. Vsaka specializirana zlonamerna programska oprema bo lahko pridobila datoteke denarnice in našla gesla brez povezave ali pridobila geslo prek zapisovalnika tipk.
Programske denarnice na pametnem telefonu

Pametni telefoni Android in iOS privzeto ponujajo varnostne funkcije, ki se v namiznih operacijskih sistemih ne uporabljajo pogosto.

Mobilni operacijski sistemi nudijo zaščito podatkov aplikacij in uporabnikov. Zlasti peskovniki aplikacij so obvezni za vse aplikacije. To ne velja na primer za Windows: privzeto lahko vsaka aplikacija dostopa do uporabniških podatkov.

Zato zlonamerna aplikacija ne more brati podatkov iz druge aplikacije, razen če:

  • V tej aplikaciji najde ranljivost.
  • Ali pa mu uspe povečati privilegije, na primer z izkoriščanjem ranljivosti jedra, ki mu omogoča pridobitev korenskega dostopa do sistema.

Na žalost takšni napadi obstajajo. Veliko lažje so na zastarelih različicah Androida in iOS ter na starejših ali poceni napravah, kjer je koda tretjih oseb pogosto manj varna.

Na posodobljenem operacijskem sistemu so ti napadi težji, vendar niti približno neizvedljivi. Na primer, Ian Beer je pokazal izjemno impresiven napad brez klika na iOS 13.5 decembra 2020. Guang Gong je predstavil an veriga izkoriščanja junija 2020 za oddaljeno rootanje širokega nabora naprav Android s sistemom Qualcomm. In pred dvema tednoma je Prepovedane zgodbe je razkrilo, da je skupina NSO uporabila verigo izkoriščanja za ciljanje na nedavne naprave iOS in Android z uporabo 0-dnevnih ranljivosti.

Manj sofisticirani napadalci lahko uporabijo lokalne ranljivosti, ki jim omogočajo pridobivanje podatkov denarnice iz zlonamerne aplikacije. Posredniki ranljivosti, kot je Zerodium, plačajo do 200,000 $ za stopnjevanje privilegijev za rootanje v sistemih Android in iOS, vendar do 1,500,000 $ za oddaljene napade.

Preučili smo nekaj denarnic za Android/iOS. Njihova varnost je odvisna od same aplikacije, pa tudi od varnostnih funkcij osnovnega operacijskega sistema. Seveda, ko je varnost operacijskega sistema premagana, aplikacija ni več varna

Za zaščito semena se običajno uporabljata dva načina:

  • Zaščita z geslom – podatki denarnice so zaščiteni z geslom, ki ga vnese uporabnik. Dizajn je enak kot pri namiznih denarnicah. V praksi je podatke težje izvleči kot iz računalnika, saj je pridobivanje podatkov aplikacije iz zlonamerne aplikacije tehnično težje zaradi zgoraj pojasnjenih razlogov. Vendar pa je pridobitev gesla, ko so bili podatki ukradeni, v praksi lažja: vnašanje zapletenih gesel na mobilnih telefonih je dolgočasno, zato uporabniki raje izberejo preprostejša. Poleg tega je mehanizme za izpeljavo ključev (ki se uporabljajo za ustvarjanje ključa iz gesla) na mobilnih napravah običajno preprosteje zlomiti, saj so zaradi učinkovitosti pogosto lažji.
  • Coinomi in Metamask sta primera takih denarnic.

V naslednjem videu prikazujemo drugo aplikacijo za igrače, razvito za ta članek. Gre za zlonamerno programsko opremo, preoblečeno v ponarejen pripomoček Bitcoin Ticker. Zlonamerna programska oprema izkorišča znano ranljivost na nepopravljeni napravi za pridobitev korenskega dostopa do naprave in za eksfiltracijo šifriranega semena na oddaljeni strežnik. Strežnik nato uporabi surovo geslo za dešifriranje semena.

Ta metoda ni specifična za denarnico. Lahko se (bolj ali manj) enostavno prilagodi kateri koli denarnici, zaščiteni z geslom. Tukaj je isti primer z denarnico Coinbase:

[Vgrajeni vsebina]

  • Varnost, ki temelji na Android Keystore (ali iOS Keychain) – V tem primeru so podatki denarnice šifrirani s šifrirnim ključem, shranjenim v Android Keystore (iOS Keychain). Te storitve so bile prvotno zasnovane za varno shranjevanje šifrirnih ključev in številne aplikacije jih uporabljajo za ustvarjanje ključa, ki bo šifriral vse občutljive uporabniške podatke. Aplikacije, ki uporabljajo Keystore, izvajajo naslednji mehanizem:
    • Aplikacija zahteva, da Keystore ustvari šifrirni ključ za dani identifikator. Keystore ustvari ključ in ga varno shrani.
    • Ko želi aplikacija šifrirati ali dešifrirati blob, pošlje blob skupaj z identifikatorjem ključa v shrambo ključev.
    • Na koncu shramba ključev preveri, ali ima aplikacija dejansko pravice za uporabo tega ključa, in nato aplikaciji pošlje izhodne podatke.

Pri tem modelu aplikacija ne more poznati vrednosti ključa, lahko pa jo uporabi. Ključu je mogoče pridružiti tudi dodatne kontrole dostopa: na primer dostop do ključa je mogoče pogojevati z avtentikacijo uporabnika (zahtevajte PIN ali vzorec za odklepanje).

Ta mehanizem lahko zagotovi dodatno varnost v primerjavi z zaščito z geslom. Na novejših telefonih je shramba ključev dejansko podprta z zaupanja vrednim izvajalskim okoljem (TEE) ali včasih z varnim elementom.

To pomeni, da napadalec s korenskimi pravicami ne bo mogel pridobiti šifrirnih ključev iz shrambe ključev. Kljub temu bodo lahko uporabljali Keystore kot orakelj za dešifriranje in za šifriranje ali dešifriranje poljubnih podatkov.

Keystore ponuja šifriranje, a tudi storitve podpisovanja. Torej, ali bi lahko denarnica zaščitila svoje šifrirne ključe, zaradi česar bi jih bilo težko ekstrahirati? Odgovor je žal ne: programske denarnice ne uporabljajo Keystore za podpisovanje transakcijin aplikacija vedno manipulira z zasebnimi ključi v navadnem besedilu.

To je iz preprostega razloga: KeyStore in KeyChain ponujata generične storitve podpisovanja in šifriranja, vendar ne podpirata kriptografije, ki se uporablja v kriptovalutah. Na primer, KeyStore izvaja podpis ECDSA, vendar samo na krivuljah NIST, definiranih v FIPS 186-4 (P-224, P-256, P-384 in P-521). Bitcoin uporablja drugo krivuljo, secp256k1, ki še ni podprt.

Če povzamem, Keystore in Keychain sta dobri storitvi za zaščito skrivni in zasebni ključi. Lahko nudijo nekaj varnosti s šifriranjem občutljivih podatkov: nekateri razredi ranljivosti (na primer branje poljubne datoteke) bodo obravnavani s šifriranjem Keystore. Če pa stopnjevanje korenskih privilegijev ne zadostuje za ekstrahiranje vrednosti ključev iz shrambe ključev, podprte s strojno opremo, zadostuje dešifriranje občutljivih podatkov. Napadalec, ki lahko instrumentira aplikacijo, lahko pridobi njene skrivnosti.

Za zaključek o mobilnih denarnicah:

  • Mehanizem izolacije med aplikacijami, ki ga zagotavlja iOS/Android, dviguje lestvico varnosti v primerjavi s programsko denarnico, ki se izvaja v računalniku. Napadalec potrebuje najprej eskalacijo privilegijev za dostop do podatkov aplikacije. To je izvedljivo na zastarelih napravah. Izkušeni napadalci (Ian Beer je to uspel sam v 6 mesecih, vendar … Ian Beer je) lahko to storijo tudi na nedavnih napravah s popravki.
  • Storitve zaščite ključev (KeyStore, KeyChain) bi lahko dodale dodatno raven varnosti za zaščito skrivnosti v mirovanju. Kljub temu, ker ne podpirajo kriptografskih algoritmov za aplikacije za kriptovalute, je ključ še vedno mogoče ekstrahirati.
  • V vseh primerih lahko napadalec s korenskim dostopom bodisi pridobi seme v mirovanju, ko je uporabljeno, bodisi izkoristi pravice uporabnika, da izprazni denarnico z uporabo programske denarnice kot orakulja.

Tukaj je zadnji primer vohunske programske opreme igrače, ki cilja na denarnico Blockchain.com (čeprav bi to lahko enako enostavno izvedli na številnih drugih denarnicah). Nameščen je na daljavo in nadzoruje denarnico. Ko se uporabnik potrdi s svojim prstnim odtisom, se šifrirni ključ odklene in podatki denarnice dešifrirajo. Vohunska programska oprema uporablja aplikacijo za pridobitev tega šifrirnega ključa. Nato ključ in podatke denarnice eksfiltrira na oddaljeni strežnik:

[Vgrajeni vsebina]

zaključek

Kot zaključek imajo programske denarnice različne stopnje varnosti. Vendar njihov model groženj ne zajema primera zlonamerne programske opreme, ki se izvaja v operacijskem sistemu s eskalacijo privilegijev. To je po zasnovi: aplikacija denarnice ne more biti varnejša od operacijskega sistema, v katerem deluje.

  • Mehanizem izolacije med aplikacijami, ki ga zagotavlja iOS/Android, dviguje lestvico varnosti v primerjavi s programsko denarnico, ki se izvaja v računalniku. Napadalec potrebuje najprej eskalacijo privilegijev za dostop do podatkov aplikacije.
  • Storitve zaščite ključev (KeyStore, KeyChain) bi lahko dodale dodatno raven varnosti za zaščito skrivnosti v mirovanju. Kljub temu, ker ne podpirajo kriptografskih algoritmov za aplikacije za kriptovalute, je treba s ključi manipulirati neposredno iz aplikacije, zato ponujajo omejeno zaščito.
  • V vseh primerih lahko napadalec s korenskim dostopom bodisi pridobi seme v mirovanju, ko je uporabljeno, bodisi izkoristi pravice uporabnika, da izprazni denarnico z uporabo programske denarnice kot orakulja.

Časovni žig:

Več od Ledger