OpenVASによる脆弱性診断をDockerで手軽に実行する


Webセキュリティ入門本として有名な、体系的に学ぶ 安全なwebアプリケーションの作り方(通称: 徳丸本)を読んでいて、脆弱性診断ツールとしてOpenVASというものが紹介されていました。

個人的に開発しているWebアプリの脆弱性診断に試してみたいと思い色々調べていたら、専用のDocker Imageが公開されていたのでとても手軽に実行できました。

以下にやり方などまとめていきます。

OpenVASとは

プラットフォーム脆弱性診断ツールです。
OSSなので無料で利用できます。

指定したホストをリモート(外部)からスキャンし、対象ホストのOS/ソフトウェアに既知の脆弱性がないかをチェックします。

診断の実行や診断結果の閲覧はCLIでも可能ですが、Webブラウザでのインターフェースも用意されているので今回はそちらを紹介してきます。

環境

OSX

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.3
BuildVersion:   19D76

Chrome

$ osascript -e 'version of app "Google Chrome"'
81.0.4044.122

Docker for Mac

$ docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:21:11 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:29:16 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

準備

先述の通りDockerHubにimageが公開されているので、それを使いましょう。
(参考リンク)

以下ワンライナーで最新版のimageを取得してきて、openvasという名前でコンテナを立ち上げます。
ポートは443番にbindします。

bash
$ docker run -d -p 443:443 --name openvas mikesplain/openvas

また、診断対象にするホストはlocalで立ち上げているdocker containerの場合も多いと思います。

対象のコンテナを載せたnetworkを指定し、

bash
$ docker run -d -p 443:443 --name openvas --net=<network_name> mikesplain/openvas

のようにして、同一のnetworkに繋いであげましょう。

https://localhost にアクセスするとログイン画面が出てくるので、

Username: admin
Password: admin

でログインします。

実行

ログイン後、上のバーからTasksを選択し、Task一覧画面に遷移します。(OpenVASでは1回の脆弱性診断の実行をTaskと呼んでいるそうです)

左上の星マークのボタンからNewTaskを選択。

Task作成ダイアログが現れます。

ScanTargetを作成します。ScanTargets欄の右側の星マークボタンを押して出てくるポップアップで、Hostsはmanualを選択、右のテキストボックスにIPアドレスもしくはホスト名を入力しCreateボタンを押します。

Nameに適当な名前を付け、ScanTargetsに作成したものをを指定してCreateボタンを押します。

作成したTaskが一覧に現れているので、赤枠で囲った再生ボタンみたいなボタンを押して実行します。

暫く待ってページをリロードすると、診断が完了しています。

上バーのScans->Resultsをクリックすると、このように診断結果を見ることができます。

今回の診断では、TCP timestamps脆弱性がLowレベルとして検出されました。(脆弱性の内容はこの記事の対象外なので略)

まとめ

以上のように、OpenVASのimageを使えばプラットフォームに関する脆弱性を簡単に診断できます。
みなさんも自分の運営しているサービスなどに使ってみてはいかがでしょうか?

とはいえこのツールだけでサービスに関わるすべての脆弱性が洗い出せるわけではもちろんありません。
徹底したコードのチェック(SQLインジェクションやXSS対策など)やシステムアーキテクチャのチェック(DNSキャッシュポイズニングやセッションハイジャック対策など)は普段から欠かさず行っていきましょう!