近年のマルウェアは、従来型のアンチウィルスでは検出できないものが増えてきました。従来型のアンチウィルスと呼ばれるものは、システムに入って来たファイルのチェックを行い、それがアンチウィルスベンダーが提供するブラックリストに適合する場合に、マルウェアという判断を行い、アラートを上げたり活動を阻止します。しかしながら、最近では、マルウェアの少しずつ新しいモノに変えたり、ファイルとしては動作せずメモリ上だけで活動する形態のものが増えてきました(その理由は当然、従来型のアンチウィルスに検出されないようにするためです)。その割合はマルウェア全体の過半数とも6割以上とも言われています(全てが検出できていないので正確な値はありません)。
 弊社でも、PCの挙動がおかしいなどで調査を行った事はありますが、従来型の最新パターンファイルを用いたアンチウィルスによる調査とネットワーク内の挙動をモニタする、ネットの見張り番によるチェックが主でした。

 マルウェアを検出するツールは各種存在しますが、この新しいタイプの、未知のマルウェアに対応出来得るツールはそう多くはありません。
今回はその未知のパターンファイルを検出可能な「HollowsHunter」について動作させてみたのでご紹介させていただきます。
このHollowsHunterは、日経クロステックさんの記事によると、有名なマルウェア「IdedID」「Emotet」などいくつものマルウェアの検出ができたそうです。

「HollowsHunter」とは

 「HollowsHunter」は一般的なシグネチャによるマルウェア検知ツールとは異なり、プロセスに存在する置換または埋め込まれた PE(「Portable Excutable」という標準的なWindowsの32ビットの実行可能なファイル形式のこと)、シェルコード、フック、メモリ内パッチを検出する為のツールです。これらは悪用すれば危険性はありますが、有効に活用しているプログラムも多く存在します。その為、検出されたプロセスは必ずしも危険なプログラムであるとは限りません。しかしながら、全てのプロセスを手動で検査することは人力では不可能です。危険な兆候をチェックするという面では優れたツールであると言えるでしょう。

 ダウンロードはこちらから可能です。32bit版と64bit版がありますので、ご使用のWindowsに合わせてダウンロードしてください。

使い方

 基本的な使い方は然程複雑ではなく、コマンドプロンプトからダウンロードしたexeファイルを起動するだけです。検査にかかる時間は起動しているプロセス数に影響されますが、当方の環境では下表の結果が得られております。

検査
プロセス数
309308306308309307309308308310
検査時間(秒)7.057.057.166.957.417.796.776.987.177.55
10回分の検査プロセス数と検査時間

 また、「HollowsHunter」は得られた結果をjsonファイルとして出力してくれます。ただし、コマンドプロンプトからそのまま起動した場合はカレントディレクトリに生成されてしまうので、必要が有ればカレントディレクトリを移動するかコマンド実行時に 「/dir <出力先パス>」のオプションを付けて実行してください。

オプション付きでの実行時

 「HollowsHunter」を実行すると、現在実行されているプロセス全てに対して置換または埋め込まれた PE、シェルコード、メモリ内パッチの有無について検査が実行されます。

検査実行中の画面

 上の図で「Detected」と表示されているプロセスが、置換または埋め込まれた PE、シェルコード、メモリ内パッチの検出されたプロセスです。そして検査が終了すると、下の図のような画面が表示され、検出されたプロセス番号とそのプログラムが表示されます。

検出終了時の画面

 また、検査の終了後にはカレントディレクトリ若しくは /dir オプションで指定したフォルダに「summary.json」ファイルに置換または埋め込まれた PE、シェルコード、メモリ内パッチの検出されたプロセスとその内容が出力され、同時に「process_<プロセス番号>」フォルダが生成されてプロセスごとの情報が出力されます。

 この検査の際にPCに掛かる負荷は然程大きくはなく、Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz 2.11 GHzで起動前に6%のCPU使用率でしたが、起動時でも30%前後を維持していました。またメモリやディスク等はほぼ使用しておらず、他プログラムを動作させながらそのプログラムに対して検査を行う事も十分に可能です。

オプション

 「HollowsHunter」は起動時に指定できるオプションを多く持っています。

  • /loop
    コマンドプロンプトで強制停止されるまで、プロセスの検査を繰り返します。
  • /hooks
    プロセスのフックの有無も検査に含めます。
  • /pid <プロセスID>
  • /pname <プロセス名>
    この二つはプロセスを絞って検査を行う際に利用するもので、検査対象とするプロセスがある程度判っている場合に有効です。また、複数のIDやプロセス名を指定する場合は「/pid <プロセスID1>;<プロセスID2>」といった形で入力しましょう。
  • /kill
  • /suspend
    検出されたプロセスを強制終了、または一時停止させるオプションです。

 これ以外にも多くのオプションが存在し、「/help」オプションで一覧を確認できます。

 重ねて申し上げますが、「HollowsHunter」は必ずしもすべてのマルウェアを検出できる訳ではなく、また検出されたプロセス・プログラムが必ずマルウェアであるという訳でもありません。ですが、マルウェア感染の検査を行う際には非常に便利なツールであると言えるでしょう。