Emocheck v2.1を自動実行してログを収集する
2022年3月現在、日本国内ではEmotetと呼ばれるメール拡散型マルウェアの感染や被害が急激に拡大しています。
このマルウェアはメール利用者を巧妙に騙す手口が備わっており、いくら利用者に「あやしいメールを開くな!」と案内しても限界があります。
そこで感染事後の対策をいくつか講じなければいけないのですが、その対策の1つにJPCERT/CCが公開しているEmotet感染検知用のツールである『Emocheck』の実行があります。
しかし、仮にEmocheckを実行したいPCが大量にある場合、Emocheckを一括実行する仕組みやログ保存先を統一する仕組みがなければ運用の手間が大きくかかってしまいます。
そこで今回はEmocheckを自動実行してログ収集する方法を解説します。
この記事の設定をすると下記動画のようなことができます。
検証した環境と利用する仕組み
- Windows Server 2022 Standard + Active Directory
- Windows 10 21H2(クライアントPC)
- ログファイルを保存する共有ファイルサーバー
- Emocheck V2.1
仕組みとしては、ファイルサーバーにEmocheckのプログラム本体を配置し、ログオンスクリプトで”Emocheckを実行してファイルサーバーにログ出力するバッチファイル”を実行します。
ログオンスクリプトのため、ユーザーPCがログオンするたびに自動で実行されます。
※Active Directoryが無い場合は本記事末尾をご確認ください。
ファイルサーバーの準備
Emocheckのプログラム本体を配置して、いろんなPCから出力されるログを集めて保存するためにファイルサーバーを準備します。
ファイルサーバーはEmocheckを実行するすべてのPCから読み込みと書き込みが可能なものを準備してください。
なお、ネットワークドライブとしてマウントされている必要はありません。UNCパス(\\ファイルサーバー\共有名)でアクセス可能であれば問題ありません。
バッチファイルとEmocheck本体の準備
Emocheck本体はJPCERT/CCのGithubからダウンロードします。
https://github.com/JPCERTCC/EmoCheck/releases
※今回のバッチコードにはx64、x86判定は未実装です。組織内の環境に合わせてEXEを選択してください。
今回使うバッチファイルのコードは下記のとおりです。
@echo off
timeout /t 300 /nobreak
if not exist C:\Emocheck (
mkdir C:\Emocheck
)
if not exist C:\Emocheck\Emocheck.exe (
xcopy \\syanaiseserver.syanaise-soudan.local\share\setup\emocheck.exe C:\Emocheck\ /y
)
cd /d C:\Emocheck\
call Emocheck.exe -quiet
xcopy %COMPUTERNAME%_* \\syanaiseserver.syanaise-soudan.local\share\setup\emocheck_log /y
del %COMPUTERNAME%_*
コードの水色部分は環境に合わせて設定してください。
待機処理(timeout)はEmotetのプロセス実行後にEmocheckを動かすために実施しています。
また、各プログラムは下記の場所に保存します(適宜、必要に応じて読み替えてください)。
Emocheck
\\syanaiseserver.syanaise-soudan.local\share\setup\に保存します。
必ずEmocheckは”Emocheck.exe”という名前で保存してください。
バッチファイル
\\syanaiseserver.syanaise-soudan.local\share\setup\に保存します。
上記のバッチコードをメモ帳に貼り付けて”Emocheck_Execute.bat”という名前で保存します。
ログ保存場所
\\syanaiseserver.syanaise-soudan.local\share\setup\emocheck_logに保存します。
あらかじめ、emocheck_logというフォルダは作成しておいてください。
Active Directoryの設定
グループポリシーのログオンスクリプトという機能を使います。この機能を使うことで、任意のスクリプトをPCログオン時に実行することが可能です。
グループポリシーの場所は”ユーザーの構成>ポリシー>Windowsの設定>スクリプト(ログオン/ログオフ)>ログオン”になります。
ログオンをダブルクリックするとプロパティが表示されます。スクリプトタブから”追加”ボタンをクリックします。
追加ボタンをクリックするとスクリプトの編集画面が表示されます。
ここでスクリプト名にファイルサーバーに保存したバッチファイルのパスを指定します。
ここでは\\syanaiseserver.syanaise-soudan.local\share\setup\Emocheck_Execute.batとします。
あとはEmocheckを実行したいユーザーが所属するOUにグループポリシーオブジェクトをリンクしてください。
これで対象のドメインユーザーがログインしたあとに自動でEmocheckが実行され、指定したログ保存場所にログが出力されます。
※グループポリシーオブジェクトの適用には少し時間がかかります。検証時はクライアントPCのコマンドプロンプトでgpupdate /forceやgpresult /zなどのコマンドを実行してポリシー適用状況を確認しながら検証を進めてください。
※ドメイングループポリシーの基本的な操作方法はここでは割愛します。
簡易的なログのチェック方法
Emocheckのログは下記画像のようにEmocheckが実行されるたびにテキストファイルで保存されます。
同一PCでも実行時刻が違えば別のテキストファイルになりますので、ユーザーのログオン回数分(計500回ログインすれば500個)のテキストファイルが発生します。
この課題を解決する方法は色々ありますが、ここでは手っ取り早く確認できるサクラエディタのファイルから検索機能を紹介します。
サクラエディタには”指定フォルダに保存されているテキストファイルから指定の文字列をファイル横断的に検索する機能”が搭載されています。
また、EmocheckはEmotetの感染を検知しなかった場合、ログファイルに”検知しませんでした。”という文字列を出力します。
このサクラエディタの機能とEmocheckの特徴を利用すると”検知しませんでした。”と出力したログのファイル数を確認することができます。
サクラエディタはこちらから入手してください。サクラエディタのインストールが完了したら起動します。
起動したらメニューバーから検索>Grepと進んでください。
検索条件には下記の通り指定します。このように指定することで、テキストファイルを横断して”検知しませんでした。”というテキストを検索してくれます。
正常に検索できると、このようにヒットした件数とそのテキストファイル名が表示されます。
ログファイルの件数はエクスプローラで容易に確認することができますので、もし
ログ保存フォルダのログファイル件数=サクラエディタの検索でヒットした件数
であれば、Emocheckの検査においてEmotetの検出はなかったといえます。
逆に件数が少ないのであれば、どこかにEmotetの検出をしたというログファイルが存在するかもしれないので、それを探すことができます。
その場合は”プロセスが見つかりました。”で再度検索してみましょう。今度は検知したログがヒットするかもしれません。
1つ注意点として、Emocheckのログ出力はOSの言語設定に依存します。そのため、必ずしも”検知しませんでした。”というテキストが存在するとは限りません(言語が英語だと英語のログが出力されます)。
※この方法はお手軽さを最優先に考えた方法です。もしこの記事を読んでくださっているあなたがプログラミング知識やJSONについてある程度ご存じなら、もっと良い方法はいくらでもあります。。。
Active Directoryが無い場合
Windows Pro Editionの場合
Windows Pro Editionの場合、上記Active Directoryの項目に記載したグループポリシーの設定はクライアントPCでも実施できます(これをローカルグループポリシーと言います)。
ただし、ドメインに参加していない場合は設定の一括流し込みができないので、残念ながら1台ずつ設定することになります。
Windows 10/11 Proでローカルグループポリシーを編集する場合は”ファイル名を指定して実行”からgpedit.mscと入力して起動します。
あとの設定はActive Directoryの項目を参考に進めてください。
Windows Home Editionの場合
Windows Home Editionの場合はローカルグループポリシーを編集することができません。
そのため、レジストリを直接編集することになります。
※決まり文句ですがレジストリの設定は間違えるとPCに重大な障害を引き起こす可能性がありますのでくれぐれもご注意ください。
該当するレジストリキーのパスは下記のとおりです。
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
ここに文字列値を新規作成して、データにバッチファイルのパスを指定します。
このようにすることでグループポリシー同様にEmocheck_Execute.batが自動で実行されます。
まとめ
- Emocheckはグループポリシーで自動実行が可能
- 工夫次第でログの収集と確認は効率的にできます
- 非ドメイン環境やWin Homeでも対応策はあります
覚え書きというか雑談(読む必要はありません)
Emocheckにはコマンドラインのオプション指定で”ログの出力先を指定する”という機能があります。
にもかかわらず、わざわざバッチファイル中には”C:¥Emocheckに保存したログファイルをファイルサーバーにコピーして、元データを削除する”という無駄な(冗長な)処理が書いてありますが理由があります。
私の準備している検証環境においてははじめからEmocheck.exe -outputというオプションを使っていましたが、ポリシーのログオンスクリプトでバッチを実行したとき&出力先がUNCパス の場合にログが保存されないという特殊条件にはまってしまいました。
なお、この現象はEmocheck Ver2.1で確認されており、Ver2.0では発生しませんでした。
正直、自分の環境が悪いのかEmocheckの不具合なのかよくわからなかったので、今回はバッチファイルに処理を追加してお茶を濁しております ^^) _旦~~
もし、V2.1でもUNCパスへ問題なくログ出力された場合は、バッチファイルはもっと短くなります。
決してEmocheckのオプションを知らないわけじゃないんです!(言い訳)