Noribenでマルウェアの動的解析を効率化しよう
2023年12月06日 水曜日
CONTENTS
【IIJ 2023 TECHアドベントカレンダー 12/6の記事です】
はじめに
こんにちは。SOCでマルウェア解析をしているtomoya-fです。
本記事ではマルウェアの動的解析ツールであるNoriben(ノリベン)を紹介します。
こういう機会にならないとドキュメント化しない体たらくさよ・・・
マルウェア解析の種類
Noribenの紹介をする前にマルウェアの解析種別について触れておきます。
マルウェア解析は解析の目的により、解析の手法や利用するツールが異なります。
代表的な解析として以下の3つが挙げられます。
※ 解析種別は文献や個人によって定義や粒度が異なります
- 表層解析
- 動的解析
- 静的解析
表層解析とはマルウェアのメタデータなどを解析する手法です。この解析ではマルウェアの実行やコード解析を行わないため、短時間で解析結果を得ることができます。
マルウェア解析者は表層解析で得られた結果を元にマルウェアの機能などを推測し、解析の方針を決めることができます。また、既知のマルウェアであれば、インターネット上に解析結果が公開されている場合があるため、表層解析だけで解析を終える場合もあります。
表層解析の例として以下のものが挙げられます。
- マルウェアにハードコードされた設定情報(通信先など)の取得
- Hash値を用いた解析レポートの調査
- Yaraを用いたマルウェアファミリの特定
- etc…
しかし、昨今のマルウェアは動的にライブラリを読み込んだり、設定情報を暗号化して持っていることが多いです。
このため、残念ながら表層解析で得られる情報が少ないのが現状です(個人の所感)。
動的解析とはマルウェアを実際に動かして、マルウェアの挙動を解析する手法です。この解析ではマルウェアの挙動を解析してマルウェアの機能を理解することが目的となります。解析目的により解析する挙動は異なりますが、私は以下のような挙動を分析することが多いです。
- C&Cサーバとの通信内容
- 実行されるプログラム
- ファイル作成、削除などのファイル操作
- (Windowsの場合)レジストリ操作
しかし、マルウェアの実行アルゴリズムや実行されなかった機能は動的解析から情報を得ることができません。
また、動的解析ツールを検知して、途中で終了してしまうマルウェアもいます。
静的解析とはマルウェアのコードを分析する解析です。この解析ではマルウェアのコードを実際に読み、マルウェアのデータ構造や実行アルゴリズムを解析することになります。また、コードから動作が読み取れない場合は、デバッガを利用して動作を確認します。マルウェアのコードを読むため、静的解析より得られる情報は非常に多いのですが、如何せん時間がかかります。また、アセンブリ言語などの低レイヤな知識が必要となってきます。
Noribenとは
Noribenは動的解析に用いるオープンソースな解析ツールとなります。NoribenはWindowsのSysinternalsツールであるProcess Monitorを実行して、端末内で動作するプロセスの振る舞いを解析します。Process Monitorはリアルタイムで各プログラムの振る舞いを監視することができるツールです。本来の用途としてマルウェア解析は想定されていないツールだと思いますが、マルウェアの挙動を監視するのに非常に優れたツールであると思います。
しかし、Process Monitorが出力する情報はマルウェア解析には不要な情報が非常に多く出力されるため、どの挙動がマルウェア解析に必要な情報であるかを判別する必要があります。例えば、後述するマルウェアAmadeyの挙動をProcess Monitorで監視すると、下図のように大量の情報が出力されます。
この問題を解決してくれるのがNoribenです。Noribenは子プロセスとしてProcess Monitorを実行し、その監視結果(CSVファイル)を解析して必要な情報を抽出してくれます。Noribenのソースコードを見てみると、以下の挙動を抽出してくれることがわかります。
- プロセス生成
- ファイル操作
- 作成
- 削除
- リネーム
- レジストリ操作
- レジストリキー作成
- レジストリキー削除
- レジストリ値のセット
- レジストリ値の削除
- ネットワーク通信
- TCP
- UDP
また、Noribenにはデフォルトのフィルタ設定があるため、上記の挙動に合致していても不要だと考えられるものはフィルタリングされます。
Noribenを用いた動的解析例
ここでは、情報窃取型マルウェアであるAmadeyに対してNoribenを用いて動的解析をやってみます。
なお、解析に使用する検体のHash値は以下となります。
a1c3aab7bc661fee2a1b3dea08f827e179d0991a58438efe8c464d22f9d73558
この検体をNoribenで解析した結果は以下のとおりです。
Noribenの解析結果はテキストファイルで出力され、以下の5つに分類されて表示されます。
- Process Activity(プロセス生成)
- File Activity(ファイル操作)
- Registry Activity(レジストリ操作)
- Network Traffic(ネットワーク通信)
- Unique Hosts(通信したIPアドレス一覧)
この中のProcess Activity、File Activity、Network Trafficについて調査します。
※ Registry Activityには解析に必要と思われる情報がなかったため割愛します。
Process Activityの調査
まず、Process Activityを調査します。
Process Activityを確認すると、amadey.exeがTempフォルダのjbruyer.exeを実行しています。jbruyer.exeはamadey.exe実行前に存在せず、Tempフォルダに格納されていることから非常に怪しいファイルだと考えられます。このことから、jbruyer.exeもamadey.exeに関連したファイルだと考え、jbruyer.exeの処理も調査する必要があります。jbruyer.exeの処理を見ると、以下2つのコマンドを実行していることがわかります。
- schtask.exe
- cacls.exe(cmd.exe経由で実行されている)
schtask.exeはWindowsの標準機能であるタスクスケジューラを操作できるコマンドです。コマンドラインや登録タスクを確認すると、jbruyer.exeを実行するタスクを登録していることがわかります。
このタスクは1時間ごとに実行されるようです。これは永続化と呼ばれる処理であり、端末がシャットダウンまたは再起動された場合であっても、マルウェアが実行されることを目的に行われます。
cacls.exeはファイルのアクセス権限を操作するコマンドです。このコマンドではjbruyer.exeのアクセス権を読み取りと実行のみ設定しています。この設定はマルウェアの削除対策であり、jbruyer.exeを削除できない状態にしています。
File Activityの調査
次にFile Activityを調査します。
File Activityを確認すると、amadey.exeからjbruyer.exeがTempフォルダに作成されたことがわかります。このことから、Process Activityでの「amadey.exeがjbruyer.exeと関連している」という予測は当たっていたことになります。
では、このjbruyer.exeが何者なのかを確認してみましょう。Hash比較ツールであるHashMyFilesでamadey.exeとjbruyer.exeのHash値を比較します。
amadey.exeとjbruyer.exeのHash値が同じであることから、jbriyer.exeはamadey.exeのコピーであるとわかります。
Network Trafficの調査
最後にNetwork Trafficを調査します。
※ 誤アクセス防止の為、C&CサーバのIPアドレスはマスキングしています。
Network Trafficを確認すると、104.21.22.xxxに80/tcp(HTTP)でC&Cサーバと通信していることがわかります。
なお、Noribenは通信内容の解析をすることができないため、通信内容を解析する場合はWireSharkなどの別ツールを用いる必要があります。
では、WireSharkを用いてC&C通信を解析しよう!・・・と言いたいところですが、解析時点でC&Cサーバが稼働していませんでした。マルウェアによっては特定の期間のみしかC&Cサーバが稼働していない場合があり、理想的にはそのマルウェアが攻撃で利用されたタイミングで解析できることがベストです。しかし、今回のようにC&Cサーバが稼働しておらず、マルウェア解析が滞ることもしばしばあります。
C&Cサーバが稼働していない場合は、偽のC&Cサーバを用いることでC&C通信を解析できる場合があります。動的解析ツールであるFaknet-NGで偽のC&Cサーバ(HTTPサーバ)をエミュレートし、C&C通信をWireSharkで見てみます。
何やらDLLファイルをダウンロードしているように見受けられ、URLからAmadeyの追加プラグインをダウンロードしていると推察されます。
以上をまとめると、今回解析したamadey.exeは以下のような処理を実施したことがわかります。
- Tempフォルダにjbruyer.exeを作成し実行
- jbruyer.exeがタスクスケジューラに永続化処理を行いかつ、cacls.exeで削除対策を行う
- jbruyer.exeがHTTP通信でC&C通信を行う
より詳細を調査するには
NoribenはProcess Monitorの監視結果をCSVファイルとして出力するため、このCSVファイルを調査することでより詳細な挙動を解析することができます。CSVファイルには多くの情報が記載されているため、私はTimeline Explorerを用いてフィルタリングやグルーピングをして調査することが多いです。
以下はプロセス名(Process Name)を”jbruyer.exe”でフィルタリングし、挙動(Operation)でグルーピングしたものです。
jbruyer.exeの挙動種別ごとにグルーピングされているため、Process Monitorのログが見やすくなったのではないかと思われます。
また、Noribenによりフィルタリングされた挙動の中でも解析に必要な情報が存在する場合があります。
解析しててフィルタリングされたことに気付いたは内緒。
本検体は永続化のためにStartupフォルダをレジストリに登録するのですが、この処理がNoribenの解析結果ではフィルタリングされています。
おわりに
本記事ではマルウェアの動的解析ツールであるNoribenについて紹介しました。
この記事が皆様のマルウェア解析に役立ったくれると嬉しいです。
それでは、良いマルウェア解析ライフを!
Xのフォロー&条件付きツイートで、「IoT米」と「バリーくんシール」のセットを抽選でプレゼント!
応募期間は2023/12/01~2023/12/31まで。詳細はこちらをご覧ください。
今すぐポストするならこちら→ フォローもお忘れなく!