Sul modello di sicurezza dei portafogli software | Libro mastro

Sul modello di sicurezza dei portafogli software | Libro mastro

Nodo di origine: 2671485

Possiamo distinguere due tipologie prevalenti di portafogli: portafogli software e portafogli hardware. Svolgono la stessa funzione, ma in modo diverso. I portafogli software sono considerati più semplici da utilizzare: è sufficiente un solo programma per creare, convalidare e firmare le transazioni. Con un portafoglio software non è necessario creare la transazione sul software e confermarla su un dispositivo hardware.

Due settimane fa, Storie proibite ha svelato un attacco mirato contro migliaia di persone in tutto il mondo. Questo attacco ha sfruttato le vulnerabilità di Android e iOS per installare uno spyware sviluppato dal gruppo NSO: Pegasus. Questo malware è in grado di monitorare tutta l'attività del dispositivo e di esfiltrare informazioni personali: SMS, conversazioni di WhatsApp e Signal, telefonate, ecc. Questo articolo spiega come, in queste condizioni, un tale malware sarebbe in grado di estrarre tutto il i segreti dei portafogli software e le differenze dal punto di vista della sicurezza tra i portafogli software sui telefoni cellulari e sui computer desktop.

Questo articolo non vuole essere molto tecnico. Per mantenerlo relativamente semplice, verranno discusse solo le funzionalità di base.

Proteggere i segreti

Cosa viene archiviato in un portafoglio crittografico?

I portafogli in realtà non memorizzano le criptovalute degli utenti: memorizzano solo i segreti, in particolare le chiavi private, che consentono l'accesso alle criptovalute e la possibilità di spenderle. Queste chiavi private sono per lo più chiavi private ECC (crittografia a curva ellittica) su curve diverse a seconda della blockchain. Le curve più comuni sono secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) o BLS12-381 (Ethereum 2).

Queste chiavi vengono utilizzate per firmare transazioni e, più in generale, per interagire con gli asset blockchain.

La conservazione di queste chiavi dipende dal tipo di portafoglio: deterministico o meno. Un portafoglio Hierarchical Deterministic (HD) consente la creazione di un albero di chiavi da un singolo master secret chiamato seed (cfr BIP44). Questo seme è spesso derivato da una sequenza mnemonica di 12, 18 o 24 parole generate o scelte casualmente dall'utente (cfr.BIP39). Questi mnemonici permettono di limitare il numero di chiavi da memorizzare: possono essere ricalcolate in qualsiasi momento dal seed. I portafogli HD memorizzano solo questo mnemonico o il seme.

I portafogli non deterministici generano una nuova chiave per ogni utilizzo e devono memorizzarle tutte. I portafogli non deterministici non possono essere facilmente migrati su un altro portafoglio poiché i backup non sono compatibili.

Le principali caratteristiche di sicurezza di un portafoglio consistono nel generare, archiviare e utilizzare correttamente questi segreti. Esistono diversi livelli di sicurezza contro diversi tipi di minacce:

  • Protezione contro gli attacchi delle "malvage maid": Un utente malintenzionato con accesso temporaneo al portafoglio non deve essere in grado di aggiungere una backdoor all'interno del portafoglio che consenta di rubare il PIN o la password che protegge i segreti.
  • Materiale crittografico sicuro: Le chiavi e il nonce generati dal portafoglio non devono mai essere prevedibili. Inoltre la conoscenza dei segreti (tranne il seme) generati in un determinato momento non consentirà di prevedere il segreto che verrà generato in futuro.
  • Protezione a riposo: Se un utente malintenzionato ottiene dati persistenti da un portafoglio software, non deve essere in grado di estrarre le chiavi.
  • Protezione durante l'uso segreto: Quando il portafoglio è sbloccato, le chiavi non devono essere accessibili a un utente malintenzionato o a un malware.
Hardware wallet

Il modello di sicurezza di un portafoglio hardware mira a ovviare a queste minacce alla sicurezza. I portafogli hardware proteggono dai malware in base alla progettazione. Sono dispositivi indipendenti che firmano le transazioni in modo autonomo. I materiali crittografici rimangono sempre all'interno del dispositivo e non vengono mai inviati all'applicazione software con cui comunicano. L'interfaccia di comunicazione è sempre semplice riducendo drasticamente la superficie di attacco. Può essere USB, Micro SD o fotocamera + schermo (tramite codice QR), o Bluetooth Low Energy.

Inoltre, i portafogli hardware incorporano uno schermo direttamente nel dispositivo permettendo all'utente di verificare le azioni che sta per compiere quando interagisce con le sue chiavi segrete. Questi controlli manuali sui dispositivi rappresentano una contromisura molto efficace contro il malware sul computer/mobile. Laddove il malware su un computer/dispositivo mobile potrebbe accedere ai segreti (seed o chiavi private) o persino scambiare/modificare indirizzi o importi mentre l'utente esegue una transazione, ciò non è possibile con un portafoglio hardware.

I portafogli hardware sono progettati anche per proteggere dagli attacchi delle “malvagie” e da un aggressore con accesso fisico. A seconda del portafoglio hardware, hanno diversi livelli di sicurezza, ma in ogni caso sono progettati per proteggere da queste minacce. È possibile trovare una descrizione dettagliata dei modelli di minaccia Ledger Nano qui.

Portafogli software

I normali portafogli software proteggono i segreti con mezzi regolari: meccanismi di sicurezza del sistema operativo su cui funzionano e talvolta un controllo di accesso basato su PIN o password.

Di seguito vengono presi in considerazione i portafogli desktop (Windows, macOS, Linux) e i portafogli mobili. Le principali differenze tra loro dipendono principalmente dai meccanismi di sicurezza offerti dal sistema operativo.

Portafogli software su un computer

Diversi portafogli popolari, come Electrum, Exodus, Atomic o Bitcoin core, funzionano su computer.

Su un computer, i meccanismi di sicurezza offerti dal sistema operativo per isolare un processo di portafoglio da altri processi sono limitati. La maggior parte delle app viene eseguita dallo stesso utente e le app possono leggere i dati di altre applicazioni.

La sicurezza di questi portafogli software si basa principalmente sulla sicurezza della password che li protegge, e anche sul fatto che nessun malware venga eseguito sul sistema operativo (cosa abbastanza difficile da garantire, vedi recenti notizie su Pegasus).

Nella maggior parte dei casi, il seed viene archiviato in un contenitore crittografato protetto da password. Un attacco semplice consiste, per un malware o uno strumento di amministrazione remota, nel recuperare questo contenitore crittografato e inviarlo all'aggressore. Quindi la password può essere forzata o ottenuta utilizzando a keylogger.

In uno scenario in cui un aggressore riesce solo ad accedere al contenitore crittografato (l'aggressore trova una chiave USB contenente un portafoglio o installa malware su un computer, ma la vittima non apre mai l'applicazione del portafoglio), l'aggressore deve forzare la password.

La maggior parte delle password lo sono male. Ci sono miliardi di password trapelate sul web e molte persone tendono a riutilizzare le proprie password per diversi servizi. Gli strumenti già pronti ti consentono di recuperare le password per i portafogli di criptovalute, come btcrecover or hashcat. Le password possono essere complesse, ma dietro ogni portafoglio c'è denaro reale, quindi gli aggressori non esiteranno a investire risorse per violare tali password.

Due principi di sicurezza di base per proteggere le tue password sono l'utilizzo di un gestore di password e il non riutilizzare mai la password per scopi diversi.

La minaccia più preoccupante per i portafogli software sono malware e ladri dedicati, sviluppati appositamente per drenare i tuoi fondi. Tali malware, come KPOT o ElettroRAT, non devono nemmeno forzare la tua password: possono catturarla direttamente quando la inserisci, decrittografare i dati di configurazione del portafoglio ed esfiltrare il seme.

Ecco un'applicazione giocattolo, sviluppata per questo articolo, che prende di mira il portafoglio Electrum (anche se avrebbe potuto essere un altro portafoglio software). Simula un malware che ruba la password dell'utente quando viene inserita dalla vittima. La password viene quindi utilizzata per decrittografare i dati del portafoglio e per visualizzare il seed:

Come vedi, anche se la password è complessa, l'app è in grado di recuperarla poiché la sniffa direttamente in memoria.

Questo esempio è molto simile al recente malware .SCR campagne utilizzate per rubare criptovalute. I criminali hanno utilizzato tecniche di ingegneria sociale per indurre gli utenti a scaricare uno screensaver dannoso. Questo salvaschermo in realtà rubava informazioni dal computer della vittima, comprese le informazioni sul portafoglio e sullo scambio di criptovaluta.

Per concludere sui portafogli software in esecuzione sui computer:

  • Nella maggior parte dei casi i portafogli software in esecuzione sui computer proteggono il seed dell'utente utilizzando una password.
  • Il controllo dell'accesso a questi file del portafoglio si basa principalmente sulla sicurezza del computer. In pratica, è difficile proteggere i computer dai malware e, man mano che le criptovalute diventano mainstream, gli attacchi contro i portafogli diventeranno sempre più sofisticati.
  • Utilizzare tali portafogli software per proteggere le risorse digitali non è una buona idea. Qualsiasi malware specializzato sarà in grado di ottenere i file del portafoglio e trovare le password offline oppure ottenere la password tramite un keylogger.
Portafogli software su uno smartphone

Gli smartphone Android e iOS offrono per impostazione predefinita funzionalità di sicurezza che non sono ampiamente utilizzate sui sistemi operativi desktop.

I sistemi operativi mobili offrono la protezione dei dati delle app e degli utenti. In particolare, i sandbox delle app sono obbligatori per tutte le app. Questo non è il caso, ad esempio, di Windows: per impostazione predefinita, qualsiasi applicazione può accedere ai dati dell'utente.

Pertanto, un'app dannosa non può leggere i dati di un'altra app, tranne se:

  • Trova una vulnerabilità su quell'app.
  • Oppure riesce ad aumentare i privilegi, ad esempio sfruttando una vulnerabilità del kernel che gli consente di ottenere l'accesso root al sistema.

Sfortunatamente, tali attacchi esistono. Sono molto più semplici su versioni obsolete di Android e iOS e su dispositivi più vecchi o economici dove il codice di terze parti è spesso meno sicuro.

Su un sistema operativo aggiornato, questi attacchi sono più difficili ma non remotamente irrealizzabili. Ad esempio, Ian Beer ha mostrato un attacco zero-click estremamente impressionante su iOS 13.5 a dicembre 2020. Guang Gong ha presentato un catena di sfruttamento per eseguire il rooting remoto di un'ampia gamma di dispositivi Android basati su Qualcomm nel giugno 2020. E, due settimane fa, Storie proibite ha rivelato che NSO Group ha utilizzato una catena di exploit per prendere di mira i recenti dispositivi iOS e Android utilizzando vulnerabilità 0-day.

Gli aggressori meno sofisticati possono sfruttare le vulnerabilità locali che consentono loro di estrarre i dati del portafoglio da un'applicazione dannosa. I broker di vulnerabilità come Zerodium pagano fino a $ 200,000 per un’escalation dei privilegi al root su Android e iOS, ma fino a 1,500,000 dollari per attacchi remoti.

Abbiamo studiato un paio di portafogli Android/iOS. La loro sicurezza dipende dall'app stessa, ma anche dalle funzionalità di sicurezza del sistema operativo sottostante. Naturalmente, quando la sicurezza del sistema operativo viene sconfitta, l'applicazione non è più sicura

Vengono comunemente utilizzati due metodi per proteggere il seme:

  • La protezione con password – i dati del portafoglio sono protetti da una password inserita dall'utente. Il design è lo stesso dei portafogli desktop. In pratica, i dati sono più difficili da estrarre che da un computer, poiché recuperare i dati di un'app dannosa è tecnicamente più difficile, per i motivi spiegati sopra. Tuttavia, recuperare la password una volta rubati i dati è in pratica più semplice: inserire password complesse sui telefoni cellulari è noioso, quindi gli utenti tendono a scegliere quelle più semplici. Inoltre, i meccanismi di derivazione delle chiavi (utilizzati per creare una chiave da una password) sui dispositivi mobili sono generalmente più semplici da violare, poiché sono spesso più leggeri per motivi di prestazioni.
  • Coinomi e Metamask sono esempi di tali portafogli.

Nel video seguente mostriamo un'altra app giocattolo sviluppata per questo articolo. È un malware mascherato da falso widget ticker Bitcoin. Il malware sfrutta una vulnerabilità nota su un dispositivo senza patch per ottenere un accesso root sul dispositivo ed esfiltrare il seme crittografato su un server remoto. Il server quindi forza brutalmente la password per decrittografare il seme.

Questo metodo non è specifico per un portafoglio. Può essere (più o meno) facilmente adattato a qualsiasi portafoglio protetto da password. Ecco lo stesso esempio con Coinbase Wallet:

[Contenuto incorporato]

  • Sicurezza basata sul Keystore Android (o sul portachiavi iOS) – In questo caso, i dati del portafoglio vengono crittografati con una chiave di crittografia memorizzata nel Keystore Android (portachiavi iOS). Questi servizi sono stati inizialmente progettati per archiviare in modo sicuro le chiavi di crittografia e molte app li utilizzano per generare una chiave che crittograferà tutti i dati sensibili dell'utente. Le applicazioni che utilizzano Keystore implementano il seguente meccanismo:
    • L'app chiede al Keystore di generare una chiave di crittografia per un determinato identificatore. Keystore genera la chiave e la archivia in modo sicuro.
    • Quando l'app vuole crittografare o decrittografare un BLOB, invia il BLOB insieme all'identificatore della chiave al Keystore.
    • Infine, il keystore controlla se l'app ha effettivamente i diritti per utilizzare questa chiave e invia i dati di output all'app.

Con questo modello l'app non può conoscere il valore della chiave ma può utilizzarla. È inoltre possibile associare alla chiave ulteriori controlli di accesso: ad esempio, l'accesso della chiave può essere condizionato all'autenticazione dell'utente (richiesta di PIN o sequenza di sblocco).

Questo meccanismo può fornire una sicurezza aggiuntiva rispetto alla protezione basata su password. Infatti, sui telefoni più recenti, il Keystore è supportato da un Trusted Execution Environment (TEE) o talvolta da un Secure Element.

Ciò significa che un utente malintenzionato con privilegi di root non sarà in grado di estrarre le chiavi di crittografia dal keystore. Tuttavia, potranno utilizzare il Keystore come oracolo di decrittografia e crittografare o decrittografare tutti i dati che desiderano.

Keystore offre servizi di crittografia ma anche di firma. Quindi, un portafoglio potrebbe proteggere le sue chiavi di crittografia, rendendole difficili da estrarre? La risposta purtroppo è no: i portafogli software non utilizzano Keystore per firmare le transazionile chiavi private vengono sempre manipolate in chiaro dall'app.

Questo per un motivo semplice: KeyStore e KeyChain offrono servizi generici di firma e crittografia, ma non supportano la crittografia utilizzata nelle criptovalute. Ad esempio, KeyStore implementa la firma ECDSA ma solo sulle curve NIST definite in FIPS 186-4 (P-224, P-256, P-384 e P-521). Bitcoin utilizza un'altra curva, secp256k1, che non è ancora supportato.

Per riassumere, Keystore e Portachiavi sono buoni servizi da proteggere chiavi segrete e private. Possono offrire una certa sicurezza crittografando i dati sensibili: alcune classi di vulnerabilità (lettura arbitraria di file, ad esempio) verranno affrontate dalla crittografia Keystore. Tuttavia, se l'escalation dei privilegi root non è sufficiente per estrarre i valori delle chiavi da un archivio chiavi supportato da hardware, è sufficiente decrittografare i dati sensibili. Un utente malintenzionato in grado di manipolare l'app è in grado di recuperarne i segreti.

Per concludere sui portafogli mobili:

  • Il meccanismo di isolamento tra le app fornito da iOS/Android alza il livello di sicurezza rispetto a un portafoglio software in esecuzione su un computer. L'aggressore necessita prima di un'escalation dei privilegi per accedere ai dati dell'app. Questo è fattibile su dispositivi obsoleti. Gli aggressori esperti (Ian Beer lo ha fatto in 6 mesi da solo ma... è Ian Beer) possono farlo anche su dispositivi recenti dotati di patch.
  • I servizi di protezione delle chiavi (KeyStore, KeyChain) potrebbero aggiungere un ulteriore livello di sicurezza per proteggere i segreti inattivi. Tuttavia, poiché non supportano gli algoritmi crittografici per le applicazioni di criptovaluta, è comunque possibile estrarre la chiave.
  • In tutti i casi, un utente malintenzionato con accesso root può recuperare il seed a riposo, quando utilizzato, oppure sfruttare i diritti dell'utente per svuotare il portafoglio utilizzando il portafoglio software come oracolo.

Ecco un ultimo esempio di spyware giocattolo che prende di mira il portafoglio Blockchain.com (sebbene ciò possa essere eseguito con la stessa facilità su molti altri portafogli). È installato in remoto e monitora il portafoglio. Una volta che l'utente si è autenticato utilizzando la sua impronta digitale, la chiave di crittografia viene sbloccata e i dati del portafoglio vengono decrittografati. Lo spyware consente all'app di recuperare questa chiave di crittografia. Quindi esfiltra la chiave e i dati del portafoglio su un server remoto:

[Contenuto incorporato]

Conclusione

In conclusione, i portafogli software hanno diversi livelli di sicurezza. Tuttavia, il loro modello di minaccia non copre il caso di un malware in esecuzione sul sistema operativo con un’escalation di privilegi. Ciò è dovuto alla progettazione: l'app portafoglio non può essere più sicura del sistema operativo su cui viene eseguita.

  • Il meccanismo di isolamento tra le app fornito da iOS/Android alza il livello di sicurezza rispetto a un portafoglio software in esecuzione su un computer. L'aggressore necessita prima di un'escalation dei privilegi per accedere ai dati dell'app.
  • I servizi di protezione delle chiavi (KeyStore, KeyChain) potrebbero aggiungere un ulteriore livello di sicurezza per proteggere i segreti inattivi. Tuttavia, poiché non supportano algoritmi crittografici per applicazioni di criptovaluta, le chiavi devono essere manipolate direttamente dall'app, quindi offrono una protezione limitata.
  • In tutti i casi, un utente malintenzionato con accesso root può recuperare il seed a riposo, quando utilizzato, oppure sfruttare i diritti dell'utente per svuotare il portafoglio utilizzando il portafoglio software come oracolo.

Timestamp:

Di più da Ledger