この記事では、技術書典 17 で無料頒布した A PART OF ANTI-VIRUS - サンプルコードで学ぶ Windows AntiVirus とミニフィルタドライバー - の内容を公開しています。
PDF 版については引き続き上記リンク先の技術書典オンラインマーケットページからダウンロードできます。
今回は、技術同人誌/技術を取り巻く様々な執筆 Advent Calendar 2024 の 12/7 分の記事として公開します。
昨日の記事は @Kerdy さんの 売り子として持って行って良かったもの、悪かったもの でした。
本書の内容は全て、公式ドキュメントやその他 Web サイトに記載の情報、もしくは一般に公開されている書籍などの情報を元に作成しています。技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。また、本書に記載の内容は全て私自身の見解であり、所属する企業や組織を代表するものではありません。
本書で紹介する AntiVirus ソフトウェアの実装に関する情報は、すべて Scanner File System Minifilter Driver のサンプルコードに関するものであり、特定のベンダが提供している商用ソフトウェアの実装については一切言及いたしません。1
また、公開されているドライバのサンプルコードは、商用ソフトウェアの実際の実装とは異なる場合がある点に注意が必要です。
本書のもくじ
- まえがき
- 1 章 本書で使用する環境のセットアップ
- 2 章 ファイルシステムミニフィルタドライバー入門
- 3 章 Scanner のサンプルコードを読む
- 4 章 WinDbg で Scanner をカーネルデバッグする
本書について
本書をお手に取っていただき誠にありがとうございます。かしわば(@kash1064) と申します。
私は主にリバースエンジニアリングやフォレンジックの技術領域に関心を持っており、 普段は趣味で Capture The Flag(CTF) と呼ばれるセキュリティコンテストに出場しています。
本業はセキュリティ製品ベンダのテクニカルサポートエンジニアで、これまでに 2 つのセキュリティ製品ベンダにて、 Windows や Linux 用 AntiVirus ソフトウェアのトラブルシューティングやデバッグを行ってきました。
本書では、公式の Windows Driver Samples リポジトリ2 で公開されている Scanner File System Minifilter Driver のサンプルコードをベースに、 Windows 用 AntiVirus ソフトウェアのリアルタイムファイルスキャンのしくみを解説します。
AntiVirus ソフトウェアのリアルタイムファイルスキャンはオンアクセススキャンなどとも呼ばれており、 多くの商用 AntiVirus ソフトウェアで実装されている機能です。
この機能により、AntiVirus ソフトウェアはシステムにおけるユーザやプログラムのファイル操作の監視を行い、 マルウェア(Malware)と呼ばれる不正ファイルの作成や実行を検出し、その操作をブロックすることができます。
なお、昨今の Windows 用 AntiVirus ソフトウェアでは様々な種類の脅威やマルウェアの亜種に対応するため、 ファイル以外にもプロセスの起動時の動作やメモリ内のコンテンツなど、様々な対象を監視している場合があります。
これらの監視機能はリアルタイムファイルスキャンとは異なるしくみを用いて実現いる場合がありますが、 本書ではこのようなプロセスの監視やメモリスキャンなどの機能については扱いません。
前述の通り、本書は Scanner のサンプルコードを通して多くの AntiVirus ソフトウェアが リアルタイムファイルスキャン機能の実装に使用しているテクノロジを学ぶことを目的としています。
本書で使用する Scanner のサンプルコードは、カーネルモードで動作するファイルシステムミニフィルタドライバーと ユーザモードで動作するクライアントプログラムの 2 つのコンポーネントで構成されています。
Scanner のサンプルコードは非常にシンプルな実装であり、かつコメントが非常に充実しているため、 Windows のカーネルドライバの開発について最低限の知識があれば簡単に読み進めることができます。
Scanner のサンプルコードを読むことで、Windows のファイルシステムミニフィルタドライバーを使用して ファイル内のデータをスキャンする AntiVirus ソフトウェアの実装について理解を深めることができます。
なお、Windows Driver Samples リポジトリの中には Scanner の他に AvScan File System Minifilter Driver という、 トランザクションに対応したファイルスキャナーのサンプルコードも含まれています。
Scanner のサンプルコードがコメントを含めておよそ 2,500 行程度であるのに対し、 AvScan のサンプルコードはコメントを含めて 10,000 行程度のボリュームがあります。
本書ではよりシンプルな実装である Scanner のサンプルコードを使用するため AvScan については扱いませんが、 AvScan も Scanner 同様コメントが充実しており非常に読みやすいサンプルですので、 Windows 用の AntiVirus ソフトウェアについてさらに理解を深めたい場合にはこちらも参照いただくと良いと思います。
本書を執筆した目的
今日では、ほとんどの Windows マシンでリアルタイムファイルスキャン(オンアクセススキャン)機能を持つ AntiVirus ソフトウェアが稼働しています。
しかし、AntiVirus ソフトウェアはほとんどの PC ユーザに身近なソフトウェアであるにも関わらず、 その詳しい実装については公開されている情報が極めて少なく、AntiVirus ソフトウェアのしくみについて大きな誤解を持つユーザも少なくないのが実状です。
本書で使用する Scanner はあくまでサンプルコードとして用意されたものであるため、 一般に利用される商用ソフトウェアの実際の挙動とは大きく異なる部分はあるものの、 AntiVirus ソフトウェアのリアルタイムファイルスキャンのしくみを理解する上で非常に役に立ちます。
本書では、Microsoft が公開しているサンプルコードを通して Windows 用の AntiVirus ソフトウェアが リアルタイムファイルスキャンに利用しているテクノロジを解説することで、 読者が AntiVirus ソフトウェアのしくみを学ぶ助けとなることを目的としています。
本書が AntiVirus ソフトウェアのしくみに関心を持つ読者の役に立つことを願っております。
本書の内容について
本書は Scanner File System Minifilter Driver のサンプルコードを使用し、 以下の各章に分けて Windows 用 AntiVirus のリアルタイムファイルスキャンのしくみについて解説します。
- 1 章:Scanner をビルドしてデバッグするための環境構築
- 2 章:Windows のファイルシステムミニフィルタドライバーについて
- 3 章:Scanner のサンプルコードの解説
- 4 章:WinDbg で Scanner をデバッグする
本書では、AntiVirus ソフトウェアの動作確認のために、 Windows Server 2019 の仮想マシンを作成し、WinDbg によるカーネルデバッグを行います。
1 章では、本書の内容を実践するためにセットアップが必要なコンポーネントについて紹介します。
ただし、仮想マシンの作成やカーネルデバッグの準備など、環境構築に関する具体的な手順については本書では扱いません。
これらの情報については、技術書典 16 で無料頒布している Magical WinDbg 23 にて詳しく解説しています。
2 章では、Scanner のサンプルコードを読む前に、非常に小さなミニフィルタドライバーのサンプルである nullFilter のコードを通して、 Windows のミニフィルタドライバーに関する入門的な情報を解説します。
3 章および 4 章では、Scanner のサンプルコードについて解説しつつ、 WinDbg を使用したカーネルデバッグにより Scanner の実際の動作を確認します。
なお、本書ではリアルタイムファイルスキャン以外の AntiVirus ソフトウェアの機能については扱いません。
また、マルウェアを検出するためのパターンファイルシグネチャやヒューリスティック、 そして Antivirus Evasion と呼ばれる検出バイパス手法などについても扱いません。
もし AntiVirus ソフトウェアの検出テクノロジの詳細や検出バイパス手法について関心がある場合は、 以下の書籍やマルウェアの開発手法について学習できるオンラインコースを提供している Maldev Academy4 のトレーニングモジュールなどが参考になると思います。
- The Antivirus Hacker’s Handbook (Joxean Koret, Elias Bachaalany 著 / Wiley / 2015 年)
- Antivirus Bypass Techniques: Learn practical techniques and tactics to combat, bypass, and evade antivirus software (Nir Yehoshua, Uriel Kosayev 著 / Packt Publishing / 2021 年)
本書の想定する読者について
本書では C プログラミングと Windows カーネルドライバに関する最低限の知識があることを前提としております。
そのため、本書ではフィルタドライバーやカーネルドライバ開発に関する入門的な内容を網羅した解説は行いません。
もし、Windows のカーネルドライバ開発に関心がある場合は、以下の書籍などが参考になると思います。
- Windows Kernel Programming, Second Edition (Pavel Yosifovich 著 / Independently published / 2023 年)
- WDM デバイスドライバプログラミング完全ガイド 上・下 (Edward N.Dekker, Joseph M.Newcomer 著 / クイック 翻訳 / アスキー / 2000 年)
特に、Windows Kernel Programming はカーネルドライバ開発のための環境構築から、本書で扱うファイルシステムミニフィルタドライバーまで幅広く解説されています。
英語で書かれた書籍を読むハードルが高い場合には、Windows Kernel Programming 初版の邦訳である「Windows カーネルドライバプログラミング (Pavel Yosifovich 著 / 吉川 邦夫 翻訳 / 翔泳社 / 2021 年)」もおすすめです。
本書の執筆時点では日本語訳が出版されていない Second Edition の方が情報量が多いですが、 カーネルドライバ開発のための環境構築やファイルシステムミニフィルタドライバーについては初版でも十分に解説されています。
謝辞
本書の執筆にあたり CTF チーム 0nePadding のメンバーに多大なるご協力を賜りました。
校正に協力いただいた 0nePadding のメンバーである @salty_byte 氏、廣川 樹央 氏に深く感謝申し上げます。
-
リアルタイムファイルスキャン(オンアクセススキャン)機能やパターンマッチングの手法など、一般的な AntiVirus ソフトウェアの使用する機能や技術として知られている項目を除きます。
↩ -
Windows Driver Samples - scanner: https://github.com/microsoft/Windows-driver-samples/tree/main/filesys/miniFilter/scanner
↩ -
Magical WinDbg 2 -CTFで学ぶユーザモード&カーネルデバッギング-:https://techbookfest.org/product/6hBEkTPSxJC5vSRTqa81F9
↩ -
Maldev Academy https://maldevacademy.com/
↩