サポート情報 | フォーカスシステムズ サイバーフォレンジックセンター

メールでのお問い合わせ
お問い合わせはこちら
東京証券取引所 プライバシーマーク ISMS JUSE

サポート情報

ホーム > サポート情報一覧 > マルウェアの表層解析

マルウェアの表層解析

目次へ

 では、早速解析結果から表層解析を行ってみましょう。解析結果は、初期画面上のタブを選択することで見ることができるほか、表示されていないタブはメニューの「View」から選択して表示することができます。

IDA_Menu_view

【図3】IDA Proの「View」→「Open subviews」の内容

 

 まずはImportテーブルに着目します。マルウェアもOS上で動くプログラムである以上、OSの規約に則っており、OS内の関数を使用しています。OSの規約に反していると、そもそもプログラムが起動しませんし、メモリの取得や動作の権限など、OSの制約を受け、OSの機能を利用しなければいけません。また、OSにある機能を利用することで、マルウェアの開発者の省力化につながることや、OSの用意している機能の利用している場合は「クロ」と判定されにくい、という点も見逃せません。

 しかし、マルウェアが解析回避やメモリインジェクションをするときに、「よく使われるAPI」というものは存在します。例えば、インジェクションしたいプロセスのトークン取得や、紐づいたメモリを取得するVirtualAllocEx、デバッグ中かを検知するIsDebuggerPresentといったAPIです。こういった、「マルウェアがよく使うAPI」をチートリストとして持っておくと良いでしょう。これらが複数出てくることで、疑わしいかどうかを判断します。ほかにもよく使われるAPIがありますが、詳しく書くと、それだけで一冊の本になってしまいますので、詳細は解析の専門書を参考にしていただけたらと思います。今回の検体のImportテーブルは【図4】のとおりです。

IDA_CryptoWall_Import

【図4】CryptoWall亜種のImportテーブル

 

 図を見ると、先ほど述べたような「マルウェアがよく使うようなAPI」は見当たりません。気になるとするとADVAPI32ライブラリを使っているところですが、これでランサムウェアの機能が実装できるようには見えません。だから白・・・と思いたいところですが、それは早計です。この実行プログラムは250Kbyte以上のサイズがありますが、それにしてはImportしている関数が「少なすぎる」というのがあります。また、「では、このプログラムではどんな機能を実現しているのか?」といった場合、これらのAPIだけでどんな意味のあるプログラムが作れるのか、というところに疑問が発生します。

 では、次にStrings情報を見てみましょう。Strings情報とは、ツールで「文字列」として解析できたものを表示する機能です。ここに、マルウェアが用いていると考えられる文字列がないかを探します。例えば、C&CとしてターゲットにしているURLや、組織内で用いているプロキシサーバ名、ブラウザの通信を偽装するようなHTTPリクエストの文字列、サーバを偽装するようなHTTPレスポンスの文字列です。高度なマルウェアは、これらの文字列を難読化しており、そのまま残っているケースは減っていますが、マルウェアの水準が低かったり、作成者のミスで一部の文字列が難読化から漏れていたりするケースがあるので、一見の価値はあります。今回のCryptoWallの亜種では、それだけでマルウェアだと断定するような文字列は見つかりませんでした。

IDA_CryptoWall_Strings

【図5】CryptoWall亜種のStringsテーブル

 

 さらに、Exportテーブル、Segmentsテーブルを見てみましょう。Exportテーブルで実行プログラムが一つしか表示されないのは、このプログラムが自身を起動するだけで、他のプログラムから関数利用のために呼び出されることがないことを示しています。Segmentsテーブルも4つと、特に際立っておかしいようには見えません。他にも色々なViewがあり、解析の用途によっては利用ができます。

IDA_CryptoWall_Export_Segments

【図6】CryptoWall亜種のExportテーブルとSegmentsテーブル

 

 ここまで見てくると、「Importテーブルで表示されるAPIがやけに少ないが、それ以外は不審な点が見えてこない。」と思います。ここで、ちょっと実行コードを見てみましょう。

IDA_CryptoWall_source1

【図7-1】CryptoWall亜種の開始部分のコード

 

IDA_CryptoWall_source2

【図7-2】CryptoWall亜種のテキストセグメント内のコード

 

 【図7-1】がプログラムの開始部分です。これは慣れが必要なのですが、パッと見でちょっと変です。序盤の部分のcallのような呼び出し方は、よく使われるVisualStudioのコンパイラで作成すると出てこないのではないかと思います。また、IDA Proには「Graph View」という機能があり、コードをフローチャートのように表示することができるのですが、それができません。これは、このコードの解析で構造上の不整合があったためと考えられます。

 また、別の個所をみると、本来はコードが入っていると思われる個所の解析が失敗しています(【図7-2】参照)。これらの原因として、難読化によることが考えられるため、どうも白とは言い切れない気がしますね。表層解析では、黒とは言い切れないが、不審な点がいくつかある、という感じです。そこで、動的解析に移ります。

 

< はじめに  目 次 マルウェアの動的解析の準備 >