
高速に設計されたIPv6ポートスキャナーで、インターネットスキャンと探索を目的としています。
fi6sは、高速性を重視して設計されたIPv6ポートスキャナーで、インターネットスキャンと発見を目的としています。 これは、生のパケットを非同期で送信・処理することで実現されています。
設計と目標はMasscanとかなり似ていますが、それほど多機能ではありません。
ライセンスにご注意ください。
最後に: これはセキュリティ研究ツールであり、使用する際は現地の規制を遵守し、必要に応じて許可を得る責任は完全にユーザーにあります。
fi6sのビルドは、最近のLinuxシステム(例:Ubuntu)で非常に簡単です:
# apt install gcc make git libpcap-dev
$ git clone https://github.com/sfan5/fi6s.git
$ cd fi6s
$ make BUILD_TYPE=release
実行ファイルは./fi6sにできます。
fi6sはLinuxのみで開発・テストされています。他のUNIX系プラットフォームでも動作するはずですが、Windowsでは動作しません。
fi6sは、ネットワークの詳細(送信元、ルーターのMACアドレスやIPアドレス)を自動検出するため、すぐにスキャンを開始できます:
# ./fi6s -p 80,8000-8100 --max-rate 170 2001:db8::/120
この例では:
list"形式(暗黙のデフォルト)で標準出力に出力スキャンするアドレス範囲を指定する方法は他にもあります。何が起こるかわからない場合は、--print-summaryを使用してスキャンの概要をすばやく確認するか、--print-hostsを使用してすべての潜在的なターゲットIPを出力してください。
より高度な機能や追加の説明については、fi6s --helpの出力を参照してください。
リモートホストが新しい接続やプローブ要求に応じて送信するデータを「バナー」と呼びます。fi6sを使えば簡単に収集できます。
必要なのは--bannersオプションを指定することだけです:
# ./fi6s -p 22 --banners 2001:db8::xx
コマンドラインに--udpフラグを追加します:
# ./fi6s -p 53 --banners --udp 2001:db8:xx::1
TCPとは異なり、fi6sがプローブに対応しているプロトコルのポートをスキャンした場合のみ、有用な(または何らかの)結果が得られることに注意してください。fi6s --list-protocolsを使用してリストを表示できます。
fi6sは独自の最小限のTCP/IPスタックを備えているため、オペレーティングシステムがfi6sが使用している同じポートでTCP通信を試みないようにする必要があります。そうしないとスキャンプロセスが破綻します。
デフォルトでは、fi6sはOSにエフェメラルポートを予約するよう要求し、スキャン中そのポートを使用します。これはLinuxでのみ機能します。
これが失敗した場合、または別のプラットフォームを使用している場合(fi6sが警告します!)、送信元ポートを決定し、ファイアウォールを設定してこのポート上のすべてのトラフィックをドロップする必要があります。例:
# ipfw add 1000 deny tcp from any to any 12345 in ip6
または:
# ip6tables -A INPUT -p tcp -m tcp --dport 12345 -j DROP
そして:
# ./fi6s -p 22 --banners --source-port 12345 2001:db8::xx
UDPはコネクションレスであるため、これを行う必要はありませんが、不要なICMPv6応答が送信されるのを防ぐのは良い考えです。fi6sもデフォルトでこれを行います。
IPv6の大きな利点は広大なアドレス空間であり、上記の問題を回避する別の方法は、異なる送信元IPを使用することです。
このIPはローカルマシンに割り当てるべきではありませんが、静的ルーティングでマシンにルーティングされる必要があります。fi6sはNDP問い合わせに応答しないためです。
設定が正しく動作しているか確認するには、既知のパブリックIPにpingを送信してみてください。例:
# ./fi6s --icmp --source-ip ${chosen_src_ip} 2001:4860:4860::8888
ICMPv6 Pingスキャンを行うには--icmpを使用します:
# ./fi6s --icmp 2001:xxx0::1
往復時間は測定されません。
fi6sの設計を実現するために、ネットワーク環境に関していくつかの前提条件を設ける必要がありました。これらは通常の使用にはまったく影響しませんが、完全性のためにここに記載します。
つまり、以下の場合、fi6sは期待通りに動作しないか、まったく動作しない可能性があります:
バナー収集について:fi6sには本物のTCPスタックに似たものは付属していません。単に1つのクエリを送信し、それに続く応答データを読み取るだけです。再送やウィンドウロジックは実装されていません。
fi6sはポート番号とシーケンス番号を使用して、得られた結果が実行中の特定のスキャンに関連していることを保証しますが、プローブが送信されたIPと実際に応答しているIPを比較するチェックはありません。
つまり、スキャン中に例えばtracerouteなどを実行しても、スキャン結果に干渉しません。
ただし、スキャンしたターゲットが別のIPで応答した場合、入力リストに含まれていなかったIPがスキャン結果に表示される可能性があります。
この特性は実際に有用な場合があります。一部のルーターはゼロネットワークアドレスでSNMPやDNSクエリを受け付けますが、プライマリIPv6で応答するためです。
例: 3fff:1234:1234:44xx::をスキャン -> 3fff:1234:1234:44a3:e2a:86ff:fe12:3456から応答
fi6sがスキャンするIPをランダム化する方法(デフォルトの--randomize-hosts 1)は完璧とは程遠いです。
その挙動:
例えば、3fff::/108をスキャンする場合、3fff::1、3fff::20、3fff::300の順序はランダムになります。しかし、3fff::0:*内のすべてのアドレスは3fff::1:*の前にスキャンされ、その次に3fff::2:*というように続きます。