Le scanner d'autorisations permet d'analyser un protocole DeFi, ou tout système de contrat intelligent, pour les fonctions autorisées. Il renvoie une liste des contrats intelligents, des fonctions autorisées identifiées et des propriétaires d'autorisations respectifs.
Afin d'analyser un protocole à la recherche de fonctions autorisées, le protocole cible est spécifié en termes de chaîne et d'un ensemble d'adresses de tous les contrats déployés. Ces contrats doivent tous être vérifiés sur un explorateur de blocs public. Vous pouvez trouver une liste des chaînes et des explorateurs pris en charge ici. Le scanner d'autorisations télécharge ensuite le code source des contrats depuis l'explorateur, les analyse à la recherche d'autorisations, lit le propriétaire de l'autorisation à partir de l'emplacement de stockage respectif et écrit les résultats dans un fichier de sortie.
solc
Créez et activez un environnement Python virtuel et installez les packages Python requis avec
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Copiez le fichier .env.example
dans .env
et, en fonction du réseau sur lequel les contrats sont déployés, remplissez l'URL de votre fournisseur RPC et une clé API d'explorateur de blocs valide. Chargez ensuite les variables avec
source .env
Complétez le fichier ./contracts.json
avec le nom de la chaîne et les adresses de tous les contrats du protocole. Trouvez une liste des chaînes prises en charge ici.
Exécutez ensuite le script du scanner avec
python src/main.py
Notez que si vous ne disposez pas de la bonne version du compilateur solc
, elle sera installée automatiquement par le script.
Le script écrira les résultats du scanner dans un nouveau fichier ./permissions.json
.
Une fois votre analyse terminée, vous pouvez à nouveau désactiver l'environnement Python avec la commande suivante
source deactivate
Chaînes prises en charge pour récupérer et filtrer les contrats
"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")
Le scanner d'autorisations ne garantit PAS que l'ensemble d'adresses de contrat fourni est complet ou que les contrats font effectivement partie du protocole.
Les autorisations sont identifiées par l'utilisation de modificateurs onlyOwner
ou de vérifications msg.sender
dans une fonction de contrat. D'autres formes d'autorisations peuvent exister qui ne sont pas capturées avec cette approche.
L'analyseur d'autorisations tente de lire directement les propriétaires d'autorisations à partir du stockage sous contrat. Cela peut échouer, en particulier si un contrat utilise un modèle d'évolutivité, et doit être vérifié manuellement.
Le scanner d'autorisations identifie uniquement les autorisations et leurs propriétaires, mais n'évalue pas l'impact ou les risques de ces autorisations.
Le scanner d'autorisations est construit sur l'analyseur statique Slither. Nous remercions l'équipe Trail of Bits pour la création de cet outil open source et tout le travail qu'elle a effectué pour la sécurité du secteur DeFi.