Windowsゼロデイ脆弱性分析:Web3エコシステムは重大な影響を受ける可能性がある

robot
概要作成中

マイクロソフトWindowsシステムゼロデイ脆弱性分析:Web3エコシステムに重大な影響を与える可能性

先月、マイクロソフトのセキュリティ更新で、悪用されているWindowsカーネルの権限昇格の脆弱性が修正されました。この脆弱性は主に古いバージョンのWindowsシステムに影響を及ぼし、Windows 11は影響を受けていないようです。この記事では、現在のセキュリティ対策が強化され続ける中で、攻撃者がこの種の脆弱性を引き続き悪用する可能性について分析します。

すべての分析は Windows Server 2016 で行いました。

ゼロデイ脆弱性とは、まだ発見され修正されていないシステムの脆弱性を指し、金融市場におけるT+0取引の概念に似ています。ゼロデイ脆弱性が悪用されると、通常は非常に大きな被害をもたらします。今回発見されたWindowsシステムのゼロデイ脆弱性は、攻撃者にシステムの完全な制御権を与える可能性があります。

攻撃者にシステムを制御された場合の結果は深刻であり、個人のプライバシーの漏洩、システムのクラッシュによるデータの喪失、財産の損失、マルウェアの埋め込みなどを含みます。個人ユーザーにとっては、暗号通貨の秘密鍵が盗まれ、デジタル資産が移転される可能性があります。さらに広い範囲では、この脆弱性はWeb2インフラストラクチャに基づくWeb3エコシステム全体に影響を及ぼす可能性すらあります。

! Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level

パッチ分析

パッチを分析したところ、問題はオブジェクトの参照カウントが多く処理されているだけのようです。win32kは古いコードであるため、いくつかの古いソースコードのコメントを見つけることができ、これらのコメントは以前のコードがウィンドウオブジェクトのみをロックし、ウィンドウオブジェクト内のメニューオブジェクトをロックしていなかったことを示しています。これがメニューオブジェクトが誤って参照される原因となる可能性があります。

! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります

エクスプロイトの概念実証(PoC)実装

脆弱性の関数の文脈を分析したところ、xxxEnableMenuItem()に渡されたメニューは通常、上位の関数でロックされていることがわかりました。それでは、ここで一体どのメニューオブジェクトを保護しようとしているのでしょうか?

xxxEnableMenuItemにおけるメニューオブジェクトの処理プロセスをさらに分析すると、MenuItemState関数が返すメニューには二つの可能性があることがわかります: ウィンドウのメインメニュー、またはサブメニュー(、さらにはサブサブメニュー)です。

PoCでは、特別な4層メニュー構造を構築しました。隣接するメニュー間には親子関係があります。これらのメニューには、xxxEnableMenuItem関数内での検出と判断を通じて特定の特徴があります。

xxxRedrawTitleがユーザー層を返す際、メニューCとメニューBの参照関係を削除し、メニューCを正常に解放しました。最終的に、カーネル内のxxxEnableMenuItem関数がxxxRedrawTitle関数に戻るとき、参照されていたメニューCオブジェクトはすでに無効になっています。

! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます

脆弱性の悪用(エクスプロイト)の実現

利用方法を決定する前に、私たちは通常、実現不可能な案に時間を無駄にしないために、いくつかの理論的な前提判断を行います。今回の脆弱性の利用は、主に二つの方向を考慮しています:

  1. shellcodeのコードを実行する: CVE-2017-0263およびCVE-2016-0167の初期の参考。しかし、高バージョンのWindowsでは、この方法にはいくつかの解決が難しい問題がある可能性があります。

  2. 読み書き原語を利用してトークンアドレスを変更する: 近年、参考にできる公にされた方法がいくつかあります。デスクトップのヒープメモリレイアウトと読み書き原語は長期的に普遍的です。私たちが主に分析する必要があるのは、UAFメモリが再利用される際に、最初にcbwndextraを特大値に制御する方法です。

私たちは、全体の利用プロセスを二つの問題に分けます: UAF脆弱性を利用してcbwndextra値を制御する方法と、cbwndextra値を制御した後に安定した読み書き原子操作を実現する方法です。

! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります

最終的に、私たちはxxxRedrawWindow関数内でフラグのAND 2操作を使用してHWNDClassのcb-extraに書き込むことを選択しました。これは、HWNDClassのcb-extraのオフセットが小さいため、レイアウトメモリを介して前のオブジェクトのメモリデータを制御し、xxxRedrawWindow関数内でオブジェクトフラグの判断を行うことができるからです。

安定したメモリレイアウトを実現するために、少なくとも連続した3つの0x250バイトのHWNDオブジェクトを設計しました。中間オブジェクトを解放した後、0x250バイトのHWNDClassオブジェクトがその位置を占有します。前のHWNDオブジェクトの尾部データはxxxRedrawWindowのフラグ検証に使用され、次のHWNDオブジェクトのメニューオブジェクトとHWNDClassオブジェクトは最終的な読み書き原語の媒介として使用されます。

! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます

ウィンドウオブジェクトとHWNDClassオブジェクトのサイズを一致させるよう努め、ウィンドウオブジェクトの拡張データが十分に大きいことを確認します。ヒープメモリ内で漏洩したカーネルハンドルアドレスを通じて、要求されたウィンドウオブジェクトが期待される順序で配置されているかどうかを正確に判断することができます。

読み書き原語の観点から、任意の読み取りにはGetMenuBarInfo()を使用し、任意の書き込みにはSetClassLongPtr()を使用します。TOKENの書き込み操作が第二のウィンドウのクラスオブジェクトに依存しているのを除けば、その他の書き込みはすべて最初のウィンドウオブジェクトのクラスオブジェクトをオフセットを通じて利用して実現します。

! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level

サマリー

  1. win32kの現状: マイクロソフトは、Windows 11プレビュー版の関連カーネルコードをRustで再構築しようとしています。将来的には、新しいシステムでこのような脆弱性を排除する可能性があります。

  2. 脆弱性の悪用プロセスは比較的簡単です:最初の書き込みを制御する方法を慎重に試す必要がある以外は、基本的に新しい悪用技術を使用する必要はありません。この種の脆弱性は、デスクトップヒープハンドルアドレスの漏洩に大きく依存しています。

  3. 脆弱性の発見: より完全なコードカバレッジ検出に依存する可能性があります。システムAPIがターゲット関数の実行パス内で最も深い脆弱性ポイントに到達し、ウィンドウオブジェクトが複数のネストされた参照状態にある場合、その脆弱性はファジングテストによって発見される可能性があります。

  4. その他の発見方法: 脆弱性を引き起こす関数の重要なポイントの検出に加えて、あまり一般的でないメモリレイアウトやウィンドウまたはウィンドウクラスの追加データの異常オフセットの読み書きの検出も、同様の脆弱性を発見する手段の一つである可能性があります。

! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます

! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level

TOKEN2.95%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 2
  • 共有
コメント
0/400
AltcoinHuntervip
· 15時間前
見破っても言わない 暗号資産の世界の老初心者になった
原文表示返信0
MelonFieldvip
· 15時間前
システムに問題が発生しました〜
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)