Lista di controllo per la sicurezza degli smart contract
Lista di controllo per lo sviluppo di smart contract
Ecco un processo ad alto livello che consigliamo di seguire durante la scrittura dei tuoi smart contract.
Controlla i problemi di sicurezza noti:
- Esamina i tuoi contratti con Slither (opens in a new tab). Ha più di 40 rilevatori integrati per le vulnerabilità comuni. Eseguilo a ogni check-in con nuovo codice e assicurati che ottenga un report pulito (o usa la modalità triage per silenziare determinati problemi).
- Esamina i tuoi contratti con Crytic (opens in a new tab). Controlla 50 problemi che Slither non rileva. Crytic può anche aiutare il tuo team a tenersi reciprocamente aggiornato, facendo emergere facilmente i problemi di sicurezza nelle Pull Request su GitHub.
Considera le funzionalità speciali del tuo contratto:
- I tuoi contratti sono aggiornabili? Esamina il codice di aggiornabilità alla ricerca di 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 storti. - I tuoi contratti dichiarano di essere conformi agli ERC? Controllali con
slither-check-erc(opens in a new tab). Questo strumento identifica istantaneamente le deviazioni da sei specifiche comuni. - Ti integri con token di terze parti? Esamina la nostra lista di controllo per l'integrazione dei token prima di fare affidamento su contratti esterni.
Ispeziona visivamente le funzionalità di sicurezza critiche del tuo codice:
- Esamina lo strumento di stampa inheritance-graph (opens in a new tab) di Slither. Evita problemi involontari di shadowing e di linearizzazione C3.
- Esamina lo strumento di stampa function-summary (opens in a new tab) di Slither. Segnala la visibilità delle funzioni e i controlli di accesso.
- Esamina lo strumento di stampa vars-and-auth (opens in a new tab) di Slither. Segnala i controlli di 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à singola più importante per ottenere un buon risultato. È anche un prerequisito per utilizzare una qualsiasi delle tecniche avanzate 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 a stati, sui controlli di accesso, sulle operazioni aritmetiche, sulle interazioni esterne e sulla conformità agli standard.
- Definisci le proprietà di sicurezza con l'API Python di Slither. Concentrati sull'ereditarietà, sulle dipendenze delle variabili, sui controlli di accesso e su altri problemi strutturali.
- Esegui i tuoi test delle proprietà a ogni commit con Crytic (opens in a new tab). Crytic può elaborare e valutare i test delle proprietà di sicurezza in modo che tutti nel tuo team possano facilmente vedere che passano su GitHub. I test falliti possono bloccare i commit.
Infine, fai attenzione ai problemi che gli strumenti automatizzati non possono trovare facilmente:
- Mancanza di privacy: tutti gli altri possono vedere le tue transazioni mentre sono in coda nel pool
- Transazioni di front running
- Operazioni crittografiche
- Interazioni rischiose con componenti esterni della finanza decentralizzata (DeFi)
Chiedi aiuto
Gli orari di ricevimento di Ethereum (opens in a new tab) si tengono ogni martedì pomeriggio. Queste sessioni individuali di 1 ora sono un'opportunità per farci qualsiasi domanda tu abbia sulla sicurezza, risolvere problemi usando i nostri strumenti e ottenere feedback dagli esperti sul tuo approccio attuale. Ti aiuteremo a completare questa guida.
Unisciti al nostro Slack: Empire Hacking (opens in a new tab). Siamo sempre disponibili nei canali #crytic ed #ethereum se hai delle domande.