Der Berechtigungsscanner ermöglicht das Scannen eines DeFi-Protokolls oder eines beliebigen Smart-Contract-Systems nach berechtigten Funktionen. Es gibt eine Liste der Smart Contracts, der identifizierten berechtigten Funktionen und der jeweiligen Berechtigungsinhaber zurück.
Um ein Protokoll nach berechtigten Funktionen zu durchsuchen, wird das Zielprotokoll anhand der Kette und einer Reihe von Adressen aller bereitgestellten Verträge angegeben. Diese Verträge müssen alle auf einem öffentlichen Block-Explorer überprüft werden. Eine Liste der unterstützten Ketten und Explorer finden Sie hier. Anschließend lädt der Berechtigungsscanner den Quellcode der Verträge aus dem Explorer herunter, durchsucht diese nach Berechtigungen, liest den Berechtigungsinhaber aus dem jeweiligen Speicherslot und schreibt die Ergebnisse in eine Ausgabedatei.
solc
-CompilerErstellen und aktivieren Sie eine virtuelle Python-Umgebung und installieren Sie die erforderlichen Python-Pakete mit
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Kopieren Sie die Datei .env.example
nach .env
und geben Sie je nach Netzwerk, in dem die Verträge bereitgestellt werden, die URL Ihres RPC-Anbieters und einen gültigen Block-Explorer-API-Schlüssel ein. Laden Sie dann die Variablen mit
source .env
Vervollständigen Sie die Datei ./contracts.json
mit dem Kettennamen und den Adressen aller Verträge des Protokolls. Eine Liste der unterstützten Ketten finden Sie hier.
Führen Sie dann das Scanner-Skript mit aus
python src/main.py
Beachten Sie: Wenn Sie nicht über die richtige solc
Compiler-Version verfügen, wird diese automatisch vom Skript installiert.
Das Skript schreibt die Ergebnisse des Scanners in eine neue Datei ./permissions.json
.
Sobald Sie Ihre Analyse abgeschlossen haben, können Sie die Pyhton-Umgebung mit dem folgenden Befehl wieder deaktivieren
source deactivate
Unterstützte Ketten zum Abrufen und Überprüfen von Verträgen
"mainnet:" : (".etherscan.io", "etherscan.io")
"optim:" : ("-optimistic.etherscan.io", "optimistic.etherscan.io")
"goerli:" : ("-goerli.etherscan.io", "goerli.etherscan.io")
"sepolia:" : ("-sepolia.etherscan.io", "sepolia.etherscan.io")
"tobalaba:" : ("-tobalaba.etherscan.io", "tobalaba.etherscan.io")
"bsc:" : (".bscscan.com", "bscscan.com")
"testnet.bsc:" : ("-testnet.bscscan.com", "testnet.bscscan.com")
"arbi:" : (".arbiscan.io", "arbiscan.io")
"testnet.arbi:" : ("-testnet.arbiscan.io", "testnet.arbiscan.io")
"poly:" : (".polygonscan.com", "polygonscan.com")
"mumbai:" : ("-testnet.polygonscan.com", "testnet.polygonscan.com")
"avax:" : (".snowtrace.io", "snowtrace.io")
"testnet.avax:" : ("-testnet.snowtrace.io", "testnet.snowtrace.io")
"ftm:" : (".ftmscan.com", "ftmscan.com")
"goerli.base:" : ("-goerli.basescan.org", "goerli.basescan.org")
"base:" : (".basescan.org", "basescan.org")
"gno:" : (".gnosisscan.io", "gnosisscan.io")
"polyzk:" : ("-zkevm.polygonscan.com", "zkevm.polygonscan.com")
"blast:" : (".blastscan.io", "blastscan.io")
Der Berechtigungsscanner garantiert NICHT, dass der bereitgestellte Satz an Vertragsadressen vollständig ist oder dass die Verträge tatsächlich Teil des Protokolls sind.
Berechtigungen werden durch die Verwendung von onlyOwner
-Modifikatoren oder msg.sender
Prüfungen in einer Vertragsfunktion identifiziert. Möglicherweise gibt es andere Arten von Berechtigungen, die mit diesem Ansatz nicht erfasst werden.
Der Berechtigungsscanner versucht, Berechtigungsinhaber direkt aus dem Vertragsspeicher auszulesen. Dies kann insbesondere dann fehlschlagen, wenn ein Vertrag ein Upgradefähigkeitsmuster verwendet, und sollte manuell überprüft werden.
Der Berechtigungsscanner identifiziert lediglich Berechtigungen und deren Eigentümer, bewertet jedoch nicht die Auswirkungen oder Risiken dieser Berechtigungen.
Der Berechtigungsscanner basiert auf dem statischen Slither-Analysator. Wir danken dem Team von Trail of Bits für die Entwicklung dieses Open-Source-Tools und die geleistete Arbeit für die Sicherheit im DeFi-Sektor.