最近、マイクロソフトが発表したセキュリティパッチで、積極的に悪用されているwin32k特権昇格の脆弱性が修正されました。この脆弱性は主に初期のWindowsシステムバージョンに影響を与え、Windows 11では発生しないようです。本記事では、現在のセキュリティ環境において、攻撃者がどのようにしてこのような脆弱性を引き続き悪用する可能性があるのかを分析します。以下の分析はWindows Server 2016環境に基づいて行われます。
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.
Windowsシステム0day脆弱性分析: win32kからの権限昇格とWeb3のセキュリティリスク
マイクロソフトWindowsシステム0day脆弱性の分析と利用
最近、マイクロソフトが発表したセキュリティパッチで、積極的に悪用されているwin32k特権昇格の脆弱性が修正されました。この脆弱性は主に初期のWindowsシステムバージョンに影響を与え、Windows 11では発生しないようです。本記事では、現在のセキュリティ環境において、攻撃者がどのようにしてこのような脆弱性を引き続き悪用する可能性があるのかを分析します。以下の分析はWindows Server 2016環境に基づいて行われます。
! 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ゲームをダウンさせる可能性があります
パッチ分析
パッチコードの分析により、主にオブジェクト参照カウント処理の問題が修正されたことがわかります。早期のwin32kソースコードのコメントと組み合わせると、元のコードはウィンドウオブジェクトのみをロックし、ウィンドウ内のメニューオブジェクトはロックしていなかったため、メニューオブジェクトが誤って参照される可能性があることがわかります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
エクスプロイトの概念実証 (PoC)
分析の結果、xxxEnableMenuItem関数のMenuItemStateはウィンドウのメインメニューまたはサブメニューを返す可能性があります。私たちは以下の特徴を持つ特別な4層メニュー構造を構築しました:
脆弱性を引き起こすと、xxxRedrawTitleがユーザー層に戻る際にメニューCとBの関連を削除し、メニューCを解放します。これにより、xxxEnableMenuItem関数の後続の無効なメニューCオブジェクトの参照が発生します。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
エクスプロイト(Exp)実装
全体の考え
2つの可能な利用方向を考慮する:
シェルコードを実行する: 早期のCVE-2017-0263などの脆弱性を参照しますが、新しいバージョンのWindowsでは多くの障害に直面する可能性があります。
読み書き原語を利用してトークンを修正する: 最近でも参考にできる公開expがあり、主にcbwndextra値を初めて制御する方法を解決する必要がある。
私たちは第二のアプローチを採用し、expをcbwndextra値の制御と安定した読み書き原語の構築という二つのステップに分けます。
! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
初回データ書き込み
ウィンドウクラスWNDClassの名前オブジェクトを利用して、解放されたメニューオブジェクトのメモリを占有します。xxxRedrawWindow関数内で書き込み可能なデータの位置を見つけ、前のオブジェクトのメモリデータを制御することで、関数内のフラグチェックを満たします。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level
安定したメモリ配置
連続する3つの0x250バイトHWNDオブジェクトのメモリレイアウトを設計し、中間オブジェクトを解放してHWNDClassオブジェクトを占有します。前後のHWNDオブジェクトは、それぞれ関数を通じて検査し、読み書きプリミティブを実現するために使用されます。カーネルハンドルアドレスの漏洩を通じて、オブジェクトの配置を正確に特定します。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます
読み取り/書き込みプリミティブの実装
任意の読み取りにはGetMenuBarInfo関数を使用し、任意の書き込みにはSetClassLongPtr関数を使用します。TOKENの書き込みを除き、他の書き込み操作は最初のウィンドウオブジェクトのクラスオブジェクトを通じて行われます。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level
まとめ
マイクロソフトはRustを使用してwin32kコードを再構築しており、将来的にはこのような脆弱性を完全に解決する可能性があります。
この種の脆弱性の利用は主にデスクトップヒープハンドルアドレスの漏洩に依存しており、古いシステムに対しても依然として安全上のリスクをもたらします。
この脆弱性の発見は、より優れたコードカバレッジ検出の恩恵を受けた可能性があります。
異常なメモリレイアウトとウィンドウデータの読み書きの監視は、同様の脆弱性を発見するのに役立ちます。
記事のコメント:
rustがwinを救えるの?笑った