次に、本発明を実施する形態について図面を参照して詳細に説明する。以下の各実施形態に記載されている構成は単なる例示であり、本発明の技術範囲はそれらには限定されない。また、以下の各実施形態において説明する情報処理装置は、専用のハードウェア装置により実現されてもよく、1以上の物理的なコンピュータ又は仮想的なコンピュータ又はそれらの組合せを用いて実現されたシステムとして実現されてもよい。なお、係る情報処理装置を実現可能なハードウェア構成については後述する。
本発明の各実施形態に関する説明に先立って、本発明の理解を容易にするため、本発明に関する技術的背景及び課題について詳細に説明する。
情報通信技術の発達に伴い、上記説明したようなWebサービスあるいはWebアプリケーションが組み込まれた情報機器が普及している。より具体的には、例えば、各種サーバ装置などを構成する情報処理装置(コンピュータ等)を制御可能なBMC(Base Board Management Controller:ベースボードマネージメントコントローラ)に、Webサーバ機能が実装される場合がある。
係るBMCは、例えば、情報処理装置にファームウェア(例えば、ベースボードに組み込まれるファームウェア)等の形式で組み込まれ、情報処理装置に関する電源制御、センサ監視、及び、各種情報取得等を実行する。係るBMCがWebサーバ機能を有する場合、当該Webサーバに対するリクエスト(HTTPリクエスト)を用いて、係る情報処理装置の操作、あるいは、情報取得が可能である。この場合、係るリクエストには、例えば、BMCに対する各種制御コマンド等が含まれてもよい。
Webサーバ機能を有するBMCにおいて、上記した周知のCSRF対策が実施された場合、正当なCSRFトークンを含まないリクエストは、Webサーバによって排除される。即ち、係るCSRF対策が実施された場合、BMCに対して任意のリクエスト(HTTPリクエスト)を用いた各種コマンドの発行、及び、情報取得が自由に行えない場合がある。なお、この場合の任意のリクエストは、例えば、BMCサーバに対して、CSRFトークンが設定されたコンテンツ(例えば、”hidden”フィールドにCSRFトークンが設定されたHTMLのフォーム等)を介さずに送信するリクエストである。
より具体的には、この場合、Webサーバから直接CSRFトークンを提供されたクライアント(例えばWebブラウザ等のアプリケーション)や、CSRFトークンが設定コンテンツ等を介さずに、直接BMCのWebサーバに対して、任意のリクエストを送信することが困難になる。これにより、ユーザの利便性が損なわれる場合がある。
以上を鑑みて、以下に説明する各実施形態においては、Webサーバ機能を有するBMCを具体例として、サーバから提供される、当該サーバに送信されたリクエストの正当性を表す情報(CSRFトークン)を用いることにより、当該サーバに対して任意のリクエストを発行可能とする技術について説明する。なお、本発明はこれには限定されず、BMC以外の任意のWebサーバに適用可能である。
<第1の実施形態>
以下、本発明の第1の実施形態について説明する。なお、以下においては、Webサーバ機能を提供するBMCを有するサーバ装置と、当該Webサーバに対して各種リクエストを送信するクライアント装置(ユーザ端末)とにより構成されるシステムを具体例として説明する。
図1は、本実施形態におけるクライアント端末101及びサーバ装置102の機能的な構成の具体例を示すブロック図である。図1に例示するように、本実施形態においては、ユーザ端末101と、BMC103を備えたサーバ装置102とが、任意の通信ネットワークを介して相互に通信可能に接続される。
ユーザ端末101とサーバ装置102とを接続する通信ネットワークは、インターネット等の広域ネットワークであってもよく、LAN(Local Area Network)等の構内ネットワークであってもよい。なお、本実施形態においては、ユーザ端末101と、サーバ装置102との間はIP(Internet Protocol)プロトコルを用いて通信可能であることを仮定する。また、ユーザ端末101と、サーバ装置102(特には後述するWebサーバ103a)との間は、HTTPプロトコルによる各種リクエストが送受信可能であることを仮定する。
ユーザ端末101は、後述するサーバ装置102と、通信ネットワーク(通信回線)を介して通信可能に接続された情報処理装置である。係るユーザ端末は、例えば、通信機能を有する任意の情報処理装置(例えば、各種コンピュータ、携帯情報端末等)であってもよい。
ユーザ端末101は、Webブラウザ101aを有する。Webブラウザ101aにおいて動作するWebクライアント101b、スクリプト101c、及び、ユーザ端末101aにおいて実行される第2のクライアントプログラム(以下、単に「第2のクライアント」と称する)101dは、後述するサーバ装置102におけるBMC103から取得される。
Webブラウザ101aは、Webサーバにより提供される各種コンテンツを解釈可能なソフトウェア・プログラム(各種のコンピュータ・プログラム)である。Webブラウザ101aは、現在では広く知られた周知のブラウザ・アプリケーションであってよい。なお、Webブラウザ101aは、後述するユーザ104が利用可能なUI(User Interface、ユーザインタフェース)を備えたアプリケーションとして提供されてもよい。また、Webブラウザ101aは、通信処理及びコンテンツ解釈処理の機能を提供するライブラリとして提供されてもよい。
Webブラウザ101aは、後述するWebサーバ103aに対してWebクライアント101b及び、スクリプト101cを取得するリクエストを発行することにより、これらを取得(受信)する。この際、Webブラウザ101aと、Webサーバ103aとの間では認証処理が実行され、認証済みのセッションであることを表すCookie(セッション情報)、及び、CSRFトークンが発行されてもよい。係るCookieは、Webブラウザ101aに設定されてもよい。係るCSRFトークンは、取得されたコンテンツ(例えば、Webクライアント101b)に設定されてもよい。Webブラウザ101aが、Webサーバ103aに対してリクエスト(HTTPリクエスト)を送信する際には、係るCookieとCSRFトークンとが通信データに付加される。なお、係る認証処理、Cookie及びCSRFトークンの発行は、後述するWebクライアント101bとWebサーバ103aとの間で実行されてもよい。
Webクライアント101bは、ユーザ104からの要求に応じて、後述するWebサーバ103aとの間で各種リクエストの送信及びレスポンスの受信を実行する。また、Webクライアント101bは、後述するスクリプト101cを含み、係るスクリプト101cに実装された処理を実行する。Webクライアント101bは、例えば、サーバ装置102におけるBMC103においてコンテンツ103bとして保持され、上記Webブラウザ101aにより、サーバ103aを介して取得される。
Webクライアント101bは、例えば、Webブラウザ101aにおいて解釈及び実行されるコンテンツとして実現可能である。この場合、係るコンテンツは、HTML(HyperText Markup Language)等により記述されたドキュメントであってもよい。また、係るコンテンツは、例えば、JavaScript(登録商標)、Java(登録商標)等のプログラム記述言語により記述された、ユーザ端末101側で実行されるプログラム(コンピュータ・プログラム)であってもよい。また、係るコンテンツは、例えば、Webサーバ103aにおいて処理されるCGI(Common Gateway Interface)、JSP(Java Server Pages)等を利用する処理を含んでもよい。
Webクライアント101bは、Webブラウザ101aの機能を用いて、Webサーバ103aとの間の通信処理を実行してもよい。
スクリプト101cは、Webクライアント101cに含まれるコンテンツであり、Webクライアント101cの一部として実現されてもよい。スクリプト101cは、例えば、BMC103においてスクリプト103cとして保持され、上記Webブラウザ101aにより、サーバ103aを介して取得される。
スクリプト101c(スクリプト103c)は図2に例示するように、以下の機能を備える。これらの機能は、それぞれの機能を実現する処理を実装したプログラムにより実現可能である。なお、スクリプト101cとスクリプト103cとは同様としてよい。
・CSRFトークンを取得する機能(図2の201)、
・第2のクライアントプログラムを取得する機能(図2の202)、
・CSRFトークンを提供して、第2のクライアントプログラムを起動する機能(図2の203)。
Webクライアント101bは、上記説明したスクリプト101cの機能を用いて、ユーザ104からの要求に応じて、Webサーバ103aから第2のクライアント101dを取得し、取得した第2のクライアント101dを起動する。この際、Webクライアント101b(スクリプト101c)は、第2のクライアント101dに対して上記CSRFトークンを提供する。
例えば、第2のクライアント101dがJava(登録商標)等により実装されたプログラムとして実現される場合、Webクライアント101bは、係るプログラムを起動する際に引数としてCSRFトークンを指定してもよい。より具体的には、例えば、Webクライアント101bは、Java(登録商標)プログラム(アプレット等)の起動タグにCSRFトークンを含むHTMLを動的に生成し、係るHTMLをロードすることにより、第2のクライアント101dを起動してもよい。なお、本実施形態はこれには限定されず、第2のクライアント101dを起動する方法、及び、第2のクライアントに対してCSRFトークンを提供する方法は、当該第2のクライアントの具体的な実装等に応じて、適宜選択してよい。
第2のクライアント101dは、ユーザ端末101において実行可能なプログラム(コンピュータ・プログラム)であり、Webサーバ103aとの間で各種リクエストの送信及びレスポンスの受信を実行する。第2のクライアント101dは、例えば、Java(登録商標)などのプログラム記述言語により実装されたプログラムであってもよい。第2のクライアント101dは、例えば、BMC103において第2のクライアント103dとして保持され、上記Webブラウザ101aにより、サーバ103aを介して取得される。
第2のクライアント101d(第2のクライアント103d)は、図2に例示するように、以下の機能を備える。なお、第2のクライアント101dと第2のクライアント103dとは同様としてよい。
・任意のクエスト(HTTPリクエスト)の作成に用いる情報の入力を受け付ける機能(図2の204)、
・入力情報を元に任意のリクエストを生成する機能(図2の205)、
・任意のリクエスト発行(送信)時にCSRFトークンを付加する機能(図2の206)、
・リクエストに対するレスポンスを受信する機能(図2の207)。
これらの機能は、それぞれの機能を実現する処理を実装したプログラムにより実現可能である。ユーザ104は、第2のクライアント101dが実現するこれらの機能を用いて、サーバ装置102(特にはBMC103におけるWebサーバ103a)に対して、任意のリクエストを送信する。即ち、ユーザ104は、Webブラウザ101aとは切り離された第2のクライアント101dを用いて、Webサーバ103aに対し任意のリクエストを発行(送信)する。
図3は、第2のクライアント101dの機能的な構成の具体例を示す図である。なお、図3に例示する構成は一つの具体例であり、第2のクライアント101dをどのような構成要素に区分けするかは、適宜選択してよい。
情報入力部301は、ユーザ104からリクエストの作成に用いられる情報の入力を受け付ける情報入力インタフェースである。係る情報入力部301は、ユーザ104に対して、例えば、リクエストの生成に用いられる情報を設定可能なフィールド、リクエスト送信ボタン、及び、リクエストに対するレスポンスを表示するフィールド等を備えたUIを提供してもよい。係るUIをどのように構成するかは、任意に定めてよい。ユーザ104は、例えば、サーバ装置102に関する各種制御を実行するコマンドや、サーバ装置102の情報を取得するコマンド等を、情報入力部301に対して入力してもよい。
リクエスト作成部302は、情報入力部301に入力された情報を用いてリクエストを作成(生成)する。係るリクエストは、例えば、HTTPにおけるPOSTリクエストによりWebサーバ103aに送信される送信データである。係る送信データの具体的な形式は、サーバ装置102の仕様等に応じて、適宜選択してよい。
CSRFトークン付加部303は、リクエスト作成部302において作成されたリクエストに対して、CSRFトークンを付加する。上記したように、第2のクライアント101dが起動される際、Webクライアント101b(スクリプト101c)から、CSRFトークンが提供される。これより、CSRFトークン付加部303は、Webサーバ103aから提供された正しいCSRFトークンを参照可能である。従って、CSRFトークン付加部303は、Webサーバ103aに対して送信されるリクエストに対して、正しいCSRFトークンを設定可能である。
通信部304は、CSRFトークンが付加されたリクエストを、サーバ装置102(特には、Webサーバ103a)に対して送信する。また、通信部304は、サーバ装置102(特には、Webサーバ103a)から、上記送信したリクエストに対するレスポンスを受信する。
レスポンス解析部305は、通信部304がサーバ装置102から受信したレスポンスを解析する。レスポンス解析部305は、例えば、BMC103が各種コマンドを実行した結果や、サーバ装置102から取得した各種情報等を、受信したレスポンスから抽出する。レスポンス解析部305は、係る解析結果を情報入力部301に通知してもよい。情報入力部301は、レスポンス解析部305の解析結果をUIに表示してもよい。
上記のように構成された、第2のクライアント101dは、スクリプト101cあるいはWebクライアント101bを参照することにより、CSRFトークンを参照(取得)してもよい。一例として、スクリプト101c及びWebクライアント101bがHTML及び各主スクリプト言語等を用いて記載されたコンテンツであり、第2のクライアント101dがJava(登録商標)を用いて実装されたプログラム(例えばアプレット)である場合を仮定する。この場合、第2のクライアント101dは、スクリプト101cあるいはWebクライアント101bの実体であるコンテンツ(例えばHTML)の内容を参照可能である。これより、第2のクライアント101dは、例えば、係るコンテンツにおいてCSRFトークンが含まれるフィールドを参照することにより、CSRFトークンを参照(取得)可能である。
以上のように構成されたユーザ端末101の具体的な動作については、後述する。
次に、サーバ装置102の機能的な構成について説明する。サーバ装置102は、コンピュータ等の情報処理装置を用いて構成される。図1に例示するように、サーバ装置102は、BMC103を備える。
BMC103は、サーバ装置102に関する各種制御を実行可能なコンポーネントである。BMC103は、例えば、図示しない演算装置(プロセッサ)と、記憶装置(例えば、フラッシュメモリ等)等のハードウェアにより構成されてもよい。この場合、係る記憶装置にBMCの機能が実装されたファームウェア(コンピュータ・プログラム)が格納され、係るファームウェアが、図示しない演算装置によって実行されることにより、BMC103の機能が提供されてもよい。以下、BMC103の機能的な構成について説明する。
BMC103は、少なくともWebサーバ103aを備える。また、BMC103は、サービス処理部103eを備えてもよい。また、BMC103は、コンテンツ103b、スクリプト103c、第2のクライアント103dを保持する。
Webサーバ103aは、ユーザ端末101との間で、HTTPを用いた通信を実行する。具体的には、Webサーバ103aは、ユーザ端末101(特には、Webブラウザ101a、Webクライアント101b、及び、第2のクライアント101d)からリクエスト(HTTPリクエスト)を受信し、それらに対してレスポンスを送信する。Webサーバ103aは、上述したように、ユーザ端末101(特には、Webブラウザ101a、Webクライアント101b)との間で認証処理を実行し、認証済みのセッションであることを表すCookie(セッション情報)、及び、CSRFトークンを発行する。
図4は、Webサーバ103aの機能的な構成を例示する図面である。なお、図4に例示する構成は一つの具体例であり、Webサーバ103aをどのような構成要素に区分けするかは、適宜選択してよい。
通信部401は、ユーザ端末101から各種リクエスト(HTTPリクエスト)を受信する。また、通信部401は、後述するレスポンス返却部405において生成されたレスポンス(HTTPレスポンス)を、ユーザ端末101に送信する。
リクエスト解析部402は、通信部401において受信したリクエストを解析する。リクエスト解析部402は、例えば、受信したリクエストを解析することにより、係るリクエストに含まれるCookie及びCSRFトークンを抽出してもよい。
また、リクエスト解析部402は、ユーザ端末から受信したリクエストが認証処理に関するリクエストである場合、リクエスト処理部404に対して、認証処理の実行を通知してもよい。この場合、リクエスト処理部404は、サーバ装置102の仕様等に応じて適切な認証処理を実行してもよい。
CSRFトークン認証部403は、リクエスト解析部402における解析結果に基づいて、CSRFトークンの正当性を認証(検証)する処理を実行する。CSRFトークン認証部403は、係るCSRFトークンが正常ではない(正当なCSRFトークンではない)場合は、係るリクエストを拒否するよう、リクエスト処理部404に通知してもよい。これにより、正常なCSRFトークンを含まない不正なリクエストは、Webサーバ103aにおいて排除(拒否)される。
リクエスト処理部404は、リクエスト解析部402の解析結果に基づいて、ユーザ端末101から送信されたリクエストに関する処理を実行する。リクエスト処理部404は、サービス処理部103eに対して、ユーザ端末101から送信されたリクエストに関する処理の実行を依頼(通知)してもよい。
リクエスト処理部404は、ユーザ端末101から送信されたリクエストが認証処理に関するリクエストである場合、認証に関する処理を実行する。係る認証に関する処理は、例えば、BMC103(Webサーバ103a)に対するログイン認証、認証済みセッションを表すCookieの生成、及び、CSRFトークンの生成等の処理を含んでもよい。なお、係るCSRFトークンは、CSRFトークン認証部403において生成されてもよい。
また、リクエスト処理部404は、ユーザ端末101から受信したリクエストに含まれるCSRFトークンが正常ではない場合、係るリクエストに関する処理を拒否する(実行しない)。
次に、レスポンス返却部405は、リクエスト処理部404における処理の結果を用いて、ユーザ端末101に送信するレスポンス(HTTPレスポンス)を生成する。上記したように、CSRFトークンが正常ではない場合、レスポンス返却部405は、ユーザ端末101に対して、エラーを表すレスポンスを生成する。なお、生成されたレスポンスは、通信部401によりユーザ端末101に送信される。
Webサーバ103aは、ユーザ端末101からのリクエストに応じて、コンテンツ103b、スクリプト103c、及び、第2のクライアント103dを、ユーザ端末101に送信可能である。コンテンツ103b、スクリプト103c、及び、第2のクライアント103dは、BMC103における、図示しない記憶装置に保持されていてもよい。
コンテンツ103bは、上記説明したWebクライアント101bを含む、任意のコンテンツである。スクリプト103cは、上記説明したスクリプト101cと同様である。なお、スクリプト103cは、コンテンツ103bの一部に含まれてもよい。第2のクライアント103dは、上記説明した第2のクライアント101dと同様である。
ユーザ端末101から送信される、コンテンツ103b、スクリプト103c、又は、第2のクライアント103dの取得を要求するリクエストに関して、Webサーバ103aは、CSRFトークンを検証してもよい。
サービス処理部103eは、ユーザ端末101から送信された各種リクエストに応じて、サーバ装置102に対する各種制御を実行する。サービス処理部103eは、例えば、ユーザ端末101から送信された、BMC103に対する制御コマンドを実行し、係る実行結果をWebサーバ103aに通知してもよい。
次に、上記のように構成された、本実施形態におけるユーザ端末101、及び、サーバ装置102の動作について、図5乃至図7を参照して説明する。以下においては、ユーザ104の要求に基づいて、Webクライアント101b及びスクリプト101cが、サーバ装置102からユーザ端末101に取得されていることを仮定する。この場合、例えば、ユーザ104が、Webブラウザ101aを用いて、Webサーバ103aから、Webクライアント101b(コンテンツ103b)及びスクリプト101c(スクリプト103c)を取得してもよい。
図5は、本実施形態におけるユーザ端末101及びサーバ装置102の動作を例示するシーケンス図である。より具体的には、図5は、Webクライアント101bとWebサーバ103aとの間における認証処理(Cookie及びCSRFトークンの取得処理を含む)のシーケンスと、Webクライアント101bからの、CSRFトークンを含むリクエストの発行(送信)処理のシーケンスに関する具体例を例示する。
まず、ユーザ104は、ユーザ端末101を用いて、サーバ装置102(特には、Webサーバ103a)へのアクセスする(ステップS501)。より具体的には、ユーザ104は、Webクライアント101bを用いて、Webサーバ103aにアクセスする処理を実行する。この場合、ユーザ104は、例えば、Webブラウザ101aを介して、Webクライアント101bを操作してもよい。
Webクライアント101bは、Webサーバ103aに対して、Webサーバに対するアクセス要求を送信する(ステップS502)。以下においては、Webクライアント101bが、Webサーバ103aにおける認証を要するコンテンツに対するアクセスを要求したことを仮定する。
係るアクセス要求に対して、Webサーバ103aはレスポンスを生成し、係るレスポンスをWebクライアント101bに送信する(ステップS503)。この場合、係るレスポンスは、例えば、Webサーバ103aにおいて必要とする認証情報の入力を、Webクライアント101bに求めるものであってもよい。より具体的には、例えば、Webサーバ103aは、ログイン認証において必要とする認証情報を入力させるコンテンツ(例えば認証ページ等)を、Webクライアント101bに送信してもよい。
次に、Webクライアント101bは、Webサーバ103aに対して、認証情報を含む認証要求を送信する(ステップS504)。
係る認証要求を受信したWebサーバ103aは、ログイン認証処理(ステップS505)を実行する。この場合、Webサーバ103aは、Webクライアント101bから送信された認証情報に基づいて、Webクライアント101bからのログインを許可するか否かを判定してもよい。
Webサーバ103aは、ステップS505におけるログイン認証処理が成功した場合、Webクライアント101bとの間のセッションが認証済みであることを表すCookieを生成する(ステップS506)。
Webサーバ103aは、ステップS505におけるログイン認証処理が成功した場合、Webクライアント101bとの間で送受信されるリクエストの正当性を表す情報であるCSRFトークンを生成する(ステップS507)。
ステップS505乃至ステップS507における処理を実行した後、Webサーバ103aは、Webクライアント101bに対して、Cookie及びCSRFトークンを返却する(ステップS508)。より具体的には、Webサーバ103aは、Webクライアント101bに対して、Cookie及びCSRFトークンを含むレスポンスを送信する。
係るレスポンスを受信したWebクライアント101bは、当該レスポンスに含まれるCookieを保存する(ステップS509)。具体的には、Webクライアント101bは、Webブラウザ101aに対して、係るCookieを書き込む(保持させる)。Webブラウザ101aにCookieを保持させる方法は周知であることから、詳細な説明は省略する。
また、Webクライアント101bは、Webサーバ103aから受信したレスポンスに含まれるCSRFトークンを保持する(ステップS510)。Webクライアント101bは、Webサーバ101aからレスポンスとして受信した、CSRFトークンを含むコンテンツ自体を保持してもよい。また、Webクライアント101bは、係るコンテンツからCSRFトークンを抽出して、係るCSRFトークンを保持してもよい。
図5に例示する具体例においては、Webクライアント101bがステップS502乃至S510の処理を実行するが、係る処理は、Webブラウザ101aが実行してもよい。この場合、Webブラウザ101aは、Webサーバ103aから、Cookie及びCSRFトークンが設定されたレスポンスとして、Webクライアント101b(及びスクリプト101c)を含むコンテンツを受信してもよい。
上記ステップS501乃至S510の後、ユーザ104が、ユーザ端末101を用いて、Web操作を実行する(ステップS511)。ユーザ104は、係るWeb操作として、例えば、第2のクライアント103dの取得を要求してもよい。
次に、Webクライアント101bは、ステップS511におけるWeb操作の内容に応じて、Cookie及びCSRFトークンを含むHTTPリクエストを生成する(ステップS512)。即ち、ステップS511以降のWeb操作に伴い、Webサーバ103aに送信されるリクエストには、CSRFトークンが付加される。
次に、Webクライアント101bは、ステップS512において生成したHTTPリクエストを、Webサーバ103aに送信する(ステップS513)。
Webサーバ103aは、ステップS513において送信されたリクエストに含まれる、CSRFトークンを認証(検証)する(ステップS514)。Webサーバ103aは、ステップS507において発行したCSRFトークンと、ステップS513において送信されたリクエストに含まれるCSRFトークンとが一致した場合に、当該リクエストを正当なリクエストとして認証してもよい(認証成功)。
ステップS514においてCSRFトークンを認証した結果、正当なリクエストである場合、Webサーバ103aは、係るリクエストに関する処理を実行する(ステップS515)。
次に、Webサーバ103aは、ステップS515における処理の結果に基づいてレスポンスを生成し、係るレスポンスをWebクライアント101bに返却(送信)する(ステップS516)。
Webクライアント101bは、ステップS516において送信されたレスポンスを受信する(ステップS517)。係るレスポンスは、例えば、Webブラウザ101aに表示されてもよい。
以上説明したステップS501乃至ステップS517は、CSRF対策が実施されたWebサーバ103aと、Webクライアント101bとの間で実行される、リクエスト及びレスポンスの送受信処理である。
次に、図6を参照して、CSRF攻撃により、Webブラウザ101aから、Webサーバ103aに対して直接リクエストが発行される場合の動作について説明する。以下の説明においては、Webクライアント101b(あるいはWebブラウザ101a)と、Webサーバ103aとの間で認証処理が実行済みであることを仮定する(ステップS601)。係る認証処理は、例えば、図5におけるステップS502乃至S510と同様としてよい。
まず、ユーザ104の操作により、意図しない不正なHTTPリクエストの送信がWebブラウザに通知される(ステップS602)。例えば、ユーザ104が、攻撃者が用意した攻撃用のリンクに誤ってアクセスすることにより、不正なHTTPリクエストが実行される。
係るHTTPリクエストが実行された場合、Webブラウザ101aは、Webブラウザ101aにおいて保持しているCookieを含むリクエストを生成する(ステップS603)。そして、Webブラウザ101aは、係るリクエストを、HTTPリクエストとしてWebサーバ103aに発行(送信)する(ステップS604)。上記ステップS603乃至ステップS604の処理によって、Webブラウザ101aが保持するCookieは、不正なHTTPリクエストに利用されてしまう。しかしながら、通常不正なHTTPリクエスト操作においては、正しいCSRFトークンが不明であることから、ステップS603において生成されるリクエストには、正しいCSRFトークンが含まれない。
ステップS604において送信されたリクエストを受信したWebサーバ103aは、係るリクエストに対するCSRF認証処理を実行する(ステップS605)。係る処理は、図5におけるステップS514と同様としてよい。
この場合、Webサーバ103aは、ステップS604において送信されたリクエストに含まれるCSRFトークンと、Webクライアント101b(あるいはWebブラウザ101a)に対してCSRFトークンとが一致しないことを確認する。結果として、Webサーバ103aは、係るリクエストが正当なリクエストではないと判定する。Webサーバ103aは、ステップS604において送信されたリクエストにCSRFトークンが含まれない場合も、係るリクエストが正当なリクエストではないと判定してよい。これにより、Webサーバ103aは、不正なHTTP操作に伴うリクエストを排除する。
次に、Webサーバ103aは、受信したリクエストが不正であることを表すレスポンスをWebブラウザ101aに通知する(ステップS606)。Webブラウザ101aは、Webサーバ103aからのレスポンスに基づいて、リクエストが失敗した場合の処理を実行する(ステップS607)。この場合、Webブラウザ101aは、例えば、リクエストの失敗を表すコンテンツを表示してもよい。
以上説明した動作により、正しいCSRFトークンを保持するWebクライアント101以外からの不正なリクエストが、Webサーバ103aにおいて排除される。
次に、図7を参照して、本実施形態における第2のクライアント101dを用いた、Webサーバ103aに対するリクエストの送信について説明する。以下の説明においては、Webクライアント101b(あるいはWebブラウザ101a)と、Webサーバ103aとの間で認証処理が実行済みであることを仮定する(ステップS701)。係る認証処理は、例えば、図5におけるステップS502乃至S510と同様としてよい。
まず、ユーザ104は、ユーザ端末101を用いて、第2のクライアント101dを取得する操作を実行する(ステップS702)。
係る操作を受け付けたWebクライアント101bは、Webサーバ103aに対して、第2のクライアント101d(BMC103が保持する第2のクライアント103d)の取得(ダウンロード)を要求するリクエストを送信する(ステップS703)。なお、この際送信されるリクエスト(HTTPリクエストにもCSRFトークンが付与されてよく、Webサーバ103aは係るCSRFトークンを認証(検証)してもよい。
ステップS703において送信されたリクエストを受け付けたサーバ103aは、BMC103が保持する第2のクライアント103dを、レスポンスとして送信する(ステップS704)。
次に、Webクライアント101bは、Webサーバ103aから取得した第2のクライアントを起動する(ステップS705)。具体的には、Webクライアント101bが、スクリプト101cを実装された機能(図2における203)を実行することにより、第2のクライアント101dを実行する。この際、Webクライアント101bは、認証処理(ステップS701)においてWebサーバ103aより発行されたCookie及びCSRFトークンを、第2のクライアント101dに提供する。具体的には、Webクライアント101bは、Cookie及びCSRFトークンを起動時のパラメータ(引数)として、第2のクライアント101dを実行(起動)してもよい。また、第2のクライアント101dは、スクリプト101cを参照することにより、Cookie及びCSRFトークンを取得してもよい。
ステップS705の結果、第2のクライアント101dが実行(起動)される(ステップS706)。
次に、ユーザ104は、第2のクライアント101dに対して、任意のリクエストの送信を要求する操作を実行する(ステップS707)。係るリクエストは、例えば、サーバ装置102に対する各種制御リクエスト(BMC103に対するコマンド)、あるいは、サーバ装置102の情報を取得するリクエスト等を含んでもよい。
次に、第2のクライアント101dは、ステップS707において要求されたリクエストに応じて、Cookie及びCSRFトークンを含むHTTPリクエストを生成する(ステップS708)。即ち、ステップS709において生成されるHTTPリクエストには、正しいCSRFトークンが含まれる。
次に、第2のクライアント101dは、ステップS708において生成されたHTTPリクエストを、Webサーバ103aに対して送信する(ステップS709)。
Webサーバ103aは、ステップS709において送信されたリクエストに含まれる、CSRFトークンを認証(検証)する(ステップS710)。Webサーバ103aは、認証処理(ステップS701)において発行したCSRFトークンと、ステップS709において送信されたリクエストに含まれるCSRFトークンとが一致した場合に、当該リクエストを正当なリクエストとして認証してもよい(認証成功)。
ステップS710においてCSRFトークンを認証した結果、正当なリクエストである場合、Webサーバ103aは、係るリクエストに関する処理を実行する(ステップS711)。
次に、Webサーバ103aは、ステップS711における処理の結果に基づいてレスポンスを生成し、係るレスポンスを第2のクライアント101dに返却(送信)する(ステップS712)。
上記ステップS710乃至S712は、それぞれ図5におけるステップS514乃至S516と同様としてもよい。
次に、第2のクライアント101dは、ステップS712において送信されたレスポンスを受信する(ステップS713)。第2のクライアントは、例えば、係るレスポンスをUIに表示してもよい。
上記説明した処理により、ユーザ104は、Webブラウザ101a及びWebクライアント101bとは独立した第2のクライアント101dを用いて、任意のリクエストをWebサーバ103aに送信可能である。
以上説明した本実施形態におけるユーザ端末101(特には、Webクライアント101b及び第2のクライアント101d)によれば、CSRF対策が実施されたWebサーバ(Webサーバ103a等)に対して、任意のリクエストを送信可能である。なぜならば、CSRF対策が実施されたサーバ装置102(特には、Webサーバ103a)から取得されたセキュアな通信に用いられる情報(CSRFトークン等)が、ユーザ端末101(特には、Webクライアント101b及び第2のクライアント101d)から送信されるリクエストに含まれるからである。上記したように、係るCSRFトークンは、サーバに送信されたリクエストの正当性を表す情報である。
より具体的には、本実施形態によれば、第2のクライアント101dが実行される際、Webクライアント101bからCSRFトークンが提供される。第2のクライアント101dは、係るCSRFトークンを参照することにより、正しいCSRFトークンを含んだリクエストを、Webサーバ103aに送信可能である。これにより、ユーザ端末101からサーバ装置102に送信される各リクエストには、正しいCSRFトークンが含まれる。
また、本実施形態によれば、ユーザ端末101からサーバ装置102に対してリクエストを送信する経路がWebブラウザ101aあるいはWebクライアント101bに限定されない。即ち、本実施形態によれば、Webブラウザ101aあるいはWebクライアント101bとは独立した第2のクライアント101dから、サーバ装置102(特にはWebサーバ103a)に対してリクエストを送信可能である。これより、CSRF攻撃だけでなくクロスサイトスクリプティング(XSS)等、Webブラウザ101aを標的とした他の攻撃に対する安全性が高まる。
以上より、本実施形態によれば、サーバ(サーバ装置102)から提供される、当該サーバに送信されたリクエストの正当性を表す情報を用いることにより、当該サーバに対して任意のリクエストを発行可能な情報処理装置(ユーザ端末101)等を提供可能である。
<第1の実施形態の変形例>
上記説明した第1の実施形態の変形例について説明する。本変形例におけるユーザ端末101、及び、サーバ装置102の機能的な構成は上記第1の実施形態と同様としてよい。
上記説明した第1の実施形態においては、Webクライアント101bは、第2のクライアント101dを実行(起動)する際に、CSRFトークン及びCookie等の情報を提供する。
これに対して、本変形例においては、Webサーバ103aが、第2のクライアント101d(BMC103における第2のクライアント103d)を送信する際(図7におけるステップS704)、係る第2のクライアント101dに、CSRFトークンを設定する(埋め込む)。換言すると、ステップS703及びステップS704においてWebクライアント101bが取得する第2のクライアント101dには、CSRFトークンが含まれている(埋め込まれている)。
以上のように構成された本変形例によれば、上記第1の実施形態と同様、第2のクライアント101dは、設定されたCSRFトークンを参照することで、正しいCSRFトークンを含んだリクエストを、Webサーバ103aに送信可能である。これにより、ユーザ端末101からサーバ装置102に送信される各リクエストに、CSRFトークンが含まれる。また、本変形例は、上記第1の実施形態と同様の構成を有することから、上記第1の実施形態と同様の効果を奏する。
以上より、本実施形態によれば、サーバ(サーバ装置102)から提供される、当該サーバに送信されたリクエストの正当性を表す情報を用いることにより任意のリクエストを発行可能な情報処理装置(ユーザ端末101)等を提供可能である。
<第2の実施形態>
次に、本発明の第2の実施形態について説明する。
図8は、本実施形態における情報処理装置801の機能的な構成を例示するブロック図である。図8に例示するように、本実施形態における情報処理装置801は、第1の通信処理部802と、第2の通信処理部803とを備える。また、情報処理装置801は、サーバ804と任意の通信回線を介して通信可能に接続されている。以下、情報処理装置801の構成要素について説明する。
第1の通信処理部802は、通信回線を介して通信可能に接続されたサーバ804から、当該サーバに送信されたリクエストの正当性を表す第1のトークンを含む通信データを受信する。係る第1の通信処理部802は、例えば、上記第1の実施形態におけるWebクライアント101bと同様としてもよい。
第2の通信処理部803は、上記第1の通信処理部が保持する上記第1のトークンを含む他のリクエストを生成する。そして、第2の通信処理部803は、当該生成したリクエストを、上記サーバに対して送信する。係る第2の通信部803は、通信データを上記サーバに対して送信可能な、上記第1の通信処理部802とは異なる送信手段である。係る第2の通信処理部803は、例えば、上記第1の実施形態における第2のクライアント101dと同様としてもよい。
具体例として、サーバ装置804においてCSRF対策が実施されている場合を仮定する。この場合、第1の通信処理部802は、例えば、当該サーバ804に送信された通信データの正当性を表す情報であるCSRFトークン(第1のトークン)を、サーバ804から受信する。そして、第2の通信処理部803は、上記第1の通信処理具802が受信したCSRFトークンを含むリクエストを生成し、当該生成したリクエストをサーバ804に対して送信する。この場合、第1の通信処理部802は、例えば、係る第1のトークンを保持するとともに、第2の通史処理部803に対して当該第1のトークンを提供してもよい。これにより、第2の通信処理部803は、サーバ804から提供される、サーバ804に対して送信されたリクエストの正当性を表す情報(CSRFトークン)を用いて、任意のリクエストをサーバ804に対して送信可能である。
以上より、本実施形態における情報処理装置801は、サーバ(サーバ804)から提供される、当該サーバに送信されたリクエストの正当性を表す情報を用いることにより、任意のリクエストを発行可能である。なぜならば、上記第1の通信処理部802がサーバ804から受信した第1のトークンを含むリクエストを、上記第2の通信処理部803がサーバ804に対して可能であるからである。
<ハードウェア及びソフトウェア・プログラム(コンピュータ・プログラム)の構成>
以下、上記説明した各実施形態を実現可能なハードウェア構成について説明する。
以下の説明において、上記各実施形態において説明したユーザ端末101、情報処理装置801、及びサーバ装置102をまとめて、単に「情報処理装置」と称する。また、ユーザ端末101、情報処理装置801、及びサーバ装置102の構成要素を、単に「情報処理装置の構成要素」と称する。
上記各実施形態において説明した情報処理装置は、専用のハードウェア装置により構成してもよい。その場合、上記各図に示した各構成要素は、一部又は全部を統合したハードウェア(処理ロジックを実装した集積回路等)として実現してもよい。
例えば、各構成要素をハードウェアにより実現する場合、各構成要素は、それぞれの機能を提供可能な集積回路をSoC(System on a Chip)等により実装されてもよい。この場合、例えば、各構成要素が保持するデータは、SoCとして統合されたRAM(Random Access Memory)領域やフラッシュメモリ領域に記憶されてもよい。
また、この場合、各構成要素を接続する通信回線としては、周知の通信バスを採用してもよい。また、各構成要素を接続する通信回線はバス接続に限らず、それぞれの構成要素間をピアツーピアで接続してもよい。
また、上述した情報処理装置は、図9に例示するような汎用のハードウェアと、係るハードウェアによって実行される各種ソフトウェア・プログラム(コンピュータ・プログラム)とによって構成されてもよい。
図9における演算装置901は、汎用のCPU(Central Processing Unit)やマイクロプロセッサ等の演算処理装置である。演算装置901は、例えば後述する不揮発性記憶装置903に記憶された各種ソフトウェア・プログラムを記憶装置902に読み出し、係るソフトウェア・プログラムに従って処理を実行してもよい。例えば、上記各実施形態におけるWebクライアント101b、第2のクライアント101d、Webサーバ103a、第1の通信処理部802、第2の通信処理部803等は、演算装置901により実行されるソフトウェア・プログラムとして実現可能である。
記憶装置902は、演算装置901から参照可能な、RAM等のメモリ装置であり、ソフトウェア・プログラムや各種データ等を記憶する。なお、記憶装置902は、揮発性のメモリ装置であってもよい。
不揮発性記憶装置903は、例えば磁気ディスクドライブや、フラッシュメモリによる半導体記憶装置のような、不揮発性の記憶装置である。不揮発性記憶装置903は、各種ソフトウェア・プログラムやデータ等を記憶可能である。
ネットワークインタフェース906は、通信ネットワークに接続するインタフェース装置であり、例えば有線及び無線のLAN(Local Area Network)接続用インタフェース装置等を採用してもよい。上記各実施形態において、ユーザ端末101はネットワークインタフェース906を介して、サーバ装置102と接続されてもよい。また、情報処理装置801は、ネットワークインタフェース906を介して、サーバ804と接続されてもよい。
ドライブ装置904は、例えば、後述する記憶媒体905に対するデータの読み込みや書き込みを処理する装置である。
記憶媒体905は、例えば光ディスク、光磁気ディスク、半導体フラッシュメモリ等、データを記録可能な任意の記録媒体である。
入出力インタフェース907は、外部装置との間の入出力を制御する装置である。
上述した各実施形態を例に説明した本発明は、例えば、図9に例示したハードウェア装置により情報処理装置を構成し、係るハードウェア装置に対して、上記各実施形態において説明した機能を実現可能なソフトウェア・プログラムを供給することにより実現されてもよい。この場合、係る装置に対して供給したソフトウェア・プログラムを、演算装置901が実行することによって、本発明が実現されてもよい。
上述した各実施形態において、上記各図(例えば、図1、図3、図4、及び図8)に示した各部は、上述したハードウェアにより実行されるソフトウェア・プログラムの機能(処理)単位である、ソフトウェアモジュールとして実現することができる。ただし、これらの図面に示した各ソフトウェアモジュールの区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
例えば、上記各部をソフトウェアモジュールとして実現する場合、これらのソフトウェアモジュールを不揮発性記憶装置903に記憶しておき、演算装置901がそれぞれの処理を実行する際に、これらのソフトウェアモジュールを記憶装置902に読み出すよう構成してもよい。
また、これらのソフトウェアモジュールの間は、共有メモリやプロセス間通信等の適宜の方法により、相互に各種データを伝達できるように構成してもよい。このような構成により、これらのソフトウェアモジュールの間は、相互に通信可能に接続可能である。
更に、上記各ソフトウェア・プログラムを記憶媒体905に記録しておき、上記通信装置等の出荷段階、あるいは運用段階等において、適宜ドライブ装置904を通じて当該ソフトウェア・プログラムを不揮発性メモリ903に格納するよう構成してもよい。
なお、上記の場合において、上記情報処理装置への各種ソフトウェア・プログラムの供給方法は、出荷前の製造段階、あるいは出荷後のメンテナンス段階等において、適当な治具を利用して当該装置内にインストールする方法を採用してもよい。また、各種ソフトウェア・プログラムの供給方法は、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用してもよい。
そして、このような場合において、本発明は、係るソフトウェア・プログラムを構成するコード、あるいは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
また、上述した情報処理装置、あるいは、当情報処理装置の構成要素は、図9に例示するハードウェア装置を仮想化した仮想化環境と、当該仮想化環境において実行される各種ソフトウェア・プログラム(コンピュータ・プログラム)とによって構成されてもよい。この場合、図9に例示するハードウェア装置の構成要素は、当該仮想化環境における仮想デバイスとして提供される。なお、この場合も、図9に例示するハードウェア装置を物理的な装置として構成した場合と同様の構成にて、本発明を実現可能である。
以上、本発明を、上述した模範的な実施形態に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。更に、上述した各実施形態、あるいは、係る変更又は改良を加えた新たな実施形態を組み合わせた実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、特許請求の範囲に記載した事項から明らかである。