Google の OSS ネットワークセキュリティスキャナー Tsunami を触ってみる

Tsunami

現在のステータスは α リリースとのこと

スキャン概要については下記に記載がある
https://github.com/google/tsunami-security-scanner/blob/master/docs/orchestration.md

Tsunami のインストール

利用準備

以下のツールが必要とのこと
ネットワークスキャナーとしてはもはや定番
しかし私の環境は Windows なので docker コンテナを立ててその上で検証しよう

以下のような DcokerFile を用意し

FROM centos:centos8

適当に建てる。OSは好み
コンテナを起動してログイン

> docker build .
> docker run -d -it <conntener_id> /bin/bash
> docker exec -it <conntener_id> /bin/bash

必要なライブラリをインストールする

# yum install epel-release
# yum install -y nmap ncrack java java-devel git

導入スクリプトで Java のインストールを JAVA_HOME 変数で判断しているため
JAVA_HOME 環境変数の設定

# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64/jre/

クイックスタートスクリプトの実行

QuickStart 用の導入スクリプトを実行する

# bash -c "$(curl -sfL https://raw.githubusercontent.com/google/tsunami-security-scanner/master/quick_start.sh)"

BUILD SUCCESSFUL in 2m 1s
14 actionable tasks: 14 executed

Build successful, execute the following command to scan 127.0.0.1:

cd /root/tsunami && \
java -cp "tsunami-main-0.0.2-SNAPSHOT-cli.jar:/root/tsunami/plugins/*" \
  -Dtsunami-config.location=/root/tsunami/tsunami.yaml \
  com.google.tsunami.main.cli.TsunamiCli \
  --ip-v4-target=127.0.0.1 \
  --scan-results-local-output-format=JSON \
  --scan-results-local-output-filename=/tmp/tsunami-output.json

中身を見ると Git でソースをクローンしてビルドしている感じだった

スキャンの実行

ビルド時の最後にスキャンコマンドの例がでてくる
が、対象はサンプルアプリがある docker image になっているので少し修正が必要

またクイックスタート用に最初からインストールされているプラグインは下記のようになっていた

# ls -l tsunami/plugins/
total 340
-rw-r--r-- 1 root root   7154 Aug 11 08:57 exposed_hadoop_yarn_api-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root   6192 Aug 11 08:57 exposed_jenkins_ui-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root   5897 Aug 11 08:57 exposed_jupyter_notebook-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root  41575 Aug 11 08:57 ncrack_weak_credential_detector-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root 267555 Aug 11 08:57 nmap_port_scanner-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root   6247 Aug 11 08:57 wordpress_exposed_installation_page-0.0.1-SNAPSHOT.jar

よくあるアプリケーション用のプラグインと nmap みたい
ドメインを対象にできるオプションがあるか分からないが、サンプルでは IPv4 に対してスキャンできるようなので、
スキャンをかけても問題ないサイト等を対象に実施してみる

java -cp "tsunami-main-0.0.2-SNAPSHOT-cli.jar:/root/tsunami/plugins/*" \
  -Dtsunami-config.location=/root/tsunami/tsunami.yaml \
  com.google.tsunami.main.cli.TsunamiCli \
  --ip-v4-target=***.***.***.*** \
  --scan-results-local-output-format=JSON \
  --scan-results-local-output-filename=/tmp/tsunami-output.json


Aug 11, 2020 9:16:57 AM com.google.tsunami.main.cli.TsunamiCli run
INFO: Tsunami scan finished, saving results.
Aug 11, 2020 9:16:57 AM com.google.tsunami.common.io.archiving.RawFileArchiver archive
INFO: Archiving data to file system with filename '/tmp/tsunami-output.json'.
Aug 11, 2020 9:16:57 AM com.google.tsunami.main.cli.TsunamiCli run
INFO: TsunamiCli finished...
Aug 11, 2020 9:16:57 AM com.google.tsunami.main.cli.TsunamiCli main
INFO: Full Tsunami scan took 55.12 s.

スキャンレポート用の json が出来たようなので中身を見てみると

{
  "scanStatus": "SUCCEEDED",
  "scanStartTimestamp": "2020-08-11T09:16:06.595Z",
  "scanDuration": "50.667s",
  "fullDetectionReports": {
  }

まぁ今回は完全に静的なサイトを対象にしたからね・・・
スキャン中のログを見てると下記のように nmap で何してるかだったり

Executing the following command: '/usr/bin/nmap --unprivileged -Pn -n -sT -sV --version-intensity 5 -T4 --script banner ***.***.***.*** -oX /tmp/nmap5491139303090523058.report'

どういう URL に対してリクエストを投げているかなんかも出ている


現時点ではまだスキャンツールとして利用できる!という感じでは無い
CDNや冗長化が普通のWebシステムにおいてドメインで診断できないのは辛いし(ネットワークスキャナーなのでしょうが無いかな?)
処理フローのドキュメントにあるように、 nmap でスキャンして HTTP/HTTPS の穴があったらアプリのスキャンもついでにするよ
という感じなので今後に期待しつつも基本はネットワークスキャンベースかなぁという現状

Gooleの脆弱性診断ソフトには昔からある skipfish があるので
その辺といい感じに棲み分けか、統合してくれると使い勝手があるかなという印象

Share Comments
comments powered by Disqus