SlideShare a Scribd company logo
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日) 時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。

More Related Content

PDF
Amazon Redshift 概要 (20分版)
PDF
ソフトウェア構成管理入門
PDF
L2延伸を利用したクラウド移行とクラウド活用術
PDF
Amazon redshiftのご紹介
ODP
Guide To AGPL
PDF
IT エンジニアのための 流し読み Windows 10 - Microsoft Defender ウイルス対策
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
文字コードに起因する脆弱性とその対策(増補版)
Amazon Redshift 概要 (20分版)
ソフトウェア構成管理入門
L2延伸を利用したクラウド移行とクラウド活用術
Amazon redshiftのご紹介
Guide To AGPL
IT エンジニアのための 流し読み Windows 10 - Microsoft Defender ウイルス対策
20220409 AWS BLEA 開発にあたって検討したこと
文字コードに起因する脆弱性とその対策(増補版)

What's hot (20)

PPTX
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!
PPTX
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
PDF
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
PPTX
データ活用を俊敏に進めるためのDataOps実践方法とその高度化のためのナレッジグラフ活用の取り組み(NTTデータ テクノロジーカンファレンス 2020 ...
PDF
イミュータブルデータモデルの極意
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
PDF
20180703 AWS Black Belt Online Seminar Amazon Neptune
PDF
Azure Monitor Logで実現するモダンな管理手法
PDF
IT エンジニアのための 流し読み Windows - Windows のライセンス認証 & サブスクリプションのライセンス認証
PPTX
画像ベース異常検知Amazon Lookout for Visionを使ってみよう
PPTX
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
PDF
AWSのログ管理ベストプラクティス
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPTX
グラフデータベース入門
PPTX
脱 Excel設計書
PDF
そんなトランザクションマネージャで大丈夫か?
PDF
アクセスプラン(実行計画)の読み方入門
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PPT
SQLインジェクション再考
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
第34回Office 365勉強会 : Microsoftサポート活用術 ~ Microsoft Azureを中心に ~
データ活用を俊敏に進めるためのDataOps実践方法とその高度化のためのナレッジグラフ活用の取り組み(NTTデータ テクノロジーカンファレンス 2020 ...
イミュータブルデータモデルの極意
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
20180703 AWS Black Belt Online Seminar Amazon Neptune
Azure Monitor Logで実現するモダンな管理手法
IT エンジニアのための 流し読み Windows - Windows のライセンス認証 & サブスクリプションのライセンス認証
画像ベース異常検知Amazon Lookout for Visionを使ってみよう
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
AWSのログ管理ベストプラクティス
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
グラフデータベース入門
脱 Excel設計書
そんなトランザクションマネージャで大丈夫か?
アクセスプラン(実行計画)の読み方入門
ドメイン駆動設計に15年取り組んでわかったこと
SQLインジェクション再考
Ad

More from TAKUYA OHTA (20)

PDF
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
PDF
IT エンジニアのための 流し読み Windows - Windows 共有 PC モード
PDF
IT エンジニアのための 流し読み M365 - Microsoft Defender for Endpoint 概要
PDF
IT エンジニアのための 流し読み Windows - Microsoft Defender ウイルス対策
PDF
IT エンジニアのための 流し読み Windows - Windows 11 SE アプリケーションの管理
PDF
IT エンジニアのための 流し読み Windows - Windows 11 SE おさえておきたい 8 のポイント
PDF
IT エンジニアのための 流し読み Windows - Windows 11 のクリーン インストール
PDF
IT エンジニアのための 流し読み Windows - Windows 11 へのアップグレード
PDF
Microsoft デスクトップ仮想化ソリューション比較
PDF
IT エンジニアのための 流し読み Windows - Windows 365 ってどんな感じ? - せっかちなあなたへ編 -
PDF
IT エンジニアのための 流し読み Windows 10 - IE11 のサポート終了と Microsoft Edge について
PDF
IT エンジニアのための 流し読み Microsoft 365 - 入門!Microsoft Defender for Endpoint クロスプラットフ...
PDF
IT エンジニアのための 流し読み Microsoft 365 - 入門!Microsoft Defender ATP
PDF
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
PDF
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
PDF
IT エンジニアのための 流し読み Windows 10 - Windows サンドボックス
PDF
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
PDF
IT エンジニアのための 流し読み Windows 10 - Windows 10 サブスクリプションのライセンス認証
PDF
IT エンジニアのための 流し読み Windows 10 - Microsoft の更新プログラム管理インフラ比較 ~ WU / WSUS / SCCM ...
PDF
IT エンジニアのための 流し読み Windows 10 - 入門!Windows Server Update Services (WSUS)
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
IT エンジニアのための 流し読み Windows - Windows 共有 PC モード
IT エンジニアのための 流し読み M365 - Microsoft Defender for Endpoint 概要
IT エンジニアのための 流し読み Windows - Microsoft Defender ウイルス対策
IT エンジニアのための 流し読み Windows - Windows 11 SE アプリケーションの管理
IT エンジニアのための 流し読み Windows - Windows 11 SE おさえておきたい 8 のポイント
IT エンジニアのための 流し読み Windows - Windows 11 のクリーン インストール
IT エンジニアのための 流し読み Windows - Windows 11 へのアップグレード
Microsoft デスクトップ仮想化ソリューション比較
IT エンジニアのための 流し読み Windows - Windows 365 ってどんな感じ? - せっかちなあなたへ編 -
IT エンジニアのための 流し読み Windows 10 - IE11 のサポート終了と Microsoft Edge について
IT エンジニアのための 流し読み Microsoft 365 - 入門!Microsoft Defender for Endpoint クロスプラットフ...
IT エンジニアのための 流し読み Microsoft 365 - 入門!Microsoft Defender ATP
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
IT エンジニアのための 流し読み Windows 10 - Windows サンドボックス
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows 10 サブスクリプションのライセンス認証
IT エンジニアのための 流し読み Windows 10 - Microsoft の更新プログラム管理インフラ比較 ~ WU / WSUS / SCCM ...
IT エンジニアのための 流し読み Windows 10 - 入門!Windows Server Update Services (WSUS)
Ad

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