脆弱性検査で重要なクロールとは何なのか

  • 8
    いいね
  • 0
    コメント

VAddyはCIと簡単に連携でき、継続的なWeb脆弱性検査が簡単に実現できるSaaSです

VAddy Adventカレンダーも残り少なくなってきました。
昨日はBrewDog六本木に行ってJack Hammer IPAを飲んできました。やはり美味しいですね。
チリIPAという種類もあって飲ませてもらったのですが、最初は香りが強くて美味しいと思いましたが後味が辛いのでもう飲まないと思います。辛いのがお好きな方には良いかも。

クロールとは

クロールは、検査対象のURLとPOST、GETなどのパラメータを登録します。
正しい画面遷移やフォームの入力項目のデータを登録し、その情報を使って脆弱性検査を行います。
開発者の方にはあまり馴染みがないのですが、VAddy以外の検査ツールもクロール機能があり、一般的な機能です。

クロールデータは、検査対象のWebアプリケーションの正常動作を記録したものです。
VAddyを含めた多くのツールでは、ブラウザのプロキシ設定を変更し、プロキシサーバを経由して自分が開発しているWebアプリケーションにアクセスします。
そして、リンクをクリックしたり、フォームを投稿したり、Ajaxのように裏で通信する画面にアクセスするなど、HTTP通信が発生するものをプロキシサーバ側に記録します。これがクロールデータです。

スクリーンショット 2016-12-21 11.17.51.png

ですので、検査したい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テストツールを使ったクロールデータの作成もできるように設計しています。この話は今度書きたいと思います。

この投稿は VAddy Advent Calendar 201621日目の記事です。