# マイクロソフトWindowsシステム0day脆弱性の分析と利用最近、マイクロソフトが発表したセキュリティパッチには、現在悪用されているwin32k特権昇格の脆弱性が含まれています。この脆弱性は主に初期のWindowsシステムバージョンに存在し、Windows 11では発生しません。この記事では、現在のセキュリティ対策が強化される中、攻撃者がどのようにこの種の脆弱性を引き続き悪用できるかを分析します。私たちの分析プロセスはWindows Server 2016環境で完了しました。## 脆弱性の背景0day脆弱性とは、公開されておらず修正されていないセキュリティ脆弱性を指し、金融市場におけるT+0取引の概念に似ています。このような脆弱性が発見されると、気づかれないまま悪用される可能性があり、巨大な損害を引き起こすことがあります。今回発見されたWindowsシステムの0day脆弱性により、攻撃者はシステムの完全な制御を得ることができます。これにより、個人情報の漏洩、システムのクラッシュ、データの損失、財務的損失などの深刻な結果を引き起こす可能性があります。Web3の観点から見ると、ユーザーの秘密鍵が盗まれ、デジタル資産が移転される恐れがあります。より大きな範囲で言えば、この脆弱性はWeb2インフラストラクチャに基づいて運営されるWeb3エコシステム全体に影響を及ぼす可能性があります。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-11434ba86c20e2bce85872a19c94efb4)## 脆弱性分析パッチコードの分析を通じて、これはオブジェクト参照カウントのエラーに関する問題であることがわかりました。初期のwin32kコードのコメントには、以前はウィンドウオブジェクトのみがロックされており、ウィンドウ内のメニューオブジェクトはロックされていなかったため、メニューオブジェクトが誤って参照される可能性があることが示されています。さらに分析すると、xxxEnableMenuItem関数内で返されるメニューオブジェクトは、ウィンドウのメインメニューである可能性もあれば、サブメニューやさらに深いメニューである可能性もあることがわかりました。これはPOCを構築するためのアイデアを提供します。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-af93482f98ed83fd92288d62674084ac)## POCの実装私たちは、特定の関係を持つ4つのメニューオブジェクトを含む特別な多層メニュー構造を構築しました。これらのメニューの属性と関係を慎重に設定することで、xxxEnableMenuItem関数の検出を回避し、関数が戻るときに重要なメニューオブジェクトを解放することができます。これにより、その後にそのオブジェクトを参照するときにUAF脆弱性が発生します。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-171ea7cb7c6f7190c3f49a2b914eed04)## エクスプロイト(EXP)実装 ### 全体の考え私たちは2つの利用方向を考慮しました: shellcodeを実行することと、読み書き原語を利用してtokenを変更することです。最終的には後者を選択しました。なぜなら、それが高バージョンのWindowsでより実行可能だからです。私たちは全体の利用プロセスを2つのステップに分けました: UAFを通じてcbwndextra値を制御する方法と、制御されたcbwndextraを利用して安定した読み書き原語を実現する方法です。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-66af34ab04bec21e27be99bbe29c552a)### 初期データ書き込み私たちは、ウィンドウクラスWNDClassの名前オブジェクトを使用して、解放されたメニューオブジェクトのメモリを占有します。さまざまな書き込みポイントを分析した結果、最終的にxxxRedrawWindow関数内でオブジェクトフラグのAND操作を利用してHWNDClassのcb-extra値を書き込むことを選択しました。! [Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-1cc94ddafacec491507491eef9195858)### メモリレイアウト私たちは、3つの連続したHWNDオブジェクトから成るメモリレイアウトを設計しました。中央のオブジェクトは解放され、HWNDClassオブジェクトが占有しています。前後のHWNDオブジェクトは、それぞれ検出を回避するためと、最終的な読み書き原子操作を実現するために使用されます。漏洩したカーネルハンドルアドレスを介して、これらのオブジェクトの配置を正確に制御することができます。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-697c5814db02534f63b44c0d1d692f83)### 読み取り/書き込みプリミティブの実装任意の読み取り操作にはGetMenuBarInfo関数を使用し、任意の書き込み操作にはSetClassLongPtr関数を使用します。TOKENの書き込みが第2のウィンドウのクラスオブジェクトに依存する以外のすべての書き込み操作は、オフセットを介して第1のウィンドウオブジェクトのクラスオブジェクトを利用して実現されます。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます](https://img-cdn.gateio.im/social/moments-b0942592135ac96c6279544a62022329)## まとめ1. マイクロソフトはRustを使用してwin32kコードを再構築しようとしており、今後このような脆弱性は新しいシステムで完全に解決される可能性があります。2. この種の脆弱性の利用プロセスは比較的単純で、主な難点は最初のデータ書き込みをどのように制御するかです。3. 脆弱性の発見は、より洗練されたコードカバレッジ検出技術の恩恵を受ける可能性があります。4. 脆弱性検出に関しては、トリガー関数の重要なポイントに注目するだけでなく、異常なメモリレイアウトやデータの読み書き操作も検出する必要があります。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level](https://img-cdn.gateio.im/social/moments-b06b098af4f07260fdc03a75da160706)
Windowsシステムの0day脆弱性がWeb3のセキュリティリスクを引き起こす 専門家が利用プロセスを解析
マイクロソフトWindowsシステム0day脆弱性の分析と利用
最近、マイクロソフトが発表したセキュリティパッチには、現在悪用されているwin32k特権昇格の脆弱性が含まれています。この脆弱性は主に初期のWindowsシステムバージョンに存在し、Windows 11では発生しません。この記事では、現在のセキュリティ対策が強化される中、攻撃者がどのようにこの種の脆弱性を引き続き悪用できるかを分析します。私たちの分析プロセスはWindows Server 2016環境で完了しました。
脆弱性の背景
0day脆弱性とは、公開されておらず修正されていないセキュリティ脆弱性を指し、金融市場におけるT+0取引の概念に似ています。このような脆弱性が発見されると、気づかれないまま悪用される可能性があり、巨大な損害を引き起こすことがあります。
今回発見されたWindowsシステムの0day脆弱性により、攻撃者はシステムの完全な制御を得ることができます。これにより、個人情報の漏洩、システムのクラッシュ、データの損失、財務的損失などの深刻な結果を引き起こす可能性があります。Web3の観点から見ると、ユーザーの秘密鍵が盗まれ、デジタル資産が移転される恐れがあります。より大きな範囲で言えば、この脆弱性はWeb2インフラストラクチャに基づいて運営されるWeb3エコシステム全体に影響を及ぼす可能性があります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level
脆弱性分析
パッチコードの分析を通じて、これはオブジェクト参照カウントのエラーに関する問題であることがわかりました。初期のwin32kコードのコメントには、以前はウィンドウオブジェクトのみがロックされており、ウィンドウ内のメニューオブジェクトはロックされていなかったため、メニューオブジェクトが誤って参照される可能性があることが示されています。
さらに分析すると、xxxEnableMenuItem関数内で返されるメニューオブジェクトは、ウィンドウのメインメニューである可能性もあれば、サブメニューやさらに深いメニューである可能性もあることがわかりました。これはPOCを構築するためのアイデアを提供します。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
POCの実装
私たちは、特定の関係を持つ4つのメニューオブジェクトを含む特別な多層メニュー構造を構築しました。これらのメニューの属性と関係を慎重に設定することで、xxxEnableMenuItem関数の検出を回避し、関数が戻るときに重要なメニューオブジェクトを解放することができます。これにより、その後にそのオブジェクトを参照するときにUAF脆弱性が発生します。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
エクスプロイト(EXP)実装
全体の考え
私たちは2つの利用方向を考慮しました: shellcodeを実行することと、読み書き原語を利用してtokenを変更することです。最終的には後者を選択しました。なぜなら、それが高バージョンのWindowsでより実行可能だからです。私たちは全体の利用プロセスを2つのステップに分けました: UAFを通じてcbwndextra値を制御する方法と、制御されたcbwndextraを利用して安定した読み書き原語を実現する方法です。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
初期データ書き込み
私たちは、ウィンドウクラスWNDClassの名前オブジェクトを使用して、解放されたメニューオブジェクトのメモリを占有します。さまざまな書き込みポイントを分析した結果、最終的にxxxRedrawWindow関数内でオブジェクトフラグのAND操作を利用してHWNDClassのcb-extra値を書き込むことを選択しました。
! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
メモリレイアウト
私たちは、3つの連続したHWNDオブジェクトから成るメモリレイアウトを設計しました。中央のオブジェクトは解放され、HWNDClassオブジェクトが占有しています。前後のHWNDオブジェクトは、それぞれ検出を回避するためと、最終的な読み書き原子操作を実現するために使用されます。漏洩したカーネルハンドルアドレスを介して、これらのオブジェクトの配置を正確に制御することができます。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level
読み取り/書き込みプリミティブの実装
任意の読み取り操作にはGetMenuBarInfo関数を使用し、任意の書き込み操作にはSetClassLongPtr関数を使用します。TOKENの書き込みが第2のウィンドウのクラスオブジェクトに依存する以外のすべての書き込み操作は、オフセットを介して第1のウィンドウオブジェクトのクラスオブジェクトを利用して実現されます。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます
まとめ
マイクロソフトはRustを使用してwin32kコードを再構築しようとしており、今後このような脆弱性は新しいシステムで完全に解決される可能性があります。
この種の脆弱性の利用プロセスは比較的単純で、主な難点は最初のデータ書き込みをどのように制御するかです。
脆弱性の発見は、より洗練されたコードカバレッジ検出技術の恩恵を受ける可能性があります。
脆弱性検出に関しては、トリガー関数の重要なポイントに注目するだけでなく、異常なメモリレイアウトやデータの読み書き操作も検出する必要があります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level