VAddyは誰でも手軽に使えて、継続的なWeb脆弱性診断ができるクラウド型ツールです。
VAddy Adventカレンダーも残り少なくなってきました。
クロールとは
クロールは、検査対象のURLとPOST、GETなどのパラメータを登録します。
正しい画面遷移やフォームの入力項目のデータを登録し、その情報を使って脆弱性検査を行います。
開発者の方にはあまり馴染みがないのですが、VAddy以外の検査ツールもクロール機能があり、一般的な機能です。
クロールデータは、検査対象のWebアプリケーションの正常動作を記録したものです。
VAddyを含めた多くのツールでは、ブラウザのプロキシ設定を変更し、プロキシサーバを経由して自分が開発しているWebアプリケーションにアクセスします。
そして、リンクをクリックしたり、フォームを投稿したり、Ajaxのように裏で通信する画面にアクセスするなど、HTTP通信が発生するものをプロキシサーバ側に記録します。これがクロールデータです。
ですので、検査したいWebアプリケーションやAPIサーバのURLやパラメータが含まれるようにクロールデータを作る必要があります。
VAddyではクロールデータごとに名前をつけて、検査の際にクロールデータの指定ができるため、クロールデータごとにシナリオとして扱えます。例えば、ログインしてユーザ情報を変更するシナリオ、のように。
検査で使うクロールデータ
VAddyの検査ではクロールデータをどのように扱うか説明したいと思います。
クロールデータにはHTTPリクエストとレスポンスデータが入っています。
検査では、クロールデータの中のHTTPリクエストを使って送信します。その際に、GETやPOSTのパラメータの値を検査データに差し替えます。
シンプルな例でいくと、GETパラメータが
/index.php?foo=bar
だった場合はシングルクォートを入れて
/index.php?foo=bar'
というような形です。
検査データに差し替えて送信した時のHTTPレスポンスデータを解析して、クロール時に受け取ったレスポンスデータと大きく異なる場合は、さらに詳しい検査を実行していき、脆弱性の有無を判断します。
検査データ以外に書き換えるもの
クロールデータのHTTPリクエストは基本的にはパラメータの値を検査データに変えるのみです。
ですので検査で送るHTTPリクエストは、クロール時に記録したユーザエージェント情報のまま送信します。ユーザエージェントで画面が切り替わる場合はPC、モバイルそれぞれクロールを作成すれば検査できます。
ログイン画面があるアプリケーションやCSRFトークンがあるフォーム画面の場合は、セッションやトークンを検査時に取得し直さないと正しい検査ができません。
VAddyでは、クロールデータを解析して、ログイン画面やセッション、CSRFトークンを自動認識します。
そして、検査の途中でセッションが切れた場合はログイン画面からセッションを再度作ります。CSRFトークンも同じです。
検査で一番大事なこと
検査で一番有用な点は、検査対象のアプリケーションの動きを正しく把握して動きを再現することです。
そうしなければ、例えばずっとログアウトした状態で検査し続けることになります。これでは検査の意味がありませんよね。
VAddyでは、クロールデータから全て機械が判断していきますので、ユーザがログイン画面やCSRFトークンの設定を事前にする必要はなく、正しい検査ができるようにしています。
ユーザフレンドリー(誰でも使えるぐらい簡単な設定操作)と検査の自動化の両立は大きなチャレンジです。
VAddyでは、これを実現するために独自の検査エンジンを開発して運用しています。
クロールの手間と精度
正しいクロールデータさえできれば、脆弱性検査の精度は大きくあがります。VAddyでは、クロールの作成をユーザ自身で行うように設計しています。
一番アプリケーションを理解している人(開発者、発注者、ディレクターなど)がクロールデータを作るのが一番良いですし、我々がヒアリングする必要もないためVAddyの料金も低価格を維持できます。
少し手間がかかりますが、メリットはかなり大きいのです。
一方で、いくつかの検査ツールには自動クロール(スパイダー)機能も存在します。
自動クロールはTOPページのURLを与えればあとは自動でサイトを探索してクロールデータを作成します。
これは非常に手軽ですが、時間がかかりますし、クロールデータの精度は落ちます(つまり検査の精度も落ちます)。
例えば、公開前のリンクをつなげていない画面は検査できませんし、フォームの入力項目でラジオボタンを選択すると一部のフォームの内容が変わるなど、仕様を理解していないと辿れない箇所は検査できません。
さいごに
誰がクロールデータを作るのか、どのように作るのか、それぞれメリットとデメリットがあります。
VAddyではそれを踏まえて、検査対象アプリの仕様を一番把握しているユーザ自身にクロールデータを作成してもらって検査の精度を上げつつ、低価格で提供する道を選びました。
VAddyでは、SeleniumのようなE2Eテストツールを使ったクロールデータの作成もできるように設計しています。この話は今度書きたいと思います。