説明

Webサービス提供システム検査装置及びWebサービス提供システム検査プログラム

【課題】 脆弱性検出の確実性向上に寄与することができるWebサービス提供システム検査装置を提供する。
【解決手段】 パラメータ変形部11は、ポジティブリクエスト生成部13とネガティブリクエスト生成部14に、正当なリクエスト中のパラメータを変形したポジティブリクエストとネガティブリクエストを生成させる。ステータス抽出部22〜特殊文字列抽出部25は、リクエスト送信部15がWebサービス提供システム60に送信し、レスポンス受信部21が受信したポジティブリクエストとネガティブリクエストに対する各々のレスポンス中の特徴的な情報のパターンを抽出する。レスポンス情報比較部27は、ネガティブレスポンスに対する全てのレスポンスのパターンが、ポジティブレスポンスに対するどのレスポンスのパターンにも一致しない場合には脆弱性ありと判定する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、Webアプリケーションの脆弱性を検出するWebサービス提供システム検査装置に関する。
【背景技術】
【0002】
Webサーバをフロントエンドとして用い、DBサーバが提供するDBサービス等を用いたアプリケーションサービスを提供する、いわゆるWebアプリケーションが知られている。例えば会員向けの情報提供サービスを行うWebアプリケーションは、例えば図33に示すように、ログイン処理部とセッション管理部等を有する構成となっている。このようなWebアプリケーションには、例えばSQL発行部62a等にバックエンドのDBサーバ63で不正なSQL文が実行されるSQLインジェクション脆弱性等を有する場合がある。この図33に示すWebアプリケーションでは、ログイン画面621aに対してユーザが入力したログイン情報(ユーザ名とパスワード)が供給されると、SQL発行部62aは、DBサーバ63を介してDB64に問い合わせを行う。情報画面構成部623は、この問い合わせ結果に基づいた応答を生成してユーザ側の装置に供給する。
【0003】
SQL発行部62aがDB64に問い合わせを行う際には、ユーザがログイン画面621aで入力したログイン情報に基づいてSQL文を生成し、生成したSQL文をDBサーバ63に供給することによって行う。このSQL文の生成において、ユーザが入力したログイン情報に、SQL文を生成するために使用される特殊記号が含まれていると、開発者が意図したSQL文とは異なるSQLが生成されてしまうことがある。このため、Webアプリケーションでは、ユーザからのログイン情報等の入力値にSQL文の生成に使用する特殊記号が含まれないようにする必要がある。このように、WebアプリケーションのSQL発行部62a(例えば同図中の斜線部の「パラメータチェック及びSQLコマンド生成」処理等)等における入力値チェックの不備等により、本来意図していないSQL文が生成され、DB64内の情報が漏洩したり改ざんされたりするのがSQLインジェクション脆弱性である。
【0004】
例えばWebアプリケーションが通常は使用しない文字種が含まれている入力値を適切に処理しなかった場合、アプリケーションの利用者からの入力値によっては想定外の処理が実行されてしまう可能性がある。このことを利用すると、入力値を巧みに操作することによりDBに格納されている情報が漏洩したり、改ざんされたりする可能性がある。このような脆弱性にはバックエンドで処理を行うサーバの違いによりSQLインジェクション脆弱性やLDAPインジェクション脆弱性やXPathインジェクション脆弱性などがあり、これらをインジェクション系脆弱性と呼ぶ。
【0005】
このような脆弱性を検出するための手法として、脆弱性によるエラーが生じた際に表示される文字列を予めDBに格納しておき、Webサーバからの応答中の文字列とDBに格納しておいた文字列を照合する方法が知られている(例えば特許文献1)。この方法では、例えば図53に示すように、まず、脆弱性に起因するエラーが生じると思われる検査文字列をWebサーバに送信し、これに対するWebサーバからの応答(レスポンス)中の文字列を、DBに格納されている脆弱性情報(文字列)と照合し、一致する文字列があれば該当する脆弱性が存在すると判断する。
【特許文献1】米国特許6584569号公報(図1、図3)
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、フロントエンドのWebサーバの構成やアプリケーションの作りこみによっては、単純にWebサーバからの応答中の文字列とDBに格納されている文字列を照合するだけでは脆弱性を検出できない場合もある。例えば図54は、アプリケーションが入力値を適切に処理していない脆弱性に起因するSQLエラー表示の例であるが、アプリケーションの作りこみ次第で図55に示すようなエラー表示となる場合も考えられる。
【0007】
従って、上述のように、予め脆弱性によるエラーが生じた際に表示される文字列をDBに格納しておき、Webアプリケーションの応答中の文字列とDBに格納しておいた文字列を照合する方法では、Webサーバの構成やアプリケーションの作り込みによっては脆弱性を検出できない場合がある。
【0008】
本発明は、上述のような課題に鑑みてなされたものであり、Webアプリケーションのインジェクション系脆弱性検出の確実性向上に寄与することができるWebサービス提供システム検査装置及びWebサービス提供システム検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
この課題を解決するために、本発明に係るWebサービス提供システム検査装置は、Webサーバを介してアプリケーションサービスを提供するWebサービス提供システムの検査を行うWebサービス提供システム検査装置であって、正当なリクエスト中のパラメータを予め設定されたポジティブリクエスト文字列に基づいて変形して複数のポジティブリクエストを生成するポジティブリクエスト生成手段と、正当なリクエスト中のパラメータを予め設定されたネガティブリクエスト文字列に基づいて変形して複数のネガティブリクエストを生成するネガティブリクエスト生成手段と、各ポジティブリクエストと各ネガティブリクエストをWebサービス提供システムに供給する供給手段と、各ポジティブリクエストと各ネガティブリクエストに対するWebサービス提供システムの応答を取得する取得手段と、取得した各ポジティブリクエストと各ネガティブリクエストに対するWebサービス提供システムの応答中の特徴的な情報(応答パターン)を抽出する特徴抽出手段と、ネガティブリクエストに対する応答パターンのいずれかが、ポジティブリクエストに対するどの応答パターンとも一致しないときに脆弱性が存在すると判定する判定手段とを備えることを特徴とする。
【0010】
ポジティブリクエスト文字列及びネガティブリクエスト文字列は、例えばアプリケーションサービスに対する正当なリクエスト中のパラメータに対して、変更する文字列として予め設定されている。ポジティブリクエスト文字列は、正当なリクエスト中では用いられない文字種を含む文字列であってWebサービス提供システム脆弱性に起因する問題が生じる可能性のない文字種から選択されている。また、ネガティブリクエスト文字列は、正当なリクエスト中では用いられない文字種を含む文字列であってWebサービス提供システム脆弱性に起因する問題が生じる可能性のある文字種から選択されている。
【発明の効果】
【0011】
本発明では、正当なリクエスト中のパラメータを予め設定されたポジティブリクエスト文字列に基づいて変形して複数のポジティブリクエストを生成し、正当なリクエスト中のパラメータを予め設定されたネガティブリクエスト文字列に基づいて変形して複数のネガティブリクエストを生成し、これらをWebサービス提供システムに供給し、各ポジティブリクエストと各ネガティブリクエストに対するWebサービス提供システムの応答を取得し、取得した各ポジティブリクエストと各ネガティブリクエストに対するWebサービス提供システムの複数の応答中の特徴的な情報(応答パターン)を抽出し、ネガティブリクエストに対する応答パターンのいずれかが、ポジティブリクエストに対するどの応答パターンとも一致しないときに脆弱性が存在すると判定することにより、脆弱性検出の確実性向上に寄与することができる。
【発明を実施するための最良の形態】
【0012】
本発明は、例えばWebサーバを介してアプリケーションサービスを提供するWebサービス提供システムにおける脆弱性の検査を行う検査装置等に適用することができる。
【実施例1】
【0013】
(全体構成)
図1は、本発明を適用した一実施形態に係る検査装置の構成を概念的に示すブロック図である。この検査装置は、例えばネットワーク経由でWebサーバをフロントエンドとしたアプリケーションサービスを提供するWebサービス提供システム60の脆弱性の検査を行うもので、Webサービス提供システム60に対するリクエストを生成するリクエスト生成部10と、Webサービス提供システム60の応答を解析するレスポンス解析部20と、検査者からの指示を入力する装置操作部30と、リクエスト生成部10,レスポンス解析部20等の制御を行う検査制御部40と、脆弱性の判定結果を出力する表示部等の判定結果出力部50とを備えている。なお、リクエスト生成部10,レスポンス解析部20等はプログラムで構成されている。
【0014】
リクエスト生成部10は、Webアプリケーションにおいて情報を入力する入力ページ中のパラメータ入力値を変形するパラメータ変形部11と、予め設定されている挿入文字列データ12に基づいてWebアプリケーションにおいて脆弱性に起因するエラーを引き起こす可能性がないポジティブリクエストを生成するポジティブリクエスト生成部13と、Webアプリケーションにおいて脆弱性に起因するエラーを引き起こす可能性があるネガティブリクエストを生成するネガティブリクエスト生成部14と、ポジティブリクエスト生成部13及びネガティブリクエスト生成部14が生成したHTTPリクエスト(ポジティブリクエスト,ネガティブリクエスト)をWebサービス提供システム60に送信するリクエスト送信部15を備えている。
【0015】
また、レスポンス解析部20は、Webサービス提供システム60からの応答(HTTPレスポンス)を受信するレスポンス受信部21と、HTTPレスポンス中のステータス情報を抽出するステータス抽出部22と、HTTPレスポンス中のボディ部分のバイト長を抽出するレスポンス長抽出部23と、HTTPレスポンス中のヘッダ情報を抽出するヘッダ情報抽出部24と、HTTPレスポンス中の特殊文字列を抽出する特殊文字列抽出部25と、ステータス抽出部22〜特殊文字列抽出部25が抽出したポジティブリクエストに対する各情報とネガティブリクエストに対する各情報を保持するレスポンス情報保存部26と、レスポンス情報保存部26に保持されているポジティブリクエストに対する各情報とネガティブリクエストに対する各情報とを比較するレスポンス情報比較部27を備えている。
【0016】
この検査装置の検査対象となるWebサービス提供システム60は、例えば図2に示すように、ネットワーク80経由で接続されるクライアント70に対してアプリケーションサービスを提供するもので、Webアプリケーション62が提供するアプリケーションサービスのフロントエンドとなるWebサーバ61と、Webアプリケーション62のバックエンドで動作するDBサーバ63(データ保存部としてDB64を持つ),LDAPサーバ65等のサービス提供部を備えている。Webアプリケーション62は、例えばPHP言語,Perl言語等のスクリプト言語の処理系(プログラム言語処理系)66で実行されるプログラムから構成することができる。
【0017】
このWebアプリケーション62には、Webサービス提供システム60が提供するサービスの種類に応じた処理を行う機能が実装されており、この機能に応じて、例えばDBサーバ63に対するSQL文を発行するSQL発行部62a、LDAPサーバ65に対するLDAP問い合わせを発行するLDAP発行部62b、当該Webアプリケーション62が実行されているWebサービス提供システム60のOSに対するコマンドを発行するコマンド発行部62c等の外部のプログラム等に対するアクセス等を行う処理部を備えている。また、プログラム言語処理系66は、DBサーバ63に対する接続を行うライブラリ(DBサーバ接続API)66aと、LDAPサーバ65に対する接続を行うライブラリ(LDAPサーバ接続API)66bと、サービス提供システム60のOSに対するコマンドの発行等を行うライブラリ(OSコマンド接続API)66c等を備えている。
【0018】
Webアプリケーション62は、ユーザからのリクエストがある毎にプログラム言語処理系66で実行される。ユーザからのリクエストがパラメータ入力値を持つ場合、入力に応じた処理が実行される。例えばバックエンドのDBサーバ63と接続を行うアプリケーションでは、ユーザからの入力に応じて、SQL発行部62aがSQL文を生成し、DBサーバ接続API66aを介してDBサーバ63に供給される。DBサーバ63は、供給されたSQL文に応じた処理を実行し、実行結果をDBサーバ接続API66aを介してSQL発行部62aに返す。
【0019】
ところで、Webアプリケーション62のSQL発行部62aが、ユーザからの入力に応じたSQL文を生成する際に、ユーザからのリクエスト中のパラメータ入力値にSQL文の特殊文字が含まれていると、本来意図したSQL文とは異なるSQL文が生成される可能性がある。このため、Webアプリケーション62では、パラメータ入力値に含まれるSQL文の特殊文字を適切に処理する必要があるが、このような処理が適切に行われていないWebアプリケーションにはSQLインジェクション脆弱性があることになる。
【0020】
クライアント70は、例えばWebサーバ61を介してアプリケーションサービスを利用するWebブラウザ71と、Webブラウザ71の制御に応じて表示部73に表示する表示画像(画面)を生成する表示制御部72と、ユーザの指示を入力する入力部74等を備えた、パーソナルコンピュータ・PDAあるいは携帯電話端末装置等の情報処理装置から構成されている。
【0021】
図3は、このように構成されたWebサービス提供システム60が提供するアプリケーションサービスにおいて、ユーザ名とパスワードを入力してログインを行うページの例である。このページには、例えばユーザ名を入力する入力欄と、パスワードを入力する入力欄と、ログインを指示するボタンが定義されている。図4は、このようなページを表示するためのHTMLの例である。
【0022】
通常のWebアプリケーションとしての動作では、例えば図5に示すように、クライアント70のユーザは、上述のような画面に対してユーザ名とパスワードを入力してログインボタンを押下する(S101)。これに応じて、Webブラウザ71は、例えば図6に示すように、入力されたユーザ名とパスワードをパラメータとしてHTTPリクエストをWebサーバ61に送信する(S102)。このようなHTTPリクエストを受信すると、Webサーバ61は当該リクエストをWebアプリケーション62に供給する(S103,S104)。Webアプリケーション62は、供給されたHTTPリクエスト中のパラメータ(ユーザ名,パスワード)を用いてDBサーバ63にSQL問い合わせを行う(S105,S106)。DB64には、例えば図7に示すように、ユーザ毎にユーザ名(username)とパスワード(password)が対応付けられてDB内に格納されている。Webアプリケーション62からSQL問い合わせがあると、DBサーバ63は、これに応じて、DBを照会し(S107)、問い合わせ結果をWebアプリケーション62に供給する(S108)。なお、ユーザ名(username)とパスワード(password)に用いることができる文字の種類は、例えば英数字と特定の記号のみ等といったように予め決められている。
【0023】
Webアプリケーション62は、問い合わせ結果に応じたHTMLを生成し(S109)、Webサーバ61に供給する(S110)。Webサーバ61は、供給されたHTMLをHTTPレスポンスとしてWebブラウザ71に送信する(S111,S112)。このようなHTTPレスポンスを受信すると、Webブラウザ71は当該HTMLに応じて、例えば図8あるいは図9に示すような応答画面を表示させる。なお、図8は、正しいユーザ名とパスワードの組み合わせを入力し、ログインが成功した場合の応答画面を示しており、図9は、ユーザ名とパスワードの組み合わせが正しくない場合の応答画面を示している。
【0024】
(動作概要)
ところで、Webアプリケーション62には、パラメータ入力値に特定の文字列が含まれていると、想定外の処理が実行されるインジェクション系脆弱性が存在する場合があるが、フロントエンドのWebサーバ61の構成やWebアプリケーション62の構成等によっては、単純にWebサーバ61からの応答(HTTPレスポンス)中の文字列とエラーが生じた場合の文字列のパターンを比較するだけでは脆弱性を検出できない場合もある。
【0025】
Webサービス提供システム検査装置はクライアント70と同様の環境に配置される。この検査装置では、脆弱性毎にパラメータの入力値を変形し、Webアプリケーションにおいて脆弱性に起因するエラーを引き起こす可能性がないポジティブリクエストとWebアプリケーションにおいて脆弱性に起因するエラーを引き起こす可能性があるネガティブリクエストを生成し、各々のリクエストに対する応答を比較して脆弱性の有無を判定するようにしている。
【0026】
具体的には、例えば図10に示すように、検査者が装置操作部30を操作して入力したWebアプリケーション62に対する正当なリクエストのデータ,対象となる脆弱性等を検査制御部40が取得し(S1)、パラメータ変形部11が、各々の脆弱性毎に、パラメータ入力値を変形してリクエストを生成する(S2〜S3)。このパラメータの変形では、ポジティブリクエスト生成部13とネガティブリクエスト生成部14によってリクエスト(ポジティブリクエストとネガティブリクエスト)を生成する。リクエストが生成されると、リクエスト送信部15は、これをWebサービス提供システム60に送信する(S4)。
【0027】
このようなリクエストに応じたWebサービス提供システム60の応答を取得すると(S5)、レスポンス解析部20は、脆弱性の種類毎に、ポジティブリクエストに対する応答(HTTPレスポンス)とネガティブリクエストに対する応答(HTTPレスポンス)の特徴的な情報(後述のレスポンス長,ヘッダ情報,ステータス,特徴的な文字列等)を抽出する(S6)。さらに、レスポンス情報比較部27はポジティブリクエストに対する応答の特徴的な情報とネガティブリクエストに対する応答の特徴的な情報のいずれか若しくはすべてを利用して比較し、この比較結果に応じて検査制御部40が脆弱性の有無の判定を行う(S7)。
【0028】
上述の図10中のS1において、検査者は、まず、脆弱性検査を実施するWebアプリケーション62に対する正当なリクエストのデータと正当なリクエストの送信先のURL一覧と正当なリクエストに関連付けられたパラメータ一覧を、検査対象となる脆弱性毎に入力する。検査制御部40は検査者が入力した各々の正当なリクエストのデータと各々の正当なリクエストの送信先のURL一覧と各リクエストに関連付けられたパラメータ一覧を保持する。図11に示すように、URL一覧は、例えば入力された正当なリクエストのパラメータに応じて、HTTPリクエストを送信する先のURL(url 1,url 2)の一覧であり、例えば同図中に示す例ではurl 1に対するパラメータ一覧としてはパラメータ1−1,1−2が対応付けられており、url 2に対するパラメータ一覧としてはパラメータ2−1,2−2が対応付けられている。
【0029】
また、挿入文字列データ12には、脆弱性の種類毎に、パラメータ入力値の変形文字列(ポジティブリクエストとネガティブリクエストに用いる文字列)が格納されており、これらの文字列を用いて、図11中のパラメータ1−1に対して示すように、脆弱性の種類毎に脆弱性の検査を行う。
【0030】
(動作詳細:SQLインジェクション脆弱性)
以下、SQLインジェクション脆弱性の場合を例に検査の詳細を説明する。
SQLインジェクション脆弱性を検査する場合には、例えば図12に処理の概要を示すように、
(1)検査対象となるURL(例えば“url 1”)に対してパラメータ入力値(例えば“パラメータ1−1”,“パラメータ1−2”)を変形したリクエスト(ポジティブリクエストとネガティブリクエスト)を複数生成し、
(2)各々のリクエストをサービス提供システム60側に送信し、
(3)各々のリクエストに対するWebサービス提供システム60のHTTPレスポンスを取得し、
(4)ポジティブリクエストに対するHTTPレスポンスとネガティブリクエストに対するHTTPレスポンスを比較し、ネガティブレスポンスだけから得られたHTTPレスポンスの有無を確認することによって行う。このHTTPレスポンスの比較は、各々のHTTPレスポンスから抽出した特徴的な情報のパターンを比較することによって行う。
【0031】
図12に示す手順をさらに具体的に示したのが図13に示すフローチャートである。まず、検査制御部40が、検査対象のリクエストを選択し(S11)、検査対象の脆弱性(この場合ではSQLインジェクション脆弱性)を選択すると(S12)、リクエスト生成部10は指定されたリクエストのパラメータを変形したリクエストを生成して指定されたURL宛に送信する(S13)。
【0032】
このようなリクエストに対して、Webサービス提供システム60からの応答(HTTPレスポンス)を受信すると、レスポンス解析部20は、このHTTPレスポンス中の特徴的な情報を抽出し、ポジティブリクエストに対するHTTPレスポンス(ポジティブレスポンス)のパターンのグループとネガティブリクエストに対するHTTPレスポンス(ネガティブレスポンス)のパターンのグループを作成する(S14)。この後、レスポンス解析部20は、各々のパターンのグループを比較し(S15)、ネガティブレスポンスグループ内に、ポジティブレスポンスグループ中のパターンのいずれにも一致しないパターンがあれば脆弱性ありと判定し(S16)、すべてのネガティブレスポンスグループのパターンがポジティブレスポンスグループ中のいずれかのパターンに一致すれば脆弱性なしと判定する(S17)。
【0033】
S13では、リクエスト生成部10のポジティブリクエスト生成部13とネガティブリクエスト生成部14において、各々挿入文字列データ12を参照してポジティブリクエストとネガティブリクエストを生成し(S21,S31)、リクエスト送信部15が、例えば図14に示すように、レスポンス解析部20側でどのリクエストに対する応答か区別できるようにWebサービス提供システム60に送信する(S22,S32)。具体的には、例えばリクエスト送信部15は、送信したリクエスト及び検査対象の脆弱性及びポジティブリクエストかネガティブリクエストかの種別を示す情報をレスポンス受信部21に供給し、レスポンス受信部21は、これらの情報に応じて各々のリクエストとこれらに対するレスポンスを対応付けておく。
【0034】
また、S14では、レスポンス解析部20のレスポンス受信部21は、Webサービス提供システム60からの応答(HTTPレスポンス)を受信し(S23,S33)、ステータス抽出部22〜特殊文字列抽出部25は、各々のHTTPレスポンスの特徴的な情報(応答パターン)を抽出し(S24,S34)、レスポンス情報保存部26は各々のレスポンスパターンを作成する(S25,S35)。このように作成された各々のレスポンスパターンは、S15において、レスポンス情報比較部27による比較に用いられる。
【0035】
(動作詳細:リクエスト生成)
Webアプリケーション62に、SQLインジェクション脆弱性がある場合には、入力パラメータの値に、正当なリクエスト中では使用されない。例えば「’」,「−−」,「%」等の文字列が含まれている場合にエラーを生じる可能性があることが知られている。このため、SQLインジェクション脆弱性の検査用には、ネガティブリクエストを生成する文字列として例えば「’ and . and ’1’=’1」,「−−」,「%」等が選択されており、ポジティブリクエストを生成する文字列としてこれら以外の文字列であって正当なリクエスト中では使用されない文字種を含む文字列、例えば「<」,「>」,「/」,「!」等が選択されている。同様に、他の脆弱性に対してもネガティブリクエストを生成する文字列とポジティブリクエストを生成する文字列とが選択されている。これらの文字列は、正当なパラメータ入力値(例えば正当なユーザ名“john”)の「前」,「途中」,「後」にこれらの文字列を挿入される。また、正当なパラメータ入力値を持つリクエスト及びパラメータの値を削除したリクエストもポジティブリクエストに含まれる。ただし、正当なパラメータ入力値のどこにこれらの文字列を挿入するかは、検査時間の短縮等の目的によって「前」のみにする等適宜変更するようにしてもよい。
【0036】
テストデータを生成するためには、正当なリクエストが必要となる。具体的には、例えば図15に示すように、上述の図3及び図4に示すような画面に対して正しい「ユーザ名」及び「パスワード」の組み合わせを入力した際のリクエストのデータを、検査者が予め生成して検査制御部40に入力しておく。
【0037】
また、テストデータの生成は、上述の正当なリクエストを、例えば図16に示す処理によって加工することで生成される。このテストデータ生成処理では、例えば予め登録された挿入文字列データ12を利用して正当なリクエストのデータからテストデータを生成する(S52〜S55)。
【0038】
上述のように、検出する脆弱性毎に、ポジティブリクエストを生成するための文字列とネガティブリクエストを生成するための文字列が選択されている。検査者は予め、これらの文字列を用い、例えば図17に示すように、正当なリクエスト中のパラメータ名及びその入力値を示す文字列(置換対象文字列“username=john”)と、この置換対象文字列中のパラメータ入力値を上述の文字列で置き換えた文字列(置換文字列)の組み合わせとして、挿入文字列データ12を作成し、当該検査装置に入力しておく。なお、このような挿入文字列データ12は、検査対象となるパラメータ毎、検査対象となる脆弱性毎に作成し、当該検査装置に入力しておく。なお、置換文字列がパラメータ名のみ、あるいは空白であるものは、パラメータ入力値がない状態、あるいはパラメータ名もない状態を示している。すなわち、置換対象文字列を置換文字列“username=”で置換するとパラメータ入力値がない状態、置換対象文字列を置換文字列“”で置換するとパラメータ自体がない状態となる。
【0039】
ポジティブリクエスト生成部13及びネガティブリクエスト生成部14は、これらの挿入文字列データ12に従って、正当なリクエスト中の置換対象文字列を、各置換文字列で置換した複数のポジティブリクエストとネガティブリクエストのデータ(テストデータ)を生成する(S53,S54)。このようなテストデータは、対象となるパラメータ毎(例えばパスワード(password)等)に対して、対象となる脆弱性毎に生成する。
【0040】
なお、図17に示すように、挿入文字列データ12として置換前後の文字列を定義しておく代わりに、図18に示すように、変形の対象となるパラメータと当該パラメータの入力値の置換後の文字列のみを定義しておくようにしてもよい。この場合、パラメータ変形部11は、正当なリクエストから置換対象のパラメータの入力値を置換文字列で置換してテストデータを生成する。さらに、パラメータ自体がない状態のテストデータは、パラメータ名とその入力値を削除することによって行う。
【0041】
このように生成されたポジティブリクエストとネガティブリクエストのデータは、Webサーバ61に送信される。このHTTPリクエストは、例えばステータス部,ヘッダ部、送信データ本体であるボディ部等から構成されている。
【0042】
また、このようなHTTPリクエストに対するWebサービス提供システム60からの応答(HTTPレスポンス)は、例えば図19(HTTPレスポンス)に示すような構成になっている。これらのHTTPレスポンスは、例えばステータス部,ヘッダ部、HTMLデータ本体であるボディ部等から構成されている。
【0043】
上述のような構成のHTTPレスポンスは、Webサーバ61からレスポンス受信部21に供給される。供給されたHTTPレスポンスはレスポンス受信部21からステータス抽出部22〜特殊文字列抽出部25に供給され、ステータス抽出部22〜特殊文字列抽出部25においてHTTPレスポンス中の特徴的な情報が抽出される。
【0044】
(レスポンス長の抽出)
レスポンス長抽出部23は、HTTPレスポンスのボディ部分の長さを検出する。HTTPレスポンスは、例えば上述の図19に示すように、ヘッダ部分とボディ部分から構成されており、これらの部分は空白行により分割されている。レスポンス長抽出部23では、空白行以降のHTTPレスポンスのボディ部分のバイト数をカウントし、レスポンス長とする。
【0045】
HTTPレスポンスのヘッダ部分にはボディ部分に含まれるバイト数を示すためのContent−Lengthヘッダが含まれていることがあるが、まれにボディ部分の実際のバイト数と異なるバイト数が指定されていることがある。レスポンス長抽出部23では、Content−Lengthヘッダに示された値ではなく、実際に取得したHTTPレスポンスのボディ部分のバイト数をレスポンス長とする。なお、上述の図19に示すレスポンスのボディ部分は、別途CSSファイルで指定されたデザインでボディ部分を表示するように構成されているが、レスポンス解析部20では、レスポンスのボディ部分のみから特徴的な情報を抽出する。
【0046】
例えば図20及び図21に示すHTTPレスポンスのレスポンス長を抽出すると、図22に示すように、図20のレスポンス1の場合では269バイト、図21のレスポンス2の場合では、164バイトとなる。なお、動的に生成されるHTMLデータで構成される画面では、同一のURLに同一のパラメータ入力値でアクセスした場合でも、若干レスポンス長が異なる場合がある。このような場合には、レスポンス長による特徴的な差異があるかどうか判断する際の閾値として、例えばレスポンス長が50%以上増減することとする。この閾値はWebアプリケーションによって変化させてもよい。
【0047】
ところで、図20と図21は、いずれもポジティブリクエストに対してログインが失敗した際のHTTPレスポンス(ポジティブレスポンス)の例であるが、アプリケーションの作り込みの違いによって、レスポンス長が異なる例を示している。図20に示す場合では、ログインが失敗した際に再度入力欄を有するログイン画面に戻るようにアプリケーションが構成されているが、図21に示す場合では、ログインが失敗した際にその旨を表示する画面に戻り、ボタンが押下された後にログイン画面に戻るようにアプリケーションが構成されている。
【0048】
(ヘッダ情報の抽出)
また、ヘッダ情報抽出部24は、例えばHTTPレスポンス中のLocationヘッダとSet−Cookieヘッダを抽出し、各々のヘッダの有無をヘッダ情報とする。Locationヘッダは、クライアントのリクエストを他のURLに転送したい場合に、次に取得するべきURLを指定する。また、Set−Cookieヘッダは、新たなCookieを設定するために付加される。Cookieはセッション管理に利用されるため、Set−Cookieヘッダが含まれるということは、既存のセッションを破棄することを意味している。
【0049】
これにより、例えば図23及び図24に示すようなHTTPレスポンスのヘッダ情報を抽出した結果は、図25に示すようになる。なお、アプリケーションの作りこみによっては、遷移毎にSet−Cookieヘッダが付加される(遷移毎にCookieを変える)場合があるが、このような場合には、Set−Cookieヘッダを抽出しないようにしてもよい。
【0050】
(HTTPステータスコードの抽出)
また、ステータス抽出部22は、HTTPレスポンス中のステータス部からステータスコードを抽出する。HTTPのステータスコードは、以下のように、Webサービス提供システム60内部でリクエストがどのように処理されたかを示している。
1XX:情報。サーバはリクエストを受信したが、最終結果はまだ利用可能でない。
2XX:成功。サーバはリクエストを正常に処理した。
3XX:リダイレクト。リクエストは別のURLにリダイレクトされる。
4XX:クライアントエラー。リクエストにエラーがあり正常に処理できなかった。
5XX:サーバエラー。サーバはリクエストを正常に処理できなかった。
なお、これらの処理結果は、脆弱性が原因とは限らないが、ステータスコードが異なれば、Webサービス提供システム60内部の処理が異なることがわかる。
これにより、例えば図26及び図27に示すようなHTTPレスポンスのステータスコードを抽出した結果は、図28に示すようになる。
【0051】
(特定文字列の抽出)
特殊文字列抽出部25は、例えば図29に示すように、予め設定された特定の文字列がHTTPレスポンス内に存在するか否かを検出し、検出した文字列を抽出する。Webサービス提供システム60側で脆弱性が原因のエラーが発生した場合、HTTPレスポンスに「エラー」や「不正」「Error」といった特徴的なメッセージが含まれることがあるため、このような特定の文字列を予め設定しておき、HTTPレスポンス内にこれらの文字列が含まれる場合には抽出する。これにより、例えば図30及び図31に示すようなHTTPレスポンス中の特定文字列を抽出した結果は、図32に示すようになる。
【0052】
(脆弱性有無の判定)
ステータス抽出部22〜特殊文字列抽出部25は、上述のように、各々のポジティブレスポンス及び各々のネガティブレスポンス毎に、特徴的な情報を抽出し、レスポンス情報保存部26に供給する。例えば図33に示すように、登録ユーザ毎に、情報提供を行うWebアプリケーション62では、例えば図34(A)に示すようなログイン画面に対してユーザが入力したユーザ名とパスワードを、DB64に格納されている認証情報と照合し、ユーザ名とパスワードが正しい組み合わせであれば同図(B)に示すような情報提供サービスを提供し、ユーザ名とパスワードが正しくない場合には同図(C)に示すような再入力画面を表示させるWebアプリケーション62を想定し、具体的なポジティブレスポンスとネガティブレスポンスについて説明する。
【0053】
例えば図34(A)に示すログイン画面中で指定されたアドレス(URL)に対して、例えば上述の図15に示すようなユーザ名とパスワードの組み合わせを含むリクエスト(ポジティブリクエスト1)が供給されると、Webアプリケーション62のSQL発行部62a(さらに具体的には、例えば同図中の斜線部の「パラメータチェック及びSQLコマンド生成」処理等)は、DBサーバ接続API66aを介して、ユーザ名「john」に対応するパスワードが「jtr」であることを確認するSQL文を作成し、DBサーバ63に送信する。DBサーバ63は、供給されたSQL文に従って指定されたユーザ名「john」に対応するパスワードが「jtr」であるかを検索し、その結果をWebアプリケーション62のSQL発行部62aに供給する。Webアプリケーション62は検索結果が1件あればユーザ名とパスワードの組み合わせが正しいと判断する。クライアント70側から供給されたユーザ名とパスワードの組み合わせが正しい場合には、Webアプリケーション62は、上述の図19に示すように、図34(B)に示すページに対応するレスポンスデータを生成し、これをレスポンス解析部20側に供給する。また、クライアント70側から供給されたユーザ名とパスワードの組み合わせが誤っている場合、供給されたSQL文による検索結果は0件となる。このとき、Webアプリケーション62は図34(C)に示すページに対応するレスポンスデータを生成し、これをレスポンスレスポンス解析部20側に供給する。
【0054】
上述の図15に示すリクエスト中のユーザ名「john」をポジティブテスト文字列「<john」で置き換えたリクエスト(ポジティブリクエスト2)に対するレスポンスは、例えば図35に示すようになる。同様に、図15に示すリクエスト中のユーザ名「john」をポジティブテスト文字列「/john」で置き換えたリクエスト(ポジティブリクエスト4)に対するレスポンスは、例えば図36に示すようになり、ポジティブテスト文字列「!john」で置き換えたリクエスト(ポジティブリクエスト5)に対するレスポンスは、例えば図37に示すようになる。
【0055】
また、Webアプリケーション62に脆弱性がある場合、図15に示すリクエスト中のユーザ名「john」をネガティブテスト文字列「’ and . and ‘1’=’1john」で置き換えたリクエスト(ネガティブリクエスト1)に対するレスポンスは、例えば図38に示すようになり、ネガティブテスト文字列「−−john」で置き換えたリクエスト(ネガティブリクエスト2)に対するレスポンスは、例えば図39に示すようになる。一方、Webアプリケーション62に脆弱性がない場合、図15に示すリクエスト中のユーザ名「john」をネガティブテスト文字列「’ and . and ‘1’=’1john」で置き換えたリクエスト(ネガティブリクエスト1)に対するレスポンスは、例えば図40に示すようになり、ネガティブテスト文字列「−−john」で置き換えたリクエスト(ネガティブリクエスト2)に対するレスポンスは、例えば図41に示すようになる。
【0056】
図42及び図43は、上述の図19及び図35〜図41に示すような複雑なHTTPレスポンスを返すWebアプリケーション62におけるポジティブレスポンスのグループの例とネガティブレスポンスのグループの例について、特徴的な情報の中のレスポンス長をまとめたものである。なお、図42は脆弱性がある場合、図43は脆弱性がない場合についてまとめたものである。
【0057】
例えば特徴的な情報のいずれかのみ(例えばレスポンス長)を用い、ネガティブレスポンスグループ内の全てのパターン(この場合ではレスポンス長)が、ポジティブレスポンスグループ中のパターンのいずれかに一致しなければ「脆弱性あり」と判定することにしても、脆弱性の有無に応じた応答パターンの違いがあれば、ある程度の脆弱性の検出は可能である。このような判定方法では、例えば図42に示す場合では、「ネガティブレスポンス2」と「ネガティブレスポンス3」のパターン「2657」は、ポジティブレスポンスグループ内に存在するが、「ネガティブレスポンス1」のパターン「511」はポジティブレスポンスグループ内には存在しないため、「脆弱性あり」と判定する。また、図43に示す場合では、「ネガティブレスポンス1」〜「ネガティブレスポンス3」のいずれのパターンもポジティブレスポンスグループ内に存在するため、「脆弱性なし」と判定する。
【0058】
このように、個々の特徴的な情報(例えば「レスポンス長」)を独立に比較することによっても、ある程度は、脆弱性の有無を検出することができるが、Webアプリケーション62における応答画面の作りこみ次第では、例えば図42中の「ネガティブレスポンス1」の応答のレスポンス長が、ポジティブレスポンスグループのいずれかの応答のレスポンス長と同一になってしまう場合も考えられる。
【0059】
例えばWebアプリケーション62の作りこみ次第では、上述の図38(図34(D)に示す画面に相当)に示すレスポンスの代わりに、例えば図44に示すようなレスポンスを返す(図45に示す画面に相当)ように構成することも充分考えられる。さらに、例えば図46に示すように,「ネガティブレスポンス1」の応答のレスポンス長が、ポジティブレスポンスグループ内の応答のレスポンス長と同一になってしまう場合も考えられる。この場合、「ネガティブレスポンス1」〜「ネガティブレスポンス3」のパターンがいずれもポジティブレスポンスグループ内に存在するため、「脆弱性なし」と判定してしまう。
【0060】
このような場合には、ポジティブレスポンスグループとネガティブレスポンスグループの特徴的な情報を複数用いて判定を行うことにより、脆弱性の検出の精度を向上させることができる。図47及び図48は、上述の図19,図35〜図37及び図44に示すポジティブレスポンスのグループの例とネガティブレスポンスのグループの例について、特徴的な情報のパターンをまとめたものである。なお、図47は脆弱性がある場合、図48は脆弱性がない場合についてまとめたものである。図47に示す場合では、上述のようにレスポンス長のみで脆弱性を判断しようとすると「脆弱性なし」と判定してしまうが、このような場合にも、図47のポジティブレスポンスグループ内には、ネガティブレスポンス1のように、レスポンス長が「266」であっても「Cookie書き換えなし」で応答中に「エラー」という文字が含まれる組み合わせがないため、当該応答中の個々の特徴的な情報を総合的に比較して判定するようにすれば、Webアプリケーション62の脆弱性を確実に検出することができる。
【0061】
レスポンス情報比較部27は、この特徴的な情報のパターンについて比較を行い、例えば図47に示すように、ネガティブレスポンスグループ内に、ポジティブレスポンスグループ中のパターンのいずれにも一致しないパターンがあれば「脆弱性あり」と判定する。また、レスポンス情報比較部27は、例えば図48に示すように、すべてのネガティブレスポンスグループのパターンがポジティブレスポンスグループ中のいずれかのパターンに一致すれば「脆弱性なし」と判定する。これにより、この検査装置では、Webサービス提供システム60において、Webアプリケーション62のSQLインジェクション脆弱性の検出の確実性を向上させることができる。
【0062】
なお、ポジティブリクエストとネガティブリクエストを複数生成し、Webアプリケーション62に供給しているのは、Webアプリケーション62(例えば上述の図33中のログイン処理部621等)の作りこみの違い(必要な機能の実装上の違い等)、プログラム言語処理系66やDBサーバ63の種類あるいはバージョンの違い等によって、同様な処理を行うWebアプリケーション62であっても挙動が異なるためである。複数のポジティブリクエストと複数のネガティブリクエストに対する複数の応答の特徴的な情報を抽出して比較することにより、Webアプリケーション62の挙動の違いがあっても、脆弱性の検出の確実性を向上させることができる。
【0063】
(他の脆弱性の検査)
以上、SQLインジェクション脆弱性の検出の場合について説明したが、この検査装置では、Webアプリケーション62の他のインジェクション系脆弱性の検出も行う。LDAPインジェクション脆弱性は、Webアプリケーションのプログラム内部においてLDAP文を生成する際に、ユーザからの入力がそのままLDAP文に含まれることが問題となって発生する。例えば、各々のユーザ毎に住所録を提供するWebアプリケーション62を想定する。このようなWebアプリケーションにおいて、例えば上述の図15のようなリクエストに応じてLDAP文を生成し、各々のユーザが登録した住所録を表示させるような場合には、LDAP発行部62bが、リクエスト中のパラメータ「username」のユーザからの入力「john」を取り出し、予め設定しておいたLDAP文の一部に埋め込み、LDAPサーバに処理を要求して、”john”というuidで登録されている情報を取得するLDAP文が生成される。
(uid=john)
このとき、Webアプリケーション62にLDAPインジェクション脆弱性があると、ユーザからの入力に「john)(|(objectclass=*)」が指定された場合に、以下のようLDAP文が生成されてしまう。
(uid=john)(|(objectclass=*))
このように、LDAP文の生成に利用される特殊文字をユーザが指定し、これがそのままLDAP文の生成に使用される場合にはLDAPインジェクション脆弱性が存在する。このような場合には、予め想定されたものとは異なるLDAP文が生成され得るため、ユーザは任意のLDAP文を実行可能である。
【0064】
LDAPサーバ65にLDAPインジェクション脆弱性がある場合にエラーを生じる可能性がある文字は、例えば「(」、「)」として知られている。これらの文字列は、正当なリクエスト中では使用されない。このため、LDAPインジェクション脆弱性の検査用には、ネガティブリクエストを生成する文字列として「(」、「)」が選択されており、ポジティブリクエストを生成する文字列としてこれら以外の正当なリクエスト中では使用されない文字種を含む文字列、例えば「<」,「>」,「/」,「!」が選択されている。これらの文字列は、正当な入力パラメータの「前」,「途中」,「後」に挿入される。また、正当なパラメータ入力値を持つリクエスト及びパラメータの値を削除したリクエストもポジティブリクエストに含まれる。ただし、正当な入力パラメータのどこにこれらの文字列を挿入するかは、検査時間の短縮等の目的によって「前」のみにするなどしてよい。これらの選択に従って、例えば図49に示すように、上述の図17と同様な形式でLDAPインジェクション脆弱性の検査用の挿入文字データが生成され、予め当該検査装置に入力されている。
【0065】
また、XPathインジェクション脆弱性は、Webアプリケーション62のプログラム内部においてXPath式を組み立てる際に、ユーザからの入力がそのままXPath式に含まれることが問題となって発生する。例えば、各々のユーザ毎に住所録を提供するWebアプリケーション62を想定する。このようなWebアプリケーションにおいて、例えば上述の図15のようなリクエストに応じ応じてXPath式を生成し、各々のユーザが登録した住所録を取り出すような場合には、Webアプリケーション62のXPath式発行部(図示せず)が、リクエスト中のパラメータ「username」のユーザからの入力「john」を取り出し、予め設定しておいたXPath式の一部に埋め込み、”john”という属性値を持つ”name”ノードを取得するXPath式を生成する。
string(//user[name/text()=’john’]/account/text())
このとき、Webアプリケーション62にXPathインジェクション脆弱性があると、ユーザからの入力に「’ or ’1 ’=’1」が指定された場合、以下のようなXPath式が生成されてしまう。
string(//user[name/text()=’’ or ’ 1 ’=’1’]/account/text())
このように、XPath式の生成に利用される特殊文字をユーザが指定し、これがそのままXPath式の生成に使用される場合には、XPathインジェクション脆弱性が発生する可能性がある。このような場合には、予め想定されたものとは異なるXPath式が生成され得るため、ユーザは任意のXPath式を実行可能である。
【0066】
Xpathインジェクション脆弱性がある場合にエラーを生じる可能性がある文字は、例えば「’」,「”」として知られている。これらの文字列は、正当なリクエスト中では使用されない。このため、Xpathインジェクション脆弱性の検査用には、ネガティブリクエストを生成する文字列として「’ AND 1<>2 AND ’1 ’=’1」,「” AND 1<>2 AND ”1”=”1」が選択されており、ポジティブリクエストを生成する文字列としてこれら以外の正当なリクエスト中では使用されない文字種を含む文字列、例えば「#」,「!」,「*」が選択されている。これらの文字列は、正当な入力パラメータの「前」,「途中」,「後」にこれらの文字列を挿入される。また、正当なパラメータ入力値を持つリクエスト及びパラメータの値を削除したリクエストもポジティブリクエストに含まれる。ただし、正当な入力パラメータのどこにこれらの文字列を挿入するかは、検査時間の短縮等の目的によって「前」のみにするなどしてよい。これらの選択に従って、例えば図50に示すように、上述の図17と同様な形式でXpathインジェクション脆弱性の検査用の挿入文字データが生成され、予め当該検査装置に入力されている。
【0067】
また、コマンドインジェクション脆弱性は、Webアプリケーション62のプログラム内部においてOSのコマンドを組み立てる際に、ユーザからの入力がそのままOSコマンドに含まれることが問題となって発生する。例えば各々のユーザ毎にディレクトリを割り当てファイル共有サービスを提供するWebアプリケーション62を想定する。このようなWebアプリケーション62において、例えば上述の図15のようなリクエストに応じ応じてOSのコマンドを生成し、各々のユーザのディレクトリ内のファイルのリストを表示させるような場合には、コマンド発行部62cが、リクエスト中のパラメータ「username」のユーザからの入力「john」を取り出し、予め設定しておいたOSコマンドの一部に埋め込み、ディレクトリ“john”に格納されているファイルの一覧を取得するOSコマンドが生成される。
system(“ls −l john”)
このとき、Webアプリケーション62にコマンドインジェクション脆弱性があると、ユーザからの入力に「; cat /etc/passwd」が指定された場合に、以下のようなOSコマンドが生成されてしまう。
system(“ls −l ; cat /etc/passwd”)
このように、OSコマンドの組み立てに利用される特殊文字をユーザが指定し、これがそのままOSコマンドの生成に使用される場合には、OSコマンドインジェクション脆弱性が存在する。このような場合には、予め想定されたものとは異なるOSコマンドが生成され得るため、ユーザは任意のOSコマンドを実行可能である。
【0068】
コマンドインジェクション脆弱性がある場合にエラーを生じる可能性がある文字は、例えば「&」,「&&」,「;」,「|」,「||」として知られている。これらの文字列は、正当なリクエスト中では使用されない。このため、コマンドインジェクション脆弱性の検査用には、ネガティブリクエストを生成する文字列として「&」,「&&」,「;」,「|」,「||」が選択されており、ポジティブリクエストを生成する文字列としてこれら以外の正当なリクエスト中では使用されない文字種を含む文字列、例えば「%」,「#」が選択されている。これらの文字列は、正当な入力パラメータの「前」,「途中」,「後」にこれらの文字列を挿入される。また、正当なパラメータ入力値を持つリクエスト及びパラメータの値を削除したリクエストもポジティブリクエストに含まれる。ただし、正当な入力パラメータのどこにこれらの文字列を挿入するかは、検査時間の短縮等の目的によって「前」のみにするなどしてよい。これらの選択に従って、例えば図51に示すように、上述の図17と同様な形式でコマンドインジェクション脆弱性の検査用の挿入文字データが生成され、予め当該検査装置に入力されている。
【0069】
また、SSIインジェクション脆弱性は、Webアプリケーション62のプログラム内部においてHTMLデータを生成する際に、ユーザからの入力がそのまま含まれることが問題となって発生する。例えば、各々のユーザ毎にディレクトリを割り当て保存されているファイル共有サービスを提供するWebアプリケーション62を想定する。このようなWebアプリケーション62において、例えば上述の図15のようなリクエストに応じてSSIコマンドを生成し、各々のユーザのディレクトリ内のファイルのリストを表示させるような場合には、Webアプリケーション62のSSI発行部(図示なし)は、リクエスト中のパラメータ「username」のユーザからの入力「john」を取り出し、予め設定しておいたSSIコマンドの一部に埋め込み、ディレクトリ“john”に格納されているファイルの一覧を取得するSSIコマンドを生成する。
<!――#exec cmd=“/bin/ls john”――>
このとき、Webアプリケーション62にSSIインジェクション脆弱性があると、例えばユーザからの入力が「john” ――> <!――#exec cmd=“/bin/cat /etc/passwd」である場合には、以下のようなSSIコマンドが生成されてしまう。
<!――#exec cmd=“/bin/ls john” ――> <!――#exec cmd=“/bin/cat /etc/passwd”――>
このように、SSIコマンドに利用される特殊文字をユーザが指定し、これがそのままSSIコマンドの生成に使用される場合には、SSIインジェクション脆弱性が存在する。このような場合には、予め想定されたものとは異なるSSIコマンドが生成され得るため、ユーザは任意のSSIコマンドを実行可能である。
【0070】
SSIインジェクション脆弱性がある場合にエラーを生じる可能性がある文字は、例えば「<!――#」として知られている。これらの文字列は、正当なリクエスト中では使用されない。このため、SSIインジェクション脆弱性の検査用には、ネガティブテスト文字列として文字列「<!――#」が選択されており、ポジティブテスト文字列としてこれら以外の正当なリクエスト中では使用されない文字種を含む文字列、例えば「/」,「!」,「−」,「<!−−#echo var=“”――>」が選択されている。これらの文字列は、正当な入力パラメータの「前」,「途中」,「後」にこれらの文字列を挿入される。ただし、正当な入力パラメータのどこにこれらの文字列を挿入するかは、検査時間の短縮等の目的によって「前」のみにするなどしてよい。これらの選択に従って、例えば図52に示すように、上述の図17と同様な形式でSSIインジェクション脆弱性の検査用の挿入文字データが生成され、予め当該検査装置に入力されている。
【0071】
LDAP脆弱性以下の他の脆弱性もSQLインジェクションの場合と同様のフローにより脆弱性の検出を行うことができる。ポジティブリクエスト生成部13及びネガティブリクエスト生成部14は、挿入文字列データ12内の上述の各脆弱性についての定義に従って、パラメータ変形部11から指定されたパラメータ入力値を変形して、ポジティブリクエストとネガティブリクエストを生成し、リクエスト送信部15がWebサーバ61に送信する。これらのリクエストに対するHTTPレスポンスが供給されると、上述のSQLインジェクションの場合と同様に、ステータス抽出部22〜特殊文字列抽出部25が各々の特徴的な情報を抽出し、レスポンス情報比較部27が各応答パターンの比較を行う。これにより、SQLインジェクション脆弱性の検出の場合と同様に、Webアプリケーション62自体に存在する脆弱性の検出の確実性を向上させることができる。
【0072】
(効果)
上述のように、このWebサービス提供システム検査装置では、脆弱性毎に検査文字列を定義しておき、これに応じてパラメータ入力値を変化させたリクエストを生成し、これらのリクエストに対するWebサービス提供システム60側のHTTPレスポンス中の特徴的な情報を抽出し、これらを総合的に判断して脆弱性の有無を判断しているため、Webアプリケーション62等によって構成されるWebサービス提供システムに存在する脆弱性の検出の確実性を向上させることができる。
【0073】
Webアプリケーション62の作りこみ次第で、脆弱性が存在するにもかかわらず、脆弱性に起因する特徴的な文字列がHTTPレスポンスに含まれない場合がある。このような場合には、単なる特定の文字列との比較では脆弱性の有無を判定することができない。
【0074】
これに対し、この検査装置では、ポジティブリクエストに対するHTTPレスポンスとネガティブリクエストに対するHTTPレスポンスから各々抽出した特徴的な情報(レスポンス長,ヘッダ情報,ステータス,特徴的な文字列等)のいずれか若しくはすべてを利用して複数のレスポンスを比較して脆弱性の有無を判定するため、脆弱性検出の確実性向上に寄与することができる。
【図面の簡単な説明】
【0075】
【図1】本発明の一実施例に係る検査装置の構成例を示すブロック図である。
【図2】検査対象となるWebサービス提供システムの使用例を示す図である。
【図3】ログイン画面の例を示す図である。
【図4】ログイン画面を表示するためのHTMLソースの例を示す図である。
【図5】Webサービス提供システムによるサービス提供動作の例を示すシーケンス図である。
【図6】Webサーバに対するHTTPリクエストの例を示す図である。
【図7】正当なパラメータの例を示す図である。
【図8】正常応答の画面の例を示す図である。
【図9】エラー画面の例を示す図である。
【図10】脆弱性検査全体の概要を示す図である。
【図11】検査対象のアプリケーションにおけるURL及びパラメータの例を示す図である。
【図12】検査処理の概要を示す図である。
【図13】検査処理の例を示すフローチャートである。
【図14】リクエスト送信部による各リクエストの送信タイミングを示す図である。
【図15】HTTPリクエストの例を示す図である。
【図16】パラメータ変形部11による処理の例を示すフローチャートである。
【図17】ポジティブリクエスト及びネガティブリクエストの生成に用いる挿入文字列データの例を示す図である。
【図18】挿入文字列データの他の例を示す図である。
【図19】ポジティブレスポンスの例を示す図である。
【図20】HTTPレスポンスの例を示す図である。
【図21】HTTPレスポンスの例を示す図である。
【図22】HTTPレスポンスのボディ部分のレスポンス長の例を示す図である。
【図23】HTTPレスポンスの例を示す図である。
【図24】HTTPレスポンスの例を示す図である。
【図25】HTTPレスポンスから抽出したヘッダ情報の例を示す図である。
【図26】HTTPレスポンスの例を示す図である。
【図27】HTTPレスポンスの例を示す図である。
【図28】HTTPレスポンスから抽出したステータスコードの例を示す図である。
【図29】特定文字列のリストの例を示す図である。
【図30】HTTPレスポンスの例を示す図である。
【図31】HTTPレスポンスの例を示す図である。
【図32】HTTPレスポンスから抽出した特定文字列の例を示す図である。
【図33】Webアプリケーション62の構成例を示すブロック図である。
【図34】Webアプリケーション62の画面遷移の例を示す図である。
【図35】ポジティブリクエストに対するHTTPレスポンスの例を示す図である。
【図36】ポジティブリクエストに対するHTTPレスポンスの例を示す図である。
【図37】ポジティブリクエストに対するHTTPレスポンスの例を示す図である。
【図38】ネガティブリクエストに対するHTTPレスポンスの例を示す図である。
【図39】ネガティブリクエストに対するHTTPレスポンスの例を示す図である。
【図40】ネガティブリクエストに対するHTTPレスポンスの例を示す図である。
【図41】ネガティブリクエストに対するHTTPレスポンスの例を示す図である。
【図42】レスポンス情報保存部に保持される特徴的な情報のパターンの例を示す図である。
【図43】レスポンス情報保存部に保持される特徴的な情報のパターンの例を示す図である。
【図44】ネガティブリクエストに対するHTTPレスポンスの他の例を示す図である。
【図45】前記HTTPレスポンスに応じて表示される画面の例を示す図である。
【図46】レスポンス情報保存部に保持される特徴的な情報のパターンの例を示す図である。
【図47】レスポンス情報保存部に保持される特徴的な情報のパターンの例を示す図である。
【図48】レスポンス情報保存部に保持される特徴的な情報のパターンの例を示す図である。
【図49】ポジティブリクエスト及びネガティブリクエストの生成に用いる挿入文字列データの他の例を示す図である。
【図50】ポジティブリクエスト及びネガティブリクエストの生成に用いる挿入文字列データの他の例を示す図である。
【図51】ポジティブリクエスト及びネガティブリクエストの生成に用いる挿入文字列データの他の例を示す図である。
【図52】ポジティブリクエスト及びネガティブリクエストの生成に用いる挿入文字列データの他の例を示す図である。
【図53】従来の脆弱性検出方法の例を示す図である。
【図54】HTTPレスポンスに応じて表示される画面の例を示す図である。
【図55】HTTPレスポンスに応じて表示される画面の例を示す図である。
【符号の説明】
【0076】
10…リクエスト生成部、11…パラメータ変形部、12…リクエスト生成パターンデータ、13…ポジティブリクエスト生成部、14…ネガティブリクエスト生成部、15…リクエスト送信部、20…レスポンス解析部、21…レスポンス受信部、22…ステータス抽出部、23…レスポンス長抽出部、24…ヘッダ情報抽出部、25…特殊文字列抽出部、26…レスポンス情報保存部、27…レスポンス情報比較部、60…Webサービス提供システム、61…Webサーバ、62…Webアプリケーション、63…DBサーバ

【特許請求の範囲】
【請求項1】
Webサーバを介してアプリケーションサービスを提供するWebサービス提供システムの検査を行うWebサービス提供システム検査装置であって、
正当なリクエスト中のパラメータを予め設定されたポジティブリクエスト文字列に基づいて変形して複数のポジティブリクエストを生成するポジティブリクエスト生成手段と、
正当なリクエスト中のパラメータを予め設定されたネガティブリクエスト文字列に基づいて変形して複数のネガティブリクエストを生成するネガティブリクエスト生成手段と、
前記各ポジティブリクエストと前記各ネガティブリクエストを前記Webサービス提供システムに供給する供給手段と、
前記各ポジティブリクエストと前記各ネガティブリクエストに対する前記Webサービス提供システムの応答を取得する取得手段と、
取得した前記各ポジティブリクエストと前記各ネガティブリクエストに対する前記Webサービス提供システムの応答中の特徴的な情報(応答パターン)を抽出する特徴抽出手段と、
前記ネガティブリクエストに対する前記応答パターンのいずれかが、前記ポジティブリクエストに対するどの応答パターンとも一致しないときに脆弱性が存在すると判定する判定手段と
を備えることを特徴とするWebサービス提供システム検査装置。
【請求項2】
前記応答中の特徴的な情報として、
前記応答のレスポンス長
前記応答に含まれるヘッダ情報
前記応答に含まれるステータスコード
前記応答に含まれる予め規定した特定の文字列
のいずれかを用いることを特徴とする請求項1記載のWebサービス提供システム検査装置。
【請求項3】
前記応答中の特徴的な情報として、
前記応答のレスポンス長及び前記応答に含まれるヘッダ情報及び前記応答に含まれるステータスコード及び前記応答に含まれる予め規定した特定の文字列を用いることを特徴とする請求項1記載のWebサービス提供システム検査装置。
【請求項4】
Webサーバを介してアプリケーションサービスを提供するWebサービス提供システムの検査を行うWebサービス提供システム検査プログラムであって、
正当なリクエスト中のパラメータを予め設定されたポジティブリクエスト文字列に基づいて変形して複数のポジティブリクエストを生成するポジティブリクエスト生成ステップと、
正当なリクエスト中のパラメータを予め設定されたネガティブリクエスト文字列に基づいて変形して複数のネガティブリクエストを生成するネガティブリクエスト生成ステップと、
前記各ポジティブリクエストと前記各ネガティブリクエストを前記Webサービス提供システムに供給する供給ステップと、
前記各ポジティブリクエストと前記各ネガティブリクエストに対する前記Webサービス提供システムの応答を取得する取得ステップと、
取得した前記各ポジティブリクエストと前記各ネガティブリクエストに対する前記Webサービス提供システムの応答中の特徴的な情報(応答パターン)を抽出する特徴抽出ステップと、
前記ネガティブリクエストに対する前記応答パターンのいずれかが、前記ポジティブリクエストに対するどの応答パターンとも一致しないときに脆弱性が存在すると判定する判定ステップと
を有することを特徴とするWebサービス提供システム検査プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図42】
image rotate

【図43】
image rotate

【図44】
image rotate

【図45】
image rotate

【図46】
image rotate

【図47】
image rotate

【図48】
image rotate

【図49】
image rotate

【図50】
image rotate

【図51】
image rotate

【図52】
image rotate

【図53】
image rotate

【図54】
image rotate

【図55】
image rotate