今回は、脅威分析システムをすり抜けるマルウエアの話題から紹介しよう。米シマンテックが手口について、ブログで説明した。

 脅威分析システムというのは、サンプルの動作を分析して、ウイルス定義を作成する優先順位を判断するシステム。いわゆる仮想的な実行環境(サンドボックス)で動作させ、分析する。

 シマンテックの「インターネットセキュリティ脅威レポート(ISTR)」によると、2011年に作成されたマルウエアの亜種は4億に上った。1カ月当たり3300万、1日当たり100万の亜種が誕生している計算になる。これだけ多くの種類の分析を手作業で行うのは不可能なため、自動化した脅威分析システムが必要になる。

 これに対し、マルウエアやパッカーのプログラマーは、悪質なファイルを隠す手口を使って自動脅威分析システムをすり抜けようとする。マルウエアが自身の動作している環境を認識して自動脅威分析システムを回避する機能は、新しいものではない。マルウエアが動的分析システムの検知をすり抜けるために使う手法には、以下のものがある。
・特定のレジストリーエントリーを確認し、仮想環境で動作していることが分かると停止する
・ビデオやマウスのドライバーを確認し、仮想環境で動作していることが分かると停止する
・システムサービスのリストを列挙し、仮想環境で動作していることが分かると停止する
・特別なアセンブラーコードを実行し、仮想環境で動作していることが分かると停止する
・特定の通信ポートを確認し、仮想環境で動作していることが分かると停止する
・特定のプロセス名を確認し、監視されていることが分かると停止する

 マルウエアが仮想環境にいることを検知して停止している場合、自動脅威分析システムはこれを無害なプログラムだと判断する可能性がある。マルウエアは監視されていることを検知して停止することにより、自動脅威分析システムを騙すだけでなく、マルウエアに侵入されたコンピュータがないか探しているシステム管理者をも欺く。この脅威分析システムの目を欺く手口として、シマンテックは最近、新たに2つの方法を確認したという。

マウスを使って自身を隠す手法

 1つ目はマウスを使う方法で、「SetWindowsHookExA」APIを用いて「_main_routine」サブルーチンをインストールし、マウスのメッセージトラフィックを監視する。マウスの移動やクリックのメッセージを受け取ると、マルウエアは_main_routineサブルーチンを実行する。Windowsパソコンでは通常マウスが使われるので同サブルーチンが機能するが、自動脅威分析システムはマウスを使わないのでコードは休眠状態になり、自動脅威分析システムがマルウエアを検出できない可能性がある。

sleepを使用して自動脅威分析システムを回避する方法

 もう1つは「sleep」を使う方法である。図に示すように、コードは起動すると30万ミリ秒、つまり5分間待機してから「DecryptCode」サブルーチンを実行する。さらに20分おいて「ModifyRegistry」サブルーチンを実行する。「Network_main」サブルーチンを実行したのち、さらに20分待機する。自動脅威分析システムが1つのファイルに費やす分析時間はわずかであるため、このコードをマルウエアだと判断できない場合がある。

 過去にマルウエア作成者が仮想環境を検知するために使用した手口は大変難しく、特別なスキルが必要だった。しかし今回説明した方法は、技術的にそれほど高度ではないため、昨今のマルウエア作成者は高いスキルがなくても自動脅威分析システムからマルウエアを隠すことができる。

 シマンテックはユーザーに対し、疑わしいファイルやアプリケーションを決して実行せず、常にOSとアンチウイルスソフトウエアを最新の状態の保つよう勧めている。