Pe modelul de securitate al portofelelor software | Registrul mare

Pe modelul de securitate al portofelelor software | Registrul mare

Nodul sursă: 2671485

Putem distinge două tipuri predominante de portofele: portofele software și hardware. Ele îndeplinesc aceeași funcție, dar într-un mod diferit. Portofelele software sunt considerate mai simplu de utilizat: un singur program este suficient pentru a crea, valida și semna tranzacții. Cu un portofel software, nu este necesar să creați tranzacția pe software și să o confirmați pe un dispozitiv hardware.

Acum doua saptamani, Povești interzise a dezvăluit un atac țintit împotriva a mii de oameni din întreaga lume. Acest atac a exploatat vulnerabilitățile pe Android și iOS, pentru a instala spyware dezvoltat de Grupul NSO: Pegasus. Acest malware este capabil să monitorizeze întreaga activitate a dispozitivului și să exfiltreze informații personale: SMS, conversații WhatsApp și Signal, apeluri telefonice etc. Acest articol explică cum, în aceste condiții, un astfel de malware ar putea extrage toate secretele unui portofel software și diferențele din punct de vedere al securității dintre portofelele software de pe telefoanele mobile și computerele desktop.

Acest articol se dorește să nu fie foarte tehnic. Pentru a rămâne relativ simplu, vor fi discutate doar caracteristicile de bază.

Protejarea secretelor

Ce este stocat într-un portofel cripto?

Portofelele nu stochează de fapt criptomonedele utilizatorilor: ele stochează doar secretele, în special cheile private, care permit accesul la criptomonede și posibilitatea de a le cheltui. Aceste chei private sunt în mare parte chei private ECC (criptografie cu curbe eliptice) pe diferite curbe, în funcție de blockchain. Cele mai comune curbe sunt secp256k1 (Bitcoin, Ethereum...), Ed25519 (Monero) sau BLS12-381 (Ethereum 2).

Aceste chei sunt folosite pentru a semna tranzacții și, mai general, pentru a interacționa cu activele blockchain.

Stocarea acestor chei depinde de tipul de portofel: determinist sau nu. Un portofel ierarhic determinist (HD) permite crearea unui arbore de chei dintr-un singur secret principal numit seed (cf. BIP44). Această sămânță este adesea derivată dintr-o secvență mnemonică de 12, 18 sau 24 de cuvinte generate sau alese aleatoriu de utilizator (cf.BIP39). Aceste mnemonice permit limitarea numărului de chei care trebuie stocate: pot fi recalculate oricând din semințe. Portofelele HD stochează doar acest mnemonic sau sămânța.

Portofelele nedeterministe generează o nouă cheie pentru fiecare utilizare și trebuie să le stocheze pe toate. Portofelele nedeterministe nu pot fi migrate cu ușurință la alt portofel, deoarece backup-urile nu sunt compatibile.

Principalele caracteristici de securitate ale unui portofel constau în generarea, stocarea și utilizarea corectă a acestor secrete. Există diferite niveluri de securitate împotriva diferitelor tipuri de amenințări:

  • Protecție împotriva atacurilor „servitoarelor rele”: Un atacator cu acces temporar la portofel nu trebuie să poată adăuga o ușă din spate în interiorul portofelului care să permită furtul PIN-ului sau secretele de protecție a parolei.
  • Material criptografic securizat: Cheile și nonce generate de portofel nu trebuie să fie niciodată previzibile. În plus, cunoașterea secretelor (cu excepția semințelor) generate la un moment dat în timp nu va permite prezicerea secretului care va fi generat în viitor.
  • Protecție în repaus: Dacă un atacator obține date persistente ale unui portofel software, acesta nu trebuie să poată extrage cheile.
  • Protecție în timpul utilizării secrete: Când portofelul este deblocat, cheile nu trebuie să fie accesibile de către un atacator sau un malware.
Portofele din plastic

Modelul de securitate al unui portofel hardware are ca scop eliminarea acestor amenințări de securitate. Portofelele hardware protejează împotriva programelor malware prin design. Sunt dispozitive independente care semnează tranzacțiile pe cont propriu. Materialele criptografice rămân întotdeauna în interiorul dispozitivului și nu sunt niciodată trimise către aplicația software cu care comunică. Interfața de comunicare este întotdeauna simplă, ceea ce reduce drastic suprafața de atac. Poate fi USB, Micro SD sau cameră + ecran (prin cod QR), sau Bluetooth Low Energy.

În plus, portofelele hardware încorporează un ecran direct în dispozitiv, permițând utilizatorului să verifice acțiunile pe care urmează să le facă atunci când interacționează cu cheile sale secrete. Aceste verificări manuale ale dispozitivelor sunt o contramăsuri foarte eficiente împotriva programelor malware de pe computer/mobil. Acolo unde programele malware de pe un computer/dispozitiv mobil ar putea accesa secretele (seed sau chei private) sau chiar pot schimba/modifica adrese sau sume atunci când utilizatorul efectuează o tranzacție, acest lucru nu este posibil cu un portofel hardware.

Portofelele hardware sunt, de asemenea, concepute pentru a proteja împotriva atacurilor „de servitoare malefice” și împotriva unui atacator cu acces fizic. În funcție de portofelul hardware, acestea au niveluri diferite de securitate, dar în toate cazurile sunt concepute pentru a se proteja împotriva acestor amenințări. O descriere detaliată a modelelor de amenințări Ledger Nano poate fi găsită aici.

Portofele de plastic

Portofelele software obișnuite protejează secretele cu mijloace obișnuite: mecanisme de securitate ale sistemului de operare pe care rulează și uneori un control al accesului bazat pe un PIN sau o parolă.

În cele ce urmează, sunt luate în considerare portofelele desktop (Windows, macOS, Linux) și portofelele mobile. Principalele diferențe dintre ele se bazează în cea mai mare parte pe mecanismele de securitate oferite de sistemul de operare.

Portofele software pe computer

Mai multe portofele populare, cum ar fi Electrum, Exodus, Atomic sau Bitcoin core, rulează pe computere.

Pe un computer, mecanismele de securitate oferite de sistemul de operare pentru a izola un proces de portofel de alte procese sunt limitate. Majoritatea aplicațiilor sunt rulate de același utilizator, iar aplicațiilor li se permite să citească datele altor aplicații.

Securitatea acestor portofele software se bazează în principal pe securitatea parolei care le protejează, dar și pe faptul că pe OS nu rulează niciun malware (ceea ce este destul de greu de garantat, vezi știrile recente despre Pegasus).

De cele mai multe ori, semințele sunt stocate într-un container criptat protejat de o parolă. Un atac simplu constă, pentru un malware sau un instrument de administrare la distanță, să recupereze acest container criptat și să-l trimită atacatorului. Apoi parola poate fi fie forțată brut, fie obținută prin utilizarea a keylogger.

Într-un scenariu în care un atacator reușește să acceseze doar containerul criptat (atacatorul găsește o cheie USB care conține un portofel sau instalează malware pe un computer, dar victima nu își deschide niciodată aplicația de portofel), atacatorul trebuie să forțeze brutal parola.

Majoritatea parolelor sunt Rău. Există miliarde de parole care s-au scurs pe web și mulți oameni tind să-și refolosească parolele pentru mai multe servicii. Instrumentele gata făcute vă permit să recuperați parole pentru portofelele criptomonede, cum ar fi btcrecover or hashcat. Parolele pot fi complexe, dar în spatele fiecărui portofel se află bani reali, prin urmare atacatorii nu vor ezita să investească resurse pentru a sparge astfel de parole.

Două principii de bază de securitate pentru a vă păstra parolele în siguranță sunt să utilizați un manager de parole și să nu vă reutilizați niciodată parola în scopuri diferite.

Cea mai îngrijorătoare amenințare pentru portofelele software sunt programele malware și furatorii dedicati, dezvoltate special pentru a vă epuiza fondurile. Un astfel de malware, cum ar fi KPOT sau ElectroRAT, nici măcar nu trebuie să vă forțați parola: ei o pot captura direct când o introduceți, decriptează datele de configurare a portofelului și pot exfiltra semințele.

Iată o aplicație de jucărie, dezvoltată pentru acest articol, care vizează portofelul Electrum (deși ar fi putut fi un alt portofel cu software). Simulează un malware care fură parola utilizatorului atunci când este introdusă de victimă. Parola este apoi folosită pentru a decripta datele portofelului și pentru a afișa semințele:

După cum vedeți, chiar dacă parola este complexă, aplicația este capabilă să o recupereze, deoarece o adulmecă direct în memorie.

Acest exemplu este foarte asemănător cu cel recent .SCR malware campanii folosite pentru a fura criptomonede. Criminalii au folosit tehnici de inginerie socială pentru a păcăli utilizatorii să descarce un screensaver rău intenționat. Acest screensaver fura de fapt informații de la victima computerului, inclusiv informații despre schimbul de portofel și criptomonede.

Pentru a încheia despre portofelele software care rulează pe computere:

  • În majoritatea cazurilor, portofelele software care rulează pe computere protejează semințele utilizatorului folosind o parolă.
  • Controlul accesului pentru aceste fișiere portofel se bazează în principal pe securitatea computerului. În practică, este greu să protejezi computerele de malware și, pe măsură ce criptomonedele devin mainstream, atacurile împotriva portofelelor vor deveni din ce în ce mai sofisticate.
  • Utilizarea unor astfel de portofele software pentru a securiza activele digitale nu este o idee bună. Orice malware specializat va putea să obțină fișierele portofel și să găsească parolele offline sau să obțină parola printr-un keylogger.
Portofele software pe un smartphone

Telefoanele inteligente Android și iOS oferă în mod implicit caracteristici de securitate care nu sunt utilizate pe scară largă pe sistemele de operare desktop.

Sistemele de operare mobile oferă aplicații și protecție a datelor utilizatorilor. În special, casetele de testare pentru aplicații sunt obligatorii pentru toate aplicațiile. Acesta nu este cazul, de exemplu, pe Windows: în mod implicit, orice aplicație poate accesa datele utilizatorului.

Prin urmare, o aplicație rău intenționată nu poate citi date dintr-o altă aplicație, cu excepția cazului în care:

  • Găsește o vulnerabilitate în aplicația respectivă.
  • Sau reușește să escaladeze privilegiile, de exemplu prin exploatarea unei vulnerabilități a nucleului care îi permite să obțină acces root la sistem.

Din păcate, astfel de atacuri există. Ele sunt mult mai ușoare pe versiunile învechite de Android și iOS și pe dispozitivele mai vechi sau ieftine, unde codul terță parte este adesea mai puțin sigur.

Pe un sistem de operare actualizat, aceste atacuri sunt mai dificile, dar nu chiar imposibil de fezabil. De exemplu, Ian Beer a arătat un extrem de impresionant atac zero-click pe iOS 13.5 în decembrie 2020. Guang Gong a prezentat un lanțul de exploatare pentru a roota de la distanță o gamă largă de dispozitive Android bazate pe Qualcomm în iunie 2020. Și, acum două săptămâni, Povești interzise a dezvăluit că NSO Group a folosit un lanț de exploatare pentru a viza dispozitivele iOS și Android recente folosind vulnerabilități de 0 zi.

Atacatorii mai puțin sofisticați pot folosi vulnerabilități locale, permițându-le să extragă date portofel dintr-o aplicație rău intenționată. Brokerii de vulnerabilitate, cum ar fi Zerodium, plătesc până la 200,000 $ pentru o escaladare a privilegiilor la root pe Android și iOS, dar până la 1,500,000 USD pentru atacuri de la distanță.

Am studiat câteva portofele Android/iOS. Securitatea lor depinde de aplicația în sine, dar și de caracteristicile de securitate ale sistemului de operare subiacent. Desigur, atunci când securitatea sistemului de operare este învinsă, aplicația nu mai este sigură

Două metode de protejare a semințelor sunt utilizate în mod obișnuit:

  • Protecție cu parolă – datele portofelului sunt protejate de o parolă introdusă de utilizator. Designul este același ca pentru portofelele desktop. În practică, datele sunt mai greu de extras decât de pe un computer, deoarece recuperarea datelor aplicației dintr-o aplicație rău intenționată este mai dificilă din punct de vedere tehnic, din motivele explicate mai sus. Cu toate acestea, recuperarea parolei odată ce datele au fost furate este în practică mai ușoară: introducerea parolelor complexe pe telefoanele mobile este plictisitoare, prin urmare utilizatorii tind să aleagă altele mai simple. Mai mult, mecanismele de derivare a cheilor (folosite pentru a crea o cheie dintr-o parolă) pe dispozitivele mobile sunt de obicei mai ușor de spart, deoarece sunt adesea mai ușoare din motive de performanță.
  • Coinomi și Metamask sunt exemple de astfel de portofele.

În următorul videoclip, arătăm o altă aplicație de jucării dezvoltată pentru acest articol. Este un malware deghizat ca un widget fals de ticker Bitcoin. Programele malware exploatează o vulnerabilitate cunoscută pe un dispozitiv nepatchat pentru a obține un acces root pe dispozitiv și pentru a exfiltra semințele criptate pe un server la distanță. Serverul forță apoi parola pentru a decripta sămânța.

Această metodă nu este specifică unui portofel. Poate fi (mai mult sau mai puțin) adaptat cu ușurință oricărui portofel protejat cu parolă. Iată același exemplu cu Portofelul Coinbase:

[Conținutul încorporat]

  • Securitate bazată pe Android Keystore (sau iOS Keychain) – În acest caz, datele portofelului sunt criptate cu o cheie de criptare stocată în Android Keystore (iOS Keychain). Aceste servicii au fost concepute inițial pentru a stoca în siguranță cheile de criptare, iar multe aplicații le folosesc pentru a genera o cheie care va cripta toate datele sensibile ale utilizatorului. Aplicațiile care folosesc Keystore implementează următorul mecanism:
    • Aplicația solicită Magazinului de chei să genereze o cheie de criptare pentru un anumit identificator. Keystore generează cheia și o stochează în siguranță.
    • Când aplicația dorește să cripteze sau să decripteze un blob, trimite blob-ul împreună cu identificatorul cheii către Keystore.
    • În cele din urmă, magazinul de chei verifică dacă aplicația are de fapt drepturile de a utiliza această cheie și trimite înapoi datele de ieșire către aplicație.

Cu acest model, aplicația nu poate cunoaște valoarea cheii, dar o poate folosi. De asemenea, este posibil să se asocieze controale de acces suplimentare la cheie: de exemplu, accesul cu cheie poate fi condiționat de o autentificare a utilizatorului (solicitarea unui cod PIN sau model de deblocare).

Acest mecanism poate oferi securitate suplimentară, în comparație cu protecția bazată pe parolă. Într-adevăr, pe telefoanele recente, Keystore este susținut de un Trusted Execution Environment (TEE) sau uneori de un Secure Element.

Asta înseamnă că un atacator cu privilegii root nu va putea extrage cheile de criptare din depozitul de chei. Cu toate acestea, ei vor putea folosi Keystore ca un oracol de decriptare și să cripteze sau să decripteze orice date doresc.

Keystore oferă servicii de criptare, dar și de semnare. Deci, ar putea un portofel să își protejeze cheile de criptare, făcându-le dificil de extras? Răspunsul este, din păcate, nu: portofelele software nu folosesc Keystore pentru a semna tranzacții, și cheile private sunt întotdeauna manipulate în text simplu de către aplicație.

Acest lucru este dintr-un motiv simplu: KeyStore și KeyChain oferă servicii de semnătură și criptare generice, dar nu acceptă criptografia folosită în criptomonede. De exemplu, KeyStore implementează ECDSA Signature, dar numai pe curbele NIST definite în FIPS 186-4 (P-224, P-256, P-384 și P-521). Bitcoin folosește o altă curbă, secp256k1, care nu este încă acceptat.

Pentru a rezuma, Keystore și Keychain sunt servicii bune de protejat chei secrete și private. Ele pot oferi o anumită securitate prin criptarea datelor sensibile: unele clase de vulnerabilități (fișier citit arbitrar, de exemplu) vor fi abordate de criptarea Keystore. Cu toate acestea, dacă o escaladare a privilegiilor rădăcină nu este suficientă pentru a extrage valorile cheilor dintr-un depozit de chei susținut de hardware, este suficient să decriptați datele sensibile. Un atacator capabil să instrumenteze aplicația este capabil să recupereze secretele acesteia.

Pentru a încheia despre portofelele mobile:

  • Mecanismul de izolare dintre aplicațiile furnizate de iOS/Android ridică ștacheta securității în comparație cu un portofel software care rulează pe un computer. Atacatorul are nevoie mai întâi de o escaladare a privilegiilor pentru a accesa datele aplicației. Acest lucru este fezabil pe dispozitivele învechite. Atacatorii calificați (Ian Beer a făcut-o doar în 6 luni, dar... Este Ian Beer) o pot face și pe dispozitivele recente, corectate.
  • Serviciile de protecție a cheilor (KeyStore, KeyChain) ar putea adăuga un nivel suplimentar de securitate pentru protejarea secretelor în repaus. Cu toate acestea, deoarece nu acceptă algoritmi criptografici pentru aplicațiile criptomonede, cheia poate fi extrasă în continuare.
  • În toate cazurile, un atacator cu acces rădăcină poate fie să recupereze semințele în repaus, atunci când este utilizat, fie să folosească drepturile utilizatorului de a goli portofelul folosind portofelul software ca un oracol.

Iată un ultim exemplu de program spion de jucărie care vizează portofelul Blockchain.com (deși acest lucru ar putea fi realizat și pe multe alte portofele la fel de ușor). Este instalat de la distanță și monitorizează portofelul. Odată ce utilizatorul s-a autentificat folosind amprenta sa, cheia de criptare este deblocată și datele portofelului sunt decriptate. Programul spion instrumentează aplicația pentru a prelua această cheie de criptare. Apoi exfiltrează cheia și datele portofelului pe un server la distanță:

[Conținutul încorporat]

Concluzie

Ca o concluzie, portofelele software au niveluri diferite de securitate. Cu toate acestea, modelul lor de amenințare nu acoperă cazul unui malware care rulează pe sistemul de operare cu o escaladare a privilegiilor. Acest lucru este prin design: aplicația portofel nu poate fi mai sigură decât sistemul de operare pe care rulează.

  • Mecanismul de izolare dintre aplicațiile furnizate de iOS/Android ridică ștacheta securității în comparație cu un portofel software care rulează pe un computer. Atacatorul are nevoie mai întâi de o escaladare a privilegiilor pentru a accesa datele aplicației.
  • Serviciile de protecție a cheilor (KeyStore, KeyChain) ar putea adăuga un nivel suplimentar de securitate pentru protejarea secretelor în repaus. Cu toate acestea, deoarece nu acceptă algoritmi criptografici pentru aplicațiile criptomonede, cheile trebuie manipulate direct din aplicație, astfel încât acestea oferă o protecție limitată.
  • În toate cazurile, un atacator cu acces rădăcină poate fie să recupereze semințele în repaus, atunci când este utilizat, fie să folosească drepturile utilizatorului de a goli portofelul folosind portofelul software ca un oracol.

Timestamp-ul:

Mai mult de la carte mare