レポートを使用すると、ファイアウォールをアクティブに調査して、送信または受信のブロック ルールを列挙することができます。これを適切に使用すると、ファイアウォールの構成を取得できるようになります。
私は主に、現在開発中の分散ネットワーク スキャナの問題のトラブルシューティングを支援するためにこれを開発しました。
このコード部分は単なる PCAP パーサーです。つまり、これを機能させるには、適切に取得したネットワーク パケット ダンプを提供する必要があります。次に、このツールは、(PCAP に従って)ファイアウォールによってブロックされているポートを出力します。
これを使用するには、少なくとも 2 台のマシンにアクセスする必要があります。 1 つはテスト対象のファイアウォールの内側にあり、もう 1 つは反対側にあります。
考えられる使用例は 2 つあります。
ネットワーク トラフィック (またはその他のスニファー) をキャプチャして保存するには、tcpdump、tshark、Wireshark などのツールが必要です。また、プローブ パケットを作成して送信するには、nmap や Masscan などのツールが必要です。次の例では、masscan と tcpdump を使用します。
外部マシンの直前にもう 1 つファイアウォールがある場合 (テストするファイアウォールの背後にあるものではありません)、インプレース ルールが何であるかを知っておくとよいでしょう。しかし、これは必須ではありません。さまざまな場所からさらにテストを行うことで解決できます。
以下の手順に従うと、正確な結果を得ることができます。
後でそのマシン上でネットワーク スキャナーを実行する予定であり、送信トラフィックが出口ファイアウォールによってブロックされないことを確認したいため、送信ルールを列挙したいとします。
ファイアウォールの内側のマシンの IP はaaaa
ですが、外側のマシンの IP はbbbb
です。この 2 番目のマシンは、パケット スニファ (この場合はtcpdump
) を実行するマシンであり、最初に設定するマシンになります。
PCAPの取得
どのプローブ パケットが宛先に到着しないかを確認するために、ここでパケット スニファを開始する必要があります。このマシンにはネットワーク インターフェイスeth0
に関連付けられたパブリック IP bbbb
があり、ファイアウォールが実行されていないことを考慮します。次のように tcpdump を実行します
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
ファイルre-port.pcap
が生成され、テストの終了後、このファイルがこのツールに渡されます。ただし、この部分については後で説明します。
トラフィックの調査
ファイアウォールの内側のマシンから 65535 SYN
パケットを生成し、 bbbb
に送信します。
これを行うには、 masscan
使用します。 --rate
オプションでレートを設定し、 --retries
オプションで指定したポートごとにクラフトするパケット数を設定できます。宛先に到達できるすべてのパケットが宛先に到達することを確認する必要があるため、これらのオプションは両方とも重要です。送信元/宛先の帯域幅によっては、送信速度が高いためにパケットが失われる可能性があります。このテストでは、ゆっくりと安全に行う必要があります。イタリアには「ゆっくり進む者は遠くまで行く」という格言がありますが、それが私にとってはぴったりだと思います。
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
いくつかのテストを行った結果、ポートごとに 1 秒あたり 350 パケットを 2 回送信すると、合計 131072 (128k) パケットが送信され、パケット損失がなければ約 9 分かかることがわかりました。
ファイアウォール ルールを列挙する
この時点で、 Re-port
使用して、閉じられたポートのリストを取得できます。最初のマシンに戻り、 CTRL+C
押してパケット スニファーを停止し、Re-port ツールがあるディレクトリにre-port.pcap
コピーします。次のように実行できるようになりました。
./enumerate.py re-port.pcap
前の例では、TCP ブロック ルールを列挙していました。ブロックされたすべての UDP ポートのリストが必要な場合は、上記の手順に従ってコマンドを次のように変更します。
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
./enumerate.py --help を実行してすべてのオプションを表示します
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Report は Python クラスであり、自由に使用/拡張できます。
これは反復可能であり、 with
ステートメント内で使用します。
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
または
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n: このツールの背後にあるシンプルなアイデアについて。