de:code 2019 CM10
ハードコア デバッギング : サポート直伝!
Windows カーネルモード デバッグ活用編!!
日本マイクロソフト
太田 卓也
日本マイクロソフト
Jesse Swearengin
日本マイクロソフト
冷 春亮
ここでいうデバッギングとは?
問題発生時のメモリ上のデータをデバッガーで解析
OS の知識
CPU の知識
関連ツール
プログラミング
本日お持ち帰りいただきたい知識
ジェシー
デバッグ歴 5 年
カーネル モード
デバッグの知識
レン
JavaScript
を利用した
デバッグの効率化
デバッグ歴 20 年
de:code 2019 CM10
カーネル モード デバッグの力を知ろう!
日本マイクロソフト カスタマー サービス & サポート
サポート エンジニア
Jesse Swearengin (ジェシー)
これまでのシナリオ
アプリでエラーが発生!
ダンプ解析
ユーザーモード
デバッグ
Time Travel
Debugging
トレース解析
問題解決!
アプリ
これまでのシナリオ
反応すらしない・・・
アプリ
どうやって調べれば・・・?
アプリ サービス
ユーザーモード
カーネルモード
ハードウェア
カーネル モジュールなど
「カーネルモードデバッグ」 なら可能です!
アプリ
カーネル モード デバッグの力を知ろう!
1. こんなときこそカーネルモードデバッグ!
2. デバッグ環境を作ってみよう!
3. 問題解決をしてみよう!
こんなときこそカーネルモードデバッグ!
アプリ
他のアプリ・プロセスに処理を依頼し、
その処理の中で発生した問題カーネル別アプリ
パターン
③
そもそも対象のアプリ・プロセスを
デバッグできないような状態アプリ
パターン
①
アプリ カーネル
Windows カーネルに処理が
行き渡った中で発生した問題
パターン
②
カーネル モード デバッグの力を知ろう!
1. こんなときこそカーネルモードデバッグ!
2. デバッグ環境を作ってみよう!
3. 問題解決をしてみよう!
カーネルモードデバッグの接続
ホスト ターゲット
デバッグケーブル
(シリアル、USB、1394)
カーネルモードデバッグの接続
ホスト ターゲット
仮想マシン
ネットワーク接続
(KDNET)
Hyper-V 環境
作成
ターゲットに
KDNET.exe を
コピー&実行
ターゲット
再起動
WinDbg
接続
カーネルモードデバッグのセットアップ (KDNET)
カーネル モード デバッグの力を知ろう!
1. こんなときこそカーネルモードデバッグ!
2. デバッグ環境を作ってみよう!
3. 問題解決をしてみよう!
カーネルモードデバッグ実践
環境情報ログアプリのハングを突き止めろ!
カーネルモードデバッグ実践 : 今回の構成
ホスト
WinDBG
仮想マシン
ContosoApp
ネットワーク接続
(KDNET)
カーネルモードデバッグ実践 – 概要図
ContosoApp svchost.exe
(WMI ホスト)
WmiPrvSE.exe
(WMI プロバイダ)
ユーザーモード
ALPC ALPC
FLTMGR.SYS
カーネルモード
ContosoDrv.sys
登録関数
呼び出し
I/O 要求
知っていると良いコマンド
最低限知っておくべき
ドライバー関連
カーネル オブジェクト関連
メモリ利用状況関連
検証関連
※ Mex も Kernel Debug 用のコマンドあります!
!mex.tl, !mex.obj, !mex.fep, …
リファレンス
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/debugger/setting-up-kernel-mode-debugging-in-windbg--cdb--or-ntsd
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/kernel-mode-extensions
https://blogs.msdn.microsoft.com/ntdebugging/
https://blogs.msdn.microsoft.com/jpwdkblog/
https://blogs.technet.microsoft.com/askcorejp/2018/01/19/デスクトップ-ヒープの枯渇/
https://www.codemachine.com/article_x64deepdive.html
https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/writing-preoperation-callback-routines
Call to Action !
Step 1
Prepare
Step 2
Learn
Step 3
Apply
de:code 2019 CM10
JavaScript でデバッグ作業を自動化
日本マイクロソフト カスタマー サービス & サポート
シニア エスカレーション エンジニア
冷 春亮
デバッガ エクステンションを作れば良いが・・・
※ デバッガ エクステンションとは
拡張コマンドが含まれているモジュール
複数の複雑なコマンドや、たくさんのオブジェクトに対して実行する場合に利用
Visual Studio
Debugger SDK
ちょっと作るのにハードル高い・・・
そこで・・・
JavaScript
ビルド不要!ドキュメント多数!サンプル豊富!
※ 私は JavaScript 得意ではありません・・・
Demo : ウォーミングアップ
CPU 使用率 Top 5 を調べよう!
こんな感じで作ってみます!
① 名前空間を調べる
デバッガーのコマンド
② デバッガ API を調べる
Host APIs for
JavaScript Extensions
③ スクリプトを書く
Docs のサイト
JavaScript のドキュメント
GitHubのサンプル
※ 後ほど資料で共有します
kd> dx Debugger
デバッガの API の例
host.getModuleSymbolAddress(“module”, “GlobalVariableName”);
グローバル変数のアドレスを取得
host.diagnostics.debugLog(“Hello World”);
デバッグログを出力
host.namespace.Debugger.Utility.Control.ExecuteCommand(“vertarget”);
デバッガ コマンドを実行
host.currentSession.Processes[PID].Threads[TID].SwitchTo();
特定のプロセス・スレッド・フレームのコンテキストに切り替え
不正な実装をもつドライバーが存在する可能性
From alert to driver vulnerability: Microsoft Defender ATP investigation unearths privilege escalation flaw
https://www.microsoft.com/security/blog/2019/03/25/from-alert-to-driver-vulnerability-microsoft-defender-atp-investigation-unearths-privilege-escalation-flaw/
マルウェアでよく使われるコード インジェクション
Kernel lsass.exe
ZwAllocateVirtualMemory
Victim Thread
memcpy
KeInsertQueueApc
Userland
shellcode
RWX
ミッション: 以下の 2 つの JavaScript を作って自動実行!
◼ ZwAllocateVirtualMemory
◼ KeInsertQueueApc
上記スクリプトをダンプに自動実行する!CMD
SearchImports.js のおさらい
host.currentSession.Processes[4].Modules;
system プロセスのすべてのモジュールを取得
ExecuteCommand("!dh " + strModBaseAddr);
個々のモジュールに対して !dh コマンドを実行
search("Import Address Table Directory");
出力結果からImport Address Table の場所を探す
ExecuteCommand(“dps ” + IAT開始アドレス + IAT 終了アドレス);
dps コマンドでImport Address Tableをダンプ
search(“nt!KeInsertQueueApc”);
search("nt!ZwAllocateVirtualMemory");
ダンプの結果に関数名の文字列を探す
ミッション: 以下の 2 つの JavaScript を作って自動実行!
◼ ZwAllocateVirtualMemory
◼ KeInsertQueueApc
上記スクリプトをダンプに自動実行する!CMD
.scriptrun SearchImports.js
.scriptrun CreateProcessCallback.js
q
TXT
C:¥> Autodebug.cmd C:¥data¥memory.dmpCMD
kd.exe -z %1 -c "$$><C:¥js¥myscript.txt" > %1.myscript_result.txt
BAT
ダンプ解析の自動実行
ミッション: 以下の 2 つの JavaScript を作って自動実行!
◼ ZwAllocateVirtualMemory
◼ KeInsertQueueApc
上記スクリプトをダンプに自動実行する!CMD
まとめ - JavaScript 利用のメリット
開発が簡単!
デバッガが用意したデータにアクセス可能!
API 以外にも既存のコマンドを活用!
de:code 2019 CM10
ハードコア デバッギング : サポート直伝!
Windows カーネルモード デバッグ活用編!!
1. 事務連絡
2. 本セッション情報まとめ
本日の資料
http://aka.ms/cm10
✓使用したスライド
✓デモで使用したファイル
✓デモ動画
✓過去のセッションのリンク
Information
de:code 2019
本セッションの資料!- フライング公開!!
デバッグ作業での
繰り返し処理の自動化
ユーザーモードデバッグのみで
解決できない時の場合
カーネル モードデバッグの知識
JavaScript での効率化
本日の資料
http://aka.ms/cm10
本セッションのまとめ
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
© 2019 Microsoft Corporation. All rights reserved.
本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。

ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!