Move言語の引用に関するセキュリティ脆弱性:整数オーバーフローのリスクと防止策の提案

robot
概要作成中

Move言語で参照されるセキュリティ脆弱性の詳細な分析

最近、私たちはAptos Moveevmのデプス研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性の発生過程は非常に興味深いものであり、以下で詳しく分析し、関連するMove言語の背景知識を紹介します。本稿の説明を通じて、読者はMove言語についてより深く理解できると信じています。

Move言語はバイトコードを実行する前にコードユニットの検証を行い、このプロセスは4つのステップに分かれています。本記事で議論する脆弱性はreference_safetyステップに現れます。

reference_safetyモジュールは、プロセス主体の参照安全性を検証するための転送関数を定義しています。主に、ダングリング参照の存在、可変参照のアクセスの安全性、グローバルストレージの参照アクセスの安全性などの問題をチェックします。

検証プロセスは、参照安全検証エントリ関数から始まり、この関数はanalyze_functionを呼び出します。analyze_function内では、各基本ブロックが検証されます。基本ブロックは、エントリとエグジットを除いて分岐命令がないコードのシーケンスです。

Move言語はバイトコードを遍歴し、すべての分岐命令とループ命令のシーケンスを検索することで基本ブロックを識別します。典型的なMove IRコードの基本ブロックの例には、BrTrue、Branch、およびRet命令によって決定される3つの基本ブロックが含まれる可能性があります。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

Move言語は2種類の参照をサポートしています:不変参照(&)と可変参照(&mut)。不変参照はデータの読み取りに使用され、可変参照はデータの変更に使用されます。この設計はコードの安全性を維持し、読み取りモジュールを識別するのに役立ちます。

引用安全検証の主要プロセスには、関数内の基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断することが含まれます。このプロセスでは、borrow graphとlocalsを含むAbstractState構造体を使用して、関数内の参照の安全性を確保します。

検証プロセスでは基本ブロックコードが実行され、ポストステートが生成され、プレステートとポストステートが統合されてブロックステートが更新され、そのブロックの後置条件が後続のブロックに伝播されます。このプロセスはV8ターボファンのSea of Nodesの考え方に似ています。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

バグはjoin_関数内に発生します。パラメータの長さとローカル変数の長さの合計が256を超えると、localがu8型であるため、整数オーバーフローが発生します。Moveにはlocalsの数を検証するプロセスがありますが、check boundsモジュールではlocalsのみが検証され、パラメータのlengthは含まれていません。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

この整数オーバーフローの脆弱性はDoS攻撃を引き起こす可能性があります。ループコードブロックを作成し、オーバーフローを利用してブロックのstateを変更することで、新しいlocals mapが以前とは異なるものになります。execute_block関数を再度実行する際に、指示がアクセスする必要があるインデックスが新しいAbstractState locals mapに存在しない場合、DoSを引き起こすことになります。

私たちは、reference safetyモジュールにおいて、MoveLoc/CopyLoc/FreeRefオペレーションコードがこの目標を達成できることを発見しました。copy_loc関数を例に取ると、LocalIndexが存在しない場合、panicが発生し、ノード全体がクラッシュします。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

この脆弱性を検証するために、PoCを作成しました。このPoCのコードブロックには、無条件分岐命令が含まれており、最後の命令が実行されるたびに最初の命令に戻るため、このコードブロックはexecute_blockとjoin関数を何度も呼び出します。

! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました

適切なパラメータを設定することで、新しいローカルマップの長さを8にすることができます。execute_block関数を2回目に実行する際、ローカルの長さが不足しているため、パニックが発生します。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

この脆弱性は、Moveのようにセキュリティを重視した言語でさえ脆弱性が存在する可能性があることを私たちに警告しています。私たちは、Move言語の設計者に対して、実行時にさらなるチェックコードを追加することを推奨します。これにより、予期しない状況を防ぐことができます。現在、Move言語は主にverifyフェーズでセキュリティチェックを行っていますが、これでは不十分な可能性があります。一度検証がバイパスされると、実行フェーズで十分なセキュリティ強化がない場合、より深刻な問題を引き起こす可能性があります。

Move言語のセキュリティ研究のリーダーとして、我々はMoveのセキュリティ問題について引き続き深く研究し、将来的にさらなる発見を共有していきます。

原文表示
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • 報酬
  • 8
  • 共有
コメント
0/400
AirdropHunterXiaovip
· 19分前
洞を掘る掘る、また良い仕事ができるようになった
原文表示返信0
ChainSherlockGirlvip
· 8時間前
ハ!また一つのオンチェーンセキュリティ脆弱性劇場、今回はMoveが演じる整数オーバーフロー大劇です〜私の個人的な考察によると、大口投資家がまた機会を利用して空売りするつもりでしょう。
原文表示返信0
SerumSquirtervip
· 14時間前
また一つのセキュリティ問題が終了しました
原文表示返信0
rugged_againvip
· 14時間前
また出てきた 逃げた逃げた
原文表示返信0
LiquidatedDreamsvip
· 14時間前
誰がまだmoveを遊んでいるの?
原文表示返信0
DarkPoolWatchervip
· 14時間前
aptosはやはり信頼できない 一堆の脆弱性
原文表示返信0
MondayYoloFridayCryvip
· 14時間前
また黒が動いたのか? ちぇっちぇっちぇ
原文表示返信0
PretendingSeriousvip
· 14時間前
この穴はあまりにも明らかです。開発の基礎がしっかりしていません。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)