Kontrolní seznam bezpečnosti chytrých kontraktů
Kontrolní seznam pro vývoj chytrých kontraktů
Zde je obecný postup, který doporučujeme dodržovat při psaní vašich chytrých kontraktů.
Zkontrolujte známé bezpečnostní problémy:
- Zkontrolujte své kontrakty pomocí nástroje Slither (opens in a new tab). Má více než 40 vestavěných detektorů běžných zranitelností. Spouštějte jej při každém odevzdání nového kódu a ujistěte se, že získáte čistý report (nebo použijte režim třídění k potlačení určitých problémů).
- Zkontrolujte své kontrakty pomocí nástroje Crytic (opens in a new tab). Kontroluje 50 problémů, které Slither neřeší. Crytic může také pomoci vašemu týmu udržet si přehled tím, že snadno zobrazuje bezpečnostní problémy v Pull Requestech na GitHubu.
Zvažte speciální funkce vašeho kontraktu:
- Jsou vaše kontrakty aktualizovatelné? Zkontrolujte kód pro aktualizace na chyby pomocí
slither-check-upgradeability(opens in a new tab) nebo nástroje Crytic (opens in a new tab). Zdokumentovali jsme 17 způsobů, jak se mohou aktualizace pokazit. - Mají vaše kontrakty splňovat standardy ERC? Zkontrolujte je pomocí
slither-check-erc(opens in a new tab). Tento nástroj okamžitě identifikuje odchylky od šesti běžných specifikací. - Integrujete tokeny třetích stran? Než se spolehnete na externí kontrakty, projděte si náš kontrolní seznam pro integraci tokenů.
Vizuálně zkontrolujte kritické bezpečnostní prvky vašeho kódu:
- Prohlédněte si výstup inheritance-graph (opens in a new tab) z nástroje Slither. Vyhněte se neúmyslnému stínování a problémům s C3 linearizací.
- Prohlédněte si výstup function-summary (opens in a new tab) z nástroje Slither. Reportuje viditelnost funkcí a řízení přístupu.
- Prohlédněte si výstup vars-and-auth (opens in a new tab) z nástroje Slither. Reportuje řízení přístupu u stavových proměnných.
Zdokumentujte kritické bezpečnostní vlastnosti a k jejich vyhodnocení použijte automatické generátory testů:
- Naučte se dokumentovat bezpečnostní vlastnosti vašeho kódu. Zpočátku je to těžké, ale je to ta nejdůležitější činnost pro dosažení dobrého výsledku. Je to také předpoklad pro použití jakýchkoli pokročilých technik v tomto tutoriálu.
- Definujte bezpečnostní vlastnosti v jazyce Solidity pro použití s nástroji Echidna (opens in a new tab) a Manticore (opens in a new tab). Zaměřte se na váš stavový automat, řízení přístupu, aritmetické operace, externí interakce a shodu se standardy.
- Definujte bezpečnostní vlastnosti pomocí Python API nástroje Slither. Zaměřte se na dědičnost, závislosti proměnných, řízení přístupu a další strukturální problémy.
- Spouštějte testy vlastností při každém commitu pomocí nástroje Crytic (opens in a new tab). Crytic dokáže zpracovat a vyhodnotit testy bezpečnostních vlastností, takže každý ve vašem týmu snadno uvidí, že na GitHubu procházejí. Selhávající testy mohou zablokovat commity.
Nakonec mějte na paměti problémy, které automatizované nástroje nemohou snadno odhalit:
- Nedostatek soukromí: všichni ostatní mohou vidět vaše transakce, zatímco čekají ve frontě v poolu
- Předbíhání transakcí (front-running)
- Kryptografické operace
- Rizikové interakce s externími komponentami decentralizovaných financí (DeFi)
Požádejte o pomoc
Konzultační hodiny Etherea (opens in a new tab) probíhají každé úterní odpoledne. Tyto hodinové individuální schůzky jsou příležitostí zeptat se nás na jakékoli otázky ohledně bezpečnosti, řešit problémy pomocí našich nástrojů a získat zpětnou vazbu od odborníků na váš současný přístup. Pomůžeme vám projít tímto průvodcem.
Připojte se na náš Slack: Empire Hacking (opens in a new tab). Pokud máte nějaké dotazy, jsme vždy k dispozici v kanálech #crytic a #ethereum.