El escáner de permisos permite escanear un protocolo DeFi, o cualquier sistema de contrato inteligente, en busca de funciones autorizadas. Devuelve una lista de los contratos inteligentes, las funciones autorizadas identificadas y los respectivos propietarios de los permisos.
Para escanear un protocolo en busca de funciones autorizadas, el protocolo de destino se especifica en términos de la cadena y un conjunto de direcciones de todos los contratos implementados. Todos estos contratos deben verificarse en un explorador de bloques público. Puede encontrar una lista de cadenas y exploradores compatibles aquí. Luego, el escáner de permisos descarga el código fuente de los contratos del explorador, los escanea en busca de permisos, lee el propietario del permiso en la ranura de almacenamiento respectiva y escribe los resultados en un archivo de salida.
solc
Cree y active un entorno virtual de Python e instale los paquetes de Python necesarios con
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Copie el archivo .env.example
a .env
y, según la red donde se implementan los contratos, complete la URL de su proveedor de RPC y una clave API válida del explorador de bloques. Luego cargue las variables con
source .env
Complete el archivo ./contracts.json
con el nombre de la cadena y las direcciones de todos los contratos del protocolo. Encuentre una lista de cadenas compatibles aquí.
Luego ejecute el script del escáner con
python src/main.py
Tenga en cuenta que si no tiene la versión correcta del compilador solc
, el script lo instalará automáticamente.
El script escribirá los resultados del escáner en un nuevo archivo ./permissions.json
.
Una vez que haya completado su análisis, puede desactivar nuevamente el entorno Pyhton con el siguiente comando
source deactivate
Cadenas admitidas para buscar y filtrar contratos de
"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")
El escáner de permisos NO garantiza que el conjunto de direcciones de contratos proporcionado esté completo o que los contratos de hecho formen parte del protocolo.
Los permisos se identifican mediante el uso de modificadores onlyOwner
o comprobaciones msg.sender
en una función de contrato. Es posible que existan otras formas de permisos que no se capturan con este enfoque.
El escáner de permisos intenta leer directamente a los propietarios de permisos desde el almacenamiento del contrato. Esto puede fallar, en particular si un contrato utiliza un patrón de capacidad de actualización y debe verificarse manualmente.
El escáner de permisos solo identifica los permisos y sus propietarios, pero no evalúa el impacto ni los riesgos de dichos permisos.
El escáner de permisos se basa en el analizador estático Slither. Agradecemos al equipo de Trail of Bits por crear esta herramienta de código abierto y todo el trabajo que han realizado por la seguridad en el sector DeFi.