本書の内容は全て、公式ドキュメントやその他 Web サイトに記載の情報、もしくは一般に公開されている書籍などの情報を元に作成しています。そのため、技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。また、本書に記載の内容は全て私自身の見解であり、所属する企業や組織を代表するものではありません。
技術書典 16で無料頒布した Magical WinDbg 2 - CTF で学ぶユーザモード & カーネルデバッギング - の内容を公開しています。
本書のもくじ
- まえがき
- 1 章 環境構築
- 2 章 DoPClient と DoPDriver の表層解析
- 3 章 DoPClient の静的解析を行う
- 4 章 DoPClient を動的解析する
- 5 章 DoPDriver の静的解析を行う
- 6 章 DoPDriver を動的解析する
本書について
本書をお手に取っていただき誠にありがとうございます。かしわば(@kash1064) と申します。
私は主にリバースエンジニアリングやフォレンジックの技術領域に関心を持っており、普段は趣味で Capture The Flag(CTF) と呼ばれるセキュリティコンテストに出場しています。
今回は、CTF の Reversing(リバースエンジニアリング) 問題を題材に、WinDbg を使用した Windows のユーザモードとカーネルモードのデバッグテクニックについて紹介していきます。
CTF で出題される一般的な Reversing 問題では、挑戦者は与えられた実行ファイルを様々なツールやテクニックを用いて解析(リバースエンジニアリング)し、正解となるキーワード(Flag)を取得することを目標としています。
典型的な Reversing 問題では、挑戦者は以下のようなステップで解析を行います。
- プログラムの種類やメタデータ、ヘッダ情報などから対象のプログラムの概要を把握します。(表層解析)
- 逆アセンブルツール(またはデコンパイラ)を用いて対象のプログラムをアセンブリコードや疑似 C コードに復元し、プログラムを実行することなくその実装を把握します。(静的解析)
- 実際にプログラムを実行し、動作確認を行います。また、WinDbg や gdb などのデバッガを用いてプログラムの動作を一時停止し、CPU のレジスタやメモリ内の情報を参照/変更することでプログラムの実装を把握します。(動的解析)
- 各ステップで実施した解析結果からプログラムの全体像を暴き、本来ユーザが知りえない情報(パスワードなど)を特定することで、正解となるキーワード(Flag)を取得します。
本書でも Flag を取得するために上記のステップでプログラムの解析を行い、その中で WinDbg を使用した Windows のユーザモードとカーネルモードのデバッグテクニックについて紹介していきます。
なお、本書は技術書典 15 で頒布した「Magical WinDbg -雰囲気で楽しむ Windows ダンプ解析とトラブルシューティング-」1 と同じく、Windows デバッギングに関する入門的な情報を網羅することを意図しておりません。
本書では、入門的な内容については参考になる情報ソースを併記しつつ、ハンズオン形式で Windows デバッギングを楽しむ構成としています。
本書を執筆した目的
本書では、最新の WinDbg で利用可能なデバッガスクリプトや、カーネルデバッガを使用したカーネルドライバモジュールの解析手法について紹介します。
現在のところ、Windows の実行ファイルのデバッグに関する情報は豊富に存在するものの、デバッガとして WinDbg を使用する方法や Windows のカーネルデバッグについて日本語でアクセス可能な情報は非常に少ないと感じています。
特に、現在インストール可能な最新の WinDbg では、JavaScript によるデバッガスクリプト 2 などの強力なデバッガ機能を利用できますが、これらの比較的新しい機能に関するナレッジは不足していると感じます。
また、Windows カーネルデバッグについては、解析に必要な前提知識がより高度になることもあり情報が少なく、特に日本語で書かれた書籍は私が把握している限りほとんどありません。
このような状況の中で、WinDbg を使用したデバッグ手法や Windows のカーネルデバッギングに関する日本語の情報を少しでも多く増やしたく、本書を執筆しました。
本書は WinDbg による Windows デバッグに関する入門的な情報を網羅するものではありませんが、WinDbg や Windows のカーネルデバッグに関心を持ち、取り組む方の助けになることを願っております。
本書の内容について
前述の通り、本書では CTF の Reversing 問題を題材に、WinDbg を使用した Windows のユーザモードとカーネルモードのデバッグテクニックについて紹介していきます。
なお、Windows のデバッグ、特にカーネルデバッグを行うためには、Windows OS やプログラムの仕組みについて幅広い前提知識が必要です。
しかし、これらの前提知識については入門向けの質の良い情報が複数存在するため、本書では詳しく取り扱いません。
また、本書でデバッグに使用するツールである WinDbg のコマンド操作などについては、WinDbg に付属のヘルプや 公式のドキュメント3 が十分に網羅しているため、こちらも本書では詳しくは扱いません。
ただし、解析に必要となる前提知識に関する情報ソースについては可能な限り注釈で紹介します。
以上の通り、本書では前提となる知識やツールの操作方法などについては参考情報として記載する書籍や Web ページを参照いただくものとし、できる限り Windows のデバッグにフォーカスする内容としています。
本書では、CTF の Reversing 問題を模した実行プログラムとカーネルドライバモジュールを使用して以下のステップで解析を行います。
- 2 章では、解析対象のプログラムの表層解析を行い、プログラムの概要や種類などの情報を把握します。
- 3 章では、Binary Ninja などの解析ツールを使用して、ユーザモードプログラムの静的解析を行います。
- 4 章では、3 章の解析結果を元に、WinDbg を使用してユーザモードプログラムのデバッグを行い、正解となる Flag を取得します。
- 5 章では、再度 Binary Ninja などの解析ツールを利用して、カーネルドライバモジュールの静的解析を行います。
- 6 章では、5 章の解析結果を元に WinDbg で Windows のカーネルデバッグを行い、正解となる Flag を取得します。
Windows のデバッグのために参考になる書籍
なお、本書で取り扱わない内容を含め、Windows プログラムのデバッグに関心がある方向けにいくつかの参考書籍を紹介します。
すべては紹介しきれないものの、これから Windows プログラムのデバッグを始める方の参考になれば幸いです。
「解析魔法少女美咲ちゃん マジカル・オープン!」4 と「デバッガによるx86プログラム解析入門 x64 対応版」5 は、WinDbg は使用しないものの、Windows のユーザデバッグに関する入門的な内容についてわかりやすく解説されているのでおすすめです。
また、「Inside Windows Debugging」8 と「Advanced Windows Debugging」9 はどちらも英語の書籍ですが、カーネルデバッグを含む WinDbg を使用したデバッグ手法について詳しい解説が行われている数少ない書籍の 1 つです。
「Advanced Windows Debugging」は少々古いですが、一部 Windows Vista にも対応しており、今の OS 環境でもそのまま使える情報が多いです。
他に、「インサイド Windows 上・下」10 11 も、Windows のコンポーネントの詳細を調べるために最も有益な書籍の 1 つです。
さらに、「Practical Malware Analysis」12 や「The Art of Memory Forensics」13 も、WinDbg を利用したカーネルデバッグやドキュメント化されていない Windows の内部動作について詳しく記載されており、非常に参考になります。
著者紹介
かしわば(@kash1064) です。
セキュリティが好きで、特にリバースエンジニアリングやフォレンジックについて特に関心があります。
主な保有資格は CISSP、OSCP です。
普段は趣味で Capture The Flag(CTF) と呼ばれるセキュリティコンテストに、0nePadding というチームで参加しています。
日々バイナリやログの解析やトラブルシューティング手法について学んでおり、その中でも特に Windows プログラムやシステムダンプファイルの解析を好んで行っています。
Windows のダンプ解析手法については技術書典 15 で頒布した「Magical WinDbg -雰囲気で楽しむ Windows ダンプ解析とトラブルシューティング-」1 で紹介しています。
こちらも本書同様無料で頒布しているので、ぜひお気軽にご取得ください。
なお、私は Microsoft Japan に所属していますが、本書に記載の内容は全て私自身の見解であり、所属する企業や組織を代表するものや、特定の製品やサービスのステルスマーケティングを行うものではありません。
また、本書の内容は全て、公式ドキュメントやその他 Web サイトに記載の情報、もしくは一般に公開されている書籍などの情報を元に作成しています。
本書で技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。
謝辞
本書の執筆にあたり CTF チーム 0nePadding のメンバーに多大なるご協力を賜りました。
校正に協力いただいた 0nePadding のメンバーである @r1k0t3k1
氏、@salty_byte
氏に深く感謝申し上げます。
-
Magical WinDbg Magical WinDbg -雰囲気で楽しむ Windows ダンプ解析とトラブルシューティング- https://techbookfest.org/product/bnaHM8sVz6AfEiF8jgpELj
↩ -
JavaScript デバッガーのスクリプト https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/javascript-debugger-scripting
↩ -
Microsoft Learn https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/
↩ -
解析魔法少女美咲ちゃん マジカル・オープン!(やねう解析チーム 著 / 秀和システム / 2004 年)
↩ -
デバッガによる x86 プログラム解析入門 x64 対応版 (Digital Travesia管理人 うさぴょん 著 / 集和システム / 2018 年)
↩ -
詳解セキュリティコンテスト CTF で学ぶ脆弱性攻略の技術 (梅内 翼, 清水 祐太郎, 藤原 裕大, 前田 優人, 米内 貴志, 渡部 裕 著 / マイナビ出版 / 2021 年)
↩ -
Inside Windows Debugging (Tarik Soulami 著 / Microsoft Press / 2012 年)
↩ -
Advanced Windows Debugging (Daniel Hewardt, Mario Pravat 著 / 2007 年)
↩ -
インサイド Windows 第 7 版 上 (Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich, David A. Solomon 著 / 山内 和朗 訳 / 日系 BP 社 / 2018 年)
↩ -
インサイド Windows 第 7 版 下 (Andrea Allievi, Alex Ionescu 著 / 山内 和朗 訳 / 日系 BP 社 / 2022 年)
↩ -
Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software (Michael Sikorski, Andrew Honig 著 / No Starch Press / 2012 年)
↩ -
The Art of Memory Forensics: Detecting Malware and Threats in Windows, Linux, and MAC Memory (Michael Hale Ligh, Andrew Case, Jamie Levy, Aaron Walters 著 / John Wiley & Sons Inc / 2014 年)
↩ -
Magical WinDbg Magical WinDbg -雰囲気で楽しむ Windows ダンプ解析とトラブルシューティング- https://techbookfest.org/product/bnaHM8sVz6AfEiF8jgpELj
↩