-
タグ
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- XDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR
サイバー救急センターの武田です。
マルウェアに含まれるアンチデバッグ機能を自動的に識別するツール「AntiDebugSeeker※1」を開発し、IDA Plugin Contest 2023※2に提出しました。IDA Plugin Contestは、2009年から毎年開催されているコンテストで、その年のIDAプラグイン上位3位を決めるコンテストです。
多くのマルウェアは、解析を困難にすることを目的に、デバッグで解析を行えないようにするアンチデバッグという機能を持っていることがあります。特に、多くの被害組織が出るばらまき型メールで拡散するマルウェアや流行しているランサムウェアには、複数のアンチデバッグ機能が実装されていることを確認しています。
このツールは、マルウェア解析を始めて間もない方や、アンチデバッグに壁を感じている方などにも直感的に使っていただけるようシンプルで分かりやすいUIを心掛け、作成しました。
この記事を通して、ぜひ多くの方に使っていただきたく、ツールの使い方やツールを使用すると、どのようなことが分かるのかを紹介します。
ツールの特徴
「AntiDebugSeeker」は、マルウェアによって使用されている可能性のあるアンチデバッグ機能を自動的に識別し、抽出できます。
主な機能は以下の2つです。
- マルウェアによってアンチデバッグに使用されている可能性のあるWindows API(以下、API)を抽出
- APIに加えて、キーワードをトリガーとして使用することで、API呼び出しのみでは識別できないアンチデバッグ機能を抽出
また、ルールを定義したファイルは、簡単に検知したいキーワードやAPIを追加できるので、ツールを使用する方が自由にルールを変更、追加できます。なお、パックされているマルウェアの場合は、事前にアンパックの実施やScylla※3などのツールを利用し、インポートテーブルを修正してからこのツールを使用するとより効果的です。
※3 GitHub - NtQuery/Scylla: Imports Reconstructor
ツールの使い方
次に、ツールの使い方を紹介します。また、GitHubにてこちらのツールを公開しているので、併せてご確認いただければ幸いです。
実行に必要なファイル

以下の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.configについて
anti_debug.configには、アンチデバッグ機能を検出するためのルールが記載されています。ファイルは、Anti_Debug_APIとAnti_Debug_Techniqueの2つのセクションを持っています。それぞれについて紹介します。
Anti_Debug_API
このセクションでは、自由にカテゴリーを作成し、検知したいAPI(完全一致)を任意の数、追加できます。

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

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

探索の流れ:
最初のキーワードを、ディスアセンブル(オペコード、オペランド)、ディスアセンブル上のコメント、インポートテーブルから探索します。見つかった場合、指定されたバイト数(デフォルトでは80バイト)内で2番目のキーワードも同じ探索プロセスで行います。この同じプロセスが、3番目のキーワードを探索する際にも適用されます。
サポート機能
ツールの実行後、Anti_Debug_APIとAnti_Debug_Techniqueでは、検知した箇所が異なる色でハイライトされます。特に、Anti_Debug_Techniqueで検知されたキーワードがどの箇所、部分で検知されているのかわかるので、誤検知かどうかの判断材料になります。

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

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

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

どのように解析の手間が軽減されるのか
マルウェアに対してツールを実行し、どのように解析の手間が軽減されるのかイメージしていただくため、簡単な例を紹介します。
図10は、ツール実行後の結果の一部を表示しています。例では、Anti_Debug_Techniqueセクションにて記載したルールで検知しているPossible Anti-Debug Techniqueの箇所を見ると、TimingCheck_RDTSCというルールで検知していることが確認できます。

アンチデバッグ機能がある可能性があるため、該当の行をダブルクリックすると、検知したアドレスに遷移することができます。rdtscという文字列で検知していることが分かり、検知ルールの名前と説明が記載されています。説明を見れば初めて検知したルールでも、なぜ検知したのか、どういった目的で使われることがあるのかなど理解できると思います。
図11で示したアンチデバッグは、VM検知に使われる方法で、cpuid命令をrdtsc命令でサンドイッチにすることで、cpuid命令の実行時間を計測するものです。このアンチデバッグは、VMとそうでない環境での差を利用するタイミングチェックと呼ばれている手法の1つです。

また、Possible Anti-Debug APIで表示されている箇所は、Anti_Debug_APIのセクションにて、マルウェアによってアンチデバッグとして使用される可能性のあるAPIを定義しています。このアンチデバッグで使用される可能性のあるAPIは、往々にして、マルウェアによって、よく使われるAPIでもあります。そのため、アンチデバッグ、そして、マルウェアにどのような機能があるのかというヒントになる要素も含まれます。この欄からは、2つの観点から結果を見ていただくとより参考になると思います。
図12は、表示された結果から、青枠のWriteProcessMemoryでダブルクリックした際のIDAのディスアセンブル画面です。VirtualProtectExでメモリに実行権限を付与し、WriteProcessMemoryでそのメモリにデータを書き込んだ後、ResumeThreadで作成したスレッドによって書き込んだデータを実行しています。検知したAPIにも参考としてコメントで簡単な説明を表示しています。このコードから、もしかすると、インジェクション機能を持っているマルウェアではないかと推測することができます。

最後に
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をお待ちしております。このツールが、解析に少しでもお役に立つことができれば幸いです。
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- もっと見る +
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- XDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR