これはSecurifyのバージョンであり、非推奨であり、サポートされなくなります。 Securify v2.0を使用してください。

Securifyは、Ethereum FoundationとChainsecurityがサポートするEthereum Smart Contractsのセキュリティスキャナーです。 Securifyの背後にあるコアリサーチは、Ethチューリッヒのアイスセンターで実施されました。

スマートコントラクトで一般的に見られるセキュリティパターンの広範なリストを備えています。
このプロジェクトは、Ethereum Security Communityのすべてからの貢献を歓迎するオープンなプラットフォームであることを意図しています。新しいパターンを提案し、テストのためにボランティアをする、または新しいパターンの開発に貢献するために、私たちの不一致グループを通して連絡してください。
souffleバイナリなしでクラッシュします。執筆時点では、SuffléはWindowsで利用できないため、SecurifyもWindowsで実行されるとは期待していません。solcバイナリが必要です。 Securifyは、指定されたファイルに適切なバージョンがインストールされていると仮定します。 solcはこちらから入手できます。構築するには:
./gradlew jar堅牢性ファイルでSecurifyを実行するには:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solpysolc.pyスクリプト(py-solcが必要です)によって提供される逆コンパイル出力でSecurifyを実行するには:
java -jar build/libs/securify.jar -co out.jsonいくつかのEVMバイナリでSecurifyを実行するには( solcによって作成された例):
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexオプションの完全なリストを表示するには:
java -jar build/libs/securify.jar -hテストを実行するには(junit4を使用):
./gradlew test Pythonラッパーは、 solcとtruffleに対処するのに役立ちます。要件はrequastion.txtファイルにあります。 DockerFileは、このラッパーを使用するようにローカル環境をセットアップするための参照として使用できます。
インストールは、Debianデリバティブ、またはSouffléによってサポートされているその他のプラットフォームで十分に簡単でなければなりません。
Souffléを必要としない簡単なデモをするには、Dockerを使用できます。
Docker画像を作成します:
docker build . -t securify小さな例でSecurifyを実行します:
docker run securifyマウント*.solボリュームを指定することで分析されたファイルを変更できます。
docker run -v $( pwd ) /folder_with_solidity_files:/project securify --truffleフラグを追加すると、Securifyが依存関係が既にインストールされているトリュフプロジェクトを実行できるようにする必要があります(必要に応じてnpm installすることができます)。このフラグがなければ、プロジェクトはsolcを使用してコンパイルされます。 -hを追加して、オプションの完全なリストを取得します。特に、ユーザーがトリュフから編集情報を受け取りたい場合、 -vフラグを追加する必要があります。
JSON出力を受信したい場合、Dockerは、きれいな出力を抑制し、代わりにJSONを返す--jsonフラグをサポートします。進捗情報が表示されない場合は、 -qフラグを追加してください。したがって、純粋なJSON出力をもたらします。一致する線のインデックスは0ベースです。つまり、ラインiと一致するとi+1回の行が一致することを意味します。特に、最初の行のインデックスは0です。
基本的なエンドツーエンドテストは、test.pyファイルを介して実行できます。
python3 test . py要件は、pipenvを使用してインストールできます。
pipenv installまたはpipの使用:
pip install -r requirements.txtこれらのテストは、Securifyによって与えられた現在のJSON出力を過去の出力と比較し、2つの間に違いを報告します。
次の.travis.ymlプロジェクトに追加して、新しいコミットでSecurifyを実行できます。
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
これにより、Securifyは依存関係が既にインストールされているトリュフプロジェクトを実行できるようになります(必要に応じてnpm installすることができます)。
出力は大まかにClangスタイルに従います。警告と脆弱性のみが報告されています。コンプライアンス情報も取得したい場合は、dockerの--jsonフラグ、またはJava実行可能ファイルの-coフラグを使用して、JSON形式ですべての分析情報を取得してください。
Convributing.mdを参照してください。
私たちの不一致に参加して、他のユーザーと話し合いましょう。
SecurifyはChainsecurityでの監査を支援するために定期的に使用されますが、以下を含むバグがまだあります。
computeBranchesが再帰的であるため、StackoverFlowerrorの例外がスローされます。ほとんどの場合、 javaの-Xssオプションを使用してスタックサイズを増やすだけで十分です。たとえば、 java -Xss1G -jar ...solcを介してバイナリを取得できない)はサポートされていませんSecurifie Securify Stately Smart ContractのEVMコードを静的に分析して、契約に関する重要なセマンティック情報(コントロールフローおよびデータフローファクトを含む)を推測します。このステップは、スケーラブルなDatalogソルバーであるSouffléを使用して完全に自動化されています。次に、Securifyは推測された事実をチェックして、セキュリティ違反を発見したり、セキュリティ関連の指示のコンプライアンスを証明したりします。
Securifyスキャナーの背後にある完全な技術的詳細は、研究論文で入手できます。