All Articles

A PART OF ANTI-VIRUS 2 - 公開サンプルコードで学ぶ Windows Antimalware Scan Interface(AMSI) - (WEB 版)

この記事では、技術書典 19 で無料頒布した A PART OF ANTI-VIRUS 2 - AMSI 編 - の内容を公開しています。

img

PDF 版については引き続き上記リンク先の技術書典オンラインマーケットページからダウンロードできます。

本書の内容はすべて、公式ドキュメントやその他の Web サイトに記載の情報、もしくは一般に公開されている書籍やソースコードなどの情報を元に作成しています。技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。また、本書に記載の内容は全て筆者自身の見解であり、所属する企業や組織を代表するものではありません。

本書のもくじ

本書について

本書をお手に取っていただき誠にありがとうございます。かしわば(@kash1064) と申します。

私は主にリバースエンジニアリングやフォレンジックの技術領域に関心を持っており、 最近はもっぱら、子育ての傍らさまざまなアプリケーションのソースコードや技術書を読む生活をしています。

また、本業はセキュリティ製品ベンダーのテクニカルサポートエンジニアで、これまでに 2 つのセキュリティ製品ベンダーにて、 Windows や Linux 用のアンチマルウェア製品のトラブルシューティングやデバッグを行ってきました。


本書では、前回頒布した「A part of Anti-Virus -サンプルコードで学ぶ Windows AntiVirus とミニフィルタドライバー-」1に続き、 公式の Windows classic samples リポジトリ2で公開されている AmsiStream および AmsiProvider のサンプルコードをベースに、 AMSI (Windows Antimalware Scan Interface) の概要と仕組みを解説します。


詳しくは 1 章に記載しますが、AMSI とは、従来のディスク上のファイルをスキャンする方法では検知できない動的なスクリプトベースのマルウェアなどへの対策として、Windows 10 から導入された仕組みです。

AMSI は Windows において PowerShell や Office VBA などさまざまなコンポーネントに統合されており、 システムにインストールされているアンチマルウェア製品と連動してユーザーとシステムを保護しています。3


このように、特定の脅威の検知のために非常に重要な保護機能として利用されている AMSI ですが、 その仕組みのわかりづらさも相まってか、残念ながらほとんどのユーザーや管理者にとってはなじみのない機能であるようです。

実際のところ、AMSI のような OS やアンチマルウェア製品が提供する多くのセキュリティ機能は ユーザーの可用性とのトレードオフにより提供されているため、 その制限や過検知などによってシステムの運用上の障害が発生する可能性がある点は事実です。


しかし、何らかの問題が発生した際、システムの管理者の各セキュリティ機能の重要性に関する理解が不十分な場合には、 リスクに対する検討が不十分なまま機能が無効化され、本来防げたはずの脅威による侵害を許してしまう恐れがあるため、 主要なセキュリティ機能の必要性については幅広いユーザーに理解してもらうことが重要と考えております。

そこで、本書では AMSI の概要や利点を紹介するとともに、 公開されているサンプルコードからその仕組みを解説することを通じて、 AMSI の機能について多くのユーザーに理解してもらうことを目的としています。

本書の内容について

本書では、AMSI の機能や利点について読者の理解を深めることを目的として、各章で以下の内容について解説します。

  • 1 章: AMSI の概要とその利点について解説します
  • 2 章: AmsiStream サンプルコードを使用し、AMSI によるスキャンをアプリケーションから要求するためのクライアントインターフェースについて解説します
  • 3 章: AmsiProvider サンプルコードを使用し、アプリケーションから受け取ったスキャン要求を AMSI プロバイダーが処理する方法を解説します
  • 4 章: AmsiProvider サンプルコードをカスタマイズし、特定のコンテンツの実行をブロックする AMSI プロバイダーを作成します
  • 5 章: 公開されている PowerShell のソースコードから、実際のアプリケーションがどのように AMSI を利用しているのかを解説します

なお、本書ではいわゆる AMSI Bypass と呼ばれる、AMSI による保護を回避して悪意のあるコードを実行する攻撃方法については扱いません。

謝辞

本書の執筆にあたり CTF チーム 0nePadding のメンバーに多大なるご協力を賜りました。

校正に協力いただいた 0nePadding のメンバーである 廣川 樹央 氏、@salty_byte 氏に深く感謝申し上げます。