Nightshade が Midnight の Compact コントラクトにセキュリティ分析をもたらす
開発者 Dickson Wu が、意図的に仕込んだバグと公開されている 300 件のコントラクトを用いて、このオープンソースツールを検証した
By SongMarketCap
Nightshade は、Midnight 上でアプリケーションを構築する際に用いられるプログラミング言語 Compact で記述されたスマートコントラクトのレビューを開発者が行うのを支援するために設計された静的解析ツールです。
このツールは 10 月 29 日に Midnight Forum で Wu によって紹介され、96 のルールに照らしてソースコードを検査し、精査が必要となり得るパターンにフラグを立てます。検出結果には該当するコード行が特定され、開発者が問題を調査するのに役立つ情報が含まれます。
Nightshade は Compact コードのセキュリティパターンをチェック
静的解析は、コントラクトを実行することなくソースコードを検査する手法です。Nightshade はこの手法を用いて、プライバシーや認可などコントラクトのロジックの各部分に関わるパターンを探します。
Wu が挙げた一例は、認可チェックに用いられた後に、プライベートなシークレットが台帳に公開されてしまうというものです。開発者は、そのシークレットを用いてユーザーの権限を確認しつつ、基となる値自体は非公開のままにする意図かもしれません。しかし、その後に公開してしまうと、本来保護されるべき情報が露出する可能性があります。
そのほか、署名検証の結果が破棄されているパターンや、witness の値を本人性の証明として扱っているケースも検出します。また、チェーンの時刻に基づく制約なしに呼び出し元が与えた時刻を用いるパターンや、集合への所属が検証されていない Merkle 証明といった事例にもフラグを立てます。
各検出結果について、Nightshade は該当するソース行、データがたどった経路、推奨される修正案を提示すると Wu は述べています。これにより、値がコントラクト内をどのように流れ、どこで問題の挙動が発生しているのかを開発者が検証し始めるための手がかりが得られます。
なお、警告が出たからといって、それだけでコントラクトが悪用された、あるいは情報が流出したと断定できるわけではありません。同様に、解析が完了しても、それがコントラクトの安全性を保証するものではありません。
Dickson Wu が Nightshade のテスト結果を共有
Wu は、意図的にバグを仕込んだテストケースに対して Nightshade を評価しました。その結果、266 件の陽性ケースのうち 263 件を検出したと報告しています。
開発者は、それらの修正版についてもテストしました。Nightshade は、242 件の修正版のうち 240 件では警告を出さず、残る 2 件には検出結果を示しました。これらの結果は、その評価で用いたテストケースを記述したものであり、あらゆるセキュリティ問題に対する検出率を示すものではありません。
Wu はその後、144 のリポジトリからの公開 Compact コントラクト 300 件に対してこのツールを実行しました。実施中のクラッシュは報告されず、完全な解析を受けたコントラクトは 258 件だったとしています。
スキャンが完了したことと、問題が見つからなかったことは別の結果であるため、この区別は重要です。Wu によれば、完全な解析に至らなかったコントラクトはクリーンとして扱うのではなく、不完了として報告されました。
開発者は、評価手法とテスト件数もツールと併せて公開し、報告された結果がどのように得られたのかを他の人が検証できるようにしました。
[NEWSBREAK]
オフライン解析と開発者向け統合
Wu によれば、Nightshade はローカルで動作し、ソースコードをスキャンするためにインターネット接続や Compact コンパイラを必要としません。このツールは Compact コンパイラのバージョン 0.28 から 0.35 をサポートしています。
開発者は、検出結果をテキストとして閲覧することも、JSON や SARIF 形式でエクスポートすることもできます。提案されたコード変更のレビュー中に結果を表示する GitHub Action も用意されており、開発者が既に用いている可能性のある更新の検証ワークフローの中に結果を組み込めます。
このツールは Apache 2.0 オープンソースライセンスの下で公開されています。Wu はバージョン 0.1.1 を紹介し、開発者に対してフィードバックの共有、誤検知の報告、さらなるルールの提案を呼びかけました。