「W32/Winemmem」がファイル改ざん検査をすり抜ける仕組み

マルウエア感染を拡大させる際に最初に必要になる条件は何か,覚えているだろうか。答えはユーザーの欲求を利用することだ。ユーザーが自ら求めない限り,マルウエアに感染したファイルはまずダウンロードされない。では,2番目の条件は何か。大抵のウイルス対策ソフトから検出されないようにすることだ。我々は2008年4月第1週,こうした条件を備える新たな感染手段を発見した。

最近のマルウエア作者は,メールを大量に送り付ける感染拡大策をとらず,多くのユーザーが使っているソフトウエアの開発元を狙うようになってきた。こうした状況で,我々は複数のソフトウエア・ベンダーから「マルウエアに感染した疑いがある」という相談を受けた。大量のユーザーに提供したインストーラとソフトウエア・パッケージのハッシュ値が,本来の値と食い違っていることに気付いたという。

まず,インストール用パッケージを作るツールの機能を簡単に説明しておこう。インストーラ作成ソフトは,インストール用ウィザードとして機能する Windowsアプリケーションを生成する。その際,インストール対象ソフトの機能やデータ・ファイルはオリジナルのまま保ち,手を加えない。より高機能なインストーラ作成ソフトは,メーカー名/バージョン/セットアップ名/デスクトップ用アイコン/著作権説明文/スタートメニュー用アイコン/インストール用フォルダのパス/ライセンス文を加えた自己展開型ファイルを生成する。セットアップ処理プログラムはインストール/アンインストール機能を備え,複数のアプリケーション用ファイルを一つの実行可能ファイル(拡張子は「.exe」)にまとめる。

複数の実行可能ファイルで構成されたパッケージは,強力なインテグリティ・チェック機能で保護されており,デジタル署名を施したファイルもある。自己展開型の実行可能ファイルを作る際,プロのセットアップ・ツール開発者なら製品を守り,損傷や改変がないことを確認するために,データ展開前にインストーラのインテグリティを調べるなど常識だ。チェックサム値の計算といった保護機能は,ユーザーが多い自己展開型アーカイブの作成ツール(「WinRar」「WinZip」)やインストーラ(「NSIS」「Astrum」「InstallShield」),ソフトウエア保護システム(「ASProtect」「Themida」「Armadillo」)などには例外なく実装されている。インストーラに異常があれば(例えば,どこか1バイトでも改変されたなど),エンドユーザーはエラー・メッセージで気付くことになる。ただし当ブログ記事で紹介する事例では,パッケージやインストーラを実行してもユーザーは異常に気付かず,ウイルス対策ソフトも全く警告を発しなかった。

我々は5種類ほどのインストーラをサンプルとして受け取った。いずれの実行可能ファイルも商用またはオープンソースのセットアップ・ツール作成ソフトで生成/パッケージ化されており,ファイルの最後に追加データ(オーバレイ)が入っていた。通常は,追加データ部分には圧縮/暗号化したデータを格納する。サンプルを実行したが特に目立った予想外の動作はせず,展開されたファイルも汚染されていなかった(展開ファイルの多くは実行可能ファイルで,施されていたデジタル署名に異常はない)。インストーラ内のファイルが改変されていないことを考えると,インストーラそのものがマルウエア配布用に細工されたはずだ。そこで,米マカフィーAvert Labsの調査チームに詳しく調べるよう依頼した。

すると30分ほどで「W32/Winemmem」識別用の汎用シグネチャがマルウエア対策用データベースに追加され,サンプルに感染したウイルスを検出/除去できるようになった。これでサンプルは安全に実行できる。

このウイルスの仕組みを調べることで,インストーラに感染してインテグリティ・チェック機構をクリアできる理由を解明しよう。 W32/Winemmemはソフトウエア・パッケージやインストーラ,自己展開型アーカイブ(「オーバレイ」と呼ばれる追加データの入ったファイル)といったアプリケーションに感染する。そして,アプリケーションのコード・セクション(以下の図の1番)を書き換え,ランダムなサイズのコード・ブロックをコード・セクションの先頭とオリジナル・エントリ・ポイント(OEP:同2番)からファイルの終端(同3番と同4番)に配置し直し,追加データのサイズを増やす。新たにセクションを作ったり,ポータブル・エクゼキュータブル(PE)ヘッダーを改変したりはしない。W32/Winemmemは,この感染ファイルの実行時にOEPにあるコードを書き換えて制御権を奪う。

続き