w12scan
w12scanは、ネットワークアセット探索エンジンです。WEBインターフェースからタスクを投入すると、w12scanは関連するアセットを自動的に集約し、分析・利用を容易にします。w12scanは私の卒業設計でもあります。
w12scanは、WEB端末(データ表示用)とClient端末(関連アセットデータ検索用)に分かれています。
こちらがWEB端のオープンソースプログラムです。Client端はhttps://github.com/boy-hack/w12scan-clientにあります。
動画でW12SCANを理解する

設計思想
Python3 + Django + Elasticsearch + Redis(重複除去+WEBとClient間通信ミドルウェア)に基づき、WEB APIを使用してスキャン対象を追加し、スキャン完了後WEB端に表示します。

特徴
WEB端
- 強力な検索構文
- 検索構文を使用して、CMS、サービス名、タイトル、国・地域などを検索し、関連するターゲットを迅速に見つけることができます。
- title=“abc” # タイトルから検索
- header=“abc” # HTTPヘッダーから検索
- body=“123” # 本文から検索
- url = “*.baidu.com” # baidu.comのサブドメインを検索。
*はワイルドカード
- ip = ‘1.1.1.1’ # IPを検索。CIDR
'192.168.1.0/24'やワイルドカード検索'192.168.1.*'に対応
- port = ‘80’ # ポートを検索
- app = ’nginx’ # コンポーネントを検索
- country = ‘cn’ # 国を検索
- service = ‘mysql’ # サービスを検索
- bug = 'xx' # 存在する脆弱性を検索
- カスタムアセット設定
- 特定の企業に関連するドメインやIPアセットをカスタマイズすることで、w12scanは自動的に対応するアセットターゲットを探し出します。ターゲットを表示する際には、そのターゲットの帰属を示す明確な識別が表示されます。
- 自動関連付け
- ターゲット詳細画面で、ターゲットがIPの場合、そのIP上のすべてのドメインとそのCセグメント上のすべてのドメインが自動的に関連付けられます。ターゲットがドメインの場合、隣接サイト、Cセグメント、サブドメインが自動的に関連付けられます。
- マルチノード管理
- WEB端は数分ごとにノードの稼働状況をチェックし、ノードのスキャン数やスキャンログを確認できます。
- タスクRESTful
- タスク追加用のインターフェースを提供。WEB端から追加するか、任意のソフトウェアにこのインターフェースを統合できます。
スキャン端(Client)端
- タイムリーなPoC検証
- airbug APIとの連携により、オンラインで最新のPoC検証スクリプトを呼び出します。airbugは脆弱性アップデートの即時性を保証します。また、airbugプロジェクトをフォークして独自のPoCルールを追加することも可能です。
- 検証的な攻撃
- スキャン端には一般的な脆弱性検証サービスが内蔵されており、URLをスキャンするたびにこれらのサービスが実行され、結果は最終的にw12scanのWEB端に表示されます。
- スキャンと識別
- ポートスキャンにはmasscan、ポート識別にはnmap、Webアプリケーション識別にはwappalyzerと簡易版w11scan(フィンガープリント認識)を使用します。
- 容易な分散化
- プログラムアーキテクチャの設計段階からこれを考慮しており、スキャン端はタスクを受け取るだけで、最終結果はWEB端とのみやり取りします。そのため分散化は非常に容易で、別のマシンでスキャン端を実行するだけで済みます。Dockerベースの分散配置や、Celeryサービスの統合も容易に行えます。
インストール
Dockerによるワンクリックデプロイ
mkdir ~/w12scan-data/db # このディレクトリはw12scanの結果を保存
mkdir ~/w12scan-data/data # このディレクトリはESの結果を保存
git clone https://github.com/boy-hack/w12scan
cd w12scan
docker-compose up -d
しばらく待った後、http://127.0.0.1:8000 にアクセスします。
デフォルトのユーザー名とパスワードは boyhack:boyhack です。
データストレージ
docker-compose.yml を編集し、~/w12scan-data/db または ~/w12scan-data/data を検索して保存場所を変更できます。
関連問題
- 高可用性を維持するには、少なくとも8GB RAM、4CPUのサーバーを用意してください(ESがメモリを消費します)。サーバーがこれらの要件を満たさない場合は、dockerfileのESデータベースに
- "ES_JAVA_OPTS=-Xms2048m -Xmx2048m" を追加してメモリを指定する必要がありますが、高可用性は保証されません。
- Windowsにインストールする場合、
.shファイルのフォーマットに注意してください。 https://github.com/boy-hack/w12scan/issues/12 (@Hotsunrize に感謝)。
- Q: 分散デプロイはどうすればよいですか? A: デプロイ方法
- Q: 起動後に検索結果が0のままです。 A: スキャンターゲットを追加する必要があります。
- スキャン中に検索を行わないでください。Elasticsearchはデータ挿入時に分析、トークン分割などの操作を行います(その間は効率が低くなります)。このときに検索すると503エラーが返される可能性があります。スキャンが完了した後に検索することを推奨します。(将来的にはデータ移行で解決予定)
関連リンク
法律
本プログラムは主に分析研究のためにネットワークデータを収集するために使用されます。本プログラムを使用する前に、現地の関連法規を遵守してください。