本書の内容は全て、公式ドキュメントやその他 Web サイトに記載の情報、もしくは一般に公開されている書籍などの情報を元に作成しています。そのため、技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。また、本書に記載の内容は全て私自身の見解であり、所属する企業や組織を代表するものではありません。
技術書典 15 で無料頒布した Magical WinDbg -雰囲気で楽しむ Windows ダンプ解析とトラブルシューティング- の内容を公開しています。
PDF 版については引き続き上記リンク先の技術書典オンラインマーケットページからダウンロードできます。
本書のもくじ
- まえがき
- 1 章 環境構築
- 2 章 WinDbg の基本操作
- 3 章 解析に必要な前提知識
- 4 章 アプリケーションのクラッシュダンプを解析する
- 5 章 システムクラッシュ時のフルメモリダンプを解析する
- 6 章 プロセスダンプからユーザモードアプリケーションのメモリリーク事象を調査する
- 7 章 フルメモリダンプからユーザモードメモリリーク事象を調査する
- 付録 A WinDbg の Tips
- 付録 B Volatility 3 でクラッシュダンプを解析する
本書について
本書をお手に取っていただき誠にありがとうございます。かしわば(@kash1064) と申します。
私は主にリバースエンジニアリングやフォレンジックの技術領域に関心を持っており、普段は趣味で Capture the flag(CTF) と呼ばれるセキュリティコンテストに出場しています。
今回は、「技術書(同人誌)というフォーマットで、初めて Windows ダンプ解析に取り組む際の最初のとっかかりになる日本語の情報を発信すること」を目的として、主に Windows ダンプファイルの解析を中心とした Windows システムのトラブルシューティングに関するナレッジを紹介します。
しかし、本書は網羅的な Windows ダンプ解析の入門書となることを意図していない点について、予めご了承ください。
本書では、入門的な内容については参考になる情報ソースを案内しつつ、様々なツールを活用しながら Windows ダンプファイルを読み進めていく構成としています。
本書を執筆した目的
私が初めて Windows のダンプ解析に取り組んだ際、まず感じたことは Windows のダンプ解析に関する情報の少なさでした。
公式ドキュメントのチュートリアルやコマンドリファレンスはある程度充実していますが、実際にそれらの情報を元にダンプファイルの解析を進めることは当時の私には少々ハードルが高かったです。
また、インターネット上で検索した情報の多くも、「ダンプファイルをデバッガにロードして !analyze -v
を実行する」といった程度の内容のものが多く、自分がダンプファイルを解析するために知りたい情報を中々見つけることができませんでした。
そのような中で私が何とか解析を続けることができたのは、「Windows ダンプの極意 エラーが発生したら、まずダンプ解析!」1という書籍の存在が最も大きかったと感じています。
この書籍は、残念ながら本書の執筆時点ではすでに絶版となってしまっておりますが、私が知る限り Windows のダンプ解析について詳細な解説が日本語で記述された唯一の書籍です。
他に、日本語に翻訳された書籍としては、「インサイド Windows 第 6 版 下」2におよそ 50 ページのクラッシュダンプ解析に関する章が存在していましたが、こちらも残念ながら第 7 版から削除されてしまいました。
このように、少なくとも私が知る限り Windows ダンプ解析に関して入門的な情報が記載された日本語の書籍は現在出版されていません。
また、インターネット上でも有益な情報がまとめられた日本語の記事は中々見つからない状況です。
Windows ダンプ解析を行う機会に恵まれた方が、アクセス可能な情報が少ないために最初のとっかかりを掴めず、解析から離れてしまうことは非常に残念なことです。
このような理由から、Windows ダンプ解析に取り組む方のとっかかりになるよう、また、少しでも多くの方が Windows のダンプファイルの解析に関心を持つきっかけとなるよう、本書を執筆いたしました。
こうして読者の方に本書を手に取っていただいた時点で、本書を執筆した目的の 90 % 以上は達成されていると言っても過言ではありません。
改めてお礼申し上げます。
ぜひ、本書を通して Windows ダンプの解析を一緒に楽しんでいきましょう。
本書の内容について
前述の通り、本書では主に Windows ダンプファイルの解析を中心とした Windows システムのトラブルシューティングに関するナレッジを紹介します。 しかし、本書は網羅的な Windows ダンプ解析の入門書となることを意図しておりません。
Windows のダンプファイルの解析のためには、OS やプログラムの仕組みについて幅広い前提知識が必要ですが、これらの前提知識に関しては入門向けの質の良い情報がいくつも存在するため、本書では詳しく取り扱いません。
また、本書でダンプ解析に使用するツールである WinDbg の使い方やコマンドについては、WinDbg に付属のヘルプや 公式のドキュメント3 が十分に網羅しています。
そのため、本書では入門的な知識やツールの操作方法などについては参考情報として記載する書籍や Web ページを参照いただくことを前提とし、できる限り Windows のダンプ解析にフォーカスしていきたいと考えています。
なお、扱いたい内容が 1 冊に収まりきらないため、部を分けて執筆する予定です。
Vol.1 となる本書では以下の内容を扱います。
- アプリケーションクラッシュが発生した際のユーザーモードのプロセスダンプを解析してみる
- ユーザーモードプロセスのメモリリークを、プロセスダンプとフルメモリダンプのそれぞれから解析してみる
- システムのクラッシュが発生した際に出力されたフルメモリダンプを解析してみる
本書では、Windows 10 22H2 上に用意した環境で、主に以下のツールを使用して解析を行います。
- WinDbg x64 (Classic)
- WinDbg (Windows アプリ)
- GFlags
- PowerShell
- Process Monitor
- Process Explorer
- ProcDump
- VMMap
- RAMMap
- リソースモニター
- タスクマネージャー
- レジストリエディター
- Ghidra バージョン 10.2.3
本書ではできるだけダンプ解析に対する抵抗感を小さくできるよう、複数のツールを使用して様々なアプローチから解析を楽しむことを目指しています。
そのため、実際に業務などで Windows のダンプ解析を行う場合には使用しないようなツールも複数含まれている点についてはご了承ください。
詳細な環境構築の手順については 1 章で解説します。
なお、非常に残念なことに、Vol.1 では WinDbg を使用したアプリケーション / カーネルのライブデバッグについては扱いません。
特定の条件下を指定したブレークポイントの設定や gflags の利用、メモリ情報の改ざんなど、ライブデバッグならではの面白いトラブルシューティングのテクニックなどの紹介をしたいのは山々ですが、Vol.1 では割愛させていただきます。
ただし、ダンプファイルの解析よりもライブデバッグに関心がある方向けにいくつか参考情報を紹介しておきますので、もしよければご参照ください。4567
「解析魔法少女美咲ちゃん マジカル・オープン!」4と「デバッガによるx86プログラム解析入門 x64 対応版」5 は、WinDbg は使用しませんがユーザモードのデバッグに関する入門的な内容についてわかりやすく解説されています。
「Inside Windows Debugging」6と「Advanced Windows Debugging」7はどちらも英語ですが、カーネルデバッグを含む WinDbg を使用したデバッグ手法について詳しい解説があります。
「Advanced Windows Debugging」は少々古いですが、ぎりぎり Windows Vista に対応しており、今の OS 環境でもそのまま使える情報が多いです。
想定読者
本書の内容については以上の通りです。
本書では以下のような方を想定読者としています。
- C 言語やアセンブリについて多少の知識はあるが、Windows のダンプ解析は初めての方
- CTF のリバースエンジニアリング問題に興味があり、WinDbg を使ってみたい方
- Windows のダンプ解析を行ったことがあるものの、何となく苦手意識のある方
一方で、以下のような方には本書の内容は期待に沿えない可能性が高い点、予めご了承ください。
- すでにトラブルシューティングやダンプ解析に関する十分な知識を有しており、より専門的な情報をお求めの方
- Windows システムの内部的な挙動について詳しく知りたい方
著者紹介
かしわば(@kash1064) です。
セキュリティが好きで、特にリバースエンジニアリングやフォレンジックについて特に関心があります。
主な保有資格は CISSP、OSCP です。
普段は趣味で Capture the flag(CTF) と呼ばれるセキュリティコンテストに、0nePadding というチームで参加しています。
日々バイナリやログの解析やトラブルシューティング手法について学んでおり、その中でも特に Windows プログラムやシステムダンプファイルの解析を好んで行っています。
なお、私は Microsoft Japan に所属していますが、本書に記載の内容は全て私自身の見解であり、所属する企業や組織を代表するものや、特定の製品やサービスのステルスマーケティングを行うものでもはありません。
また、本書の内容は全て、公式ドキュメントやその他 Web サイトに記載の情報、もしくは一般に公開されている書籍などの情報を元に作成しています。
本書で技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。
謝辞
本書の執筆にあたり CTF チーム 0nePadding のメンバーに多大なるご協力を賜りました。
校正に協力いただいた 0nePadding のメンバーである @r1k0t3k1
氏、@salty_byte
氏、@t0m3y
氏に深く感謝申し上げます。
各章へのリンク
- まえがき
- 1 章 環境構築
- 2 章 WinDbg の基本操作
- 3 章 解析に必要な前提知識
- 4 章 アプリケーションのクラッシュダンプを解析する
- 5 章 システムクラッシュ時のフルメモリダンプを解析する
- 6 章 プロセスダンプからユーザモードアプリケーションのメモリリーク事象を調査する
- 7 章 フルメモリダンプからユーザモードメモリリーク事象を調査する
- 付録 A WinDbg の Tips
- 付録 B Volatility 3 でクラッシュダンプを解析する
-
Windows ダンプの極意 エラーが発生したら、まずダンプ解析! (上原 祥市 著 / アスキーメディアワークス / 2008 年)
↩ -
インサイド Windows 第 6 版 下 (Mark E. Russinovich・David A. Solomon・Alex Ionescu 著 / 株式会社クイープ 訳 / 日系 BP 社 / 2013 年)
↩ -
Microsoft Learn https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/
↩ -
解析魔法少女美咲ちゃん マジカル・オープン!(やねう解析チーム 著 / 秀和システム / 2004 年)
↩ -
デバッガによるx86プログラム解析入門 x64 対応版 (Digital Travesia管理人 うさぴょん 著 / 集和システム / 2018 年)
↩ -
Inside Windows Debugging (Tarik Soulami 著 / Microsoft Press / 2012 年)
↩ -
Advanced Windows Debugging (Daniel Hewardt, Mario Pravat 著 / 2007 年 )
↩