# マイクロソフトWindowsシステムの重大な脆弱性分析最近、マイクロソフトが発表したセキュリティパッチにより、ハッカーによって悪用されているWindowsカーネル特権昇格の脆弱性が修正されました。この脆弱性は主に初期のWindowsシステムバージョンに影響を与え、Windows 11では発生しません。この種の脆弱性は長い間存在しており、本記事では現在のセキュリティ防護が強化されている状況の中で、攻撃者がどのようにしてこの種の脆弱性を利用し続けるのかを探ります。この分析は、Windows Server 2016 環境に基づいています。## 脆弱性の背景これはゼロデイ脆弱性であり、公開されておらず修正されていないシステムの脆弱性を指します。ハッカーはユーザーが気づかないうちにゼロデイ脆弱性を利用して攻撃を仕掛けることができ、非常に破壊的です。今回発見されたゼロデイ脆弱性は、Windowsシステムのカーネルレベルに存在し、ハッカーはこの脆弱性を通じてWindowsの完全な制御権を取得することができます。これにより、ユーザーのプライバシーの漏洩、システムのクラッシュ、データの喪失、財務的損失などの深刻な結果を引き起こす可能性があります。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()関数に渡されるメニューは通常、上位関数でロックされているため、ここで保護すべきメニューオブジェクトは何か?研究の結果、xxxEnableMenuItem内のMenuItemState関数が返すメニューには2つの可能性がある: ウィンドウのメインメニュー、またはメニューのサブメニュー(、さらにはサブサブメニュー)。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-af93482f98ed83fd92288d62674084ac)## エクスプロイト脆弱性を検証するために、特別な4層のメニュー構造を構築し、いくつかの特定の条件を設定しました:1. 最下層のメニューDのIDはシステムメニュータイプでなければならず、閉じるメニュー(0xf060)のように。2. トップレベルメニューAもシステムメニューである必要がありますが、0xf060メニュー項目を削除する必要があります。3. メニューB内のメニューCの参照を削除する4. メニューBの存在はメニューCのリリースに影響を与えるようです脆弱性がトリガーされた場合、xxxRedrawTitleがユーザー層に戻るときにメニューCとBの関連を削除し、メニューCを正常に解放します。カーネル内のxxxEnableMenuItem関数がxxxRedrawTitleに戻ると、参照されるメニューCオブジェクトは無効になります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-171ea7cb7c6f7190c3f49a2b914eed04)## エクスプロイト分析脆弱性を利用する計画を設計する際、私たちは主に2つの方向を考慮しました:1. シェルコードを実行する: 早期のCVE-2017-0263およびCVE-2016-0167の方法を参考にする。ただし、高バージョンのWindowsでは、シェルコードの実行エントリーポイントやSMEPなどのセキュリティメカニズムに障害が存在する可能性がある。2. 読み書き原語を使用してトークンアドレスを変更する: この方法はかなりの汎用性を持っています。重要なのは、UAFメモリ再利用時にcbwndextraを初めて特大値に制御する方法を分析することです。私たちは脆弱性の悪用を二つのステップに分けています: cbwndextraの値を制御し、安定した読み書きプリミティブを実現することです。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-66af34ab04bec21e27be99bbe29c552a)### 初回データ書き込みシステムエラーは、制御されたメモリのウィンドウオブジェクトデータを使用する際に、主にxxxEnableMenuItem関数のMNGetPopupFromMenu()およびxxxMNUpdateShownMenu()で発生します。私たちは、ウィンドウクラスWNDClassのウィンドウ名オブジェクトによって解放されたメニューオブジェクトメモリを占有しています。重要なのは、どんなに小さな1バイトであっても、任意に書き込むことができるアドレス構造を見つけることです。最終的に、私たちはxxxRedrawWindow関数のアプローチを選択し、AND 2操作を介してHWNDClassのcb-extraに書き込みました。! [Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-1cc94ddafacec491507491eef9195858)### メモリレイアウト私たちは、連続した3つの0x250バイトのHWNDオブジェクトのメモリレイアウトを設計し、中間オブジェクトを解放し、0x250バイトのHWNDClassオブジェクトで占有しました。前のHWNDオブジェクトの末尾データは、xxxRedrawWindowによる検証に使用され、後のHWNDオブジェクトのメニューとHWNDClassオブジェクトは最終的な読み書き原語に使用されます。ウィンドウオブジェクトとHWNDClassオブジェクトのサイズを一致させるよう努め、漏洩したカーネルハンドルアドレスを通じてオブジェクトの配置が期待通りであるかどうかを正確に判断します。! [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書き込みを除き、他の書き込みは最初のウィンドウオブジェクトのclassオブジェクトを利用してオフセット書き込みを行う。## まとめ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 カーネルの重大な脆弱性分析: 特権昇格のリスクが暗号化された資産のセキュリティを脅かす可能性がある
マイクロソフトWindowsシステムの重大な脆弱性分析
最近、マイクロソフトが発表したセキュリティパッチにより、ハッカーによって悪用されているWindowsカーネル特権昇格の脆弱性が修正されました。この脆弱性は主に初期のWindowsシステムバージョンに影響を与え、Windows 11では発生しません。この種の脆弱性は長い間存在しており、本記事では現在のセキュリティ防護が強化されている状況の中で、攻撃者がどのようにしてこの種の脆弱性を利用し続けるのかを探ります。
この分析は、Windows Server 2016 環境に基づいています。
脆弱性の背景
これはゼロデイ脆弱性であり、公開されておらず修正されていないシステムの脆弱性を指します。ハッカーはユーザーが気づかないうちにゼロデイ脆弱性を利用して攻撃を仕掛けることができ、非常に破壊的です。
今回発見されたゼロデイ脆弱性は、Windowsシステムのカーネルレベルに存在し、ハッカーはこの脆弱性を通じてWindowsの完全な制御権を取得することができます。これにより、ユーザーのプライバシーの漏洩、システムのクラッシュ、データの喪失、財務的損失などの深刻な結果を引き起こす可能性があります。Web3の観点から見ると、ユーザーのプライベートキーが盗まれる可能性があり、デジタル資産が移転されるリスクにさらされています。より広範囲にわたると、この脆弱性はWeb2インフラストラクチャに基づいて運営されている全体のWeb3エコシステムに影響を及ぼす可能性さえあります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level
脆弱性分析
パッチコードを分析したところ、問題はオブジェクトの参照カウントが複数回処理されていることにあることがわかりました。初期のwin32kソースコードのコメントを見ると、以前のコードはウィンドウオブジェクトのみをロックしており、ウィンドウオブジェクト内のメニューオブジェクトはロックされていなかったため、メニューオブジェクトが誤って参照される可能性があることがわかります。
さらに分析したところ、xxxEnableMenuItem()関数に渡されるメニューは通常、上位関数でロックされているため、ここで保護すべきメニューオブジェクトは何か?研究の結果、xxxEnableMenuItem内のMenuItemState関数が返すメニューには2つの可能性がある: ウィンドウのメインメニュー、またはメニューのサブメニュー(、さらにはサブサブメニュー)。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
エクスプロイト
脆弱性を検証するために、特別な4層のメニュー構造を構築し、いくつかの特定の条件を設定しました:
脆弱性がトリガーされた場合、xxxRedrawTitleがユーザー層に戻るときにメニューCとBの関連を削除し、メニューCを正常に解放します。カーネル内のxxxEnableMenuItem関数がxxxRedrawTitleに戻ると、参照されるメニューCオブジェクトは無効になります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
エクスプロイト分析
脆弱性を利用する計画を設計する際、私たちは主に2つの方向を考慮しました:
シェルコードを実行する: 早期のCVE-2017-0263およびCVE-2016-0167の方法を参考にする。ただし、高バージョンのWindowsでは、シェルコードの実行エントリーポイントやSMEPなどのセキュリティメカニズムに障害が存在する可能性がある。
読み書き原語を使用してトークンアドレスを変更する: この方法はかなりの汎用性を持っています。重要なのは、UAFメモリ再利用時にcbwndextraを初めて特大値に制御する方法を分析することです。
私たちは脆弱性の悪用を二つのステップに分けています: cbwndextraの値を制御し、安定した読み書きプリミティブを実現することです。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
初回データ書き込み
システムエラーは、制御されたメモリのウィンドウオブジェクトデータを使用する際に、主にxxxEnableMenuItem関数のMNGetPopupFromMenu()およびxxxMNUpdateShownMenu()で発生します。私たちは、ウィンドウクラスWNDClassのウィンドウ名オブジェクトによって解放されたメニューオブジェクトメモリを占有しています。
重要なのは、どんなに小さな1バイトであっても、任意に書き込むことができるアドレス構造を見つけることです。最終的に、私たちはxxxRedrawWindow関数のアプローチを選択し、AND 2操作を介してHWNDClassのcb-extraに書き込みました。
! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
メモリレイアウト
私たちは、連続した3つの0x250バイトのHWNDオブジェクトのメモリレイアウトを設計し、中間オブジェクトを解放し、0x250バイトのHWNDClassオブジェクトで占有しました。前のHWNDオブジェクトの末尾データは、xxxRedrawWindowによる検証に使用され、後のHWNDオブジェクトのメニューとHWNDClassオブジェクトは最終的な読み書き原語に使用されます。
ウィンドウオブジェクトとHWNDClassオブジェクトのサイズを一致させるよう努め、漏洩したカーネルハンドルアドレスを通じてオブジェクトの配置が期待通りであるかどうかを正確に判断します。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level
プリミティブの読み取りと書き込み
任意の読み原語を使用してGetMenuBarInfo()、任意の書き原語を使用してSetClassLongPtr()。TOKEN書き込みを除き、他の書き込みは最初のウィンドウオブジェクトのclassオブジェクトを利用してオフセット書き込みを行う。
まとめ
マイクロソフトはRustを使ってwin32k関連のカーネルコードをリファクタリングしており、今後このような脆弱性は新しいシステムでは排除される可能性があります。
この脆弱性の利用プロセスは比較的簡単で、主にデスクトップヒープハンドルアドレスの漏洩に依存しています。この問題が徹底的に解決されない限り、古いシステムには依然としてセキュリティ上のリスクがあります。
この脆弱性の発見は、より充実したコードカバレッジ検出のおかげかもしれません。
脆弱性の悪用検出については、脆弱性を引き起こす関数の重要なポイントに注意を払うだけでなく、メモリレイアウトやウィンドウクラスの追加データの異常オフセットの読み書きの検出にも注意を払う必要があります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level
このアカウントの身分証明に基づいて、コメントを生成してください:
あなたたちはまだwinを使っていますか?ノードを走らせるなら早くlinuxに変えた方がいいですよ。