ペネトレーションテストや脆弱性スキャンを行う際、ターゲットとなるIPアドレスのリストを効率的に作成することは非常に重要です。Metasploit Frameworkには、このプロセスを支援するための便利なツールがいくつか含まれています。その中でも、msf-makeiplist
は、様々な形式のIPアドレス範囲指定から、スキャンツールなどで利用可能な単純なIPアドレスのリスト(1行に1IP)を生成するための強力なコマンドラインユーティリティです。
この記事では、msf-makeiplist
の基本的な使い方から、主要なオプション、実践的な活用例、そしてMetasploit Frameworkとの連携方法まで、詳細に解説していきます。このツールを使いこなすことで、ターゲットリスト作成の効率を大幅に向上させることができるでしょう。
Kali Linuxなどのペネトレーションテスト用ディストリビューションを使用している場合、Metasploit Frameworkと共にmsf-makeiplist
も通常はデフォルトでインストールされています。Kali Linux 2018.2(2018年5月リリース)以降では、他のMetasploitスクリプトと同様にmsf-
プレフィックスをつけて直接コマンドラインから呼び出せるようになり、利便性が向上しました。
msf-makeiplistとは何か? 🤔
msf-makeiplist
は、Metasploit Frameworkに含まれるユーティリティスクリプトの一つです。その主な目的は、ユーザーが指定した様々な形式のIPアドレス範囲(CIDR表記、ハイフン区切り、カンマ区切りなど)を解析し、それらに含まれる個々のIPアドレスを1行ずつリストアップしたテキストファイルを生成することです。
なぜこのようなツールが必要なのでしょうか?理由はいくつかあります。
- ツール互換性: NmapやMetasploit本体のようにCIDR表記や範囲指定を直接扱えるツールもありますが、中には1行1IP形式のリストしか受け付けないツールやスクリプトも存在します。
msf-makeiplist
は、これらのツールとの互換性を確保します。 - リストの加工: 生成されたIPリストは単純なテキストファイルなので、grep、sed、awkなどの標準的なUnix/Linuxコマンドや、テキストエディタで簡単に加工、フィルタリング、分割などが可能です。特定のIPを除外したり、特定の順序に並び替えたりする際に便利です。
- ターゲット管理: 大規模なネットワークを対象とする場合、ターゲットリストを体系的に管理することが重要になります。
msf-makeiplist
を使って生成したリストを基に、スキャン対象を明確に定義し、記録することができます。 - 自動化: シェルスクリプトなどから
msf-makeiplist
を呼び出すことで、ターゲットリスト作成プロセスを自動化できます。
msf-makeiplist
は、IPアドレス範囲を個別のIPアドレスリストに「展開」するためのツールと理解すると良いでしょう。
基本的な使い方 ⌨️
msf-makeiplist
の最も基本的な使い方は、IPアドレスの範囲を引数として渡すことです。コマンドラインから直接範囲を指定するか、範囲が記述されたファイルを指定します。
コマンド構文
基本的なコマンド構文は以下のようになります(オプションについては後述します)。
msf-makeiplist [オプション] IP範囲1 [IP範囲2 ...]
または、ファイルから範囲を読み込む場合:
msf-makeiplist -i 入力ファイル [オプション]
簡単な使用例:CIDR表記からの生成
例えば、192.168.1.0/30
というCIDRブロックに含まれるIPアドレスのリストを生成したい場合、以下のように実行します。
msf-makeiplist 192.168.1.0/30
このコマンドを実行すると、標準出力に以下のように表示されます。
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
/30
はサブネットマスク255.255.255.252
に相当し、ネットワークアドレス、利用可能なホストアドレス(2つ)、ブロードキャストアドレスの計4つのIPアドレスが含まれます。
簡単な使用例:ハイフンによる範囲指定
ハイフンを使って範囲を指定することも可能です。
msf-makeiplist 10.0.0.5-7
出力:
10.0.0.5
10.0.0.6
10.0.0.7
出力ファイルへの保存
生成されたリストをファイルに保存したい場合は、-o
オプションを使用します。
msf-makeiplist 192.168.1.100-105 -o target_list.txt
これにより、target_list.txt
というファイルに以下の内容が書き込まれます。
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.104
192.168.1.105
-o
オプションを指定しない場合、デフォルトでは標準出力(通常はターミナル画面)に出力されます。
主要なオプション解説 ⚙️
msf-makeiplist
は、より柔軟なリスト生成を可能にするためのいくつかのオプションを提供しています。msf-makeiplist -h
または msf-makeiplist --help
で利用可能なオプションの一覧を確認できます。
以下に主要なオプションとその説明をまとめます。
オプション | 説明 | 例 |
---|---|---|
-h , --help |
ヘルプメッセージを表示して終了します。 | msf-makeiplist -h |
-o <file> |
生成されたIPアドレスリストを指定されたファイルに出力します。指定しない場合は標準出力に出力されます。(古いバージョンのドキュメントやコードではデフォルトファイル名が `iplist.txt` となっている場合がありましたが、現在の挙動としては標準出力がデフォルトです) | msf-makeiplist 10.0.0.0/24 -o network_scan.txt |
-x <file> |
指定されたファイルに含まれるIPアドレスや範囲を、生成されるリストから除外します。ファイル内には、CIDR表記、IPアドレス、ハイフン区切りの範囲などを記述できます。 | msf-makeiplist 192.168.1.0/24 -x exclude_hosts.txt |
-r <ranges> |
IPアドレスの範囲をカンマ区切りで複数指定します。コマンドライン引数で直接範囲を与える代わりに使用できます。 | msf-makeiplist -r 192.168.1.0/28,10.0.0.5-10 |
-i <file> |
IPアドレスの範囲が記述された入力ファイルを指定します。ファイル内には、CIDR表記、IPアドレス、ハイフン区切りの範囲などを1行に1つずつ記述します。GitHub上のソースコード (`tools/recon/makeiplist.rb`) を見ると、このオプションが必須であるかのような記述がありますが、実際にはコマンドライン引数で直接範囲を与えることも可能です。ただし、ファイルからの読み込みを明示的に行う場合に利用します。 | msf-makeiplist -i range_list.txt |
-b <octet> |
IPアドレスのいずれかのオクテット(ドットで区切られた4つの部分)に、指定された数値が含まれるアドレスを除外します。例えば、.0 や.255 で終わるアドレス(ネットワークアドレスやブロードキャストアドレスの可能性がある)を除外したい場合に便利です。カンマ区切りで複数指定できます。 |
msf-makeiplist 192.168.1.0/24 -b 0,255 |
-t <template> |
より複雑なIPアドレス範囲のテンプレートを指定します。オクテットごとに範囲やリストを指定できます。例えば、192.168.[1-3,5].1-254 のように記述します。 |
msf-makeiplist -t 10.[0,1].1.[100-150] |
-h
オプションで確認することをお勧めします。
実践的な使用例 🚀
ここでは、より具体的なシナリオに基づいたmsf-makeiplist
の使用例をいくつか紹介します。
例1: 特定のサブネット範囲からリストを作成
1クラスCの範囲(/24)からIPリストを生成します。
msf-makeiplist 192.168.100.0/24 -o class_c_list.txt
これにより、192.168.100.0
から 192.168.100.255
までの256個のIPアドレスが class_c_list.txt
に保存されます。
例2: 複数の範囲を組み合わせてリストを作成
コマンドライン引数で複数の範囲を指定します。
msf-makeiplist 192.168.1.10-15 10.0.5.0/29
出力:
192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.14
192.168.1.15
10.0.5.0
10.0.5.1
10.0.5.2
10.0.5.3
10.0.5.4
10.0.5.5
10.0.5.6
10.0.5.7
-r
オプションを使っても同じ結果が得られます。
msf-makeiplist -r 192.168.1.10-15,10.0.5.0/29
例3: 特定のIPアドレスや範囲を除外してリストを作成
まず、除外したいIPアドレスや範囲をファイル(例: exclude.txt
)に記述します。
# exclude.txt の内容
192.168.1.1 # 特定のIP
192.168.1.100-110 # 範囲指定
192.168.1.200/30 # CIDR指定
次に、-x
オプションを使って除外リストを指定します。
msf-makeiplist 192.168.1.0/24 -x exclude.txt -o filtered_list.txt
これにより、192.168.1.0/24
の範囲から exclude.txt
に記述されたIPアドレスが除かれたリストが filtered_list.txt
に生成されます。
例4: ファイルから入力範囲を読み込んでリストを作成
スキャン対象の範囲が複数あり、ファイル(例: ranges.txt
)にまとめられている場合、-i
オプションが便利です。
# ranges.txt の内容
10.10.0.0/16
172.16.32.10-50
192.168.10.5
コマンド:
msf-makeiplist -i ranges.txt -o combined_list.txt
ranges.txt
に記述されたすべての範囲に含まれるIPアドレスが combined_list.txt
に出力されます。
例5: テンプレート機能を使った複雑なリスト生成
-t
オプションを使うと、より複雑なパターンでIPアドレスを生成できます。例えば、特定の部署に割り当てられている可能性のあるIP範囲を生成する場合などです。
例: 10.1.X.Y で、Xが10または20、Yが100から150までのIPリストを生成
msf-makeiplist -t 10.1.[10,20].[100-150]
このコマンドは、以下の範囲のIPアドレスを生成します。
- 10.1.10.100 から 10.1.10.150
- 10.1.20.100 から 10.1.20.150
例6: ネットワーク/ブロードキャストアドレスの除外
-b
オプションを使って、各オクテットの末尾が .0
または .255
になるIPアドレスを除外します。これは、ホストとして利用できないアドレスを除外する一般的な方法です。
msf-makeiplist 192.168.1.0/24 -b 0,255 -o hosts_only.txt
この結果、hosts_only.txt
には 192.168.1.1
から 192.168.1.254
までの254個のIPアドレスが含まれます(192.168.1.0
と 192.168.1.255
が除外されるため)。
msf-makeiplistとMetasploit Frameworkの連携 🤝
msf-makeiplist
で生成したIPアドレスリストは、Metasploit Framework(msfconsole
)内で様々な方法で活用できます。
1. RHOSTSオプションへの設定
多くのスキャナモジュールや一部のエクスプロイトモジュールは、ターゲットホストを指定するためにRHOSTS
(Remote Hosts)というオプションを持っています。このオプションには、単一のIP、CIDR表記、範囲指定、そしてファイルパスを指定できます。
msf-makeiplist
で生成したリストファイル (例: target_list.txt
) をRHOSTS
に設定するには、file:
プレフィックスを使用します。
msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS file:/path/to/target_list.txt
RHOSTS => file:/path/to/target_list.txt
msf6 auxiliary(scanner/smb/smb_version) > run
これにより、Metasploitはtarget_list.txt
ファイルを読み込み、リストされている各IPアドレスに対してスキャンを実行します。
RHOSTS
にファイル指定すると、パフォーマンスの問題やUIの応答性に影響が出ることが報告された事例もあります (例: 2016年のGitHub Issue #6718)。状況に応じてリストを分割するなどの工夫が必要になる場合があります。
2. データベースへのインポート
Metasploit Frameworkは、スキャン結果やホスト情報を管理するためのデータベース機能(通常PostgreSQLを使用)を持っています。msf-makeiplist
で生成したリストを、スキャン前にデータベースにホスト情報としてインポートしておくことができます。
msfconsole
内でdb_import
コマンドを使用します。
msf6 > db_import /path/to/target_list.txt
[*] Importing '/path/to/target_list.txt'...
[*] Successfully imported /path/to/target_list.txt
[*] Importing host data...
[*] Successfully imported host data
msf6 > hosts
db_import
コマンドは様々な形式のファイルをインポートできますが、1行1IPの単純なテキストファイルもサポートしています。インポート後、hosts
コマンドでデータベースに登録されたホストを確認できます。
データベースにインポートされたホストは、RHOSTS
オプションに直接データベースクエリの結果を設定する、あるいはスキャンモジュール実行時にデータベース内のホストを自動的に対象とする(モジュールによる)などの方法で利用できます。
3. スクリプトや他のツールとの連携
生成されたIPリストはプレーンテキストなので、Metasploit以外のツール(Nmap、Nikto、Hydraなど)や自作のスクリプトに簡単に渡すことができます。
例: Nmapでリスト内のホストに対してポートスキャンを実行
nmap -iL target_list.txt -p 1-1000 -oN nmap_scan_results.txt
このように、msf-makeiplist
はMetasploitエコシステム内外で柔軟に活用できる基盤データを提供します。
注意点とベストプラクティス ⚠️
msf-makeiplist
は便利なツールですが、使用にあたっては以下の点に注意し、ベストプラクティスを心がけることが重要です。
- 大規模リストの生成:
/16
(65,536 IP) や/8
(約1677万 IP) のような非常に大きな範囲を指定すると、大量のIPアドレスリストが生成されます。これにより、ディスク容量を圧迫したり、後続のツールで処理する際にメモリやCPUリソースを大量に消費したりする可能性があります。必要な範囲をできるだけ絞り込むか、生成後にリストを分割するなどの対策を検討してください。 - ネットワーク負荷への配慮: 生成したリストを使ってスキャンを行う場合、特に大規模なリストに対して高速なスキャンを実行すると、ターゲットネットワークや自身のネットワークに過大な負荷をかける可能性があります。スキャン速度の調整(Nmapの
-T
オプションなど)や、時間帯への配慮が必要です。 - 法的・倫理的な考慮事項: 最も重要な点として、許可なく他者のネットワークやシステムに対してスキャンや攻撃を行うことは、多くの国や地域で違法行為となります。
msf-makeiplist
で生成したリストを使用する際は、必ず事前に適切な許可を得ている、あるいは自身が管理するテスト環境内でのみ使用するようにしてください。 - 除外リストの活用: 重要なサーバーや、スキャン対象から除外すべきことが分かっているシステム(例: 監視システム、バックアップサーバー、特定の部署の端末など)は、
-x
オプションを使って積極的に除外リストに含めるべきです。これにより、意図しない影響を防ぎ、スキャンの効率を高めることができます。 - バージョン確認: 前述の通り、オプションの挙動はMetasploitのバージョンによって変わることがあります。特にスクリプトなどで自動化する場合は、使用する環境での挙動を
-h
オプションや簡単なテストで確認しておくと安全です。 - リストの管理: 生成したリストファイルには、いつ、どの範囲から、どのような目的で生成したかの情報(ファイル名やコメントなど)を付与しておくと、後で見返したときに分かりやすくなります。
まとめ ✨
msf-makeiplist
は、Metasploit Frameworkにおけるターゲットリスト作成の縁の下の力持ちとも言えるユーティリティです。CIDR表記、ハイフン区切り、ファイル入力、テンプレート指定、除外リストなど、多様な入力形式に対応し、標準的な1行1IP形式のリストを簡単に生成できます。
このツールを効果的に活用することで、
- 様々なツールとの互換性を確保できる
- ターゲットリストの加工や管理が容易になる
- リスト作成プロセスを自動化できる
といったメリットが得られます。生成したリストは、msfconsole
のRHOSTS
オプションやdb_import
コマンド、あるいはNmapなどの外部ツールで幅広く利用可能です。
ただし、ツールの使用にあたっては、生成するリストの規模、ネットワークへの影響、そして何よりも法的・倫理的な側面を常に考慮することが不可欠です。
この記事が、msf-makeiplist
を理解し、日々のペネトレーションテストやセキュリティ評価業務で活用するための一助となれば幸いです。🛡️
参考情報 📚
より詳細な情報や関連情報については、以下のリソースをご参照ください。
- Kali Linux Tools – metasploit-framework:
https://www.kali.org/tools/metasploit-framework/
(msf-makeiplist
を含むMetasploit Frameworkのツール群に関する情報が掲載されています。) - Metasploit Framework GitHub Repository (makeiplist.rb source):
https://github.com/rapid7/metasploit-framework/blob/master/tools/recon/makeiplist.rb
(msf-makeiplist
の実際のソースコードです。Rubyで書かれています。) - Rapid7 Metasploit Documentation:
https://docs.metasploit.com/
(Metasploit Framework全体の公式ドキュメントです。) - Metasploit Unleashed (Free Online Course by OffSec):
https://www.offsec.com/metasploit-unleashed/
(Metasploitの基本的な使い方から応用まで学べる無料のオンラインコースです。)
コメント