
Securify 2.0は、Ethereum FoundationとChainsecurityによってサポートされるEthereum Smart Contractsのセキュリティスキャナーです。 Securifyの背後にあるコアリサーチは、ETHチューリッヒの安全で信頼性の高いインテリジェントなシステムラボで実施されました。
これは、人気のあるSecurify Securify Scannerの後継者です(古いバージョンはこちらで見つけることができます)。
コンテナを構築するには:
sudo docker build -t securify .
コンテナを実行するには:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
注: 0.5.12とは異なるSolidityバージョンでDocker経由でコードを実行するには、バージョンを指すために、 Dockerfileの上部にある可変ARG SOLC=0.5.12を変更する必要があります。正しいバージョンを使用して構築した後、エラーが発生しないでください。
次の手順では、Pythonがすでにインストールされていると想定しています。それに加えて、Securifyはsolc 、 souffle 、 graphvizシステムにインストールする必要があります。
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
ここで指示に従ってください:https://soufle-lang.github.io/download.html
不安定なバージョンはいつでも壊れる可能性があるため、選択しないでください。
sudo apt install graphviz
前提条件がインストールされた後、このプロジェクトでスクリプトを実行するPython仮想環境を設定できます。
プロジェクトのルートフォルダーで、次のコマンドを実行して仮想環境を設定およびアクティブにします。
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
pythonバージョンが実際に3.7あることを確認します:
python --version
LD_LIBRARY_PATH設定:
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
最後に、 <securify_root>フォルダーから次のコマンドを実行して、プロジェクトの依存関係をインストールします。
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
これで、Securifyフレームワークの使用を開始する準備が整いました。
覚えておいてください:フレームワークのスクリプトを実行する前に、次のコマンドで仮想環境をアクティブにする必要があります。
source venv/bin/activate
現在、Securify2は、輸入明細書を含まない契約のみ、つまり輸入明細書を含まない契約のみをサポートしています。
ローカル契約を分析するには、単に実行されます。
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
または、Etherscan.io APIを使用してブロックチェーンからダウンロードしてください。
securify <contract_address> --from-blockchain [--key <key-file>]
この機能を使用するには、etherscan.ioのapi-keyが必要であることに注意してください。
特定の重大度レベルに対する契約を分析するには、実行されます。
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
利用可能なすべてのパターンを実行するには:
securify --list
| id | パターン名 | 重大度 | スリザーID | SWC ID | コメント |
|---|---|---|---|---|---|
| 1 | Todamount | 致命的 | - | SWC-114 | |
| 2 | トッドレシーバー | 致命的 | - | SWC-114 | |
| 3 | トッドトランスファー | 致命的 | - | SWC-114 | |
| 4 | 無制限の書き込み | 致命的 | - | SWC-124 | |
| 5 | RightToleftOverRide | 高い | rtlo | SWC-130 | |
| 6 | Shadowedstatevariable | 高い | shadowing-state 、 shadowing-abstract | SWC-119 | |
| 7 | 無制限のselfdestruct | 高い | suicidal | SWC-106 | |
| 8 | UnInitializedStateVariable | 高い | uninitialized-state | SWC-109 | |
| 9 | UnInitializedStorage | 高い | uninitialized-storage | SWC-109 | |
| 10 | 無制限のdelegatecall | 高い | controlled-delegatecall | SWC-112 | |
| 11 | ダオ | 高い | reentrancy-eth | SWC-107 | |
| 12 | ERC20インターフェイス | 中くらい | erc20-interface | - | |
| 13 | ERC721INTERFACE | 中くらい | erc721-interface | - | |
| 14 | 不平等 | 中くらい | incorrect-equality | SWC-132 | |
| 15 | ロックされています | 中くらい | locked-ether | - | |
| 16 | ReentrancyNoeth | 中くらい | reentrancy-no-eth | SWC-107 | |
| 17 | txorigin | 中くらい | tx-origin | SWC-115 | |
| 18 | unhandledexception | 中くらい | unchecked-lowlevel | - | |
| 19 | 無制限のフロー | 中くらい | unchecked-send | SWC-105 | |
| 20 | uninitializedlocal | 中くらい | uninitialized-local | SWC-109 | |
| 21 | UnsuseRreturn | 中くらい | unused-return | SWC-104 | |
| 22 | Shadowedbuiltin | 低い | shadowing-builtin | - | |
| 23 | Shadowedlocalvariable | 低い | shadowing-local | - | |
| 24 | calltodefaultconstructor? | 低い | void-cst | - | |
| 25 | callinloop | 低い | calls-loop | SWC-104 | |
| 26 | Re EntrancyBenign | 低い | reentrancy-benign | SWC-107 | |
| 27 | タイムスタンプ | 低い | timestamp | SWC-116 | |
| 28 | 組み立て | 情報 | assembly | - | |
| 29 | ERC20インデックス | 情報 | erc20-indexed | - | |
| 30 | ローレベルコール | 情報 | low-level-calls | - | |
| 31 | namingconvention | 情報 | naming-convention | - | |
| 32 | ソルクバージョン | 情報 | solc-version | SWC-103 | |
| 33 | 使用されていないStatevariable | 情報 | unused-state | - | |
| 34 | ToomanyDigits | 情報 | too-many-digits | - | |
| 35 | constablestates | 情報 | constable-states | - | |
| 36 | 外部機能 | 情報 | external-function | - | |
| 37 | StateVariablesDefaultVisibility | 情報 | - | SWC-108 |
次のスリザーパターンは、Solidityコンパイラ(Ver。0.5.8)によってチェックされているため、Securifyによってチェックされません。
constant-functiondeprecated-standardspragma次のSWCの脆弱性は、Pragma> = 5.8との堅実さ契約には適用されないため、Securifyによってチェックされません。