【GMOリサーチではエンジニアを募集中です】採用情報はこちら!

最新のGoogleオープンソースセキュリティスキャナー「Tsunami」を使って脆弱性診断してみた

最新のGoogleオープンソースセキュリティスキャナー「Tsunami」を使って脆弱性診断してみた

こんにちは。GMOリサーチでインフラを担当しているオカモトです。

コロナの影響で引きこもり生活が続く中、皆様いかがお過ごしでしょうか。

今回、Googleが先日公開した「Tsunami」というオープンソースのセキュリティスキャナーを試してみたのでその内容をご紹介します。

1.Tsunamiって何?

Tsunamiは、2020年6月18日木曜日(現地時間)にGoogleがオープンソースのプロジェクトとして公開したセキュリティスキャナーです。

GoogleではGKE(Google Kubernetes Engine)を使ってインターネットからアクセスを受けているシステムの脆弱性診断にTsunamiを使っているそうです。

・Tsunamiのリリースに関する記事は以下のURLから確認できます。

Google Open Source Blog

https://opensource.googleblog.com/2020/06/tsunami-extensible-network-scanning.html

Tsunamiは以下の目標・理念を掲げて開発を進めているそうで、超大規模なシステムを高速にスキャンするような用途でも使いやすいソフトウェアを目指しているようです。

  • Tsunami supports small manually curated set of vulnerabilities(手動でリストアップされた少数の脆弱性に対してのスキャンをサポート)
  • Tsunami detects high severity, RCE-like vulnerabilities, which often actively exploited in the wild(遠隔からのコード実行のような緊急度の高い脆弱性を検知する)
  • Tsunami generates scan results with high confidence and minimal false-positive rate(誤検出率を最小限に抑えた信頼性の高いスキャン結果を生成する)
  • Tsunami detectors are easy to implement.(脆弱性の検知器は簡単に実装できる)
  • Tsunami is easy to scale, executes fast and scans non-intrusively.(簡単にスケールできる。高速に実行され、対象システムに侵入せずにスキャンする)

2.Tsunamiの仕組み

公式の資料によるとTsunamiの脆弱性診断の流れは以下のような感じで進むそうです。

出典: Tsunami Scan Orchestration

https://github.com/google/tsunami-security-scanner/blob/master/docs/orchestration.md

大きく分けて、Reconnaisance(調査/偵察)とVulnerability Verification(脆弱性の検証)の2つのステップで実行されるそうで、各ステップの役割は以下の通りになります。

Reconnaisance(調査/偵察)

Reconnaisance(調査/偵察)のステップでは、ポートスキャンとフィンガープリントの2つのフェーズで対象システムに関する情報を可能な限り収集します。

<ポートスキャン>

対象システムの開いているポート、使われているプロトコル、ネットワークサービスなどを検出するフェーズ。

車輪の再発明をしないために、nmapやmasscanなどの既存のソフトウェアを内部で利用したプラグインを使うことを想定しているようです。

デフォルトではnmapのプラグインが使えます。

<フィンガープリント>

検知したポートで動いているサービスやウェブアプリケーションを検出するフェーズ。

1つのポートで複数のウェブアプリケーションが動いているような場合でも、それぞれのウェブアプリケーションを識別することを目指しているようです。

(例、TCPポートの443でリバースプロキシとしてnginxが動いている状態で、/blogではWordPress、/forumではphpBBが動いているというような構成)。

残念ながら今はまだ実装されてないみたいです。

Vulnerability Verification(脆弱性の検証)

Vulnerability Verification(脆弱性の検証)のステップでは、前のステップで収集した情報に基づいて、脆弱性検知のプラグインを並列に実行して対象に脆弱性がないか検証します。

脆弱性検知のプラグインは、基本的には1つの脆弱性に対して1つのプラグインとして実装されることを想定しているようです。

また将来的な構想として、脆弱性検知のプラグインをJavaで実装するほかにPythonやGoなど別の言語でも実装できるようにしたいそうです。

※現在公開されているTsunamiは開発者に試してもらうことを目的としたPre-Alpha版なので、将来的に仕様に大きな変更が入る可能性があります。

3.Tsunamiを実際にインストールしてみた

今回は以下の環境のサーバーを使って試してみました。

CentOS Linux release 7.7.1908 (Core)

3.10.0-1062.4.1.el7.x86_64

① 必要なパッケージのインストール

以下のバージョン以降のnmapとncrackが必要となるので、それぞれ公式サイトよりバイナリ及びソースコードをダウンロードしてインストールします。

nmapとncrackの最新安定版はこちらからダウンロードできます。

● nmap(binary/source)

https://nmap.org/download.html

● ncrack(source)

https://nmap.org/ncrack/

また、今回のテスト環境ではncrackのコンパイルのためopensslのバージョンを上げる必要があったので以下のバージョンのopensslもインストールしています。

お使いの環境によってはその他にも必要なものがあるかもしれません。

# 必要なバイナリ及びソースコードのダウンロード

# nmapのインストール

# openssl-1.1.1gのインストール

# ncrackのインストール

② Tsunamiのインストール

公式に用意されているquick_start.shというスクリプトを使ってTsunamiをインストールします。

このquick_start.shを実行すると、以下の処理を実行してくれます。

※gitでcloneするのでgitがインストールされている必要があります。

  1. google/tsunami-security-scannergoogle/tsunami-security-scanner-plugins の2つのリポジトリを $HOME/tsunami/repos ディレクトリ以下にgit cloneする
  2. 全ての Google Tsunami plugins をコンパイル、できたjarファイルをすべて $HOME/tsunami/plugins ディレクトリへ移動する
  3. Tsunami scannerをコンパイル、できたJarファイルを $HOME/tsunami ディレクトリへ移動する
  4. サンプルの設定ファイルのtsunami.yaml を $HOME/tsunami ディレクトリへ移動する
  5. サンプルとして127.0.0.1に対してスキャンを実行するコマンドを表示する

● Tsunamiのインストール

実行すると必要なファイルやプログラムのダウンロードやインストール、jarファイルのビルドをしてくれます。すべてのjarファイルのビルドが正常に完了すると最後に以下のようなメッセージが表示されます。

Tsunamiのファイル群は$HOME/tsunami/以下にインストールされています。

プラグインは$HOME/tsunami/pluginsのディレクトリに格納されています。

デフォルトだとポートスキャナーのプラグインが1つ、脆弱性検知のためのプラグインが5つ用意されています。

4.Tsunamiの設定を書いてみる

Tsunamiはyaml形式のファイルで設定を読み込むことができます。

初めから用意されているyamlファイルが$HOME/tsunami/tsunami.yamlにあるので、これを編集して設定を記述します。

今回はデフォルトで用意されているnmapを使ったポートスキャナーのプラグインの設定を1-1024番のウェルノウンポートのみスキャンするよう設定してみます。

5.セキュリティスキャンをやってみよう

Tsunamiのビルドが成功した際のメッセージの最後の部分で、以下のようなローカルホスト(127.0.0.1)をスキャンするためのコマンドが表示されます。

今回はこのコマンドを使って試しにローカルホストに対してセキュリティスキャンをしてみます。

ずらずらと実行時のログが表示された後、最後に上記のようなスキャン結果が表示されます。

ポートスキャンに約17秒、脆弱性の検証に約22マイクロ秒の時間がかかったというような各ステップの実行時間や、ポートスキャンで見つかったサービスに対して各Detectorを実行した結果などを確認できます。

6.まとめ

Pre-Alpha版ということでドキュメントもほとんどなく機能的にもまだまだ足りない状態で、全体的にまだまだこれからという印象を受けました。

ですが、Reconnaisanceの結果として見つかったサービスに対して脆弱性検知のプラグインを適用していくというTsunamiの基本的な動作の流れは確認することができました。

新たな脆弱性が見つかったらサクッと脆弱性検知のプラグインを書いて流す、そんな使い方になりそうです。

超大規模環境を迅速に脆弱性診断することを目指しているTsunami、ご興味ある方はGithubなど覗いてみてはいかがでしょうか。

自分も時間があればまた自作のプラグインを組み込んでの脆弱性診断などにチャレンジしてみたいと思います。

最後まで読んでいただきありがとうございました!

開発ブログカテゴリの最新記事