カスタマイズ可能なマルウェア検知ツールYAMA
攻撃のファイルレス化やマルウェアの難読化が進むにつれて、ファイル単体で悪意の有無を判断することは難しくなっています。そのため、現在ではサンドボックスやAIなどを活用したマルウェア検知手法やEDRなどのマルウェア感染後の不審な挙動を検知する技術が一般化しています。それでも、インシデントレスポンスの現場ではウイルス対策ソフトでは検知できないマルウェアが見つかることが多々あります。このような未知のマルウェアが見つかると、同種のマルウェアがネットワーク内部に潜伏していることを網羅的に調査することになりますが、ウイルス対策ソフトでは検知できないため、1台ずつ手動で調査する必要があります。
このような問題を解決するためにJPCERT/CCでは、マルウェア検知をサポートする目的でYAMAというツールを作成し、公開しました。YAMAは、自身で作成したYARAルールを使用してメモリスキャンをすることが可能です。そのため、難読化されたマルウェアやファイルレス攻撃に対しても効果があります。YAMAは、次のGitHubレポジトリで公開していますので、ご自由にお使いください。
GitHub JPCERTCC/YAMA: https://github.com/JPCERTCC/YAMA
以降では、YAMAのコンセプトや使用方法について紹介します。
コンセプト
本ツールは、以下の特徴を持っています。
- 動作中のWindowsマシンのメモリにYARAスキャンを実施
- カスタムYARAルールを記述することで、各ユーザーのニーズに合わせたマルウェア検出が可能
- ツールのインストール不要(ログをEvent Logに出力する際は、実行時にEvent Message Fileをインストールする必要あり)
- 検出結果をテキスト/JSON形式で出力
ファイルに対してYARAルールでスキャンしたり、個別のプロセスのスキャンを行うことは、現状のYARAを使用すれば可能です。しかし、未知のマルウェアの有無を調査するために、ライブメモリ全体を調査することは、現状のツールではできません。YAMAを使えば、ライブメモリ全体を調査することが可能になり、難読化されたマルウェアやファイルレス攻撃にも対応可能になります。また、ツールを使用するためにインストールする必要ないため、ツールを複数マシンに展開して調査をすることも容易に実現可能です。
使い方
以下では、本ツールの使用方法について説明します。詳細に関しては、Wikiをご覧ください。
https://github.com/JPCERTCC/YAMA/wiki
オリジナルYAMAスキャナーの作成
まずは、カスタムYARAルールを同梱したオリジナルのYAMAスキャナーを作成します。すべての作業はGitHub上で完結するため、非常に簡単です。本ツールのGitHubレポジトリには、YAMAスキャナーをコンパイルするGitHub Actionsが含まれています。そのため、本ツールのレポジトリをForkまたは、クローンした後、自身のレポジトリにカスタムYARAルールをcommitするだけで、オリジナルYAMAスキャナーを作成することが可能です。以下に、オリジナルYAMAスキャナーの作成手順を示します。
Step 1. GitHubのYAMAレポジトリをForkする
Step 2. GitHub Actionsの実行を許可
Step 3. 以下のファイルのYARAルールをカスタマイズして、commitする
rsrc/ioc/rule.yara
Step 4. ビルドされたYAMAスキャナーをダウンロード
詳しくは、以下の動画をご覧ください。
YAMAスキャナーを使ったマルウェア検知
YAMAスキャナーをダウンロードできたら、実際の調査を行います。YAMAスキャナーは、シングルバイナリなので、調査したいマシン上に、YAMAスキャナーをコピーするだけで簡単に使用することが可能です。以下は、YAMAスキャナー実行時に指定できるオプションです。
Yet Another Memory Analyzer for malware detection. Usage: yama.exe [-h] [--version] [--pid VAR] [--all] [--output VAR] [--json] [--evtx] [--uninstall] [--suppress] [--quiet] Optional arguments: -h, --help shows help message and exits -V, --version prints version information and exits -p, --pid PID to scan (required if not using --all) -a, --all Scan all processes (required if not using --pid) -o, --output Specify output directory [default: "./"] -j, --json Export json report to the output directory -e, --evtx Install YAMA EventLog manifest. -u, --uninstall Uninstall YAMA EventLog manifest. (only do uninstall operaiton) -s, --suppress Suppress warning logs -q, --quiet Suppress all console outputs -v, --verbose Increase verbosity.(-v: info, -vv: debug, -vvv: trace)
すべてのプロセスをスキャンする場合は、以下のように--all
オプションを使用します。なお、管理者権限で実行していない場合は、管理者権限で動作しているプロセスの調査はできないため、すべてのプロセスをスキャンする場合は、YAMAスキャナーを管理者権限で実行してください。
> Yama.exe --all
また、実行時のテキストログをファイルサーバーなどに一元的に管理したい場合は、以下のようにログの保存先にファイルサーバーを指定することも可能です。(デフォルトでは、ログファイルはカレントディレクトリに作成されます。)
> Yama.exe --all --output \\fileserver\log_folder
さらに、ログをEvent Logに記録したい場合は、--evtx
オプションを指定します。ログはアプリケーションログに記録されます。各イベントIDの内容は以下のとおりです。なお、本オプションを使用すると、Event Message File(%SystemRoot%\System32\Yama.Events.dll)がインストールされます。(--uninstall
オプションで削除可能)
- イベントID 10: YAMAが開始されました
- イベントID 11: YAMAが終了しました
- イベントID 20: マルウェアは検知されませんでした
- イベントID 40: マルウェアを含むプロセスが検知されました
YAMAスキャナーを使用したマルウェア検知のデモ動画を以下に掲載していますので、ご覧ください。
おわりに
今後は、JPCERT/CCオリジナルYARAルールを搭載したYAMAスキャナーもリリースする予定です。リリース時には、改めてアナウンスしたいと思います。
セキュリティインシデント発生時にネットワーク内からマルウェアを一掃する作業は、終わりの見えない作業であり、すべてのインシデント対応者が苦心しているところではないかと思います。今回紹介したツールが、そのような作業の一助になれば幸いです。
本ツールに関してPull Requestや要望などお待ちしています。
謝辞
本ツールの開発に協力いただいた谷 知亮氏に感謝いたします。
インシデントレスポンスグループ 朝長 秀誠