Elenco di controllo di sicurezza per gli smart contract
Elenco di controllo per lo sviluppo di smart contract
Ecco un processo d'alto livello che consigliamo di seguire per la scrittura degli smart contract.
Verifica i problemi di sicurezza noti:
- Revisiona i tuoi contratti con Slither(opens in a new tab). Ha oltre 40 rilevatori integrati per le vulnerabilità comuni. Eseguilo a ogni check-in con il nuovo codice e assicurati di ottenere un report pulito (o usa la modalità triage per silenziare certi problemi).
- Revisiona i tuoi contratti con Crytic(opens in a new tab). Controlla 50 problemi non verificati da Slither. Crytic può aiutare il tuo team a prevenire problemi, facendo affiorare facilmente le questioni di sicurezza nelle richieste pull su GitHub.
Considera le funzionalità speciali del tuo contratto:
- I tuoi contratti sono aggiornabili? Revisiona il tuo codice di aggiornabilità per i difetti con
slither-check-upgradeability
(opens in a new tab) o Crytic(opens in a new tab). Abbiamo documentato 17 modi in cui gli aggiornamenti possono andare male. - I tuoi contratti pretendono di esser conformi agli ERC? Controllali con
slither-check-erc
(opens in a new tab). Questo strumento identifica istantaneamente le deviazioni da sei specifiche comuni. - Integri con token di terze parti? Revisiona il nostro elenco di controllo di integrazione del token prima di affidarti a contratti esterni.
Ispeziona visivamente le funzionalità di sicurezza critiche del tuo codice:
- Revisiona l'editore di Slither, inheritance-graph(opens in a new tab). Evita shadowing involontari e problemi di linearizzazione di C3.
- Revisiona l'editore di Slither, function-summary(opens in a new tab). Segnala la visibilità della funzione e i controlli d'accesso.
- Revisiona l'editore di Slither, vars-and-auth(opens in a new tab). Segnala i controlli d'accesso sulle variabili di stato.
Documenta le proprietà di sicurezza critiche e usa generatori di test automatizzati per valutarle:
- Impara a documentare le proprietà di sicurezza per il tuo codice. All'inizio è difficile, ma è l'attività in assoluto più importante per ottenere un buon risultato. È anche un prerequisito per usare qualsiasi tecnica avanzata in questo tutorial.
- Definisci le proprietà di sicurezza in Solidity, per l'uso con Echidna(opens in a new tab) e Manticore(opens in a new tab). Concentrati sulla tua macchina di stato, controlli d'accesso, operazioni aritmetiche, interazioni esterne e conformità agli standard.
- Definisci le proprietà di sicurezza con l'API di Python di Slither. Concentrati su eredità, dipendenze della variabile, controlli d'accesso e altri problemi strutturali.
- Esegui i tuoi test di proprietà a ogni commit con Crytic(opens in a new tab). Crytic può consumare e valutare i test di proprietà di sicurezza in modo che tutti nel team possano facilmente vedere che passano su GitHub. I testi falliti possono bloccare i commit.
Infine, ricordati dei problemi che gli strumenti automatizzati non possono facilmente trovare:
- Mancanza di privacy: tutti gli altri possono vedere le tue transazioni mentre sono accodate nel pool
- Transazioni in esecuzione frontale
- Operazioni crittografiche
- Interazioni rischiose con componenti esterni della DeFi
Chiedi aiuto
Orari lavorativi di Ethereum(opens in a new tab): ogni martedì pomeriggio. Queste sessioni 1 a 1 di un'ora sono un'opportunità per farci domande sulla sicurezza, la risoluzione dei problemi usando i nostri strumenti e la ricezione di feedback dagli esperti sul tuo approccio corrente. Ti aiuteremo ad arrivare in fondo a questa guida.
Unisciti al nostro Slack: Empire Hacking(opens in a new tab). Siamo sempre disponibili nei canali #crytic ed #ethereum se hai domande.
Ultima modifica: @sumitvekariya(opens in a new tab), 29 agosto 2024