
BlockChain Security Construction
In questo articolo introduciamo principalmente diversi aspetti dell'audit delle public chain che meritano attenzione. Per gli auditor di sicurezza e gli sviluppatori di public chain, questo è un progetto degno di riferimento e di riflessione.
Prima di introdurre la costruzione del sistema di public chain, diamo un'occhiata all'architettura della blockchain:
Era Blockchain 1.0:
Architettura: come mostrato nella figura sottostante
Prodotti rappresentativi: bitcoin, reborn coin, dogcoin, Leyte coin, MasterCard coin, ecc.

Era Blockchain 2.0:
Architettura: come mostrato nella figura sottostante
Prodotti rappresentativi: Ethereum, lisk, hyperledger, ecc.
Modifiche principali:

Era Blockchain 2.0
Architettura: come mostrato nella figura sottostante
Prodotti rappresentativi: EOS, VaR, AE, ash, ELA, dfinity
Modifiche principali: gli scenari applicativi della blockchain in tutti i settori al di fuori dell'industria finanziaria possono soddisfare logiche di business più complesse

Di seguito, forniremo una breve introduzione ai problemi degni di considerazione nella costruzione della sicurezza della public chain blockchain, in base all'architettura della blockchain. Circa il 75% dei problemi ha causato problemi di sicurezza nelle public chain, che sono anche alcuni punti degni di attenzione nell'audit di sicurezza delle public chain. Qui li presentiamo sotto forma di domande per stimolare la nostra riflessione. Se desideri approfondire la discussione, puoi farlo direttamente nella issue:
Il livello dati è la tecnologia di livello inferiore e le sue funzioni principali sono l'archiviazione dei dati, l'implementazione di account e transazioni e la sicurezza. L'archiviazione dei dati si basa principalmente sull'albero di Merkle, realizzata tramite la struttura a blocchi e a catena. La maggior parte viene resa persistente tramite database kV, come bitcoin e leveldb adottato da Ethereum.
Per quanto riguarda il livello dati, vale la pena riflettere sui seguenti punti:
Lo scopo principale del livello di rete è realizzare l'interazione informativa tra i nodi della rete blockchain. L'essenza della blockchain è una rete peer-to-peer (P2P). Ogni nodo può ricevere informazioni e anche produrne. I nodi mantengono la comunicazione mantenendo una blockchain comune. Nella rete blockchain, ogni nodo può creare un nuovo blocco. Dopo la creazione del nuovo blocco, gli altri nodi vengono notificati tramite broadcast. A loro volta, gli altri nodi verificano il nodo. Quando più del 51% degli utenti della rete blockchain supera la verifica, il nuovo blocco viene aggiunto alla catena principale.
Ci sono diversi punti su cui vale la pena riflettere per quanto riguarda il livello di rete
Il design dell'algoritmo di scoperta dei nodi della public chain è ragionevole?
Il design dei nodi della public chain è ragionevole?
Il design del meccanismo di punizione è ragionevole?
Il design del protocollo di comunicazione è ragionevole?
Il design dell'elaborazione delle richieste dei nodi della public chain è ragionevole?
Esiste un limite alla dimensione del pacchetto di elaborazione delle richieste?
Il design del meccanismo di comunicazione delle transazioni della public chain è ragionevole?
Il meccanismo di sincronizzazione dei dati dei blocchi è ragionevole?
Il design logico dell'elaborazione delle transazioni è ragionevole?
Il livello di consenso consente a nodi altamente dispersi di raggiungere un consenso sull'efficacia dei dati dei blocchi in un sistema decentralizzato. Ogni blockchain in esecuzione necessita di un algoritmo di consenso per garantire l'efficacia e l'ordine dell'emissione dei blocchi. Gli algoritmi di consenso comuni includono pow, POS, dpos, Poa, POC, ecc.
A livello di consenso, dovremmo considerare i seguenti punti:
Il design dell'algoritmo di consenso della public chain è sicuro?
Il design della verifica del consenso della public chain è ragionevole?
Il design della confisca nel consenso della public chain è ragionevole?
Il design delle commissioni di servizio della public chain è ragionevole?
Il design del mining della public chain è ragionevole?
Il design della regolazione dinamica della difficoltà dei blocchi è ragionevole?
Il design logico del controllo della difficoltà dei blocchi è ragionevole?
Design della riorganizzazione della catena, del reset della catena, della biforcazione della catena, ecc.?
Lo scopo del livello di incentivazione della public chain è fornire determinate misure di incentivazione per incoraggiare i nodi a partecipare alla verifica della sicurezza della blockchain e garantire l'equilibrio e lo sviluppo sano dell'ecosistema blockchain. Nella public chain decentralizzata, è necessario predisporre il corrispondente meccanismo di incentivazione per premiare i nodi contabili partecipanti che rispettano le regole, e istituire il meccanismo di punizione per sanzionare i nodi contabili partecipanti che non rispettano le regole. Il livello di incentivazione della blockchain introduce fattori economici nel sistema tecnologico della blockchain, migliorando l'efficienza della cooperazione organizzativa e dello scambio di valore all'interno dell'ecosistema. Il meccanismo di incentivazione della public chain è un meccanismo importante per garantire lo sviluppo virtuoso della blockchain.
Ci sono diversi punti degni della nostra considerazione per quanto riguarda il livello di incentivazione
Il design del meccanismo di emissione della public chain è ragionevole?
Il design del meccanismo di punizione della public chain è ragionevole?
Il livello dei contratti incapsula tutti i tipi di codici script e algoritmi del sistema blockchain, nonché i contratti intelligenti più complessi da essi generati. Se i tre livelli di dati, rete e consenso, come "macchina virtuale" sottostante della blockchain, assumono rispettivamente le funzioni di rappresentazione dei dati, diffusione dei dati e verifica dei dati, il livello dei contratti è la logica di business e l'algoritmo basati sulla macchina virtuale della blockchain, che costituisce la base per realizzare la programmazione flessibile e l'operazione sui dati del sistema blockchain. La maggior parte delle criptovalute digitali, incluso bitcoin, utilizza codice script semplice non Turing completo per programmare e controllare il processo di transazione, che è anche il rudimento del contratto intelligente. Con lo sviluppo della tecnologia, esistono linguaggi script Turing completi come Ethereum che possono realizzare contratti intelligenti più complessi e flessibili. La blockchain può supportare molte applicazioni dei sistemi finanziari e sociali macro.
Dovremmo considerare i seguenti punti per quanto riguarda il livello dei contratti:
Design di sicurezza della macchina virtuale dei contratti?
Deployment / esecuzione / interfaccia dei contratti?
Sicurezza relativa ai contratti intelligenti?
Il livello applicativo incapsula vari scenari applicativi e casi d'uso della blockchain, simile ai vari programmi software presenti nei computer. È un prodotto che gli utenti comuni possono realmente utilizzare direttamente, e può anche essere inteso come il browser dei prodotti con architettura B / S.
Dovremmo considerare i seguenti punti per quanto riguarda il livello applicativo (solo public chain, non wallet App/Exchange/DEFI, ecc.):
Design logico CRUD dell'account del wallet?
Verifica dei permessi di importazione ed esportazione del wallet?
Design della complessità della password del wallet?
Verifica della validità dell'indirizzo dell'account del wallet?
L'interfaccia RPC pubblica necessita di una rete pubblica esterna?
I permessi dell'interfaccia RPC della public chain sono chiaramente suddivisi?
L'interfaccia RPC pubblica dispone di operazioni di tipo sensibile?
L'interfaccia RPC pubblica gestisce le eccezioni?
Il limite massimo di elaborazione dei dati dell'interfaccia RPC della public chain?
Codifica e decodifica dei dati richiesti dall'interfaccia RPC della public chain?
SSL è abilitato per l'elaborazione delle richieste RPC della public chain?
Design dell'elaborazione di richieste ad alta concorrenza nella public chain?
Impostazione del numero massimo di connessioni?
L'interfaccia Web UI della public chain consente l'accesso remoto?
Esiste una vulnerabilità di tipo web nell'interfaccia webui della public chain?
All'interfaccia webui della public chain è consentito memorizzare localmente le informazioni sulle password?
È vero che non esiste un "livello del codice" nella public chain. Qui, l'autore lo propone principalmente per classificare i problemi che potrebbero dover essere considerati nel processo di sviluppo della public chain:
Caratteristiche del linguaggio di sviluppo della public chain, come readall (), funzionalità append nella lettura dei dati del linguaggio go
Versione del linguaggio di sviluppo della public chain, ad esempio, alcune versioni del linguaggio go presentano esecuzione remota di comandi
Codifica secondo le specifiche di sviluppo della public chain, come puntatore nullo, slicing, gestione delle eccezioni e altre operazioni
Elaborazione di crittografia e decrittografia nella public chain, come codifica e decodifica ad alta complessità senza controllo della lunghezza
Elaborazione della conversione dei tipi di dati, come hextobyte, integer. Parseint(), ecc.
Design della logica di business di base, per esem
Oltre ai problemi sopra menzionati degni di considerazione a livello di architettura blockchain, dobbiamo anche considerare i seguenti problemi di sicurezza:
L'archiviazione dei dati è crittografata?
I permessi dei file sono ragionevoli?
L'ambiente di esecuzione è sicuro?
Il nodo non è avviato come root?
Esiste un servizio web vulnerabile sul lato del nodo?
Esiste una configurazione non sicura sul lato server del nodo?
Esiste una vulnerabilità di accesso non autorizzato sul lato server del nodo?
La password dell'account SSH è trapelata sul lato server del nodo?
Attacco del 51%
Hard fork della public chain
Dirottamento della potenza di calcolo (i worm infettano le macchine di mining)
Valutare se vengono utilizzate librerie di terze parti con vulnerabilità, come Jackson databind, fastjson, ecc.
Utilizzo di middleware vulnerabili, come le versioni precedenti di tendermint
La modalità cross-chain è affidabile e appropriata?
Schema di implementazione della cross-chain isomorfa e della cross-chain eterogenea?
Ripetere i problemi di sicurezza menzionati nella sezione precedente
Partecipa direttamente alla discussione dei problemi correlati nella issue