
Scannerl は、Kudelski Security によって実装されたモジュール式分散フィンガープリンティングエンジンです。 Scannerl は単一のホストで数千のターゲットをフィンガープリントできますが、複数のホストに簡単に分散することもできます。Scannerl はフィンガープリンティングにおける、ポートスキャンにおける zmap のような存在です。
Scannerl は Debian/Ubuntu/Arch で動作します(他のディストリビューションでもおそらく動作します)。マスター/スレーブアーキテクチャを採用しており、マスターノードが作業(フィンガープリントするホスト)をスレーブ(ローカルまたはリモート)に分散します。デプロイ全体はユーザーから透過的です。
従来のフィンガープリンティングツールを大規模解析に使用する場合、セキュリティ研究者はしばしば2つの制限に直面します。第一に、これらのツールは通常、一度に比較的少数のホストをスキャンするために構築されており、大規模なIPアドレス範囲には適していません。第二に、IPSデバイスで保護された大規模なIPアドレス範囲をフィンガープリントする場合、ブラックリストに登録される可能性が高く、情報が不完全になる可能性があります。Scannerl はこれらの制限を回避するために設計されており、複数のホストを同時にフィンガープリントする機能を提供するだけでなく、任意の数のホストに負荷を分散します。また、Scannerl はこれらのタスクの分散を完全に透過的にし、大規模フィンガープリンティングプロジェクトのセットアップとメンテナンスを簡単にします。これにより、手動でフィンガープリンティングプロセスを管理・配布するという困難な作業ではなく、分析に集中できます。速度面に加えて、scannerl は数行のコードで特定のフィンガープリンティング分析を簡単にセットアップできるように設計されています。フィンガープリンティングクラスタの作成が簡単なだけでなく、キャンペーンに微調整されたスキャンを追加して調整することもできます。
これは大規模フィンガープリンティングキャンペーンを実行する最速のツールです。
詳細はこちら:
目次
詳細はwikiをご覧ください。
インストールオプションの詳細は、wiki インストールページをご覧ください。
ソースからインストールするには、まずプラットフォームに適したパッケージを選択して Erlang(最低 v.18)をインストールします:Erlang ダウンロード
必要なパッケージをインストール:
# on debian
$ sudo apt install erlang erlang-src rebar
# on arch
$ sudo pacman -S erlang-nox rebar
次に scannerl をビルド:
$ git clone https://github.com/kudelskisecurity/scannerl.git
$ cd scannerl
$ ./build.sh
使用方法を確認するには次のコマンドを実行:
$ ./scannerl -h
Scannerl は Arch Linux ユーザー向けに AUR で提供されています:
DEB パッケージ(Ubuntu、Debian)は リリース から入手できます。
RPM パッケージ(OpenSUSE、CentOS、Red Hat)は https://build.opensuse.org/package/show/home:chapeaurouge/scannerl から入手できます。
分散スキャンを実行するには2種類のノードが必要です:
マスターノードには scannerl のインストールとコンパイルが必要ですが、スレーブノードには Erlang のインストールのみが必要です。セットアップ全体は透過的で、マスターノードによって自動的に行われます。
分散スキャンの要件:
$ ./scannerl -h
____ ____ _ _ _ _ _ _____ ____ _
/ ___| / ___| / \ | \ | | \ | | ____| _ \| |
\___ \| | / _ \ | \| | \| | _| | |_) | |
___) | |___ / ___ \| |\ | |\ | |___| _ <| |___
|____/ \____/_/ \_\_| \_|_| \_|_____|_| \_\_____|
USAGE
scannerl MODULE TARGETS [NODES] [OPTIONS]
MODULE:
-m <mod> --module <mod>
mod: the fingerprinting module to use.
arguments are separated with a colon.
TARGETS:
-f <target> --target <target>
target: a list of target separated by a comma.
-F <path> --target-file <path>
path: the path of the file containing one target per line.
-d <domain> --domain <domain>
domain: a list of domains separated by a comma.
-D <path> --domain-file <path>
path: the path of the file containing one domain per line.
NODES:
-s <node> --slave <node>
node: a list of node (hostnames not IPs) separated by a comma.
-S <path> --slave-file <path>
path: the path of the file containing one node per line.
a node can also be supplied with a multiplier (<node>*<nb>).
OPTIONS:
-o <mod> --output <mod> comma separated list of output module(s) to use.
-p <port> --port <port> the port to fingerprint.
-t <sec> --timeout <sec> the fingerprinting process timeout.
-T <sec> --stimeout <sec> slave connection timeout (default: 10).
-j <nb> --max-pkt <nb> max pkt to receive (int or "infinity").
-r <nb> --retry <nb> retry counter (default: 0).
-c <cidr> --prefix <cidr> sub-divide range with prefix > cidr (default: 24).
-M <port> --message <port> port to listen for message (default: 57005).
-P <nb> --process <nb> max simultaneous process per node (default: 28232).
-Q <nb> --queue <nb> max nb unprocessed results in queue (default: infinity).
-C <path> --config <path> read arguments from file, one per line.
-O <mode> --outmode <mode> 0: on Master, 1: on slave, >1: on broker (default: 0).
-v <val> --verbose <val> be verbose (0 <= int <= 255).
-K <opt> --socket <opt> comma separated socket option (key[:value]).
-l --list-modules list available fp/out modules.
-V --list-debug list available debug options.
-A --print-args Output the args record.
-X --priv-ports use only source port between 1 and 1024.
-N --nosafe keep going even if some slaves fail to start.
-w --www DNS will try for www.<domain>.
-b --progress show progress.
-x --dryrun dry run.
詳細はwikiをご覧ください。
Scannerl は他のホストなしでローカルホスト上で使用できます。ただし、実行元と同じホスト上にスレーブノードを作成します。そのため、分散セットアップで説明されている要件も満たす必要があります。
これを素早く行うには、ホストが自分自身を解決できることを確認します:
grep -q "127.0.1.1\s*`hostname`" /etc/hosts || echo "127.0.1.1 `hostname`" | sudo tee -a /etc/hosts
そして SSH キー(まだない場合)を作成し、authorized_keys に追加します(SSH サーバーが動作している必要があります):
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
次の例は、localhost から google.com に対して HTTP バナー取得を実行します:
./scannerl -m httpbg -d google.com
分散スキャンを実行するには、scannerl が作業を分散するために使用するホストを事前にセットアップする必要があります。詳細は分散セットアップを参照してください。
Scannerl は使用するスレーブのリスト(-s または -S スイッチで指定)を期待します。
./scannerl -m httpbg -d google.com -s host1,host2,host3
Scannerl は -l スイッチで利用可能なモジュール(出力モジュールとフィンガープリンティングモジュール)をリスト表示します:
$ ./scannerl -l
Fingerprinting modules available
================================