[レポート]カーネルへのプロキシ:Windowsカーネルからのストリーミング脆弱性 - CODE BLUE 2024 #codeblue_jp
こんにちは、臼田です。
みなさん、セキュリティ対策してますか?(挨拶
今回はCODE BLUE 2024で行われた以下のセッションのレポートです。
カーネルへのプロキシ:Windowsカーネルからのストリーミング脆弱性
過去数十年にわたり、イン・ザ・ワイルド(インターネットに放たれた状態)で発見される脆弱性の攻撃対象はWin32kからCLFS(Common Log File System)へと徐々に移行してきた。Microsoftはこれらの脆弱性を一貫して積極的に修正している。次の標的は何か? 昨年、MSKSSRV.sysがハッカーの新たなターゲットとなったが、これはカーネル・ストリーミングの一部に過ぎない。
本講演では、長年見過ごされてきた、Windowsカーネルにおける特権昇格のためのアタックサーフェスを紹介する。われわれは、このアタックサーフェスを利用して、わずか数ヵ月で20以上の脆弱性を発見した。2024年のPwn2Ownバンクーバーで成功したWindowsのローカル特権昇格(LPE)は、実はこれらの脆弱性の1つであり、氷山の一角に過ぎなかった。また、この脆弱性により、Windows 7からWindows 11までのシステムを横断して侵害することが可能となった。さらに、新たに発見されたプロキシベースの論理バグクラスについても掘り下げる。このバグクラスは、Pwn2Ownで使用され、検証を回避してカーネルへのアクセスを可能にするものである。このようなバグクラスが深刻な結果を招き、容易に悪用できることも実演する。
本講演では、このアタックサーフェスとバグクラスの発見について共有し、これらの脆弱性の威力と優雅さを示すいくつかの事例研究を紹介する。また、類似の脆弱性パターンを発見し、調査するための手法も紹介し、Windowsエコシステムにおける将来のセキュリティ問題の発見と軽減に役立てられるようにする。
Speakers: Angelboy Yang
レポート
参考記事
本編
- どうやってこの脆弱性を見つけたのか説明する
- フォーカスをする分野を見つけるところから
- 今年のPwn2Ownをターゲットにした
- Win32kはハッカーが好きな対象
- コンポーネントが複雑なのでたくさんの脆弱性
- CLFSはここ6年ほど人気
- ログファイルシステム
- MSKSSRV
- 新しいターゲットに昨年からなっている
- 非常に小さい
- 上記2つは非常に時間がかかる
- Win32kはハッカーが好きな対象
- MSKSSRVについてみていく
- 既存の脆弱性をチェック
- CVE-2023-29360
- ロジカルバグ
- カーネルメモリをユーザースペースに設置する
- CVE-2024-36802
- タイプチェックされない
- CVE-2024-30089
- P2Oで使われた
- すぐにチェックできて脆弱性が見つかっている
- もう残っていないのか?
- 実は氷山の一角
- 例えばビデオドライバーや音楽ドライバー
- カーネルストリーミングのスコープに入っている
- たくさんの脆弱性が見つかった
- カーネルストリーミングとは
- 3つのクラス
- Port class
- AVStream
- Stream class
- Webカメラを使う場合
- どのデバイスを使えるのかリストアップする
- KS Device
- APIを提供してくれる
- KS Object
- よく使われるインスタンス
- カプセル化する
- KS Filter
- オーディをデバイスから読み込んでフィルターを経由してRAMに入る
- KS Property
- ボリュームのレベルとかいろいろはいっている
- GUIDと対応している
- IOCTS_KS_PROPERTYで設定できる
- Kernerl Streaming Architecture
- ksthunk
- エントリーポイント
- 64bitのリクエストに変える
- ks.sys
- コアなコンポーネント
- ksthunk.sysからオーディオフィルターへ
- ks.sysでプロセスハンドラー
- ksthunk
- 攻撃者の視点
- コードのクオリティもあまり良くなかった
- レビューしたあといくつかの脆弱性を見つけた
- チェックできていない、オーバーフローなど
- CVE-2024-38144
- レビュープロセスの中でわかったこと
- ユーザーモードか確認している
- IRP Requestor Mode
- 元のリクエストがUserかKernelか
- デバイス以降がカーネルモードになる問題がある
- 自動的にカーネルモードになることを見落としている開発者は多い
- Kernel Streamではカーネルモード呼び出しになっている
- CVE-2024-35250
- UnerializePropertySet
- inputバッファとoutputバッファは両方コントロールできる
- 任意のIOCTS_KS_PROPERTYをカーネルモードにできる
- ksthunk!DispartchIoctl
- Migration on Win11
- Bypass kCFG
- 2時間くらいで良いガジェットを発見した
- 権限を設定できた
- カーネルをプロキシーできる
- Hyper-VはデフォルトでKS Deviceがない
- Bypass kCFG
- CVE-2024-30084
- ダブルフェッチされる
- レースコンディション
- CVE-2024-30090
- KS Eventにあるもの
- KsGenerateEvent
- 任意のincrement primitiveを使ってEoPできる
- トークンの複数回書き換えが必要で時間がかかる
- PsOpenProcess
- グローバル変数は書き込み可能
- ほかになにができるのか
- アタックサーフェイス
- ビデオも対象にできる
- まとめ
- 脆弱性のリサーチをするとき、過去の脆弱性から学ぶ
感想
なかなかの脅威を発見しているのが、さすがDEVCOREの方々ですね。
このアタックサーフェイスでまだまだ出てくるのですかね…