Move言語のセキュリティ性について
Aptos Networkは、基礎となるプログラミングモデルとして、スマートコントラクト向けに設計された安全性の高い言語であるMoveを使用しています。万が一、Moveの実装自体に欠陥があった場合、エコシステム全体を危険にさらす可能性があります。
Aptos Labsでは、コミュニティと協力して、Moveを可能な限り安全なものにするための取り組みを進めています。例えば、正しいスマートコントラクトを記述するためのツール(Move Prover)の構築や、Move VMなどのランタイムのコアコンポーネントの正確性の維持への取り組みなどです。
この記事では、私たちがパートナーとともに、監査やバグバウンティ、および基礎となる実装のセキュリティハードニングを通じて取り組んでいるセキュリティの向上方法について説明します。
Moveのセキュリティは、いくつかの基本特性に基づいています。これらの特性は、Moveの実行エンジンが消費するバイトコードの観点から定義されており、ソース言語には依存しません:
- Type safety:各値はユニークかつ偽造不可能なタイプを持っています。例えば、`address` タイプの値を `signer` タイプのセキュリティに関連するトークンに変換することは不可能です。
- Modular encapsulation:ストレージ内のリソースは、各リソースを宣言しているモジュール内のコードからのみ操作できます。モジュール間で呼び出すことができるのは、可視性が一致する関数だけです。
- Ownership and lifetime:Moveの能力システムは、値のタイプに対応する能力が宣言されていない限り、値をコピー、ドロップ、保存、キーとして使用しないことを強制します。
- Reference safety:リファレンスは、それが指す値より維持されることはありません。ミュータブルなリファレンスは排他的に所有されるため、エイリアシングは不可能です。
Move VMの伝統的なアーキテクチャは、以下の図に見られるように、上記の特性の検証を (bytecode) ベリファイアに委ねます:
安全性を掘り下げる上で、以下のような疑問が生じます:
- bytecodeベリファイアは完全か?また、全てのプログラムに対して上記の性質を満たすことを保証しているか?上記の特性のいずれかに違反した場合に資産喪失の可能性を生じるため、非常に重要です。
- あるMove bytecodeプログラムが実行エンジンをクラッシュさせることができるか?複製されたステートマシンでは、全ノードが同じプログラムを実行するため、ネットワークを停止させることができます。
- あるプログラムが実行エンジンのリソース(メモリや時間)を枯渇させる可能性があるか?これを利用すると、DoS攻撃でネットワークの速度を落としたり、停止させたりすることができます。
具体的な取り組み
バグのないコードを開発するためには、適切なツールと組み合わされた規律正しいソフトウェアエンジニアリングの実践が必須となります。Aptosでは、強制的なコードレビュー、継続的なテストと統合という厳格なプロセスに、Rustエコシステムのベストプラクティスを組み合わせて行っています。これらの伝統的な側面に加えて、Moveの安全性を設計通りに維持するために、以下の測定方法を適用しています:
監査とコンサルティング
ブロックチェーンネットワークとしての信頼を確保するための最も有用な測定方法の1つが監査です。Aptos Labsでは、Move VMの監査についてCertik(レポート)およびHolburnと契約しています。その結果として複数の問題が見つかり、その1つはタイプの安全性のカテゴリにありました。
Aptos Labsは外部監査に加えて、bytecodeベリファイアに焦点を当てたコミュニティ監査の取り組みを主導し、組織しています。Mysten LabsやStarcoin、MoveBitやOtterSecなどの監査組織のエンジニアは、この取り組みのためにAptosエンジニアとチームを組んで監査に取り組んできました。この結果、監査中に作成された数十のドキュメントの参照が、こちらのスプレッドシートに収められています。この監査作業によって、Aptosのメインネット内でも複数の問題が発見され、対処されました。
そして、OtterSecとの連携についても触れておきます。 OtterSecチームは、手動でコードレビューを行い、あらゆるターゲットに対してファジング技術を開発し、Move VMとAptosフレームワークの両方のコードに複数の重大な問題を特定しました。また、Move VMに冗長性をもたらす防護ロジックの追加に関する取り組みも主導し、資金喪失の脆弱性を軽減するための継続的な設計作業に多大な影響を与えています。
バグバウンティ
Aptos Labsは、バグバウンティプログラムを実施しており、資産の損失につながる重大なバグには、最高100万ドルのバウンティを提供しています。クラッシュバグの場合は、最大10万ドル規模となります。バウンティプログラムでは、優秀なセキュリティ研究者らと連携して、バグの発見と修正をこれまでも行ってきました。その中には、クリティカルなバグもあれば、ファザーを使って発見したクラッシュバグもあります。
Aptos Labsは、コミットメント通りに多額のバグバウンティの支払いを行なってきました。また、Aptos Labsは、バウンティプログラムを通じて出会ったホワイトハットの専門知識を活用しながら、今後もこのコミュニティとの協力を継続していくつもりです。
ファジング
バウンティ制度の導入をきっかけに、ファジングにも注力するようになりました。Move VMのコードは、関連する箇所に`Arbitrary` Rust fuzzing traitを実装するように変更され、bytecodeモジュールを動的に生成し検証するための’cargo fuzz’を使用できるようになっています。これによって、各ファジングターゲットで複数の継続的なジョブが実行されています。
冗長性
セキュリティの確実性の向上に向けた方法の一つとして「冗長性」があります。Move VMにいわゆるパラノイドモードを追加し、実行時にタイプの安全性と上述の各ルールを適用しています。bytecodeベリファイアはコードがシステムに入る時点でその性質をチェックしていますが、パラノイドモードはバイトコード実行時に同様のチェックを再度実行します。パラノイドモードはMoveコミュニティ内で広く議論され、Aptosのエンジニアが設計をリードしてきました。詳細は、こちらのPR(最終版)およびこちらのPR(中間版)を参照してください。
今後の取り組み
Aptos Labsでは、Moveの安全性を可能な限り高めることにコミットしており、この分野に多大な投資をしてきました。ここでは、Aptos Labsとパートナーによって行われた監査やバグバウンティ、ファジング、およびハードニングに関する継続的な取り組みについて説明しました。今後も、バグバウンティプログラムを提供し、信頼できるセキュリティ監査組織と協力し、ファジング技術などのセキュリティハードニングツールの開発を推進し続けていく予定です。