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します。
$ docker run -d -p 443:443 --name openvas mikesplain/openvas
また、診断対象にするホストはlocalで立ち上げているdocker containerの場合も多いと思います。
対象のコンテナを載せたnetworkを指定し、
$ 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と呼んでいるそうです)
ScanTargetを作成します。ScanTargets欄の右側の星マークボタンを押して出てくるポップアップで、Hostsはmanualを選択、右のテキストボックスにIPアドレスもしくはホスト名を入力しCreateボタンを押します。
Nameに適当な名前を付け、ScanTargetsに作成したものをを指定してCreateボタンを押します。
作成したTaskが一覧に現れているので、赤枠で囲った再生ボタンみたいなボタンを押して実行します。
上バーのScans->Resultsをクリックすると、このように診断結果を見ることができます。
今回の診断では、TCP timestamps脆弱性がLowレベルとして検出されました。(脆弱性の内容はこの記事の対象外なので略)
まとめ
以上のように、OpenVASのimageを使えばプラットフォームに関する脆弱性を簡単に診断できます。
みなさんも自分の運営しているサービスなどに使ってみてはいかがでしょうか?
とはいえこのツールだけでサービスに関わるすべての脆弱性が洗い出せるわけではもちろんありません。
徹底したコードのチェック(SQLインジェクションやXSS対策など)やシステムアーキテクチャのチェック(DNSキャッシュポイズニングやセッションハイジャック対策など)は普段から欠かさず行っていきましょう!