Back to Blog

セキュリティチェック:EVM互換チェーンは信頼に足るか?

Code Auditing
January 4, 2024
6 min read

2023年11月、BlockSecのCEOであるZhou Yajin教授は、DRK Labが主催する初のWeb3 Scholars Summitに招待され、登壇しました。会議の中でZhou教授は、EVM(Ethereum Virtual Machine)の脆弱性検知におけるBlockSecの取り組みと成果を共有しました。さらに、EVM互換チェーンのセキュリティを確保するために特別に設計された、BlockSecの自動化された差分ファジング(Differential Fuzzing)ツールを紹介しました。本稿では、同スピーチの内容を要約して紹介します。

はじめに

Defillamaのデータ統計によると、現在238のL1およびL2パブリックチェーンが存在し、そのうち144がEVM互換です。しかし、ここで一つの疑問が生じます。「これらのEVM互換チェーンは、実装時にセキュリティ上の問題を抱えていないか?」という点です。我々の調査の結果、答えはイエスでした。この懸念に対応するため、BlockSecは自動化された差分ファジングセキュリティツールを立ち上げました。EVM互換チェーンの裏側に隠された真実を探る旅に、私たちと共に出かけましょう。

仮想マシンの脆弱性

図1:イーサリアム仮想マシン(EVM)のワークフロー図
図1:イーサリアム仮想マシン(EVM)のワークフロー図

イーサリアム仮想マシン(EVM)を例にとると、これは仮想ROM、プログラムカウンタ、スタック、メモリ、ワールドステート(永続的)を含むスタックベースのアーキテクチャを採用しています。

仮想マシンは、スマートコントラクトのコンパイル済みバイナリコードを解釈し、実行するエンジンとして機能します。多くのブロックチェーンプラットフォームのコアコンポーネントは仮想マシンであり、中でもイーサリアム仮想マシン(EVM)は特に有名です。したがって、仮想マシンはスマートコントラクトの実行、トランザクションの処理、そしてブロックチェーンの完全性を維持する上で重要な役割を果たします。

私たちはEVM自体もプログラマーによって書かれたソフトウェアプログラムであることを知っています。しかし、EVMに問題がないことをどうやって保証すればよいのでしょうか?結局のところ、人間が書いたコードであれば、どんなものにもバグは存在する可能性があります。

そして、一度EVMにバグが発生すれば、それはブロックチェーン上のエコシステムに破滅的な結果をもたらすことになります。実際、EVMは過去に多くの深刻な脆弱性に遭遇してきました。

一例として、2020年にはプリコンパイル済みコントラクトに起因する脆弱性インシデント(CVE-2020-26241)[1]がありました。Geth(0x00...04)におけるdataCopyプリコンパイルコントラクトの呼び出し時、浅いコピー(shallow copy)が実行され、大量のデータをコピーする際にデータそのものではなくポインタのみがコピーされてしまうという問題が発生しました。これにより、悪意のあるスマートコントラクトが本来変更されるべきではないデータを改ざんできるようになり、仮想マシンのバージョンが異なると同じスマートコントラクトを実行してもデータの不整合が生じる事態となりました。もう一つの例は2021年、一部のEVM互換チェーンがイーサリアムと一緒にアップグレードを行わなかった際に発生しました。旧バージョンのGethには、プリコンパイルコントラクト呼び出し時の入出力データのメモリ領域が重複するという脆弱性(CVE-2021-39137)[2]が存在しました。攻撃者はこの脆弱性を悪用し、チェーンのフォークを引き起こしました。

BlockSecの対策

EVMの脆弱性をタイムリーに発見するにはどうすればよいのでしょうか?また、どのような課題があるのでしょうか。

  1. 第一に、仮想マシンの設計が複雑であるため、その動作ロジックを完全に理解できるツールを見つけるのは困難です。各専門分野には特化が必要です。多くの開発者は、その動作ロジックを理解し、効果的な予防策を講じるのに十分な労力を割くことができないかもしれません。

  2. さらに、多くの新しいL1/L2パブリックチェーンはEVM仮想マシンをカスタマイズしており、それが潜在的に新しいセキュリティ上の問題を引き起こす可能性があります。

明らかに、マニュアルでの監査だけでEVM仮想マシンの問題を特定するのは困難です。

適応し、それに応答するのです!これらの課題に直面し、BlockSecはこれらの問題に正面から取り組むための自動化システムを開発しました!

差分ファジング

BlockSecでは、専門家チームが「差分ファジング」と呼ばれる巧妙なアプローチを採用しています。異なるバージョンの仮想マシン上で同一のテストケースを実行し、出力結果を比較することで、潜在的な脆弱性や不整合を発見します。この手法により、従来のテスト手法では見過ごされがちな些細な違いを効果的に特定でき、システムの全体的なセキュリティを強化することが可能です。

図2:差分ファジングワークフロー
図2:差分ファジングワークフロー

基本的な動作原理:

差分ファジングを行うには、比較対象となるテストケースとして同一の入力を用意する必要があります。これらのテストケースを差分ファジングエンジンに入力します。異なるバージョンの仮想マシンで同じテストケースを実行した結果を比較することで、潜在的な問題を特定します。

具体的な実行手順:

差分ファジングのテストケースは、トランザクションメタデータとプリステート(事前の状態)の2つのパーツから構成される必要があります。しかし、どのようにしてこれらのトランザクションを生成するのでしょうか?我々にはこの課題に取り組むための2つのアプローチがあります。

  1. 過去のトランザクションの再利用:ブロックチェーン上で実際に発生した過去のトランザクションを取得し、差分ファジングエンジン内の異なるバージョンの仮想マシンでそれらを実行します。しかし、この方法だけに頼るのには限界があります。過去のトランザクションは「正常」すぎる傾向があり、セキュリティテストでは極端なケース、つまり例外的なシナリオを見つける必要があるからです。そこで、2つ目のアプローチを考案しました。
  2. カバレッジガイド付きファジング:通常は見られないバイトコードや、過去に存在しなかったトランザクションを一から生成し、トランザクションやスマートコントラクトのコードを変異させて仮想マシンに入力します。これにより、様々な側面からテストケースの妥当性と網羅性を確保します。

これらのトランザクションが生成されると、それらが差分ファジングエンジンに投入され、結果が比較されます。

結果の比較は単なる数値的な比較ではありません。仮想マシン内の永続的ストレージと非永続的ストレージの両方におけるデータの一貫性を包括的に考慮します。この記事では、これ以上の詳細な説明は省略します。

事例研究

図3:Aurora VMにおけるプリコンパイルコントラクト「ModExp」の問題例
図3:Aurora VMにおけるプリコンパイルコントラクト「ModExp」の問題例

差分ファジングを通じてAurora VMで発見した仮想マシンの脆弱性の事例を一つ共有します。具体的には、「ModExp」プリコンパイル済みスマートコントラクトに関する問題です。

数xのy乗のべき乗剰余を計算する際、この操作には計算リソースが必要であることを私たちは知っています。正しい実装では、べき乗剰余計算は複数の反復を伴うため、ガス計算にはその反復回数が考慮されます。しかし、ガス計算で問題が発生する特定のシナリオがあります。それは指数yが0、つまり0次のべき乗操作の場合です。この場合、反復回数がゼロになり、ガス値が極めて小さくなります。しかし実際には、計算には依然としてリソースが必要です。

結び

現在、BlockSecが立ち上げた差分ファジングツールは、rbpfubpfAurora-engineneon-evmMoonbeamrevm、EvmOS、fevmPolygon-zkevmなど、様々なブロックチェーン仮想マシンの環境での実行をサポートしており、順次対応範囲を拡大しています。

このツールを使用して、私たちは14の新しい脆弱性を発見し、2つのCVE(CVE-2021–46102およびCVE-2022–23066)を申請し、130万ドル以上のバグ報奨金を受け取りました。

現在、BlockSecが提供する包括的なEVMチェーンセキュリティソリューション(監査サービス+差分ファジングツール)は、EOSおよびFileCoinに採用・認識されており、彼らのエコシステムのセキュリティと健全な発展に貢献しています。

参考資料

[1] Shallow copy in the 0x4 precompile could lead to EVM memory corruption

[2] RETURNDATA corruption via datacopy

BlockSecについて

**BlockSec**は、世界的に卓越したセキュリティ専門家グループによって2021年に設立された先駆的なブロックチェーンセキュリティ企業です。同社は、新興の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

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit