# マイクロソフトWindowsシステム0day脆弱性の分析と利用最近、マイクロソフトが発表したセキュリティパッチで、利用されているwin32k特権昇格の脆弱性が修正されました。この脆弱性は初期のWindowsシステムバージョンにのみ存在し、Windows 11では発生しません。本記事では、現在のセキュリティ保護が不断に改善されている状況の中で、攻撃者がどのようにしてこのような脆弱性を引き続き利用するかを分析します。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-11434ba86c20e2bce85872a19c94efb4)## 脆弱性の背景0day脆弱性とは、公開されておらず、修正されていないセキュリティ脆弱性を指し、金融市場のT+0取引概念に類似しています。このような脆弱性が発見されると、気づかれずに悪用される可能性があり、巨大な危害を引き起こすことがあります。今回発見されたWindowsシステムの0day脆弱性により、攻撃者はシステムの完全な制御権を取得することが可能です。これにより、個人情報の漏洩、システムのクラッシュ、データの喪失、財産の損失など、深刻な結果を引き起こす可能性があります。Web3の観点から見ると、秘密鍵が盗まれたり、デジタル資産が移転されたり、さらにはWeb2インフラストラクチャに基づくWeb3エコシステム全体に影響を及ぼす可能性があります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-af93482f98ed83fd92288d62674084ac)## パッチ分析 パッチコードの分析から、問題はオブジェクトの参照カウントの複数回処理にあることがわかりました。以前のソースコードのコメントを見ると、以前のコードはウィンドウオブジェクトだけをロックしており、ウィンドウ内のメニューオブジェクトはロックされていなかったため、メニューオブジェクトが誤って参照される可能性があります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-171ea7cb7c6f7190c3f49a2b914eed04)## 脆弱性の再発脆弱性関数の文脈を分析することで、xxxEnableMenuItem()に渡されるメニューは通常、上位関数でロックされていることがわかりました。さらに分析すると、MenuItemState関数が返すメニューは、ウィンドウのメインメニューである可能性も、サブメニューまたはサブサブメニューである可能性もあります。脆弱性を引き起こすために、特別な4層メニュー構造を構築し、以下の特性を設定しました:1. 最底層メニューDのIDはシステムメニュータイプでなければなりません2. トップメニューAもシステムメニューでなければならず、対応するシステムメニュータイプを削除する必要があります3. メニューB内のメニューCの参照を削除する4. メニューBの存在はメニューCのリリースに貢献しているようです。xxxRedrawTitleがユーザー層を返すときに、メニューCとBの参照関係を削除し、メニューCを解放します。これにより、xxxEnableMenuItem関数が返されるときに、参照されているメニューCオブジェクトは無効になります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-66af34ab04bec21e27be99bbe29c552a)## エクスプロイト脆弱性の悪用は主に2つの方向を考慮します:1. シェルコードを実行する: 早期のCVE-2017-0263などの脆弱性を参考にするが、高バージョンのWindowsではエントリーポイントやSMEPなどのセキュリティメカニズムの問題に直面する可能性がある。2. 読み書きプリミティブを利用してトークンアドレスを変更する: 近年、デスクトップスタックメモリのレイアウトと読み書きプリミティブに関するいくつかの公開されたexpが参考になります。重要なのは、UAFメモリ再利用時にcbwndextraを特大値で初めて制御する方法を分析することです。今回の利用は第二のオプションを採用し、全体のプロセスを二つのステップに分けます:1. UAFの脆弱性を利用してcbwndextra値を制御する2. cbwndextraを制御して安定した読み書きプリミティブを実現する! [Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-1cc94ddafacec491507491eef9195858)### 初回データ書き込み脆弱性が発生した後、システムはMNGetPopupFromMenu()とxxxMNUpdateShownMenu()で制御されたウィンドウオブジェクトデータを誤って使用する可能性があります。私たちはウィンドウクラスWNDClass内のウィンドウ名オブジェクトを解放されたメニューオブジェクトに占有させます。重要なのは、私たちが構築できるアドレス構造内で任意のデータを書き込むことができる位置を見つけることです。たとえそれが1バイトだけであっても。最終的に、xxxRedrawWindow関数の案を選択しました。関数内のオブジェクトフラグを使用して、前のオブジェクトのメモリデータをレイアウトメモリで制御します。### 安定したメモリレイアウト少なくとも3つの連続した0x250バイトのHWNDオブジェクトを設計し、中間の1つを解放し、HWNDClassオブジェクトで占有します。前のHWNDオブジェクトの末尾データは、xxxRedrawWindow内のフラグ検証に使用され、後のHWNDオブジェクトのメニューオブジェクトとHWNDClassオブジェクトは最終的な読み書き原語のメディアとして使用されます。漏れたカーネルハンドルアドレスを使用して、要求されたウィンドウオブジェクトが期待される順序で配置されているかどうかを正確に判断します。### プリミティブの読み取りと書き込み任意の読み取り原語はGetMenuBarInfo()を使用し、任意の書き込み原語はSetClassLongPtr()を使用します。TOKENの書き換え以外のすべての書き込みは、最初のウィンドウオブジェクトのクラスオブジェクトを使用してオフセットを利用して書き込みます。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-697c5814db02534f63b44c0d1d692f83)## まとめ1. win32kの脆弱性は歴史が長いですが、MicrosoftはRustを使って関連コードの再構築を試みており、将来の新しいシステムではこのような脆弱性が排除される可能性があります。2. この脆弱性の悪用プロセスは比較的簡単で、主な難しさは最初の書き込みをどのように制御するかにあります。デスクトップヒープハンドルアドレスの漏洩に大きく依存しており、これは依然として古いシステムのセキュリティリスクです。3. この脆弱性の発見は、より高度なコードカバレッジ検出のおかげかもしれません。4. 脆弱性の検出については、トリガー関数の重要なポイントに注意するだけでなく、異常なメモリレイアウトやウィンドウデータオフセットの読み書きにも注目する必要があります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます](https://img-cdn.gateio.im/social/moments-b0942592135ac96c6279544a62022329)! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level](https://img-cdn.gateio.im/social/moments-b06b098af4f07260fdc03a75da160706)
マイクロソフトWindows初期バージョンの0day脆弱性分析: 権限昇格から利用までの全プロセス
マイクロソフトWindowsシステム0day脆弱性の分析と利用
最近、マイクロソフトが発表したセキュリティパッチで、利用されているwin32k特権昇格の脆弱性が修正されました。この脆弱性は初期のWindowsシステムバージョンにのみ存在し、Windows 11では発生しません。本記事では、現在のセキュリティ保護が不断に改善されている状況の中で、攻撃者がどのようにしてこのような脆弱性を引き続き利用するかを分析します。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level
脆弱性の背景
0day脆弱性とは、公開されておらず、修正されていないセキュリティ脆弱性を指し、金融市場のT+0取引概念に類似しています。このような脆弱性が発見されると、気づかれずに悪用される可能性があり、巨大な危害を引き起こすことがあります。
今回発見されたWindowsシステムの0day脆弱性により、攻撃者はシステムの完全な制御権を取得することが可能です。これにより、個人情報の漏洩、システムのクラッシュ、データの喪失、財産の損失など、深刻な結果を引き起こす可能性があります。Web3の観点から見ると、秘密鍵が盗まれたり、デジタル資産が移転されたり、さらにはWeb2インフラストラクチャに基づくWeb3エコシステム全体に影響を及ぼす可能性があります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
パッチ分析
パッチコードの分析から、問題はオブジェクトの参照カウントの複数回処理にあることがわかりました。以前のソースコードのコメントを見ると、以前のコードはウィンドウオブジェクトだけをロックしており、ウィンドウ内のメニューオブジェクトはロックされていなかったため、メニューオブジェクトが誤って参照される可能性があります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
脆弱性の再発
脆弱性関数の文脈を分析することで、xxxEnableMenuItem()に渡されるメニューは通常、上位関数でロックされていることがわかりました。さらに分析すると、MenuItemState関数が返すメニューは、ウィンドウのメインメニューである可能性も、サブメニューまたはサブサブメニューである可能性もあります。
脆弱性を引き起こすために、特別な4層メニュー構造を構築し、以下の特性を設定しました:
xxxRedrawTitleがユーザー層を返すときに、メニューCとBの参照関係を削除し、メニューCを解放します。これにより、xxxEnableMenuItem関数が返されるときに、参照されているメニューCオブジェクトは無効になります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
エクスプロイト
脆弱性の悪用は主に2つの方向を考慮します:
シェルコードを実行する: 早期のCVE-2017-0263などの脆弱性を参考にするが、高バージョンのWindowsではエントリーポイントやSMEPなどのセキュリティメカニズムの問題に直面する可能性がある。
読み書きプリミティブを利用してトークンアドレスを変更する: 近年、デスクトップスタックメモリのレイアウトと読み書きプリミティブに関するいくつかの公開されたexpが参考になります。重要なのは、UAFメモリ再利用時にcbwndextraを特大値で初めて制御する方法を分析することです。
今回の利用は第二のオプションを採用し、全体のプロセスを二つのステップに分けます:
! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
初回データ書き込み
脆弱性が発生した後、システムはMNGetPopupFromMenu()とxxxMNUpdateShownMenu()で制御されたウィンドウオブジェクトデータを誤って使用する可能性があります。私たちはウィンドウクラスWNDClass内のウィンドウ名オブジェクトを解放されたメニューオブジェクトに占有させます。
重要なのは、私たちが構築できるアドレス構造内で任意のデータを書き込むことができる位置を見つけることです。たとえそれが1バイトだけであっても。最終的に、xxxRedrawWindow関数の案を選択しました。関数内のオブジェクトフラグを使用して、前のオブジェクトのメモリデータをレイアウトメモリで制御します。
安定したメモリレイアウト
少なくとも3つの連続した0x250バイトのHWNDオブジェクトを設計し、中間の1つを解放し、HWNDClassオブジェクトで占有します。前のHWNDオブジェクトの末尾データは、xxxRedrawWindow内のフラグ検証に使用され、後のHWNDオブジェクトのメニューオブジェクトとHWNDClassオブジェクトは最終的な読み書き原語のメディアとして使用されます。
漏れたカーネルハンドルアドレスを使用して、要求されたウィンドウオブジェクトが期待される順序で配置されているかどうかを正確に判断します。
プリミティブの読み取りと書き込み
任意の読み取り原語はGetMenuBarInfo()を使用し、任意の書き込み原語はSetClassLongPtr()を使用します。TOKENの書き換え以外のすべての書き込みは、最初のウィンドウオブジェクトのクラスオブジェクトを使用してオフセットを利用して書き込みます。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level
まとめ
win32kの脆弱性は歴史が長いですが、MicrosoftはRustを使って関連コードの再構築を試みており、将来の新しいシステムではこのような脆弱性が排除される可能性があります。
この脆弱性の悪用プロセスは比較的簡単で、主な難しさは最初の書き込みをどのように制御するかにあります。デスクトップヒープハンドルアドレスの漏洩に大きく依存しており、これは依然として古いシステムのセキュリティリスクです。
この脆弱性の発見は、より高度なコードカバレッジ検出のおかげかもしれません。
脆弱性の検出については、トリガー関数の重要なポイントに注意するだけでなく、異常なメモリレイアウトやウィンドウデータオフセットの読み書きにも注目する必要があります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level