マルウェアにとっての天敵は何と言ってもウイルス対策ソフトでしょう。そのため、マルウェアがウイルス対策ソフトを無効化するための機能を備えていることは珍しくありません。ウイルス対策ソフトが検出対応するよりも前にコンピュータの中に入り込むことに成功しさえすれば、あとはマルウェアがウイルス対策ソフトの機能を阻害することで、そのマルウェアの検出を防ぐことができてしまいます。これによってマルウェアの延命が図られるわけです。このような機能は「アンチ・アンチウイルスソフト」と呼ばれています。もちろん、ウイルス対策ソフト側もこのような状況を黙って見過ごしているわけではありません。「アンチ・アンチウイルスソフト」機能を分析し、不正動作の監視など「アンチ・アンチ・アンチウイルスソフト」とも呼べる機能を搭載して「アンチ・アンチウイルスソフト」機能と戦っています。しかし、結果としての「いたちごっこ」状態の中、使われる手法は巧妙さを増していっています。先日解析を終えたマルウェア「BKDR_SRAOW.A」も、巧妙な「アンチ・アンチウイルスソフト」機能を備えたマルウェアでした。 |
■ウイルス対策ソフトが行う通信の切断
古くから存在する代表的なアンチ・アンチウイルスソフト機能と言えば、ウイルス対策ソフトのプロセスを強制終了する手法です。しかしこの手法には、ウイルス対策ソフトが動作していないことを利用者が気付きやすいという特徴があります。例えば、ウイルス対策ソフトはタスクトレイの中にアイコンを表示させ、このアイコンをクリックすることで簡単にウイルス対策ソフトの設定画面を呼び出せるものが多いですが、プロセスが強制終了されてしまうとこのアイコンが表示されなくなることから、利用者が普段とは違う様子に気付くことができます。そして気付けば、その問題に対処できる余地が生まれます。「BKDR_SRAOW.A」はこのような単純なアンチ・アンチウイルスソフト機能は持っていませんでした。代わって採用されていたのが、ウイルス対策ソフトが行う通信を強制的に終了するという手法です。これがどのように行われているのかを「BKDR_SRAOW.A」の実際のコードから見ていきましょう。
■ブロック対象実行ファイルリストのダウンロード
通信の切断は特定の実行ファイルが行う通信のみを対象にするので、マルウェアはまず対象となる実行ファイル名を特定する必要があります。多くのマルウェアではこのようなリストを自身のプログラムの中にハードコード(プログラム中にそのまま書かれている)して保持していますが、「BKDR_SRAOW.A」のプログラム内にはハードコードされていません。代わりに行うのが、対象実行ファイルリストの C&Cサーバからのダウンロードです。「BKDR_SRAOW.A」は実行されるとまず C&Cサーバに接続し、「BKDR_SRAOW.A」が備える機能を利用するための情報(攻撃者からのコマンドに相当)を受信します。この中に対象となる実行ファイルのリストが含まれているのです。当然ながら受信する内容は随時変化する可能性がありますが、今回の解析中には次の内容を実際に受信しました(図1参照)。`
|
おっと、これでは何が書いてあるのかまったくわかりませんね。実際に受信する内容は暗号化されていますが、マルウェアはこの情報を復号してから利用します。マルウェアの動作をコードレベルで解析するソフトを利用すれば、プログラム内部で復号した状態のものを見ることができます(図2参照)。
|
「BKDR_SRAOW.A」は復号したデータの中の[Block]セクション内に登録されているファイル名のファイルをブロック対象実行ファイルとします。今回の受信データでは67ものファイルが登録されていました。これらはすべてウイルス対策ソフトが使用しているモジュールの名前であると思われます。そしてもちろん、攻撃者はこの受信させるデータを任意のタイミングで変更することができてしまいます。
■通信の切断がもたらす影響
「BKDR_SRAOW.A」はブロック対象実行ファイルリストを受信した後、リスト中の実行ファイルが行っているTCP接続を強制的に終了します。つまり、リスト中の実行ファイルが行う通信に必ず失敗する結果になるのです。この処理は次のコードによって行われています(図3参照)。
|
この通信の切断はウイルス対策ソフトにどのような影響をもたらすのでしょうか。まず考えられるのはパターンファイルの更新処理です。ほとんどのウイルス対策ソフトは、マルウェアのシグネチャ(パターン)が収められたファイル(パターンファイル)を自動的にダウンロードして更新することで新しいマルウェアの検出が可能になる仕組みを導入しています。したがって、ウイルス対策ソフトが通信できなくなることによって、新しいパターンファイルのダウンロードが必ず失敗する結果になるのです。利用者からするとウイルス対策ソフトのプロセスは正常に動作しているように見え、また Webブラウザによる Webページの閲覧といった他の通信は正常に行えることから、パターンファイルの自動更新のみが失敗している状況に気付くのは時間がかかることでしょう。また、仮にパターンファイルが更新できないことに気付いたとしても、その原因がマルウェアにあると気付いて排除することは簡単ではないでしょう。
■Visual Basic の P-Code
先ほどの図のコードがいつも見ているアセンブリ言語のコードと違うことに気付いたアナタ、鋭いですね。ではこれが何のコードでどのような処理が書かれているのかコードを見るだけで分かりましたか? 実は「BKDR_SRAOW.A」の実行ファイルは CPU が理解する機械語が書かれた通常の実行ファイルとは異なり、”Visual Basic 6.0″ の「P-Code(Pseudo Code:擬似コード)」で書かれています。P-Code は CPU が直接理解する実行コードではないため、その実行には P-Code の命令を解釈し CPU が理解する実行コードに変換するプログラムが必要となります。Visual Basic 6.0 の場合は、ランタイムライブラリ “MSVBVM60.DLL” がこの変換を行うプログラムにあたります。先ほどのコードは P-Code をデコンパイラツールを使ってデコンパイルしたものだったのです。デコンパイルしたと言っても、デコンパイルの結果として得られる P-Code の命令の仕様は Visual Basic の開発元であるマイクロソフトから公開されていませんから、デコンパイルして得られたコードをただ読んで動作を推測するのは困難です。もちろん、通常の実行ファイルの解析で使用する逆アセンブラやデバッガを普段使っているように使って解析することもできません。この困難さは、マルウェア作者がわざわざ P-Code を利用しているのはアンチデバッギングが目的ではないかと思ってしまうほどです。でも大丈夫。実は解析はきちんとできています。例えば先ほどのコードの場合は次のロジックで処理を行っていることが見えています(図のコードだけではすべては見えていません)。
|
◆ ◆ ◆ ◆ ◆
今回ご紹介した「BKDR_SRAOW.A」では、アンチ・アンチウイルス機能として、上で紹介した通信の切断という手法だけでなく、HOSTSファイルへのエントリの追加による通信の阻害や IFEO(Image File Execution Options)へのエントリの追加による実行ファイル起動の阻害を行う手法も使われています。しかし、従来から多く確認されているこれらの手法と比較して、通信の切断は新しい手法です。クラウド技術の利用の発展が見込まれる将来、通信処理は生命線とも言える処理になります。そのような状況下において、任意の実行ファイルの通信を強制的に切断できるこの手法は、様々な場面においてより深刻な影響を生じさせる懸念すら感じさせます。このように巧妙に進化するマルウェアに対応していくには、マルウェアの動作や仕組みの監視を継続し、明らかにした脅威への対策を随時検討することが重要であると言えるでしょう。「アンチ・アンチウイルスソフト」と「アンチ・アンチ・アンチウイルスソフト」のいたちごっこはまだしばらく続いていきそうです。 |