An empirical analysis of vulnerability detection tools for solidity smart contracts
本論文は、新たに公開された手動で注釈付けられた2,182件のSolidityスマートコントラクトのデータセットを用いて、20の自動脆弱性検出ツールとLLMベースの手法を実証的に評価し、ツールの精度に顕著なばらつきがあることを明らかにするとともに、特定の3つのツールの組み合わせが1分未満で脆弱性の最大76.78%を検出できることを示している。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
ブロックチェーンの世界を、巨大で公開されたデジタル市場だと想像してください。この市場では、人々はスマートコントラクトを用いて自動的な取引を実行します。それは、正しい金額の硬貨を投入すると自動的にスナックを排出する自動販売機のようですが、その規模は数百万ドルに及びます。これらのコントラクトはSolidityと呼ばれる言語で記述されています。
問題は、自動販売機の論理にわずかなひび割れがあれば、泥棒が内部の全資金を盗んでしまう可能性があることです。これらのコントラクトは公開されており、かつしばしば巨額の現金を保持しているため、これらの「ひび割れ」(脆弱性)を見つけることが極めて重要です。
この論文は、本質的に、人々がこれらのひび割れを見つけるために使用するツールに対する巨大な成績表です。以下に、研究者たちが何を行ったかを簡単に説明します。
1. 「ゴールドスタンダード」テストセット
あなたが、埋もれた財宝を見つける金属探知機グループの性能をテストしたいと想像してください。単に金属探知機に財宝を見つけさせ、その言葉を信じるだけでは不十分です。財宝がどこに隠されているかを正確に知っているテストが必要です。
- 従来の方法: 以前の研究では、多くの場合、「財宝」の場所が他の金属探知機によって推測されたテストセットが使用されていました。これは、金属探知機に硬貨を見つけさせ、その後、2 台目の金属探知機にそれを確認させるようなものです。もし 1 台目が間違っていれば、2 台目はその間違いに同意する可能性があります。
- 新しい方法: この論文の研究者たちは、全く新しい巨大なテストセットを作成しました。彼らは2,182 件の実際のスマートコントラクトを採取し、3 人の人間の専門家に手動で一行ずつ読み込ませてバグを見つけさせました。そして、問題が発生している正確なコード行に印をつけました。これは、単に「このテスト全体が間違っている」と言うのではなく、赤ペンで正解と不正解を特定し、テスト用紙の束を採点する教師のようなものです。
2. 「金属探知機」(ツール)のテスト
研究者たちは、19 種類の異なる自動ツール(「金属探知機」)を採取し、彼らが作成した新しい人間による採点済みのテストセットに対して実行しました。また、**大規模言語モデル(LLM)**もテストしました。これは、数百万冊の本を読み込み、パターンに基づいてバグの場所を推測しようとする AI のようなものです。
結果は驚くべきものでした:
- 単一の英雄はいない: どの単一のツールもすべてのバグを見つけられたわけではありません。それは、骨折の診断は得意だが、感染症の発見は苦手な医師を持っているようなものです。
- 「算数」の問題: 一部のツールは、2+2 を計算して 5 と答えるような電卓の間違い(数学的エラー)を見つけるのが得意でしたが、他の種類のバグを見つけるには役に立ちませんでした。
- 「誤報」の問題: 多くのツールは疑い深すぎました。安全なコードに対して「危険!」と叫び、多くの誤報(False Positives)を生み出しました。これは開発者にとって使いにくく、すべてのアラートを手動で確認しなければならないため、非常に煩わしいものです。
- AI(ChatGPT)の驚き: AI は、単純な教科書的なバグの例(練習テストのようなもの)ではそれなりに良い成績を収めました。しかし、現実世界で複雑なコントラクトでテストしたところ、AI の性能は急落しました。これは、練習試験では満点を取った学生が、問題がより複雑で入り組んでいる本番試験で不合格になったようなものです。研究者たちは、AI がオンラインで非常に一般的なこれらの例を「暗記」していたと疑っています。
3. 「夢のチーム」解決策
どの単一のツールも完璧ではないため、研究者たちは問いかけました:もしそれらを組み合わせたらどうなるか?
彼らは、ツールを得意分野ごとにグループ化し、最も優れた 3 つを組み合わせて働くように選びました。
- Conkas(数学の専門家)
- Slither(迅速で多様な分野に強い一般職)
- Smartcheck(サービス不能攻撃の専門家)
結果: これら 3 つのツールだけを組み合わせて使用することで、既知のバグの76.78%を発見しました。さらに良いことに、これら 3 つを実行するのにかかった時間は平均して1 分未満でした。これは、互いの盲点をカバーし合う 3 人の専門家チームを持ち、単独の誰よりも速く問題を解決するようなものです。
4. 「一行ずつ」が重要な理由
研究者たちはまた、開発者が実際にどのようなバグレポートを望んでいるかについて開発者に尋ねました。
- ファイルレベル: 「このファイルにバグがあります。」(「家のどこかから水漏れしている」と言うだけで、どの部屋かは言わないような、あまりに曖昧なもの)
- 関数レベル: 「この関数にバグがあります。」(より良いが、まだ曖昧)
- 行レベル: 「42 行目にバグがあります。」(完璧)
調査により、開発者はパッチをどこに適用するかを正確に教えてくれるため、圧倒的に行レベルのレポートを好むことが示されました。この論文は、この特定の高精度の詳細レベルを持つ、同種の最大規模のデータセットを提供しています。
まとめ
- 問題: スマートコントラクトのバグを見つけるための自動ツールは、しばしば信頼性が低く、誤報に満ちており、実際のバグを見逃しています。
- 解決策: 研究者たちは、これらのツールを適切にテストするための、大規模で人間が検証した「解答用紙」を構築しました。
- 発見: AI ツールは現実世界の複雑さに対処するのが苦手で、すべてのことに役立つ単一のツールは存在しません。
- 解決策: 特定の 3 つの既存ツールの組み合わせが最も効果的で、最短時間で最も多くのバグを発見します。
- 贈り物: 彼らは、将来より良いツールを構築できるように、この大規模で人間が検証したデータセットを一般に公開しました。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。