はじめに
VAddyはDynamic Security Application Testing(DAST)による脆弱性診断を行なってくれるクラウド型Web脆弱性診断ツールです。 SQLインジェクションやクロスサイトスクリプティング(XSS)など、9つの項目をスキャンできます。今回はSUZURIでの活用事例を紹介します。
VAddyとは
VAddyの実行プロセスは大きく分けてクロール・スキャン・レポートの3ステップです。 検査対象アプリケーションのURLとパラメータをVAddyに登録する「クロール」、対象アプリケーションに検査リクエストを送信して脆弱性を診断する「スキャン」、検査結果を通知してくれる「レポート」です。
VAddyサポートサイトに基本的な使い方が書かれているので、これを読むことで簡単にはじめることができます。
とても便利なVAddyですが、シナリオが増えればクロールを手動でやるのは大変になってきます。継続的に実行されないと意味がなく、担当者を決めてカレンダーに予定を入れておくという事もできるかもしれませんが、人間なので「忙しいときは実施できない!」「忘れてた!」みたいなことも起きてくる可能性があります。Webサービスの運用の中にセキュリティ対策も組み込んでいくDevSecOpsを目指すにあたって、VAddyのような脆弱性診断の実行プロセスが担当者のモチベーションに依存するのは好ましくありません。
VAddy実行プロセスの自動化
VAddyにはAPIがあるのでこれを活用することで実行プロセスを自動化できます。SUZURIでは、まずはじめにJestとPuppeteerを使って、Webサイトをクロールしてシナリオを作成するというプロセスを自動化しました。
以下がVAddyのクロール登録状況を確認する画面です。StatusがRecordedになっているものは、クロールが完了したものです。ActionのStart Scanというボタンを押せば、登録したシナリオを元にスキャンが実行されます。
定期的にクロールした検査シナリオに対して脆弱性のスキャンを実行する必要がありますが、毎回VAddyにログインして、シナリオを選択してStart Scanのボタンを押すのは面倒です。このプロセスはVAddyのコマンドラインツールを使って自動化しました。スキャン結果のレポートはSlackへ通知できるので、実行結果をすぐに確認できます。
各URLに対しての検査結果が表示されているのが分かります。
実行が完了したらSlackに通知されます。Result URLをクリックすれば実行結果の詳細をすぐに見ることができます。
SUZURIではクロール・スキャン・レポートのステップをまとめた専用のDocker Imageを作成しています。これを社内のDockerレジストリに置いて必要な時にPullして使うようにしています。ペパボではプライベートクラウド上にKubernetesを用いて構築されたNKSと呼ばれるContainer as a Serviceがありますので、CronJobを使って定期実行するようにしました。
Webアプリケーションの仕様を元に、自動で作られたシナリオに合わせて定期的に脆弱性の検査を行うことができるようになりました。
まとめ
最近は攻撃者側の自動化も進化しているので、常に攻撃されているのが当たり前の時代になっています。 防御する側もVAddy等のクラウドサービスを活用し、自動化を進めてWebサービスをよりセキュアに運用していきたいと思います。