マルウェアの自動解析の方法
はじめまして。リサーチエンジニアの舟久保と申します。
今回は、マルウェアの自動解析の手法について調査する機会があったので、備忘録も兼ねて、簡単にご紹介させていただきたいと思います。
弊社ではウイルス対策ソフトウェア(yarai)の開発や、マルウェア解析サービスを提供している都合上、日々発生するマルウェアを解析し、どのようなタイプのマルウェアが存在しているのか常に把握しておく必要があります。しかし、毎日平均で約5,000個、多い時は10,000個を超えるマルウェアを収集しているため、解析ツールやデバッガ等を使って1つ1つ手作業で解析していては、日が暮れてしまいます。
そこで登場するのが今回のテーマでもあるマルウェアの自動解析という技術です。これを利用すれば自動的にマルウェアを解析できるため、手作業での解析から解放され、大量のマルウェアを短時間で捌けるようになるというわけです。
読者の皆さんはご存知かもしれませんが、既に無料でウェブ上からマルウェアの自動解析をしてくれるサービスがあります。例えば、Norman Sandbox、CWSandbox、anubisなどが有名です。マルウェアを持っていたら、そこへ読み込ませてみると興味深い解析結果が得られるかもしれません。
マルウェアの自動解析という分野は、壮大な研究分野なので、ここで全てを解説することはできませんし、なにより私自身全て把握できているわけではございません。マルウェアの自動解析には、大きく分けて、静的解析(動作させずに解析)と動的解析(実際に動作させて解析)があるのですが、今回は動的解析の「自動解析システムが任意の時点でマルウェアから制御を奪う方法」について焦点を当ててまとめてみたいと思います。
■1つ目の方法: ブレークポイントを使う方法
最もオーソドックスな方法でデバッガ等で良く使われる方法です。詳しい仕組みは、色々なところで解説されていますので割愛させていただきます。この方法は、とても簡単に実装でき、任意の時点で制御を奪うことができますが、マルウェアによって検出されやすいという欠点があります。
■2つ目の方法: ステルスブレークポイントを使う方法
1つ目の方法で解説したブレークポイントとは異なるアプローチのブレークポイントです。メモリページの属性を一時的にnot present状態にしておき、そこにアクセスした瞬間にページフォールトを発生させ、ページフォールトハンドラで制御を奪うという方法です。ページ単位でブレークポイントを仕掛けるため、ページフォールトが頻発するという欠点がありますが、マルウェアに検出されずに任意の時点で制御を奪うことが可能です。
下記の論文が詳しいです。
Stealth Breakpoints
■3つ目の方法: マルウェアコードをブロックに分割してブロック毎に実行する方法
マルウェアのコードを直接実行するのではなく、ブランチ命令やcall命令などの制御が変わる部分などでコードの固まり(ブロック)に分割し、ブロック単位で少しずつマルウェアコードを実行する方法です。実装が複雑になりますが、ブロック単位でマルウェアの制御を奪うことができます。また、ブロック内の命令コードを自動解析システムが都合のよい命令コードに書き換えることもできます。
下記の論文が詳しいです。
Cobra: Fine-grained Malware Analysis using Stealth Localized-executions
■4つ目の方法: PCエミュレータ(QEMU)を使う方法
QEMU上のゲストOSでマルウェアを動作させることによって、QEMUの実行命令ブロック(Translation Block)単位でマルウェアの制御を奪う方法です。ゲストOSやマルウェア自身には一切手を加える必要がないために、マルウェアによる検出を避けつつ制御を奪うことができます。ただし、ゲストOSで利用されている構造体や関数等の情報(例えば存在するメモリアドレス等)をあらかじめ知っておかないと制御を奪った後、解析できないという欠点があります。
下記のプロジェクトがこの方式を利用しています。
TEMU: The BitBlaze Dynamic Analysis Component
■5つ目の方法: CPUの仮想化支援機能を使う方法
ハイパーバイザ上のゲストOSにおいて、トラップフラグを設定しておき、マルウェアが1命令実行するごとデバッグ例外を発生させることにより、マルウェアから制御を奪う方法です。デバッグ例外は、ゲストOSに届く前にハイパーバイザで処理されますので、ゲストOSに影響を与えることはありません。マルウェアがトラップフラグを参照することによるデバッグ検出を避けるため、トラップフラグを参照しようとしたら、あたかもトラップフラグが設定されていないかのように、値をねつ造します。
下記の論文が詳しいです。
Ether: Malware Analysis via Hardware Virtualization Extensions
最後に
今回は、「自動解析システムが任意の時点でマルウェアから制御を奪う方法」という、マニアックな視点からマルウェアの自動解析をまとめてみましたが、いかがでしたでしょうか。
次回は別の視点からマルウェアの自動解析を紹介してみたいと思います。
お楽しみに!
| 固定リンク
| トラックバック (1)
|









