Sostenere che la Blockchain sia una tecnologia sicura è, allo stesso tempo, vero, incompleto e relativo. Vero perché, per sua stessa natura, la Blockchain e il principio di immutabilità che la contraddistingue contribuiscono a farne uno strumento utile per la cyber security.
Incompleto, perché i software sviluppati per farne uso aprono le porte a falle e debolezze e questo introduce il concetto di relatività: se una ferrovia (la Blockchain) è di per sé sicura ma le ruote dei treni che la percorrono sono tanto traballanti (le applicazioni) da danneggiare binari e traversine, la tratta ferroviaria dovrà subire interventi di riparazione forse non previsti all’origine ma prevedibili una volta compreso quale problema causa danni.
Allora occorre chiedersi come fare per ridurre i rischi per la tratta ferroviaria, ossia come mettere in sicurezza le Blockchain. Per approfondire l’argomento ci siamo avvalsi del parere di Pierluigi Paganini, esperto di cyber security ed intelligence.
Indice degli argomenti
Le Blockchain e le vulnerabilità
Non esiste un elenco completo delle vulnerabilità delle Blockchain, e questo è parte del problema. Poterne disporre è importante, tant’è che il governo americano incentiva l’uso e l’aggiunta di record nel Common Weakness Enumeration database, compendio delle debolezze e delle vulnerabilità note anche relative alla Blockchain.
Le Blockchain fanno gola perché violarle corrisponde a incamerare denaro senza ulteriori attività. Chi viola un database deve vendere i dati per intascare soldi, chi dirotta una transazione si impossessa di criptovalute, ossia denaro.
Paganini completa l’aspetto del censimento delle vulnerabilità: “Suggerirei di consultare fonti come il National Vulnerability Database (Nvd) gestito dal National Institute of Standards and Technology (Nist) degli Stati Uniti. È inoltre importante essere aggiornati sui principali lavori di ricerca internazionali che si focalizzano sull’analisi dei sistemi basati su blockchain e sui protocolli in uso”.
C’è un disequilibrio di fondo: mentre le autorità diventano più abili nel rintracciare le transazioni (in altre parole, a seguire il denaro), i sistemi decentralizzati intesi come comunità non sono impeccabili nell’identificare e risolvere le vulnerabilità.
Vulnerabilità che consentono attacchi e che sono create dai software, dai servizi web e dagli smart contract. A oggi gli attacchi documentati sono circa 200 ma si tratta di un elenco incompleto e puramente indicativo.
La propensione alle vulnerabilità si sposano male a un mercato, quello delle tecnologie Blockchain che, stando a un report dell’azienda di monitoraggio e marketing Cision, è prossimo a raggiungere i 20 miliardi di dollari a livello globale.
L’analisi può essere generosa in termini numerici, ma il problema delle vulnerabilità esiste a prescindere dalla cifra d’affari e, soprattutto, rischia di fornire un assist ai detrattori delle transazioni decentralizzate ma, forse ancora prima, rischia di avere un impatto negativo sugli esiti dei tanti test avviati da banche e istituti di credito (anche in Italia).
Mettere in sicurezza le Blockchain
La sicurezza delle Blockchain è una procedura che prevede l’intersezione di diverse discipline, si va dall’adozione di framework votati alla cyber security, test e pratiche di codifica. Un elenco plausibile deve contenere diversi capisaldi:
- usare il protocollo TLS
- proteggere le transazioni basate su API
- implementare sistemi di autenticazione multi fattore
- implementare e mantenere una robusta gestione delle chiavi crittografiche
- implementare protocolli OAuth, OIDC e SAML2.
Questi ultimi protocolli sono standard utili allo scambio di autorizzazioni e autenticazioni tra domini, in particolare OAuth consiste nell’emissione di un token da parte di un server affinché i client possano accedervi. È molto diffuso dai giganti del web come Amazon, Google, Meta e Microsoft per consentire ai rispettivi utenti la condivisione di informazioni con altri servizi web.
L’uso di API è uno dei nervi scoperti ed è materia sulla quale concentrarsi in modo particolare anche se, come ricorda Paganini, sono solo una parte del problema complessivo: “Le API utilizzate per le transazioni blockchain possono essere affette dalle medesime vulnerabilità che affliggono le API in altri software. È opportuno che tali API siano opportunamente progettare e protette, problemi di autenticazione piuttosto che information disclosure sono purtroppo molto comuni. Più difficile è riuscire a trovare API non adeguatamente protette che consentano la manipolazione di informazioni e che possano consentire a un attaccante di operare transazioni fraudolente”.
Anche l’adozione dei protocolli standard (come OAuth, OIDC e SAML2) è insostituibile ma non sufficiente: “Riterrei l’adozione di protocolli come quelli citati condizione necessaria, ma non sufficiente ad una protezione completa. È fondamentale predisporre diversi livelli di protezione e monitoraggio delle differenti componenti di uno schema di blockchain”.
Questi aspetti, benché importanti, sono tra quelli propedeutici ai penetration test.
Le tre fasi del penetration testing
Per penetration test si intende una profonda analisi della sicurezza di un sistema o di una rete. Nel caso specifico di una Blockchain, l’obiettivo dei pen test è quello di scoprire le vulnerabilità e le debolezze al fine di individuare le opportune soluzioni.
La prima delle tre fasi vanno individuati i requisiti funzionali ed è uno stadio prettamente di studio nel quale rientrano:
- lo studio approfondito dell’architettura delle Blockchain
- la raccolta delle informazioni relative a eventuali exploit
- valutare le logiche di gestione degli smart contract
- stabilire gli obiettivi da raggiungere con i pen test
- creare un ambiente di test
La seconda fase, più improntata ai test propriamente detti, è essenziale per constatare lo stato di sicurezza della Blockchain. Gli aspetti sui quali fare leva sono:
- la valutazione dell’integrità della blockchain
- la valutazione della sicurezza delle API
- la valutazione della vulnerabilità delle applicazioni e della rete
Nel paragrafo seguente suggeriamo alcuni tool dediti a queste pratiche.
La terza fase è la prova materiale, ovvero testare con mano le debolezze emerse durante la seconda fase. Si tratta di un compito necessario per escludere che siano stati rilevati dei falsi positivi.
Gli strumenti utili
Ci sono diversi tool che possono essere utilizzati. Sono per lo più Open source e richiedono comunque personale preparato e formato per farne uso.
L’analisi degli smart contract può essere fatta con Manticore oppure con Oyente. Gli smart contrat Ethereum possono essere testati con Echidna.
Solgraph è una suite di test che evidenzia le vulnerabilità nella sicurezza e Solidity security è un compendio dei bug e delle debolezze più sfruttate dagli attaccanti e delle tecniche adatte per la loro neutralizzazione.
I consigli aggiuntivi
E, infine, dei consigli in più che, sottolinea Paganini, valgono per lo sviluppo di qualsiasi progetto software sicuro sia per i processi crittografici, ovvero:
- sviluppare le applicazioni seguendo i principi di secure coding
- implementare una gestione sicura delle chiavi crittografiche
- implementare meccanismi robusti di autenticazione e autorizzazione
- monitorare le minacce
- eseguire assessment periodici di sicurezza
- implementare politiche di Backup e ripristino efficienti
- mantenere le componenti del sistema sempre aggiornate.
La sicurezza totale è realtà irraggiungibile ma questo non è un alibi valido per dimostrarsi imprudenti.