Lista di controllo per la sicurezza dei contratti intelligenti
Lista di controllo per lo sviluppo di contratti intelligenti
Ecco un processo ad alto livello che consigliamo di seguire durante la scrittura dei tuoi contratti intelligenti.
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 rapporto 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 rimanere 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 tuo codice di aggiornabilità per individuare eventuali 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 pretendono 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 stampatore inheritance-graph (opens in a new tab) di Slither. Evita problemi di shadowing involontario e di linearizzazione C3.
- Esamina lo stampatore function-summary (opens in a new tab) di Slither. Segnala la visibilità delle funzioni e i controlli di accesso.
- Esamina lo stampatore 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 usare 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ò consumare 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 DeFi esterni
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 lavorare su questa guida.
Unisciti al nostro Slack: Empire Hacking (opens in a new tab). Siamo sempre disponibili nei canali #crytic ed #ethereum se hai domande.
Ultimo aggiornamento della pagina: 7 febbraio 2025