脆弱性コラム - 第9回
サイト脆弱性をチェックしよう! -- 第9回:AppScanによるアプリ脆弱性の自動検査
前回まで、主な脆弱性の検査方法について説明してきた。前回の最後にも説明したとおり、アプリケーションの脆弱性検査を手動で行うには、ある程度の技術や知識が必要となり、非常に大きな手間がかかる。また、手動による検査では検査する人の技術レベルに依存しがちだ。このため、検査の水準を一定に、低コストで実施できる自動検査ツールの利用も進んでいる。
そこで今回は、「AppScan」を例として、自動検査ツールについて説明しよう。
自動検査ツールの原理
検査を行う時に必要な情報は、ウェブアプリケーションを利用するときに、ブラウザからサーバへ送信されるHTTPリクエストだ。HTTPリクエストには、以下のものが含まれている。
- 接続先のURL
- HTTPリクエストヘッダ
- Cookie - パラメータ
探査時の動作
こうして得られたパラメータやURLなどの情報をもとに、各パラメータの値をひとつずつ検査パターンに書き換えてからリクエストを送信し、テストを行う。
テスト時の動作
この動作は手動で検査を行う場合となんら変わりはない。脆弱性の有無の判断は、前回までに述べたような方法でツールが自動的に行う。
検査ツールによる検査手法を順番に考えてみると、以下の4つの項目に分離できる。
1)設定フェーズ
2)探査(巡回)フェーズ
3)テストフェーズ
4)レポート作成フェーズ
それでは次にAppScanを例として、この各項目の詳細を見ていこう。
検査ツールによる検査手法を順番に考えてみると、以下の4つの項目に分離できる。
1)設定フェーズ
2)探査(巡回)フェーズ
3)テストフェーズ
4)レポート作成フェーズ
それでは次にAppScanを例として、この各項目の詳細を見ていこう。
1)設定フェーズ
検査を実施するには、どのページから検査を行うのか、どのような検査を実施するかなどを決定する必要がある。そのために検査対象のURLを入力し、テストポリシーを選択するという手順を実施する。また、画面遷移が固定されるアプリケーションや、厳密なセッション管理を行っているアプリケーションに対応するため、ログイン手順を記録することができるようになっている。テスト中にセッションが切れたと検査ツールが判断した場合でも、記録したログイン手順を再送することで新たにセッションを張り、セッションを維持した状態で正しくテストを実施することができる。
AppScanでは、開始ページの設定やログイン手順の記録などをウィザード形式で行う。ウィザードに従って入力を行うことで、容易な設定が可能だ。
AppScanでは、ウィザードに従って入力を行うことで容易な設定が可能
2)探査(巡回)フェーズ
先に述べたように、検査にはURLとHTTPリクエストヘッダ、Cookie、パラメータの情報が必要となる。探査フェーズでは開始ページから順番に検査対象のリンクやフォームをブラウザなどで表示させていく。検査であることを意識する必要はなく、アプリケーションの仕様どおりの正しいデータを入力することで、検査ツールがリクエストとレスポンスを記録、分析を行う。このデータはテスト結果の比較対象でもあり、脆弱性の判断の根拠として活用される。
この情報を元に次のテストフェーズで送信するリクエストが作成される。
AppScanの探査方法には開始ページから自動的にリンクやフォームをたどる「自動探査」と、手動でリンクやフォームをたどっていく「マニュアル探査」がある。
自動探査では、事前に設定したパラメータ名を含むパラメータについては設定した値を入れてリクエストを作成する。設定したパラメータ名と異なる場合には、既定値が使われる。また、設定によりFlashやJavascriptを解析してリンクを発見することもできる。
しかし、あるパラメータが特定の値をとったときにアプリケーションの挙動が変わる場合など、すべての処理を行うことができるわけではない。
マニュアル探査では、IEコンポーネントを使用した内部ブラウザが起動し、それを用いてページを巡回する。このとき、パラメータには正常な処理を行う値を入力する。また、AppScanをProxyとして利用することで、携帯電話エミュレータや他のブラウザを使用してページの巡回が可能。自動探査に比べ、正確にページを巡回することができる。
AppScanをProxyとして利用することで、自動探査に比べ、正確にページを巡回することができる
3)テストフェーズ
探査フェーズで取得したURLとパラメータの情報をもとにテストを実施する。このフェーズでは、検査対象としたURLとそのパラメータ、Cookieに対して、ひとつずつテストパターンを設定して、リクエストを作成し、送信する。これを全てのテストパターンについて繰り返す。
単純に繰り返すだけでは、セッションが切断された場合などにテストが正常に実行できなくなる。そのような場合に対応するため、設定フェーズで記録したログイン情報を使って確実なセッション維持を行うよう工夫されている。
AppScanでは以下で説明する動作によってセッション状態を監視、維持して、テストを実施する。
テストフェーズ1
テストを開始すると、AppScanは設定フェーズで記録したログインプロセスを送信。その後、「リクエスト5」などへのテストリクエストを送信する。
デフォルトでは5秒に1回ログイン状態かどうかを確認するリクエストを送信する。この例では、「画面C」がログイン後の画面であるため、「リクエスト2」を送信し、ログイン状態を示す文字列があるかどうかを確認する。ログイン状態ではないとAppScanが判断した場合、再度ログインプロセスを送信し、常にログインしている状態でテストを実施する。
デフォルトでは5秒に1回ログイン状態かどうかを確認するリクエストを送信する。この例では、「画面C」がログイン後の画面であるため、「リクエスト2」を送信し、ログイン状態を示す文字列があるかどうかを確認する。ログイン状態ではないとAppScanが判断した場合、再度ログインプロセスを送信し、常にログインしている状態でテストを実施する。
テストフェーズ2
テストの結果は、下図のように確認することができる。
アドバイザリ
修正方法
修正方法
リクエストとレスポンス
AppScanでは、発見された脆弱性の概要、修正方法(一般的なもの、.NET、J2EE、PHPに特化したもの)、脆弱性が発見されたURL、パラメータと攻撃パターン、HTTPリクエストとレスポンス、脆弱性があると判断した理由を確認できる。
いくつかのテストでは、AppScanによる自動検査だけでは脆弱性の有無の判断ができないことがあるため、これらの情報をもとに、検出された脆弱性に間違いがないかを判断する。
前回までに説明したが、多くの脆弱性は修正方法がエスケープ処理を正しく行うことなど、非常に似ている。
そのため、AppScanでは、脆弱性ごとの切り口ではなく、修正方法ごとでの確認ができる「修復ビュー」という機能を有している。このビューを使用することで、開発者はすばやく対策を行うことができる。
いくつかのテストでは、AppScanによる自動検査だけでは脆弱性の有無の判断ができないことがあるため、これらの情報をもとに、検出された脆弱性に間違いがないかを判断する。
前回までに説明したが、多くの脆弱性は修正方法がエスケープ処理を正しく行うことなど、非常に似ている。
そのため、AppScanでは、脆弱性ごとの切り口ではなく、修正方法ごとでの確認ができる「修復ビュー」という機能を有している。このビューを使用することで、開発者はすばやく対策を行うことができる。
AppScanでは、修復ビューを使用することですばやく対策を行うことができる
4)レポート作成フェーズ
テストフェーズで行ったテスト結果をレポートとして出力する。どのような脆弱性が存在するのか、その脆弱性が存在するURLやパラメータ、Cookieの名前などが出力される出力項目はカスタマイズできるものが数多くある。AppScanのレポートは、PDF、リッチテキストなどの形式で出力できる。レポートは設定により、検査結果の統計情報を含む概要、リクエストとレスポンス、画面キャプチャ、脆弱性の解説などを含めることができる。
また、AppScanでは、2つの検査結果の差分をレポートとして出力することも可能。このレポートを用いることで最初の検査で発見された脆弱性を修正した後に再度検査を行い、どの程度修正されたかを数値として確認することができる。
AppScanのレポートは、PDF、リッチテキストなどの形式で出力できる
AppScanに特徴的な機能:マルチステップ
従来の検査ツールでは、画面遷移の順番に厳しいアプリケーションは正しく検査を行うことが難しいものだった。先の例で、「リクエスト3」→「リクエスト4」を先に送信しないと、「リクエスト5」が正常に実行できないアプリケーションがそれにあたる。従来の検査ツールは、画面遷移順を考慮しておらず、テストの際に「リクエスト5」をテストするときには、「リクエスト5」しか送信しなかったため、このような場合は正常に検査することが困難だった。
しかし、AppScanでは、検査をより正確にする機能である「マルチステップ」が追加され、このようなアプリケーションでも正常に検査することができるようになっている。
マルチステップで、「リクエスト3」→「リクエスト4」→「リクエスト5」という一連の流れを登録すると、「リクエスト5」のテストを実施するときに、「リクエスト3」→「リクエスト4」が事前に送信されてから「リクエスト5」が送信される。
これにより正常な画面遷移が実行されるため、正確にテストができるようになった。
特殊なパラメータの受け渡し
アプリケーションの中には、パラメータの区切りが「&」ではなく、「;」や「/」などを使用するものがある。AppScanでは、このように一般的でないパラメータの区切りであっても、適切に処理ができるようにGUIで設定することができる。
この機能を用いてJSONやSOAPで受け渡されるデータの検査も実行できるようになっている。
今回は、自動検査ツールによる検査の方法について説明した。検査を行うには脆弱性に関する知識が必要で、また人の手でひとつ1つ地道に行わなければならない。しかし自動検査ツールを使用することで、ウェブアプリケーションの操作ができさえすれば、最低限の検査を簡単に実施することができるようになった。
ウェブアプリケーションのセキュリティ対策の必要性が叫ばれる中、検査ツールも確実に機能向上を果たしている。安全なウェブアプリケーションの開発において、検査ツールの利用も検討してみてはいかがだろう。
PICK UP
イベント・セミナー
AppScanに
関するお問い合わせ
テクマトリックス株式会社
東京本社ネットワークセキュリティ事業部
第3営業部
セキュリティプロダクツ営業2課03-4405-7814
- メールでのお問い合わせ
- watchfire@techmatrix.co.jp