2023年11月、BlockSecのCEOであるZhou Yajin教授は、DRK Labが主催する初のWeb3 Scholars Summitに招待されました。カンファレンス中、Zhou教授はEVM(Ethereum Virtual Machine)の脆弱性検出におけるBlockSecの取り組みと成果を共有しました。また、EVM互換チェーンのセキュリティを確保するために特別に設計されたBlockSecの自動差分ファジングツールも紹介しました。本記事では、講演内容を要約します。
はじめに
Defillamaのデータ統計によると、現在238のL1およびL2パブリックチェーンがあり、そのうち144はEVM互換です。しかし、ここで疑問が生じます。これらのEVM互換チェーンは、実装中にセキュリティ上の問題がないのでしょうか?私たちの調査によると、その答えは肯定的です。この懸念に対応するため、BlockSecは自動差分ファジングセキュリティツールを立ち上げました。これらのEVM互換チェーンの背後にある真実を探求する旅に、私たちと一緒に乗り出しましょう。
仮想マシンの脆弱性

Ethereum Virtual Machine(EVM)を例にとると、仮想ROM、プログラムカウンタ、スタック、メモリ、ワールドステート(永続的)を含むスタックベースのアーキテクチャを採用しています。
仮想マシンは、スマートコントラクトのコンパイル済みバイナリコードを解釈および実行するエンジンとして機能します。多くのブロックチェーンプラットフォームの中核コンポーネントは仮想マシンであり、Ethereum Virtual Machine(EVM)は特に注目に値します。したがって、仮想マシンはスマートコントラクトの実行、トランザクションの処理、およびブロックチェーンの整合性の確保において重要な役割を果たします。
EVM自体もプログラマーによって書かれたプログラムであることを私たちは知っています。しかし、EVMに問題がないことをどのように保証できるのでしょうか?結局のところ、人間が書いたコードにはバグが存在する可能性があります。
そして、EVMにバグが発生すると、ブロックチェーン上のエコシステムに壊滅的な結果をもたらします。実際、EVMは過去に多くの深刻な脆弱性に遭遇しています。
例えば、2020年には、プリコンパイルされたコントラクト(つまり、CVE-2020-26241)[1]によって引き起こされた脆弱性インシデントが発生しました。Geth(0x00...04)プロトコル内のdataCopyプリコンパイルコントラクトは、呼び出し中に浅いコピーを実行し、大量のデータをコピーする際に完全なデータではなくポインタのみをコピーしました。これにより、悪意のあるスマートコントラクトが変更されるべきではないデータを変更できるようになり、異なるバージョンの仮想マシンが同じスマートコントラクトを実行した際にデータの一貫性が失われました。別の例は2021年に発生し、一部のEVM互換チェーンはEthereumと同期してアップグレードされていませんでした。Gethの古いバージョンでは、プリコンパイルされたコントラクトの呼び出しにおける入力および出力データのメモリ領域が重複する脆弱性(CVE-2021-39137)[2]がありました。攻撃者はこの脆弱性を悪用し、チェーンフォークが発生しました。
BlockSecの対策
EVMの脆弱性をタイムリーに発見するにはどうすればよいでしょうか?課題は何ですか?
-
まず、仮想マシンの複雑な設計のため、その運用ロジックを完全に理解できるツールを見つけるのは困難です。各専門分野は専門化を必要とし、多くの開発者はその運用ロジックを理解し、効果的な予防措置を講じるために十分な労力を費やすことができないかもしれません。
-
さらに、多くのL1/L2の新しいパブリックチェーンはEVM仮想マシンをカスタマイズしており、これにより新たなセキュリティ問題が生じる可能性があります。
明らかに、EVM仮想マシン上のこれらの問題を特定するために手動監査のみに頼るのは困難です。
適応し、それに応じて対応してください!これらの課題に鑑み、BlockSecはこれらの問題に直接対処するための自動システムを開発しました!
差分ファジング
BlockSecでは、専門家チームが差分ファジングと呼ばれる巧妙なアプローチを採用しています。異なるバージョンの仮想マシンで同じテストケースを実行し、出力結果を比較することで、潜在的な脆弱性や不整合を発見できます。この方法により、従来のテスト方法では見落とされがちな微妙な違いを効果的に特定し、システムの全体的なセキュリティを向上させることができます。

基本的な動作原理:
差分ファジングを実行するには、同一の入力をテストケースとして準備する必要があります。これらのテストケースは、差分ファジングエンジンに供給されます。異なるバージョンの仮想マシンで同じテストケースを実行した結果を比較することで、潜在的な問題を特定できます。
具体的な実装手順:
差分ファジングのテストケースは、トランザクションメタデータとプリステートの2つの部分で構成される必要があります。しかし、これらのトランザクションをどのように生成するのでしょうか?この課題に対処するために、2つのアプローチがあります。
- 過去のトランザクションを再利用する:ブロックチェーン上で発生した過去のトランザクションを取得し、差分ファジングエンジンの異なるバージョンの仮想マシンで実行できます。しかし、この方法だけに頼るには限界があります。過去のトランザクションは「普通」すぎる傾向がありますが、セキュリティテストではコーナーケース、つまり例外的なシナリオを発見する必要があります。そこで、2番目のアプローチを考案しました。
- カバレッジ誘導ファジング:これまでにないバイトコードと過去に見たことのないトランザクションをゼロから生成し、トランザクションとスマートコントラクトコードをミューテートして仮想マシンに入力します。さまざまな側面からテストケースの有効性と包括性を保証します。
これらのトランザクションが生成されると、差分ファジングエンジンに供給され、結果が比較されます。
結果の比較は、単純な数値比較にとどまらず、仮想マシンの永続的および非永続的なストレージの両方におけるデータの一貫性を包括的に考慮します。本記事ではこれ以上詳しく説明しません。
ケーススタディ

差分ファジングを通じてAurora VMで発見した仮想マシン脆弱性のケースを共有したいと思います。具体的には、ModExpプリコンパイルされたスマートコントラクトの問題に関連しています。
数 x を y 乗したモジュラー指数を計算する際、この操作には計算リソースが必要であることを認識しています。正しい実装では、モジュラー指数は複数の反復を含むため、ガス計算は反復回数を考慮します。しかし、ガス計算に問題が発生する特定のシナリオがあります。それは、指数 y が 0 の場合、つまりゼロ次べき乗演算の場合です。この場合、反復回数はゼロになり、非常に小さいガス値になります。しかし実際には、計算にはリソースが必要です。
結論
現在、BlockSecが立ち上げた差分ファジングツールは、rbpf、ubpf、Aurora-engine、neon-evm、Moonbeam、revm、EvmOS、fevm、Polygon-zkevmなど、さまざまなブロックチェーン仮想マシンの環境での実行をサポートしており、継続的に拡張しています。
このツールにより、14件の新しい脆弱性を発見し、2件のCVE(CVE-2021–46102およびCVE-2022–23066)を申請し、130万ドル以上のバグバウンティを獲得しました。
現在、BlockSecが提供する包括的なEVMチェーンセキュリティソリューション(監査サービス+差分ファジングツール)は、EOSおよびFileCoinに認識され、採用されており、それらのエコシステムのセキュリティと健全な発展に貢献します。
参照
[1] 0x4プリコンパイルにおける浅いコピーはEVMメモリ破損につながる可能性がある
BlockSecについて
**BlockSec**は、2021年に世界的に著名なセキュリティ専門家グループによって設立された先駆的なブロックチェーンセキュリティ企業です。同社は、Web3の大量採用を促進するために、新興のWeb3世界のセキュリティとユーザビリティの向上に取り組んでいます。そのために、BlockSecはスマートコントラクトおよびEVMチェーンのセキュリティ監査サービス、セキュリティ開発および脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡および調査のためのMetaSleuthプラットフォーム、そしてWeb3ビルダーが暗号世界を効率的にサーフィンするためのMetaDock拡張機能を提供しています。
現在までに、同社はMetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300社以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの著名な投資家から2回の資金調達ラウンドで数千万米ドルを受け取っています。
✉️ビジネスコンサルティング:[email protected]
BlockSecのTwitterアカウント:https://twitter.com/BlockSecTeam
PhalconのTwitterアカウント:https://twitter.com/Phalcon_xyz



