許可スキャナーを使用すると、DeFi プロトコルまたは任意のスマート コントラクト システムをスキャンして、許可された機能を確認できます。これは、スマート コントラクト、特定された許可された機能、およびそれぞれの許可所有者のリストを返します。
許可された機能のプロトコルをスキャンするには、ターゲット プロトコルをチェーンと、展開されたすべてのコントラクトのアドレスのセットの観点から指定します。これらのコントラクトはすべて、パブリック ブロック エクスプローラーで検証する必要があります。サポートされているチェーンとエクスプローラーのリストはここで見つけることができます。次に、パーミッション スキャナはエクスプローラーからコントラクトのソース コードをダウンロードし、これらのパーミッションをスキャンし、それぞれのストレージ スロットからパーミッション所有者を読み取り、結果を出力ファイルに書き込みます。
solc
コンパイラ仮想 Python 環境を作成してアクティブ化し、必要な Python パッケージをインストールします。
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
.env.example
ファイルを.env
にコピーし、コントラクトがデプロイされているネットワークに応じて、RPC プロバイダーの URL と有効なブロック エクスプローラー API キーを入力します。次に変数をロードします
source .env
ファイル./contracts.json
にプロトコルのすべてのコントラクトのチェーン名とアドレスを入力します。サポートされているチェーンのリストはここでご覧ください。
次に、スキャナースクリプトを実行します。
python src/main.py
正しいsolc
コンパイラ バージョンがない場合は、スクリプトによって自動的にインストールされることに注意してください。
スクリプトは、スキャナーの結果を新しいファイル./permissions.json
に書き込みます。
分析が完了したら、次のコマンドを使用して Pyhton 環境を再度非アクティブ化できます。
source deactivate
コントラクトをフェッチしてスクリーニングするためのサポートされているチェーン
"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")
許可スキャナは、提供されたコントラクト アドレスのセットが完全であること、またはコントラクトが実際にプロトコルの一部であることを保証しません。
権限は、コントラクト関数でのonlyOwner
修飾子またはmsg.sender
チェックの使用によって識別されます。このアプローチでは取得できない他の形式のアクセス許可が存在する場合があります。
権限スキャナーは、権限所有者をコントラクト ストレージから直接読み取ろうとします。特に契約でアップグレード可能パターンが使用されている場合、これは失敗する可能性があるため、手動で検証する必要があります。
権限スキャナーは、権限とその所有者を特定するだけで、そのような権限の影響やリスクは評価しません。
許可スキャナーは、Slither 静的アナライザーに基づいて構築されています。このオープンソース ツールを作成した Trail of Bits チームと、DeFi セクターのセキュリティのために行ったすべての作業に感謝します。