
Securify 2.0 ist ein Sicherheitsscanner für Ethereum Smart Contracts, die von der Ethereum Foundation und Chainecurity unterstützt werden. Die Kernforschung hinter der Versicherung wurde im sicheren, zuverlässigen und intelligenten Systemlabor in ETH Zürich durchgeführt.
Es ist der Nachfolger des beliebten Securify Security Scanners (finden Sie die alte Version hier).
Um den Container zu bauen:
sudo docker build -t securify .
Um den Container auszuführen:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
HINWEIS: Um den Code über Docker mit einer Solidity -Version auszuführen, die sich von 0.5.12 unterscheidet, müssen Sie die variable ARG SOLC=0.5.12 oben in der Dockerfile ändern, um auf Ihre Version zu verweisen. Nach dem Erstellen mit der richtigen Version sollten Sie nicht auf Fehler stoßen.
Die folgenden Anweisungen gehen davon aus, dass bereits ein Python installiert ist. Darüber hinaus erfordert SCEPIFY, dass solc , souffle und graphviz auf dem System installiert werden:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Befolgen Sie die Anweisungen hier: https://souffle-lang.github.io/download.html
Bitte entscheiden Sie sich nicht für die instabile Version, da sie möglicherweise zu irgendeinem Zeitpunkt brechen kann.
sudo apt install graphviz
Nachdem die Voraussetzungen installiert wurden, können wir die virtuelle Python -Umgebung einrichten, aus der wir die Skripte in diesem Projekt ausführen werden.
Führen Sie im Stammordner des Projekts die folgenden Befehle aus, um die virtuelle Umgebung einzurichten und zu aktivieren:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
Stellen Sie sicher, dass die python -Version tatsächlich 3.7 ist:
python --version
Setzen Sie LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
Installieren Sie schließlich die Abhängigkeiten des Projekts, indem Sie die folgenden Befehle aus dem Ordner <securify_root> ausführen:
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Jetzt können Sie mit dem Versicherungsframework beginnen.
Denken Sie daran: Bevor Sie die Skripte des Frameworks ausführen, müssen Sie die virtuelle Umgebung mit dem folgenden Befehl aktivieren:
source venv/bin/activate
Derzeit stützt scurify2 nur Flat -Verträge, dh Verträge, die keine Einfuhranweisungen enthalten.
Um einen lokalen Vertrag zu analysieren, lief einfach:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
Oder laden Sie es mit der Etherscan.io -API von der Blockchain herunter:
securify <contract_address> --from-blockchain [--key <key-file>]
Beachten Sie, dass Sie einen API-Key von Ethercan.io benötigen, um diese Funktionalität zu verwenden.
Analyse eines Vertrags gegen spezifische Schweregrade, die ausgeführt werden:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
Damit alle verfügbaren Muster ausgeführt werden:
securify --list
| AUSWEIS | Mustername | Schwere | Slitither id | SWC ID | Kommentare |
|---|---|---|---|---|---|
| 1 | Kopplebot | Kritisch | - - | SWC-114 | |
| 2 | TODRECEIVER | Kritisch | - - | SWC-114 | |
| 3 | Todtransfer | Kritisch | - - | SWC-114 | |
| 4 | Uneingeschränktes Write | Kritisch | - - | SWC-124 | |
| 5 | RightToleftOverride | Hoch | rtlo | SWC-130 | |
| 6 | ShadowedStateVariable | Hoch | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | Uneingeschränkte Self -Destruct | Hoch | suicidal | SWC-106 | |
| 8 | Nicht initialisierte StateVariable | Hoch | uninitialized-state | SWC-109 | |
| 9 | Nicht initialisierte Storage | Hoch | uninitialized-storage | SWC-109 | |
| 10 | UneingeschränkteDelegateCall | Hoch | controlled-delegatecall | SWC-112 | |
| 11 | Dao | Hoch | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | Medium | erc20-interface | - - | |
| 13 | ERC721Interface | Medium | erc721-interface | - - | |
| 14 | Falsche Gleichheit | Medium | incorrect-equality | SWC-132 | |
| 15 | Gesperrt | Medium | locked-ether | - - | |
| 16 | Wiedereinzug | Medium | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigin | Medium | tx-origin | SWC-115 | |
| 18 | Uneingeschränkte Ausnahme | Medium | unchecked-lowlevel | - - | |
| 19 | Uneingeschränkter Flow | Medium | unchecked-send | SWC-105 | |
| 20 | Nicht initialisiert | Medium | uninitialized-local | SWC-109 | |
| 21 | Unbenutzter Return | Medium | unused-return | SWC-104 | |
| 22 | Schattenbauer | Niedrig | shadowing-builtin | - - | |
| 23 | ShadowedLocalVariable | Niedrig | shadowing-local | - - | |
| 24 | CallTodeFaultConstructor? | Niedrig | void-cst | - - | |
| 25 | Rufen Sie an | Niedrig | calls-loop | SWC-104 | |
| 26 | Wiedereinzug | Niedrig | reentrancy-benign | SWC-107 | |
| 27 | Zeitstempel | Niedrig | timestamp | SWC-116 | |
| 28 | AssemblyUsage | Info | assembly | - - | |
| 29 | ERC20IDEXED | Info | erc20-indexed | - - | |
| 30 | LowLevelcalls | Info | low-level-calls | - - | |
| 31 | Namenskonvention | Info | naming-convention | - - | |
| 32 | Solcversion | Info | solc-version | SWC-103 | |
| 33 | Nicht verwendete Statevariable | Info | unused-state | - - | |
| 34 | Toomanydigits | Info | too-many-digits | - - | |
| 35 | Constablestates | Info | constable-states | - - | |
| 36 | Externe Funktionen | Info | external-function | - - | |
| 37 | StateVariableDefaultvisibilität | Info | - - | SWC-108 |
Die folgenden Slitither -Muster werden nicht von der Versicherung überprüft, da sie vom Solidity -Compiler überprüft werden (Ver. 0.5.8):
constant-functiondeprecated-standardspragmaDie folgenden SWC -Schwachstellen gelten nicht für Soliditätsverträge mit Pragma> = 5,8 und werden daher nicht von Versicherung überprüft: