全4065文字
PR

 マルウエアを詳しく解析するには、そのプログラムコードを読み解く必要がある。

 一般の人にとっては、コードを解析するのはハードルが高いと思うだろう。実際、コードからマルウエアの挙動や特徴を解析するには、プログラミングやマルウエアに関する知識が不可欠だ。一朝一夕でできることではない。

 だが、コード解析の概要を知るだけでも、マルウエアに関する理解を深めるのに役立つ。

 今回はそうしたマルウエアのコード解析の概要を、具体例を用いて簡単に紹介しよう。

解析で注目すべき5つの領域

 マルウエアのコードを見ていく際には、「実行ファイル」「CPU」「メモリー」の3つにまたがった5つの領域に注目する(図1)。1つ目は、「実行ファイルにおけるコード領域」だ。この領域には実行前のバイナリーデータが存在する。この領域の解析には、「逆アセンブラー」というツールを使う。逆アセンブラーで実行ファイルの機械語コードをアセンブリー言語に変換して読み解く。このようにファイル上のコードを解析することを「静的解析」という。

図1●マルウエアの「コード解析」で見るべき5つの重要な領域
図1●マルウエアの「コード解析」で見るべき5つの重要な領域
解析作業では、主にこれら5つの領域を詳細に調べてマルウエアの挙動をあぶり出していく。(1)では、逆アセンブラーでアセンブリ言語の状態に戻してコードを調べる。(2)では、メモリー上に展開されたコードを調べる。(3)では、メモリー上に一時的に展開される文字列や接続先の情報などを調べる。(4)と(5)では、レジスターとスタック領域の値を基にCPUの動作を追う。
[画像のクリックで拡大表示]

 2つ目は「メモリーにおけるコード領域」だ。これは、マルウエアを実行したときにメモリー上に展開されるコードの領域である。この領域の解析では、コードを1命令ずつ動かしながら読み解く。このような解析方法は「動的解析」という。コードがファイルにあるかメモリーにあるかが違うだけで、アセンブリー言語を読み解く点では実行ファイルにおけるコード領域とほぼ同じだ。

 3つ目は「メモリーデータ」である。マルウエアが持つ文字列や接続先の情報など、マルウエアが動作しているときにメモリーに一時的に展開される揮発性の高いデータだ。

 そして4つ目が「CPUが使用するメモリーのスタック領域」、5つ目が「レジスター」である。レジスターは、CPUの内部にある動作状態を記録する領域である。レジスターは数や容量があまり多くないので、プログラムの実行に必要な一時的な情報のすべては格納できない。

 そこで、メモリーのスタック領域にデータを一時退避して、必要に応じて都度取り出しながら動作する。レジスターの中身は、CPUが命令を1つ実行するごとに変化していく。これとスタック領域に退避した値を組み合わせて、実行中のマルウエアの動作を読み解く。