こんにちは!デバイスソフトウエア開発部の山内です。
弊社では、セキュリティ面での対策に脆弱性診断ツールである「VAddy」を利用しています。
今回は、VAddyの基本的な使い方とコツについて解説していきます。
3行で要約
- VAddyとは:Webアプリケーションの脆弱性診断を自前で簡単に行えるツールのこと。
- 診断の流れ:サーバーの登録 → クロール作成 → スキャン実施
- 最初の設定にいくつかコツが要るが、網羅的にクロールを作成してしまえばあとはサクサク進められる。
そもそもVAddyって何?
VAddyとは、Webアプリケーションの脆弱性を診断するためのツールで、セキュリティに精通していない開発者でも社内で簡単に脆弱性診断を実施できるのが特徴です。
弊社ではProプランを使っており、このプランではSQLインジェクション、XSS、コマンドインジェクション、リモートファイルインジェクション、ディレクトリトラバーサルといった脆弱性を検出できます。
VAddyでの診断実施の流れ
VAddyでは、サーバーの登録 → クロール作成 → スキャン実施 という流れで検査を行います。
「クロール」とは、検査対象のWebサーバーのURLやパラメータをテストシナリオとしてVAddyサーバーに記録したものです。
クロールは、ブラウザ上で実際にWebアプリケーションの操作をしながら記録でき、VAddyはそれを基に様々なリクエストを送って検査を行うというわけです。
今のところ、私のいるプロジェクトでは以下のような手順を踏んでいます。
- VAddyを利用するための事前設定
- クロール作成のためにURLのリストを精査
- クロールの記録
- スキャンの実施・スキャン結果の確認と脆弱性への対応
URLのリストを精査する手順を踏んでいるのは、アプリケーション内の全てのリクエストを網羅するためです。
もちろん探索的にアプリケーションを操作していってクロールを作ることもできますが、全てのリクエストを網羅できるように、事前にURLを精査しておくほうが確実です。
では、ここから各ステップごとに何をするのか見ていきましょう。
1. VAddy利用前の事前設定
まず、クロール作成やスキャンの前に、いくつか準備作業を行います。
1-1. プロジェクトを作成
クロールやスキャンは、「プロジェクト」という単位に集約されます。
このプロジェクトに1つのドメインを登録し、そのドメインに対して脆弱性診断を行うという形です。
では、ダッシュボードから「プロジェクト作成」を押してプロジェクトを作っていきましょう。
新規作成時は、プロジェクト名とサーバーのFQDNまたはIPv4アドレスを登録します。他は任意項目ですので、必要に応じて設定しましょう。
1-2. 認証ファイルをサーバーに配置
さて、プロジェクトの作成を終えたら、次は認証ファイルの配置を行います。
VAddyでは、スキャンが本当にサーバー所有者によって為されているかを保証するために、認証ファイルの配置が必要となります。
プロジェクトTOPのステータスが「未確認」となっていたら、「所有者確認へ」をクリックし、
- 認証ファイルをダウンロード
- ダウンロードした認証ファイルをサーバーへ配置
という作業を行います。
認証ファイルが正しく配置できると、ステータスが「認証済み」となります!
ここまで来たら、次はプロキシの設定に移りましょう。
1-3. プロキシ設定・除外ドメイン設定
VAddyがクロールを作成するにあたっては、ブラウザ拡張による方法とプロキシによる方法の2通りが存在します。ブラウザ拡張は手軽さが魅力ですが、将来的に自動化を考えている場合はプロキシのほうが良いです。
今回はプロキシによる方法を選択しましょう。
その場合、OS側でプロキシ設定が必要となります。
「クロール管理」ページの下に行き、「Proxyを使ったクロール」タブを開くと、親切にも設定方法が手取り足取り説明されていて、記載されているプロキシIPアドレスとポートをOS設定に転記するだけでプロキシ設定は完了となります。
ここに注意!👉
- このとき、プロキシサーバーを有効にすると、プロジェクトに登録したドメイン以外へのアクセスはブロックされます。
したがって、アプリケーションが外部のドメインにアクセスする場合や、クロール中にアクセスしたいページ(例えばVAddyコンソールなど)がある場合は、それらのドメインをプロキシサーバーの対象から除外するのが良いでしょう。 - なお、このプロキシ設定はクロール作成時に有効である必要があるため、それ以外の作業をするのであればプロキシサーバーを使わなくても問題ありません。
これらの設定が完了したら、いよいよクロール作成開始といきましょう。
2. クロール作成のためにURLのリストを精査
クロール作成の前準備として、URLのリストを精査し、他の作業者でも同じクロールを作成できるようにスプレッドシートでクロールの記録方法を記述していきます。
(curlでここを自動化することもできると思うのですが、今のところは原始的にスプレッドシートを使っています。)
対象のアプリケーションでURLの一覧を取得し、それぞれクロール結果のURLと突合して、最終的にルーティングファイルのパスを網羅できていればOKです。
ここに注意!👉
- 1つのクロール内で大量にリクエストを記録するのは避けたほうが良いです。スキャンの所要時間が著しく伸びてしまい、プランによってはスキャンが途中で中断される可能性があります。
そのため1クロールあたり最大でも40~50件のリクエストとなるようにテストシナリオを管理するのが良いでしょう。 - 同じリクエストであれば正常系・異常系のパターン分けをする必要はありません。
クロール時に必要なパラメーターが全て送信されていれば、それらのパラメーターは全て診断対象となります。
(参考:LaravelでURL一覧を取得する場合)
ちなみに、私のいるプロジェクトではLaravelを使ったアプリケーションを構築しています。例えばLaravelで行う場合、コマンドと正規表現による抽出を行うことでルーティングの一覧を取得できます。
1 |
php artisan route:list | sed -E 's/(\S+.*\S+)\s+\.+.*/\1/' |
1 2 3 4 |
GET|HEAD / GET|HEAD bars/index GET|HEAD bars/{bar} DELETE bars/create |
他のフレームワークを使ったアプリケーションでも、最終的にこのような形でURL一覧が取得できれば、あとは突合するだけですね。
その後は、
- 既存のクロールが無いとき
→ ルーティングリストをいくつかのまとまりにしてクロールを作成 - 既存のクロールがあるとき
→ クロールデータのメソッド・URLとルーティングを突合する
という作業を行っていき、それぞれのルーティングがクロールデータ全体に1つ以上含まれていればOKです。
なお、クロールデータは「クロール管理」メニューから閲覧できます。
3. クロールの記録
実はここまで来たら、あとはほぼ単純作業となります。
一度開始用URLにアクセスしてしまえば、普段ブラウザ上でアプリケーションを操作するのとまったく同じ要領でクロールの記録を行うことができます。
ここに注意!👉
- (私の環境だけかもしれませんが、)たまにクロールが正常に開始されず、アプリケーションを操作しても記録が行われないことがあります。
プロキシサーバーをオンにし直したり、ブラウザを再読み込みしたりすると直ることが多いです。 - 記録が開始されると、クロール管理ページにステータスが「記録中」のレコードが出現するので、ここで正常に記録を開始できたかどうか確認するのが確実ですね。
さて、クロールデータは出揃いましたでしょうか。ここからはサクサク進めていきます!
4. スキャンの実施・スキャン結果の確認と脆弱性への対応
クロールデータが整備できたら、あとは「スキャン」ページに移り、クロールごとにスキャンを実行していきます。
開始時には、どの脆弱性をスキャンするかが選択可能です。
これで「スキャン実行」を押すと、VAddyがクロールデータに応じて様々な試験用パラメーターを送信します。
スキャンには1クロールあたり数分~数十分程度の時間がかかり、完了すると脆弱性の有無が確認できます。
「none」であれば脆弱性なし、「n Problem」であればn件の脆弱性が検出された状態です。
脆弱性が検出された場合は、リクエストとレスポンスが確認できますので、それに応じて調査を行いアプリケーションを修正していきましょう。
このサイクルを繰り返すことで、脆弱性が減少し、攻撃に強いアプリケーションが出来上がっていきます!
まとめ
ここまで、VAddyを利用した脆弱性診断の基本的なやり方、そしてコツについて解説してきました。
初期設定は何かと複雑なところがあるかもしれませんが、一度アプリケーション内で利用するURLを網羅してクロールを作ってしまえば、後のスキャンないしクロールの再作成は比較的簡単に行うことができます。
使い方を工夫すればクロール作成を自動化したりスキャン実施を定期的に行えたりと、脆弱性診断にかかる工数の削減に繋げられそうです。このあたりは今後ぜひやってみたいところ…。
以上、ここまでお読みくださりありがとうございます。
エコモットでは一緒にモノづくりをしていく仲間を随時募集しています。弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!