LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

テクニカルレポート | 

マルウェアからアンチデバッグ機能を自動識別するツール「AntiDebugSeeker」を公開

サイバー救急センターの武田です。

マルウェアに含まれるアンチデバッグ機能を自動的に識別するツール「AntiDebugSeeker※1」を開発し、IDA Plugin Contest 2023※2に提出しました。IDA Plugin Contestは、2009年から毎年開催されているコンテストで、その年のIDAプラグイン上位3位を決めるコンテストです。

※1 GitHub - LAC-Japan/IDA_Plugin_AntiDebugSeeker: Automatically identify and extract potential anti-debugging techniques used by malware.

※2 2023 Plug-In Contest

多くのマルウェアは、解析を困難にすることを目的に、デバッグで解析を行えないようにするアンチデバッグという機能を持っていることがあります。特に、多くの被害組織が出るばらまき型メールで拡散するマルウェアや流行しているランサムウェアには、複数のアンチデバッグ機能が実装されていることを確認しています。

このツールは、マルウェア解析を始めて間もない方や、アンチデバッグに壁を感じている方などにも直感的に使っていただけるようシンプルで分かりやすいUIを心掛け、作成しました。

この記事を通して、ぜひ多くの方に使っていただきたく、ツールの使い方やツールを使用すると、どのようなことが分かるのかを紹介します。

ツールの特徴

「AntiDebugSeeker」は、マルウェアによって使用されている可能性のあるアンチデバッグ機能を自動的に識別し、抽出できます。

主な機能は以下の2つです。

  • マルウェアによってアンチデバッグに使用されている可能性のあるWindows API(以下、API)を抽出
  • APIに加えて、キーワードをトリガーとして使用することで、API呼び出しのみでは識別できないアンチデバッグ機能を抽出

また、ルールを定義したファイルは、簡単に検知したいキーワードやAPIを追加できるので、ツールを使用する方が自由にルールを変更、追加できます。なお、パックされているマルウェアの場合は、事前にアンパックの実施やScylla※3などのツールを利用し、インポートテーブルを修正してからこのツールを使用するとより効果的です。

※3 GitHub - NtQuery/Scylla: Imports Reconstructor

ツールの使い方

次に、ツールの使い方を紹介します。また、GitHubにてこちらのツールを公開しているので、併せてご確認いただければ幸いです。

実行に必要なファイル

実行に必要なファイルと配置
図1 実行に必要なファイルと配置

以下の3つのファイルをIDAのプラグインディレクトリの下に配置してください。

  • anti_debug.config(アンチデバッグ機能を検知するためのルールが含まれているファイル)
  • anti_debug_techniques_descriptions.json(検知されたルールの説明が含まれているファイル)
  • AntiDebugSeeker.py(アンチデバッグ検知プログラム)

起動方法

プラグインを起動(Ctrl+Shift+D)すると、解析完了後、Anti Debug Detection Resultsという画面が表示されます。

それぞれの欄について、以下に記載します。

Category Name Category Name anti_debug.configに記載している"Anti_Debug_API"に定義しているAPIのカテゴリネーム
Possible Anti-Debug API 検知したAPI
Address(①) 検知したAPIが使用されているアドレス
Possible Anti-Debug Technique anti_debug.configに記載している"Anti_Debug_Technique"に定義しているキーワードで検知した検知名
Address(②) 検知した最初のキーワードのアドレス
(Address Transition) 検知した行をダブルクリックすると、記載しているアドレスにジャンプ
(例)Anti Debug Detection Results表示画面
図2 (例)Anti Debug Detection Results表示画面

anti_debug.configについて

anti_debug.configには、アンチデバッグ機能を検出するためのルールが記載されています。ファイルは、Anti_Debug_APIとAnti_Debug_Techniqueの2つのセクションを持っています。それぞれについて紹介します。

Anti_Debug_API

このセクションでは、自由にカテゴリーを作成し、検知したいAPI(完全一致)を任意の数、追加できます。

Anti_Debug_APIセクションでのルールの書き方
図3 Anti_Debug_APIセクションでのルールの書き方

Anti_Debug_Technique

このセクションでは、1つのルール名で最大で3つのキーワード(部分一致)を設定できます。

Anti_Debug_Techniqueセクションでのルールの書き方
図4 Anti_Debug_Techniqueセクションでのルールの書き方

また、探索範囲にデフォルト値ではなく、カスタム値を設定したい場合は、設定したキーワードの末尾に'search_range=値'を指定します。これにより、設定した各ルールに対して探索範囲を変更できます。探索範囲を個別に設定することによって誤検知が減り、検知精度や処理速度の向上につながります。

探索範囲の指定方法
図5 探索範囲の指定方法

探索の流れ:
最初のキーワードを、ディスアセンブル(オペコード、オペランド)、ディスアセンブル上のコメント、インポートテーブルから探索します。見つかった場合、指定されたバイト数(デフォルトでは80バイト)内で2番目のキーワードも同じ探索プロセスで行います。この同じプロセスが、3番目のキーワードを探索する際にも適用されます。

サポート機能

ツールの実行後、Anti_Debug_APIとAnti_Debug_Techniqueでは、検知した箇所が異なる色でハイライトされます。特に、Anti_Debug_Techniqueで検知されたキーワードがどの箇所、部分で検知されているのかわかるので、誤検知かどうかの判断材料になります。

Anti_Debug_APIはGreenに、Anti_Debug_TechniqueはOrangeにハイライトされる
図6 セクション別の色付け

さらに、図7のように、Anti_Debug_APIで指定されたAPIが検知された場合、そのカテゴリー名がコメントとして追加され、Anti_Debug_Techniqueで検知された場合は、検知したルール名と説明が最初に検出されたキーワードにコメントとして追加されます。

検知したAPIやキーワードのサポート機能
図7 検知したAPIやキーワードのサポート機能

anti_debug.configの編集機能

アンチデバッグ機能を検知するためのルールを定義しているanti_debug.configは、IDA上からも(Ctrl+Shift+E)で、確認と編集ができます。現状のルールの確認や、分析中に新しくルールを加えたいキーワードが見つかった場合、そのキーワードを追加することが可能です。変更、追記を行った場合は、'Save'ボタンをクリックして修正内容を保存します。

anti_debug.configの編集機能
図8 anti_debug.configの編集機能

検知できるアンチデバッグ手法の一覧

anti_debug.configのAnti_Debug_Techniqueセクションで定義されているルール名の一覧
図9 anti_debug.configのAnti_Debug_Techniqueセクションで定義されているルール名の一覧

どのように解析の手間が軽減されるのか

マルウェアに対してツールを実行し、どのように解析の手間が軽減されるのかイメージしていただくため、簡単な例を紹介します。

図10は、ツール実行後の結果の一部を表示しています。例では、Anti_Debug_Techniqueセクションにて記載したルールで検知しているPossible Anti-Debug Techniqueの箇所を見ると、TimingCheck_RDTSCというルールで検知していることが確認できます。

(例)Anti Debug Detection Results表示画面(一部抜粋)
図10 (例)Anti Debug Detection Results表示画面(一部抜粋)

アンチデバッグ機能がある可能性があるため、該当の行をダブルクリックすると、検知したアドレスに遷移することができます。rdtscという文字列で検知していることが分かり、検知ルールの名前と説明が記載されています。説明を見れば初めて検知したルールでも、なぜ検知したのか、どういった目的で使われることがあるのかなど理解できると思います。

図11で示したアンチデバッグは、VM検知に使われる方法で、cpuid命令をrdtsc命令でサンドイッチにすることで、cpuid命令の実行時間を計測するものです。このアンチデバッグは、VMとそうでない環境での差を利用するタイミングチェックと呼ばれている手法の1つです。

検知したアドレスの確認
図11 検知したアドレスの確認

また、Possible Anti-Debug APIで表示されている箇所は、Anti_Debug_APIのセクションにて、マルウェアによってアンチデバッグとして使用される可能性のあるAPIを定義しています。このアンチデバッグで使用される可能性のあるAPIは、往々にして、マルウェアによって、よく使われるAPIでもあります。そのため、アンチデバッグ、そして、マルウェアにどのような機能があるのかというヒントになる要素も含まれます。この欄からは、2つの観点から結果を見ていただくとより参考になると思います。

図12は、表示された結果から、青枠のWriteProcessMemoryでダブルクリックした際のIDAのディスアセンブル画面です。VirtualProtectExでメモリに実行権限を付与し、WriteProcessMemoryでそのメモリにデータを書き込んだ後、ResumeThreadで作成したスレッドによって書き込んだデータを実行しています。検知したAPIにも参考としてコメントで簡単な説明を表示しています。このコードから、もしかすると、インジェクション機能を持っているマルウェアではないかと推測することができます。

ツールから探せるマルウェアの機能
図12 ツールから探せるマルウェアの機能

最後に

IDA Plugin Contest2023では、以下のように評価していただきました。

AntiDebugSeekerは、PEファイルで使用される一般的なアンチデバッグ技術を判定します。私たちは、これが純粋に静的解析に基づいており、デバッガーを起動する必要がない点が気に入っています。検出されたパターンに関しては、"クラシック"なものから、比較的新しいアンチデバッグのトリックもカバーしています。またIDA上の操作では、プラグインのユーザーインターフェースに表示される結果をダブルクリックすることで、検出されたパターンにすぐにジャンプすることができます。さらに、検知ルールに関しては、他の、または、追加のキーワードを検索するように設定することもできます。

原文:
AntiDebugSeeker determines common anti-debugging techniques used in PE files. We liked that it is based purely on static analysis and does not require spawning a debugger. With regard to the detected pattern it covers the "classics" but also some rather new anti-debugging tricks. IDA can quickly jump to the detected patterns by double-clicking results displayed in the plugin's user interface. The plugin is configurable to search for other / additional keywords.

私が評価していただきたかった検出方法、操作性、検知ワードの拡張性の3つのポイントをすべて評価していただいたため、大変嬉しく思っています。

定義するルールは使用する方が自由にカスタマイズすることが可能です。ぜひ使っていただき、要望や追加したほうがいいおすすめのキーワードなどがありましたらPull Requestをお待ちしております。このツールが、解析に少しでもお役に立つことができれば幸いです。

この記事は役に立ちましたか?

はい いいえ