情報処理装置、情報処理方法、及びプログラム
【課題】 データベースを内部に持つシステムにおいて、悪意のクラッカによるSQLインジェクションへの対策漏れが発生すると、SQLインジェクションによって不適切なデータ操作命令が発行され情報漏洩、データ破壊が発生してしまう。
【解決手段】 データ操作命令の簡約で用いる簡約規則の危険性を適切に判断し、不正な意図をもったデータ操作を制限することで、データベースの安全性を確保する。
【解決手段】 データ操作命令の簡約で用いる簡約規則の危険性を適切に判断し、不正な意図をもったデータ操作を制限することで、データベースの安全性を確保する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースを改ざんしたりデータベースから不正に情報を入手したりする攻撃への対策を行う情報処理方法、装置、及びプログラムに関するものである。
【背景技術】
【0002】
近年、ストレージや記録メディアの大容量化が進み、比較的小規模な機器においても検索などのデータ処理負荷が増大しつつある。サーバなどの大規模システムにおいては、データ処理負荷の増大に対応するため、データベースマネジメントシステム(DBMS)が考案されており、アプリケーションはデータベースを使用してシステムを構築するのが一般的である。DBMSは、データの形式や利用手順を標準化し、特定のアプリケーションからデータベースを独立させることができる。
【0003】
機器などの小規模システムにおいてもデータベースの使用が提唱され、組込み機器に向いたデータベース(組込みデータベース)が多数提案され利用されるようになってきている。
【0004】
データベースは、大量のデータセットに対して複雑なデータ操作をSQL等のデータアクセス言語で簡単に記述でき手軽に取り扱えるようにしている。そのため、アプリケーションの開発負荷が軽減できる。反面、アプリケーションを通して、データベースの内部のデータまでSQLで簡単に操作可能となり、セキュリティの観点からは秘匿性が下がり、不正に情報取得されるなど危険な面もある。SQLインジェクションはそのひとつの例である。
【0005】
SQLインジェクションは、「ユーザは必ず正しい(こうあってほしい)文字列を入力する」という思い込みに基づいて、開発者がアプリケーションプログラムをコーディングしてしまうことから発生する。悪意を持ったシステムクラッカは、アプリケーションがアクセスするデータベースが、最も一般的な言語であるSQLで操作できることを想定している。そこで、アプリケーションのユーザ入力プロンプトに対してSQL文の一部になる文字列を入力する。アプリケーションが、その文字列を選別せずにSQL文に連接するようになっている場合、クラッカは、不正な意図をもったSQL文がデータベースに対して実行されることを狙っている。SQLインジェクションによって、クラッカは、ユーザ認証をすり抜けたり、データベース中の権限のないデータを網羅的に入手したり、あるいは、都合の悪いデータを破壊するなど、不正な行為を行う。
このようなSQLインジェクションへの対抗方法はこれまでにも多数提案されてきた。
【0006】
最も標準的な方法は、ユーザ入力文字列中の特殊文字を必ずエスケープして使用する、あるいは、ユーザ入力文字列をプレースホルダ化する、というものである。プレースホルダとは、SQL文中のユーザ入力文字列がはいるべき位置に通例「?」で表記するシンボルを代入しておき、ユーザ入力文字列をパラメータとして、実行時に前記のシンボルにバインドするという処理方法である。バインドされる値は、リテラルとして扱われる。エスケープとプレースホルダ化の手法によってほとんどのSQLインジェクションは回避できる。
【0007】
しかし、現実には対策漏れを犯す開発者が必ず存在する。対策漏れが起こると、Webアプリケーションの事例では、ユーザデータが市中に流出する社会問題を引き起こした。事後システム改変、ユーザへの謝罪・賠償、風評被害による売上減等により数十億円の損害を被ったこともある。
このような対策漏れによる損害を回避するために、予めアプリケーションプログラム側の脆弱性を検出するシステムも従来から存在した。
【0008】
例えば特許文献1は、アプリケーションプログラムの実行状況を監視して、不正なSQLインジェクションの可能性のある文字列操作を適正なSQL文に改変して実行するものである。アプリケーションプログラムの実行状況を監視して、固定でなくSQLインジェクションの可能性のある部分文字列が、SQL文に追加されるプログラムコード実行個所を検出する。そして、固定でない部分文字列をパラメータとして処理するSQL文に改変して実行する。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2009−129128号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
エスケープとプレースホルダ化によるインジェクション対策手法は、人間がたまたまアプリケーションプログラム中で対策を忘れた場合には、損害が発生してしまうという欠点がある。
【0011】
また〔特許文献1〕による対策では、SQLインジェクションの可能性のある文字列をパラメータ化した定型コマンド文を、その文字列の意味を解釈せずに、動的に作成してしまっている。入力文字列が不正な意図をもっているか適切に判断していない。そのため、例えば、入力文字列のデータ操作条件が不正で、実行してはならないのか、若しくは通常あり得るデータ操作条件なので実行しても良いのか区別できない。また、権限のあるユーザの入力文字列に、特殊なデータベース操作命令が含まれる場合にはそのデータベース操作命令を許可するなど柔軟な対応ができない。
【0012】
本発明は、上記の問題点に鑑みてなされたものであり、不正な意図をもったSQLインジェクションを適切に判断して、データベース操作を制限する情報処理装置及びその方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明に係る情報処理装置は、以下の構成を備える。即ち、データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段。
【発明の効果】
【0014】
本発明によれば、データ操作命令の危険性を柔軟に判断するため、不正な意図をもったデータ操作を制限し、データベースの安全性を高めることができる。
【図面の簡単な説明】
【0015】
【図1】本実施形態のデータ処理装置の全体構成を示すブロック図である。
【図2】本実施形態のデータ処理装置におけるログイン画面、及びログイン許可処理を実現するSQL文の例を示した図である。
【図3】本実施形態のデータ処理装置におけるログ一覧画面、及びログ一覧作成処理を実現するSQL文の例を示した図である。
【図4】本実施形態のデータ処理装置のログイン画面及びログ一覧画面におけるSQLインジェクション攻撃の例を示した図である。
【図5】本実施形態のデータ処理装置におけるユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。
【図6】本実施形態のデータ処理装置が受け付けるSQL文の文法の例を示した図である。
【図7】本実施形態のデータ処理装置におけるSQL文を構文解析した結果の構文解析木の構成と簡約の例を示した図である。
【図8】本実施形態のデータ処理装置におけるSQL中間言語、及び、SQL文からの変換例を示した図である。
【図9】本実施形態のデータ処理装置におけるSQL中間言語の簡約の例を示した図である。
【図10】本実施形態のデータ処理装置における構文解析木簡約規則、及び、命令系列簡約規則の例を示した図である。
【図11】本実施形態のデータ処理装置における高危険性リストの例を示した図である。
【図12】本実施形態のデータ処理装置全体の処理手順の一例を示すフローチャートである
【図13】ログイン処理の処理手順の一例を示すフローチャートである。
【図14】ログ一覧表示処理の処理手順の一例を示すフローチャートである。
【図15】実施形態1に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図16】本実施形態のデータ処理装置における外部生成中間言語テーブルの構成の例を示した図である。
【図17】実施形態2に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図18】実施形態3に係るデータベース処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0016】
<実施形態1>
以下、図面を参照しながら本発明に好適な実施形態を詳細に説明する。
【0017】
図1は、本実施形態のデータ処理装置の構成を示すブロック図である。
図示の構成において、CPU1―1はマイクロプロセッサであり、ログイン処理、ログ一覧表示処理、画面制御処理、コピー処理、プリント処理、スキャン処理等のための演算、論理判断等を行い、バスを介してバスに接続された各デバイスを制御する。
【0018】
BUS1―7はバスであり、マイクロプロセッサCPU1―1の制御対象である各デバイスを指示するアドレス信号、コントロール信号を転送する。また、各デバイス間のデータ転送を行う。
入力部1―2はボタン、タッチパネル、キーボード、マウス等であり、オペレータが各種の指示を行う。
表示部1―3は液晶ディスプレイ等である。
読取部1―4はスキャナである。原稿を読み取って電子データに変換する。
印刷部1―5はプリンタである。電子データを紙に印刷出力する。読取部1―4で読み取った原稿の電子データをそのまま印刷部1―5で紙に印刷出力すれば、原稿のコピー機能が実現できる。
通信部1―6はネットワークコントローラである。通信回線を介して外部とのデータ交換を行う。
【0019】
ROM1―8は読出専用の不揮発性メモリである。マイクロプロセッサCPU1―1によるブートプログラム、及び各種処理で使用する初期データ等を記憶する。ブートプログラムはシステム起動時に初期データをRAM1―9にロードし、マイクロプロセッサCPU1―1に制御プログラムを実行させる。制御プログラムについては、後にフローチャートを参照して詳述する。
【0020】
RAM1―9は読み書き可能なランダムアクセスメモリであって、各デバイスからの各種データの一次記憶に用いる。中間言語を実行するためのスタック、処理に必要なデータを一時記憶する各種ワーク領域、表示に必要な表示データを一時記憶するバッファ等、処理中に値変更が行われる各種データが格納される。
【0021】
HDD1―10はハードディスクである。大量のデータを変更可能に記憶するためのものであり、SSD等で構成することもできる。マイクロプロセッサCPU1―1により実行される制御プログラム等もここに格納され、必要に応じてRAM1―9に示す主記憶にロードされ実行される。本データ処理装置で使用するユーザリストテーブル、ログテーブル、カウンタテーブル、SQL文法、構文解析木簡約(縮退)規則、命令系列簡約(縮退)規則、高危険性リスト、外部生成中間言語テーブル等が格納され、必要に応じて内容が修正される。
【0022】
かかる各デバイスからなる本データ処理装置は、入力部1―2等からの各種イベントに応じて作動するものである。入力部1―2等からのインタラプトが供給されるとインタラプト信号がマイクロプロセッサCPU1−1に送られる。それに伴ってイベントが発生し、イベントに応じてCPU1−1がROM1−8またはRAM1−9内に記憶されている各種命令を読み出し、CPU1−1の実行によって各種の制御が行われる。
【0023】
尚、実施形態1のデータ処理装置のCPUはプログラムを実行することで各種の手段として機能する。なお、CPUと協調して動作するASICなどの制御回路がこれらの手段として機能してもよい。また、CPUと制御回路との協調によってこれらの手段が実現されてもよい。また、CPUは単一のものである必要はなく、複数であってもよい。この場合、複数のCPUは分散して処理を実行する。また、複数のCPUは単一のコンピュータに配置されていてもよいし、物理的に異なる複数のコンピュータに配置されていてもよい。なお、CPUがソフトウェアを実行することで実現する手段が専用の回路によって実現されてもよい。
【0024】
図2は、ログイン画面、及び、ログイン許可処理を実現するSQL文の例を示した図である。画面はタッチパネルになっており、タッチによって対応するアクションを指示できる。ログイン画面の例を図2(a)に示している。画面2−1はログイン画面である。入力欄2−1−1はユーザIDをオペレータに入力させる入力欄である。この例では「17412」と入力している。入力欄2−1−2はパスワードの入力欄である。ユーザIDと対応づけられたパスワードの入力を要求する。入力後、2−1−3で示す確認ボタンを選択(タッチなど)することによりユーザ認証が開始される。ユーザIDとパスワードが整合しているかがユーザリストテーブルで管理されている値と照合することにより確認され、正当ユーザであるかどうかが判断される。
【0025】
このログイン画面のユーザ認証を実現するためのSQL文の例を図2(b)に示す。SQL文2−2は入力された値とユーザID・パスワードが一致するユーザリストテーブルの行をセレクトするSQL文である。セレクトされた行が存在すればユーザ認証成功を意味し、ログインが許可される。セレクトされた行が存在しなければユーザ認証失敗であり、ログインは拒絶される。このようにSQL文を使用すれば複雑なデータ操作処理が簡単に記述できることが分かる。
【0026】
ログ一覧取得要求画面の例を図3(a)に示している。画面3−1はログ一覧取得要求画面である。入力欄3−1−1はログ一覧を表示させるユーザ名をオペレータに入力させる入力欄である。この例では木村さんが行った操作の一覧がほしいので「木村」と入力している。データ入力終了後、ボタン3−1−2を選択(タッチなど)することによりログ一覧表示処理が開始される。
【0027】
ログ一覧を取得するためのSQL文の例を図3(b)に示す。SQL文3−2は入力された値とユーザ名が一致するログテーブルの行をセレクトするSQL文である。セレクトされた行をログ一覧として表示することになる。
【0028】
ログ一覧表示された画面の例を図3(c)に示している。画面3−3はログ一覧画面である。ログ一覧3−3−1では、ログ情報がユーザID、ユーザ名、操作内容、日時と共にリスト表示されている。ボタン3−3−2は確認ボタンであり、選択(タッチなど)すると一覧表示が消え、再びログ一覧画面3−1が表示されることになる。
【0029】
SQLインジェクション攻撃の例を図4に示す。ログイン画面でのパスワード認証をすり抜ける攻撃例を図4(a)に示す。画面4−1は攻撃を受けているログイン画面の例を示している。悪意を持ったクラッカは、入力欄4−1−1にユーザIDとして「17412」、入力欄4−1−2にパスワードとして「’OR‘A’=‘A」と入力している。この入力を、図2で説明したSQL文の対応する個所に機械的に代入すると、SQL文4−2のようになり、パスワード部分の論理式が常に真となることが分かる。すなわち、このSQL文はユーザリストテーブルからパスワードの如何に関わらずユーザID「17412」の行のリストをセレクト結果として出力することになる。これはログインアプリケーションにとっては、パスワードを無視してユーザ認証が成功しログインが許可されることを意味する。クラッカはこの手法により不正にログインしようとしている。
【0030】
ログ一覧画面におけるログテーブル削除攻撃の例を図4(b)に示す。画面4−3は攻撃を受けているログ一覧画面である。悪意のクラッカは、入力欄4−3−1にユーザ名として「木村’;」に続けて任意のSQL文(この場合はテーブルの削除)を入力している。この入力を、図3で説明したSQL文の対応する個所に機械的に代入すると、SQL文4−4のようになり、指定されたユーザ名の行をログテーブルからセレクトし、その後カウンタテーブルの削除を実行し、情報破壊しようとしている。これはログ一覧表示アプリケーションにとっては、全く想定しないデータベース処理である。特にカウンタテーブルは本装置でプリント操作等を行う度に値をカウントアップ、記録し、その値に応じてユーザに課金する重要なテーブルである。クラッカはこのテーブルを削除することにより課金を免れようとしている。
【0031】
ログ一覧画面における全情報取得攻撃の例を図4(c)に示す。画面4−5はログ一覧画面である。悪意のクラッカは、入力欄4−5−1にユーザ名として「%」を入力している。この入力を図3で説明したSQL文の対応する個所に機械的に代入するとSQL文4−6ができる。すなわち、このSQL文はログテーブルからユーザ名が任意(%)の行をセレクトすることになる。「%」はいわゆるワイルドカードであり、任意長の文字列と一致することになる。これはログ一覧表示アプリケーションにとってはユーザ名に関わらず全ての行をリスト出力することになる。クラッカに全てのデータが入手され、情報漏洩になってしまう。
【0032】
図5は、ユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。テーブル5−1はユーザリストテーブルである。本装置にログインするユーザの属性を記憶するテーブルである。カラム5−1−1は各ユーザを一意に特定するためのユーザIDを記憶する。各ユーザがログインする際に使用する。カラム5−1−2はユーザ名であり、各ユーザの名称である。カラム5−1−3はパスワードである。各ユーザがログインする際の認証に必要なパスワードを記憶する。パスワードは通例他の人には公開しない。カラム5−1−4はアクセスレベルである。該ユーザがどのレベルのアクセス権限を持っているかを記憶している。例えば、レベル1は最低レベルであり、ごく限られたテーブルのみ変更権限をもっている。レベル5は最高レベルであり、通例、システム管理者に与えられ、あらゆるテーブルを修正できる権限をもっている。
【0033】
テーブル5−2はログテーブルである。本装置で何らかの操作を行った場合にその操作履歴を記録する。カラム5−2−1はログIDであり、各ログを一意に特定するための情報を記憶する。カラム5−2−2は操作者IDであり、ログインして該操作を行ったユーザのユーザIDを記憶する。カラム5−2−3は操作者名であり、ユーザ名を記憶する。カラム5−2−4は日時であり、その操作を行った日時情報を記憶する。カラム5−2−5は場所であり、その操作を行った場所を記憶する。カラム5−2−6は操作種であり、行った操作の種類を記録する。操作種には、印刷、スキャン、コピー、送信などがある。
【0034】
テーブル5−3はカウンタテーブルであり、課金対象の操作(例えば、印刷とコピー)を行ったときにその回数をユーザごとに記録する。カラム5−3−1はユーザIDであり、操作を行ったユーザを記録する。カラム5−3−2はカウンタ値であり、課金対象の操作回数を記録する。
【0035】
図6は、SQL文の文法の例を示した図である。図は文法の表現形式としてBNF(Backus Naur Form)を使用して記述している。BNFで記述された文法は公知の技術(例えば、LR法)によって構文解析が可能である。SQL文が構文解析された後、構文解析木が作成されることになる。
【0036】
SQL文を構文解析して作成される構文解析木の例を図7(a)に、簡約(簡略化することであり、縮退ともいう)の例を図7(b)、(c)に示す。SQL文7−1は構文解析され、構文解析木7−2が作成される。図中の各ノードはオペレータノード(楕円で図示)とオペランドノード(矩形で図示)の区別が示されている。オペレータノードはSQL文の構文要素(“SELECT”、“WHERE”、“DROP TABLE”など)のIDが格納され、オペランドノードには値(“1”など)、あるいは変数(“UserID”など)が格納される。図7(a)に示す構文解析木のうち「1=1」に相当する部分木が、後述する図10(a)に示す構文解析木簡約(縮退)規則番号1に従って、「1」(真)に簡約(縮退)されている。図7(c)は更に「UserID=17411 OR 1」に相当する部分木が、構文解析木簡約(縮退)規則番号3に従って、「1」(真)に簡約(縮退)されている。
【0037】
SQL中間言語命令の例を図8(a)に、SQL文からSQL中間言語への変換例を図8(b)に示す。SQL文のままではコンピュータによる実行ができないが、SQL中間言語は実行形式であり、そのままコンピュータが解釈実行可能な形式である。命令8−1はSQL中間言語命令の例である。実際には何らかの数値で表現されるが、説明上、ニモニック(簡略記憶記号)となる文字列で記述している。またある種の命令にはパラメータが存在するが、図面中では丸括弧で囲まれた英字で表記している。列8−2は命令の動作を記述している。
【0038】
SQL文8−3が、SQL中間言語の命令系列8−4に変換される。実際のフローでは、SQL文に対して構文解析を行って構文解析木を生成し、生成された構文解析木をトップノードから所定規則に従って順次トラバースしながらSQL中間言語コードを生成していくことになる。コンパイラのオブジェクトコード生成などで一般的な手法である。
【0039】
SQL中間言語の簡約(簡略化)の例を図9に示す。図中、中間言語の記述である命令系列中の矩形で囲まれた部分が、図10(b)で後述する命令系列簡約(縮退)規則に従って順次簡約(縮退)されていく。SQL中間言語の命令系列9−1(図8の8−4と同じ)を初期状態として簡約(縮退)していく。太線に囲まれた命令系列が命令系列簡約(縮退)規則番号1に従って命令系列9−2に簡約(縮退)される。命令系列9−2中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号3に従って命令系列9−3に簡約(縮退)される。命令系列9−3中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号4及び5に従って命令系列9−4に簡約(縮退)される。命令系列9−4中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号6に従って命令系列9−5に簡約(縮退)される。最終的に命令系列9−5はSQL文9−6と等価になる。
【0040】
構文解析木簡約(縮退)規則を図10(a)に、命令系列簡約(縮退)規則の例を図10(b)に示す。列10−1−1は適用規則を一意に特定するための規則番号である。列10−1−2は規則を適用する前の部分構文解析木の条件を示す。列10−1−3は規則適用後の簡約(縮退)された部分構文解析木の状態を示す。規則適用により部分解析木が簡約(簡略化)される。列10−1−4はその規則適用によってセキュリティ上の危険性を評価するための危険性判定項目である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理演算が事前計算できる簡約(縮退)というのは、通例そのようなSQLを記述することはまれであるので、危険性の高いSQLであることになり、「高」を設定している。一方、論理演算でない通常の算術演算等の簡約(縮退)は、通常ありうる処理であるので、「低」を設定している。
【0041】
列10−2−1は適用規則を一意に特定するための規則番号である。列10−2−2は規則を適用する前の部分命令系列の条件を示す。列10−2−3は規則適用後の簡約(縮退)された命令系列を示す。規則適用により命令系列が簡約(簡略化)されている。列10−2−4はその規則適用によってセキュリティ上の危険性を評価するための値である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理判断のための命令系列が事前に簡約(縮退)でき、実行結果が固定となるということは、通例そのような命令系列を記述することがまれであるので、危険性の高い命令系列であることになり、「高」を設定している。一方、論理判断でない通常の算術演算等の簡約(縮退)は、通常ありうる処理であるので、「低」を設定している。
【0042】
図11は、高危険性リストの例を示した図である。セキュリティ的に危険性が高いと判断されるべき構文解析木中の構文要素、SQL中間言語命令、パラメータ中の文字列パターンを記述したテーブルである。列11−1はタイプであり、チェック対象が構文解析木中の構文要素か、SQL中間言語中の命令か、あるいはSQL中間言語中のパラメータであるかを示す。本実施形態では、高危険性リスト中のパラメータを危険パラメータ、それ以外を危険ノードとして説明する。列11−2は、構文要素であれば構文要素ID(図中では構文要素名で説明)、命令であれば命令の16進数コード(図中ではニモニックで説明)、パラメータであれば含まれる文字列を示す。
【0043】
図10の危険性が高い規則を適用したかによって、恒真命令の有無をチェックできる。図11ではそれ以外に、データベースを壊すDROP命令や、ワイルドカードである“%”などの有無をチェックする。
【0044】
上述の動作をフローチャートに従って説明する。
【0045】
図12は本実施形態のデータ処理装置の動作、より具体的にはマイクロプロセッサCPU1―1の処理手順を示すフローチャートである。ステップS12−1はシステムの初期化処理であり、各種パラメータの初期化や初期画面の表示等を行う処理である。ステップS12−2はタッチパネル等の入力部1―2から何らかのイベントが発生するのをマイクロプロセッサCPU1―1において待つ処理である。イベントが発生すると、ステップS12−3においてマイクロプロセッサCPU1―1がこのイベントを判別し、イベントの種類に応じて各種の処理に分岐する。各種イベントに対応した分岐先の複数の処理をステップS12−4という形でまとめて表現している。図13で詳述するログイン処理、図14で詳述するログ一覧表示処理はこの分岐先の一部となる。
【0046】
他の処理としては、詳細は記述されないが、ログアウト処理、原稿コピー処理、文書印刷処理、スキャン処理、文書データ管理処理などの処理がある。ステップS12−5は上記の各処理の処理結果や処理終了を通知し、画面を各処理の指示に従って表示する処理である。エラーがあった場合のエラー表示、正常な処理が行われた場合の画面表示への反映など通常広く行われる処理である。
【0047】
図13はステップS12−4の一部であるログイン処理を詳細化したフローチャートである。ステップS13―1において、初期設定が必要な変数、テーブルを初期化する。ステップS13−2において、液晶画面にログイン画面を表示する。ステップS13−3において、図2(a)の例に示す如く、オペレータにユーザIDとパスワードを入力させる。ステップS13−4において、オペレータの入力データ(ユーザID、パスワード)に従ってユーザ認証を行うため、データベースに対するクエリを生成する。実施形態1では、図2(b)の例に示すようなデータベース問い合わせ用のSQL文を生成する。ステップS13−5において、生成されたクエリを図15に詳述するデータベース処理に渡し、クエリを実行する。ステップS13−6において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップS13−10に分岐し、ログイン認証不可の処理を行い、リターンする。ログイン認証不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの処理を含む場合もある。
【0048】
ステップS13−6において、「実行抑止」でない場合は、ステップS13−7において、ユーザ名またはパスワードが入力されていないなどの「エラー」であるかどうかを検証し、「エラー」のときはステップS13−8に分岐する。ステップS13−8において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップS13−3にループする。ステップS13−7において、「エラー」でなかったときは、正常に処理遂行してよいと判断されたことになるので、ステップS13−9において、正常にログインを成功させて、アクセスレベルなどのログイン情報を取得し、リターンする。
【0049】
図14はステップS12−4の一部であるログ一覧表示処理を詳細化したフローチャートである。ステップS14―1において、初期設定が必要な変数、テーブルを初期化する。ステップS14−2において、液晶画面にログ一覧表示画面を表示する。ステップS14−3において、図3(a)の例に示す如く、オペレータに表示ユーザ名を入力させる。ステップS14−4において、オペレータの入力データ(表示ユーザ名)に従って該当するログ一覧を取得するため、データベースに対するクエリを生成する。実施形態1では、図3(b)の例に示すようなデータベース問い合わせ用のSQL文を生成する。ステップS14−5において、生成されたクエリを図15に詳述するデータベース処理に渡し、クエリを実行する。ステップS14−6において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップS14−11に分岐し、ログ一覧不可の処理を行い、リターンする。ログ一覧不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの制限処理を含む。
【0050】
ステップS14−6において、「実行抑止」でない場合は、ステップS14−7において「エラー」であるかどうかを検証し、「エラー」のときはステップS14−8に分岐する。ステップS14−8において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップS14−3にループする。ステップS14−7において、「エラー」でなかったときは、正常に処理を遂行してよいと判断されたことになるので、ステップS14−9において、正常にログ一覧を作成し、ステップS14−10においてログ一覧表示を行い、リターンする。
【0051】
図15は実施形態1に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS15−1において、入力されたSQL文を構文解析し、図7の例に示す如き構文解析木を生成する。ステップS15−2において、生成された構文解析木中の各ノードを調査し、図11の高危険性リストに記載されている危険ノードが含まれるかどうか検査する。検査によって危険性を評価する。ステップS15−3において、危険ノードが含まれる場合は、実行してはいけないのでステップS15−11に分岐し、危険ノードが含まれない場合はステップS15−4に進む。
【0052】
ステップS15−4において、構文解析木に対して図10(a)に示す構文解析木簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより構文解析木中に恒真となる条件式があるかどうかが検査でき、危険性が評価できる。ステップS15−5において、恒真条件式があった場合は、危険性があり実行してはいけないのでステップS15−11に分岐し、恒真条件式がなかった場合にステップS15−6に進む。
【0053】
ステップS15−6において、簡約(縮退)された構文解析木をSQL中間言語に変換し、命令系列を生成する。ステップS15−6でSQL中間言語に変換するのは、コンピュータが解釈実行可能な形式にするためであり、命令系列の簡約(縮退)は行わない。ステップS15−7において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS15−10に分岐する。所定レベル以下のアクセス権限である場合は、ステップS15−8に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真条件式が簡約(縮退)された構文解析木にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップS15−9において、危険パラメータが含まれるときは、危険と見なしてステップS15−11に分岐し、危険パラメータが存在しない場合は、ステップS15−10に進む。
【0054】
ステップS15−10において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS15−11は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0055】
<実施形態2>
これまで述べた実施形態においては、データベース処理への入力は必ずSQL文であり、データベース処理の内部においてSQL文をSQL中間言語に変換していた。これに対し、システム構築時に機器外でSQL文をSQL中間言語に予め変換しておき、機器内のプログラム中ではその中間言語へのリンク情報(IDなど)だけを保持し、それをデータベース処理に渡して実行するという実施形態が考えられる。
【0056】
図16は実施形態2に係る外部生成中間言語テーブルの構成の例を示した図である。外部生成中間言語テーブルは、システム構築時に構成した中間言語の命令系列を保持するテーブルである。列16−1は命令列IDであり、保持している中間言語命令系列を一意に特定する。列16−2は中間言語命令系列である。
【0057】
このような中間言語を実行するために、データベース処理の呼び出し方が実施形態1に対して多少変わってくる。図13のログイン処理、図14のログ一覧表示処理の変更点を説明する。図13のステップS13−4、及び図14のステップS14−4の「DBクエリ生成」において、実施形態1ではSQL文を生成する処理であった。実施形態2では必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理になる。その際、各個所で必要なクエリの命令列IDを保持しておき、命令列IDを指定することで中間言語命令列を取得することになる。
【0058】
またデータベース処理の処理フローが実施形態1の図15から、実施形態2では図17のように変わる。
【0059】
図17は実施形態2に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS17−1において、指定されたSQL中間言語命令系列中の各命令を調査し、図11の高危険性リストに記載されている命令が含まれるかどうか検査し、危険性を評価する。ステップS17−2において、危険命令が含まれる場合は、実行してはいけないのでステップS17−9に分岐し、危険命令が含まれない場合はステップS17−3に進む。
【0060】
ステップS17−3において、命令系列に対して図10(b)の命令系列簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップS17−4において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップS17−9に分岐し、恒真命令系列がなかった場合にステップS17−5に進む。
【0061】
ステップS17−5において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS17−8に分岐する。所定レベル以下のアクセス権限である場合は、ステップS17−6に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真命令系列が簡約(縮退)された中間言語命令系列にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップS17−7において、危険パラメータが含まれるときは、危険と見なしてステップS17−9に分岐し、危険パラメータが存在しない場合は、ステップS17−8に進む。ステップS17−8において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できたので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS17−9は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0062】
このように構成することで「SQL構文解析」「中間言語命令列生成」などの処理を装置内部に保持する必要がなくなるので、より小規模で安価な装置を実現することができる。
【0063】
<実施形態3>
また、これまで述べた実施形態においては、データベースクエリとして、実施形態1はSQL文、実施形態2はSQL中間言語を使用しており、それぞれに対しどちらかの形式に対して危険性を判定していた。これに対し、SQL文とSQL中間言語の両方の形式に対して危険性が判断できるようにし、かつ、危険性のレベルを両者で異なるように判断するという実施形態が考えられる。
【0064】
SQL文はアプリ内の処理において自由に生成することができるが、反面、セキュリティ面での危険性が高いので、後述するようにデータベース処理で厳しい検査を行う。これでは、正当にテーブルをDROP処理したいなど、自由なデータ処理ができないので、その場合はSQL文ではなくSQL中間言語命令系列を使用するようにする。後述するようにSQL中間言語に対するデータベース処理の安全性検査は緩やかであり、自由に処理を記述することができる。これは、中間言語はシステム構築時に事前に準備され、事前にチェックが可能なので、SQLインジェクションの可能性がない安全な命令系列のみで構成することができるからである。
【0065】
実施形態3では、データベース処理の呼び出し方(図13のログイン処理、図14のログ一覧表示処理)が、実施形態1、2に対して多少変わってくる。図13のステップS13−4の「DBクエリ生成」において、ログイン処理はセキュリティ上重要な処理なので、より検査を厳しくし、必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理とする。
【0066】
ログ一覧処理の図14ステップS14−4の「DBクエリ生成」において、これはログイン処理に比べれば比較的安全な処理と考え、実施形態3ではSQL文を生成する処理とする。
図18は実施形態3に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS18−1において、入力がSQL文であるかSQL中間言語命令系列であるか種別を判定し、中間言語であれば、中間言語への変換及びSQL文の危険性のチェックをスキップし、ステップS18−8に分岐する。このように中間言語の場合は、SQL文に対しては通常行われる危険性チェックが例外的にスキップされる。
【0067】
SQL文が入力されたときはステップS18−2に進み、ステップS18−2において、入力されたSQL文を構文解析し、図7の例に示す如き構文解析木を生成する。ステップS18−3において、生成された構文解析木中の各ノードを調査し、図11の高危険性リストに記載されている危険ノードが含まれるかどうか検査し、危険性を評価する。ステップS18−4において、危険ノードが含まれる場合は、実行してはいけないのでステップS18−12に分岐し、危険ノードが含まれない場合はステップS18−5に進む。
【0068】
ステップS18−5において、構文解析木をSQL中間言語に変換し、命令系列を生成する。ステップS18−6において、命令系列に対して図10(b)に示した命令系列簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップS18−6では、SQL文の構文解析木に対して図10(a)に示す構文解析木簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査しても良い。
【0069】
ステップS18−7において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップS18−12に分岐し、恒真命令系列がなかった場合にステップS18−8に進む。
【0070】
ステップS18−8において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS18−11に分岐する。所定レベル以下のアクセス権限である場合は、ステップS18−9に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。ステップS18−10において、危険パラメータが含まれるときは、危険と見なしてステップS18−12に分岐し、危険パラメータが存在しない場合は、ステップS18−11に進む。
【0071】
ステップS18−11において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS18−12は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0072】
このように実施形態3では、処理上不可欠だが危険と見なされうるクエリは事前作成されているSQL中間言語の命令系列で実行することにし、通常のSQL文で記述するクエリは全く危険性がない、必ず実行が許可されるクエリに限定する。このように構成することで、セキュリティ面から危険性のあるクエリを排除しつつ、危険と解釈されうる巧緻なクエリはシステム構築時に事前作成することで、安全かつ融通の利く装置を実現することができる。
【0073】
以上、実施形態を詳述したが、本発明は上述の実施形態に限定されるのではなく、本発明の趣旨を逸脱しない限りにおいて適宜変更が可能である。
【0074】
本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0075】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0076】
CPU マイクロプロセッサ
BUS バス
ROM 読出専用の不揮発性メモリ
RAM 読み書き可能なランダムアクセスメモリ
HDD ハードディスク
【技術分野】
【0001】
本発明は、データベースを改ざんしたりデータベースから不正に情報を入手したりする攻撃への対策を行う情報処理方法、装置、及びプログラムに関するものである。
【背景技術】
【0002】
近年、ストレージや記録メディアの大容量化が進み、比較的小規模な機器においても検索などのデータ処理負荷が増大しつつある。サーバなどの大規模システムにおいては、データ処理負荷の増大に対応するため、データベースマネジメントシステム(DBMS)が考案されており、アプリケーションはデータベースを使用してシステムを構築するのが一般的である。DBMSは、データの形式や利用手順を標準化し、特定のアプリケーションからデータベースを独立させることができる。
【0003】
機器などの小規模システムにおいてもデータベースの使用が提唱され、組込み機器に向いたデータベース(組込みデータベース)が多数提案され利用されるようになってきている。
【0004】
データベースは、大量のデータセットに対して複雑なデータ操作をSQL等のデータアクセス言語で簡単に記述でき手軽に取り扱えるようにしている。そのため、アプリケーションの開発負荷が軽減できる。反面、アプリケーションを通して、データベースの内部のデータまでSQLで簡単に操作可能となり、セキュリティの観点からは秘匿性が下がり、不正に情報取得されるなど危険な面もある。SQLインジェクションはそのひとつの例である。
【0005】
SQLインジェクションは、「ユーザは必ず正しい(こうあってほしい)文字列を入力する」という思い込みに基づいて、開発者がアプリケーションプログラムをコーディングしてしまうことから発生する。悪意を持ったシステムクラッカは、アプリケーションがアクセスするデータベースが、最も一般的な言語であるSQLで操作できることを想定している。そこで、アプリケーションのユーザ入力プロンプトに対してSQL文の一部になる文字列を入力する。アプリケーションが、その文字列を選別せずにSQL文に連接するようになっている場合、クラッカは、不正な意図をもったSQL文がデータベースに対して実行されることを狙っている。SQLインジェクションによって、クラッカは、ユーザ認証をすり抜けたり、データベース中の権限のないデータを網羅的に入手したり、あるいは、都合の悪いデータを破壊するなど、不正な行為を行う。
このようなSQLインジェクションへの対抗方法はこれまでにも多数提案されてきた。
【0006】
最も標準的な方法は、ユーザ入力文字列中の特殊文字を必ずエスケープして使用する、あるいは、ユーザ入力文字列をプレースホルダ化する、というものである。プレースホルダとは、SQL文中のユーザ入力文字列がはいるべき位置に通例「?」で表記するシンボルを代入しておき、ユーザ入力文字列をパラメータとして、実行時に前記のシンボルにバインドするという処理方法である。バインドされる値は、リテラルとして扱われる。エスケープとプレースホルダ化の手法によってほとんどのSQLインジェクションは回避できる。
【0007】
しかし、現実には対策漏れを犯す開発者が必ず存在する。対策漏れが起こると、Webアプリケーションの事例では、ユーザデータが市中に流出する社会問題を引き起こした。事後システム改変、ユーザへの謝罪・賠償、風評被害による売上減等により数十億円の損害を被ったこともある。
このような対策漏れによる損害を回避するために、予めアプリケーションプログラム側の脆弱性を検出するシステムも従来から存在した。
【0008】
例えば特許文献1は、アプリケーションプログラムの実行状況を監視して、不正なSQLインジェクションの可能性のある文字列操作を適正なSQL文に改変して実行するものである。アプリケーションプログラムの実行状況を監視して、固定でなくSQLインジェクションの可能性のある部分文字列が、SQL文に追加されるプログラムコード実行個所を検出する。そして、固定でない部分文字列をパラメータとして処理するSQL文に改変して実行する。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2009−129128号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
エスケープとプレースホルダ化によるインジェクション対策手法は、人間がたまたまアプリケーションプログラム中で対策を忘れた場合には、損害が発生してしまうという欠点がある。
【0011】
また〔特許文献1〕による対策では、SQLインジェクションの可能性のある文字列をパラメータ化した定型コマンド文を、その文字列の意味を解釈せずに、動的に作成してしまっている。入力文字列が不正な意図をもっているか適切に判断していない。そのため、例えば、入力文字列のデータ操作条件が不正で、実行してはならないのか、若しくは通常あり得るデータ操作条件なので実行しても良いのか区別できない。また、権限のあるユーザの入力文字列に、特殊なデータベース操作命令が含まれる場合にはそのデータベース操作命令を許可するなど柔軟な対応ができない。
【0012】
本発明は、上記の問題点に鑑みてなされたものであり、不正な意図をもったSQLインジェクションを適切に判断して、データベース操作を制限する情報処理装置及びその方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明に係る情報処理装置は、以下の構成を備える。即ち、データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段。
【発明の効果】
【0014】
本発明によれば、データ操作命令の危険性を柔軟に判断するため、不正な意図をもったデータ操作を制限し、データベースの安全性を高めることができる。
【図面の簡単な説明】
【0015】
【図1】本実施形態のデータ処理装置の全体構成を示すブロック図である。
【図2】本実施形態のデータ処理装置におけるログイン画面、及びログイン許可処理を実現するSQL文の例を示した図である。
【図3】本実施形態のデータ処理装置におけるログ一覧画面、及びログ一覧作成処理を実現するSQL文の例を示した図である。
【図4】本実施形態のデータ処理装置のログイン画面及びログ一覧画面におけるSQLインジェクション攻撃の例を示した図である。
【図5】本実施形態のデータ処理装置におけるユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。
【図6】本実施形態のデータ処理装置が受け付けるSQL文の文法の例を示した図である。
【図7】本実施形態のデータ処理装置におけるSQL文を構文解析した結果の構文解析木の構成と簡約の例を示した図である。
【図8】本実施形態のデータ処理装置におけるSQL中間言語、及び、SQL文からの変換例を示した図である。
【図9】本実施形態のデータ処理装置におけるSQL中間言語の簡約の例を示した図である。
【図10】本実施形態のデータ処理装置における構文解析木簡約規則、及び、命令系列簡約規則の例を示した図である。
【図11】本実施形態のデータ処理装置における高危険性リストの例を示した図である。
【図12】本実施形態のデータ処理装置全体の処理手順の一例を示すフローチャートである
【図13】ログイン処理の処理手順の一例を示すフローチャートである。
【図14】ログ一覧表示処理の処理手順の一例を示すフローチャートである。
【図15】実施形態1に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図16】本実施形態のデータ処理装置における外部生成中間言語テーブルの構成の例を示した図である。
【図17】実施形態2に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図18】実施形態3に係るデータベース処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0016】
<実施形態1>
以下、図面を参照しながら本発明に好適な実施形態を詳細に説明する。
【0017】
図1は、本実施形態のデータ処理装置の構成を示すブロック図である。
図示の構成において、CPU1―1はマイクロプロセッサであり、ログイン処理、ログ一覧表示処理、画面制御処理、コピー処理、プリント処理、スキャン処理等のための演算、論理判断等を行い、バスを介してバスに接続された各デバイスを制御する。
【0018】
BUS1―7はバスであり、マイクロプロセッサCPU1―1の制御対象である各デバイスを指示するアドレス信号、コントロール信号を転送する。また、各デバイス間のデータ転送を行う。
入力部1―2はボタン、タッチパネル、キーボード、マウス等であり、オペレータが各種の指示を行う。
表示部1―3は液晶ディスプレイ等である。
読取部1―4はスキャナである。原稿を読み取って電子データに変換する。
印刷部1―5はプリンタである。電子データを紙に印刷出力する。読取部1―4で読み取った原稿の電子データをそのまま印刷部1―5で紙に印刷出力すれば、原稿のコピー機能が実現できる。
通信部1―6はネットワークコントローラである。通信回線を介して外部とのデータ交換を行う。
【0019】
ROM1―8は読出専用の不揮発性メモリである。マイクロプロセッサCPU1―1によるブートプログラム、及び各種処理で使用する初期データ等を記憶する。ブートプログラムはシステム起動時に初期データをRAM1―9にロードし、マイクロプロセッサCPU1―1に制御プログラムを実行させる。制御プログラムについては、後にフローチャートを参照して詳述する。
【0020】
RAM1―9は読み書き可能なランダムアクセスメモリであって、各デバイスからの各種データの一次記憶に用いる。中間言語を実行するためのスタック、処理に必要なデータを一時記憶する各種ワーク領域、表示に必要な表示データを一時記憶するバッファ等、処理中に値変更が行われる各種データが格納される。
【0021】
HDD1―10はハードディスクである。大量のデータを変更可能に記憶するためのものであり、SSD等で構成することもできる。マイクロプロセッサCPU1―1により実行される制御プログラム等もここに格納され、必要に応じてRAM1―9に示す主記憶にロードされ実行される。本データ処理装置で使用するユーザリストテーブル、ログテーブル、カウンタテーブル、SQL文法、構文解析木簡約(縮退)規則、命令系列簡約(縮退)規則、高危険性リスト、外部生成中間言語テーブル等が格納され、必要に応じて内容が修正される。
【0022】
かかる各デバイスからなる本データ処理装置は、入力部1―2等からの各種イベントに応じて作動するものである。入力部1―2等からのインタラプトが供給されるとインタラプト信号がマイクロプロセッサCPU1−1に送られる。それに伴ってイベントが発生し、イベントに応じてCPU1−1がROM1−8またはRAM1−9内に記憶されている各種命令を読み出し、CPU1−1の実行によって各種の制御が行われる。
【0023】
尚、実施形態1のデータ処理装置のCPUはプログラムを実行することで各種の手段として機能する。なお、CPUと協調して動作するASICなどの制御回路がこれらの手段として機能してもよい。また、CPUと制御回路との協調によってこれらの手段が実現されてもよい。また、CPUは単一のものである必要はなく、複数であってもよい。この場合、複数のCPUは分散して処理を実行する。また、複数のCPUは単一のコンピュータに配置されていてもよいし、物理的に異なる複数のコンピュータに配置されていてもよい。なお、CPUがソフトウェアを実行することで実現する手段が専用の回路によって実現されてもよい。
【0024】
図2は、ログイン画面、及び、ログイン許可処理を実現するSQL文の例を示した図である。画面はタッチパネルになっており、タッチによって対応するアクションを指示できる。ログイン画面の例を図2(a)に示している。画面2−1はログイン画面である。入力欄2−1−1はユーザIDをオペレータに入力させる入力欄である。この例では「17412」と入力している。入力欄2−1−2はパスワードの入力欄である。ユーザIDと対応づけられたパスワードの入力を要求する。入力後、2−1−3で示す確認ボタンを選択(タッチなど)することによりユーザ認証が開始される。ユーザIDとパスワードが整合しているかがユーザリストテーブルで管理されている値と照合することにより確認され、正当ユーザであるかどうかが判断される。
【0025】
このログイン画面のユーザ認証を実現するためのSQL文の例を図2(b)に示す。SQL文2−2は入力された値とユーザID・パスワードが一致するユーザリストテーブルの行をセレクトするSQL文である。セレクトされた行が存在すればユーザ認証成功を意味し、ログインが許可される。セレクトされた行が存在しなければユーザ認証失敗であり、ログインは拒絶される。このようにSQL文を使用すれば複雑なデータ操作処理が簡単に記述できることが分かる。
【0026】
ログ一覧取得要求画面の例を図3(a)に示している。画面3−1はログ一覧取得要求画面である。入力欄3−1−1はログ一覧を表示させるユーザ名をオペレータに入力させる入力欄である。この例では木村さんが行った操作の一覧がほしいので「木村」と入力している。データ入力終了後、ボタン3−1−2を選択(タッチなど)することによりログ一覧表示処理が開始される。
【0027】
ログ一覧を取得するためのSQL文の例を図3(b)に示す。SQL文3−2は入力された値とユーザ名が一致するログテーブルの行をセレクトするSQL文である。セレクトされた行をログ一覧として表示することになる。
【0028】
ログ一覧表示された画面の例を図3(c)に示している。画面3−3はログ一覧画面である。ログ一覧3−3−1では、ログ情報がユーザID、ユーザ名、操作内容、日時と共にリスト表示されている。ボタン3−3−2は確認ボタンであり、選択(タッチなど)すると一覧表示が消え、再びログ一覧画面3−1が表示されることになる。
【0029】
SQLインジェクション攻撃の例を図4に示す。ログイン画面でのパスワード認証をすり抜ける攻撃例を図4(a)に示す。画面4−1は攻撃を受けているログイン画面の例を示している。悪意を持ったクラッカは、入力欄4−1−1にユーザIDとして「17412」、入力欄4−1−2にパスワードとして「’OR‘A’=‘A」と入力している。この入力を、図2で説明したSQL文の対応する個所に機械的に代入すると、SQL文4−2のようになり、パスワード部分の論理式が常に真となることが分かる。すなわち、このSQL文はユーザリストテーブルからパスワードの如何に関わらずユーザID「17412」の行のリストをセレクト結果として出力することになる。これはログインアプリケーションにとっては、パスワードを無視してユーザ認証が成功しログインが許可されることを意味する。クラッカはこの手法により不正にログインしようとしている。
【0030】
ログ一覧画面におけるログテーブル削除攻撃の例を図4(b)に示す。画面4−3は攻撃を受けているログ一覧画面である。悪意のクラッカは、入力欄4−3−1にユーザ名として「木村’;」に続けて任意のSQL文(この場合はテーブルの削除)を入力している。この入力を、図3で説明したSQL文の対応する個所に機械的に代入すると、SQL文4−4のようになり、指定されたユーザ名の行をログテーブルからセレクトし、その後カウンタテーブルの削除を実行し、情報破壊しようとしている。これはログ一覧表示アプリケーションにとっては、全く想定しないデータベース処理である。特にカウンタテーブルは本装置でプリント操作等を行う度に値をカウントアップ、記録し、その値に応じてユーザに課金する重要なテーブルである。クラッカはこのテーブルを削除することにより課金を免れようとしている。
【0031】
ログ一覧画面における全情報取得攻撃の例を図4(c)に示す。画面4−5はログ一覧画面である。悪意のクラッカは、入力欄4−5−1にユーザ名として「%」を入力している。この入力を図3で説明したSQL文の対応する個所に機械的に代入するとSQL文4−6ができる。すなわち、このSQL文はログテーブルからユーザ名が任意(%)の行をセレクトすることになる。「%」はいわゆるワイルドカードであり、任意長の文字列と一致することになる。これはログ一覧表示アプリケーションにとってはユーザ名に関わらず全ての行をリスト出力することになる。クラッカに全てのデータが入手され、情報漏洩になってしまう。
【0032】
図5は、ユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。テーブル5−1はユーザリストテーブルである。本装置にログインするユーザの属性を記憶するテーブルである。カラム5−1−1は各ユーザを一意に特定するためのユーザIDを記憶する。各ユーザがログインする際に使用する。カラム5−1−2はユーザ名であり、各ユーザの名称である。カラム5−1−3はパスワードである。各ユーザがログインする際の認証に必要なパスワードを記憶する。パスワードは通例他の人には公開しない。カラム5−1−4はアクセスレベルである。該ユーザがどのレベルのアクセス権限を持っているかを記憶している。例えば、レベル1は最低レベルであり、ごく限られたテーブルのみ変更権限をもっている。レベル5は最高レベルであり、通例、システム管理者に与えられ、あらゆるテーブルを修正できる権限をもっている。
【0033】
テーブル5−2はログテーブルである。本装置で何らかの操作を行った場合にその操作履歴を記録する。カラム5−2−1はログIDであり、各ログを一意に特定するための情報を記憶する。カラム5−2−2は操作者IDであり、ログインして該操作を行ったユーザのユーザIDを記憶する。カラム5−2−3は操作者名であり、ユーザ名を記憶する。カラム5−2−4は日時であり、その操作を行った日時情報を記憶する。カラム5−2−5は場所であり、その操作を行った場所を記憶する。カラム5−2−6は操作種であり、行った操作の種類を記録する。操作種には、印刷、スキャン、コピー、送信などがある。
【0034】
テーブル5−3はカウンタテーブルであり、課金対象の操作(例えば、印刷とコピー)を行ったときにその回数をユーザごとに記録する。カラム5−3−1はユーザIDであり、操作を行ったユーザを記録する。カラム5−3−2はカウンタ値であり、課金対象の操作回数を記録する。
【0035】
図6は、SQL文の文法の例を示した図である。図は文法の表現形式としてBNF(Backus Naur Form)を使用して記述している。BNFで記述された文法は公知の技術(例えば、LR法)によって構文解析が可能である。SQL文が構文解析された後、構文解析木が作成されることになる。
【0036】
SQL文を構文解析して作成される構文解析木の例を図7(a)に、簡約(簡略化することであり、縮退ともいう)の例を図7(b)、(c)に示す。SQL文7−1は構文解析され、構文解析木7−2が作成される。図中の各ノードはオペレータノード(楕円で図示)とオペランドノード(矩形で図示)の区別が示されている。オペレータノードはSQL文の構文要素(“SELECT”、“WHERE”、“DROP TABLE”など)のIDが格納され、オペランドノードには値(“1”など)、あるいは変数(“UserID”など)が格納される。図7(a)に示す構文解析木のうち「1=1」に相当する部分木が、後述する図10(a)に示す構文解析木簡約(縮退)規則番号1に従って、「1」(真)に簡約(縮退)されている。図7(c)は更に「UserID=17411 OR 1」に相当する部分木が、構文解析木簡約(縮退)規則番号3に従って、「1」(真)に簡約(縮退)されている。
【0037】
SQL中間言語命令の例を図8(a)に、SQL文からSQL中間言語への変換例を図8(b)に示す。SQL文のままではコンピュータによる実行ができないが、SQL中間言語は実行形式であり、そのままコンピュータが解釈実行可能な形式である。命令8−1はSQL中間言語命令の例である。実際には何らかの数値で表現されるが、説明上、ニモニック(簡略記憶記号)となる文字列で記述している。またある種の命令にはパラメータが存在するが、図面中では丸括弧で囲まれた英字で表記している。列8−2は命令の動作を記述している。
【0038】
SQL文8−3が、SQL中間言語の命令系列8−4に変換される。実際のフローでは、SQL文に対して構文解析を行って構文解析木を生成し、生成された構文解析木をトップノードから所定規則に従って順次トラバースしながらSQL中間言語コードを生成していくことになる。コンパイラのオブジェクトコード生成などで一般的な手法である。
【0039】
SQL中間言語の簡約(簡略化)の例を図9に示す。図中、中間言語の記述である命令系列中の矩形で囲まれた部分が、図10(b)で後述する命令系列簡約(縮退)規則に従って順次簡約(縮退)されていく。SQL中間言語の命令系列9−1(図8の8−4と同じ)を初期状態として簡約(縮退)していく。太線に囲まれた命令系列が命令系列簡約(縮退)規則番号1に従って命令系列9−2に簡約(縮退)される。命令系列9−2中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号3に従って命令系列9−3に簡約(縮退)される。命令系列9−3中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号4及び5に従って命令系列9−4に簡約(縮退)される。命令系列9−4中で太線に囲まれた命令系列は命令系列簡約(縮退)規則番号6に従って命令系列9−5に簡約(縮退)される。最終的に命令系列9−5はSQL文9−6と等価になる。
【0040】
構文解析木簡約(縮退)規則を図10(a)に、命令系列簡約(縮退)規則の例を図10(b)に示す。列10−1−1は適用規則を一意に特定するための規則番号である。列10−1−2は規則を適用する前の部分構文解析木の条件を示す。列10−1−3は規則適用後の簡約(縮退)された部分構文解析木の状態を示す。規則適用により部分解析木が簡約(簡略化)される。列10−1−4はその規則適用によってセキュリティ上の危険性を評価するための危険性判定項目である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理演算が事前計算できる簡約(縮退)というのは、通例そのようなSQLを記述することはまれであるので、危険性の高いSQLであることになり、「高」を設定している。一方、論理演算でない通常の算術演算等の簡約(縮退)は、通常ありうる処理であるので、「低」を設定している。
【0041】
列10−2−1は適用規則を一意に特定するための規則番号である。列10−2−2は規則を適用する前の部分命令系列の条件を示す。列10−2−3は規則適用後の簡約(縮退)された命令系列を示す。規則適用により命令系列が簡約(簡略化)されている。列10−2−4はその規則適用によってセキュリティ上の危険性を評価するための値である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理判断のための命令系列が事前に簡約(縮退)でき、実行結果が固定となるということは、通例そのような命令系列を記述することがまれであるので、危険性の高い命令系列であることになり、「高」を設定している。一方、論理判断でない通常の算術演算等の簡約(縮退)は、通常ありうる処理であるので、「低」を設定している。
【0042】
図11は、高危険性リストの例を示した図である。セキュリティ的に危険性が高いと判断されるべき構文解析木中の構文要素、SQL中間言語命令、パラメータ中の文字列パターンを記述したテーブルである。列11−1はタイプであり、チェック対象が構文解析木中の構文要素か、SQL中間言語中の命令か、あるいはSQL中間言語中のパラメータであるかを示す。本実施形態では、高危険性リスト中のパラメータを危険パラメータ、それ以外を危険ノードとして説明する。列11−2は、構文要素であれば構文要素ID(図中では構文要素名で説明)、命令であれば命令の16進数コード(図中ではニモニックで説明)、パラメータであれば含まれる文字列を示す。
【0043】
図10の危険性が高い規則を適用したかによって、恒真命令の有無をチェックできる。図11ではそれ以外に、データベースを壊すDROP命令や、ワイルドカードである“%”などの有無をチェックする。
【0044】
上述の動作をフローチャートに従って説明する。
【0045】
図12は本実施形態のデータ処理装置の動作、より具体的にはマイクロプロセッサCPU1―1の処理手順を示すフローチャートである。ステップS12−1はシステムの初期化処理であり、各種パラメータの初期化や初期画面の表示等を行う処理である。ステップS12−2はタッチパネル等の入力部1―2から何らかのイベントが発生するのをマイクロプロセッサCPU1―1において待つ処理である。イベントが発生すると、ステップS12−3においてマイクロプロセッサCPU1―1がこのイベントを判別し、イベントの種類に応じて各種の処理に分岐する。各種イベントに対応した分岐先の複数の処理をステップS12−4という形でまとめて表現している。図13で詳述するログイン処理、図14で詳述するログ一覧表示処理はこの分岐先の一部となる。
【0046】
他の処理としては、詳細は記述されないが、ログアウト処理、原稿コピー処理、文書印刷処理、スキャン処理、文書データ管理処理などの処理がある。ステップS12−5は上記の各処理の処理結果や処理終了を通知し、画面を各処理の指示に従って表示する処理である。エラーがあった場合のエラー表示、正常な処理が行われた場合の画面表示への反映など通常広く行われる処理である。
【0047】
図13はステップS12−4の一部であるログイン処理を詳細化したフローチャートである。ステップS13―1において、初期設定が必要な変数、テーブルを初期化する。ステップS13−2において、液晶画面にログイン画面を表示する。ステップS13−3において、図2(a)の例に示す如く、オペレータにユーザIDとパスワードを入力させる。ステップS13−4において、オペレータの入力データ(ユーザID、パスワード)に従ってユーザ認証を行うため、データベースに対するクエリを生成する。実施形態1では、図2(b)の例に示すようなデータベース問い合わせ用のSQL文を生成する。ステップS13−5において、生成されたクエリを図15に詳述するデータベース処理に渡し、クエリを実行する。ステップS13−6において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップS13−10に分岐し、ログイン認証不可の処理を行い、リターンする。ログイン認証不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの処理を含む場合もある。
【0048】
ステップS13−6において、「実行抑止」でない場合は、ステップS13−7において、ユーザ名またはパスワードが入力されていないなどの「エラー」であるかどうかを検証し、「エラー」のときはステップS13−8に分岐する。ステップS13−8において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップS13−3にループする。ステップS13−7において、「エラー」でなかったときは、正常に処理遂行してよいと判断されたことになるので、ステップS13−9において、正常にログインを成功させて、アクセスレベルなどのログイン情報を取得し、リターンする。
【0049】
図14はステップS12−4の一部であるログ一覧表示処理を詳細化したフローチャートである。ステップS14―1において、初期設定が必要な変数、テーブルを初期化する。ステップS14−2において、液晶画面にログ一覧表示画面を表示する。ステップS14−3において、図3(a)の例に示す如く、オペレータに表示ユーザ名を入力させる。ステップS14−4において、オペレータの入力データ(表示ユーザ名)に従って該当するログ一覧を取得するため、データベースに対するクエリを生成する。実施形態1では、図3(b)の例に示すようなデータベース問い合わせ用のSQL文を生成する。ステップS14−5において、生成されたクエリを図15に詳述するデータベース処理に渡し、クエリを実行する。ステップS14−6において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップS14−11に分岐し、ログ一覧不可の処理を行い、リターンする。ログ一覧不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの制限処理を含む。
【0050】
ステップS14−6において、「実行抑止」でない場合は、ステップS14−7において「エラー」であるかどうかを検証し、「エラー」のときはステップS14−8に分岐する。ステップS14−8において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップS14−3にループする。ステップS14−7において、「エラー」でなかったときは、正常に処理を遂行してよいと判断されたことになるので、ステップS14−9において、正常にログ一覧を作成し、ステップS14−10においてログ一覧表示を行い、リターンする。
【0051】
図15は実施形態1に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS15−1において、入力されたSQL文を構文解析し、図7の例に示す如き構文解析木を生成する。ステップS15−2において、生成された構文解析木中の各ノードを調査し、図11の高危険性リストに記載されている危険ノードが含まれるかどうか検査する。検査によって危険性を評価する。ステップS15−3において、危険ノードが含まれる場合は、実行してはいけないのでステップS15−11に分岐し、危険ノードが含まれない場合はステップS15−4に進む。
【0052】
ステップS15−4において、構文解析木に対して図10(a)に示す構文解析木簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより構文解析木中に恒真となる条件式があるかどうかが検査でき、危険性が評価できる。ステップS15−5において、恒真条件式があった場合は、危険性があり実行してはいけないのでステップS15−11に分岐し、恒真条件式がなかった場合にステップS15−6に進む。
【0053】
ステップS15−6において、簡約(縮退)された構文解析木をSQL中間言語に変換し、命令系列を生成する。ステップS15−6でSQL中間言語に変換するのは、コンピュータが解釈実行可能な形式にするためであり、命令系列の簡約(縮退)は行わない。ステップS15−7において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS15−10に分岐する。所定レベル以下のアクセス権限である場合は、ステップS15−8に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真条件式が簡約(縮退)された構文解析木にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップS15−9において、危険パラメータが含まれるときは、危険と見なしてステップS15−11に分岐し、危険パラメータが存在しない場合は、ステップS15−10に進む。
【0054】
ステップS15−10において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS15−11は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0055】
<実施形態2>
これまで述べた実施形態においては、データベース処理への入力は必ずSQL文であり、データベース処理の内部においてSQL文をSQL中間言語に変換していた。これに対し、システム構築時に機器外でSQL文をSQL中間言語に予め変換しておき、機器内のプログラム中ではその中間言語へのリンク情報(IDなど)だけを保持し、それをデータベース処理に渡して実行するという実施形態が考えられる。
【0056】
図16は実施形態2に係る外部生成中間言語テーブルの構成の例を示した図である。外部生成中間言語テーブルは、システム構築時に構成した中間言語の命令系列を保持するテーブルである。列16−1は命令列IDであり、保持している中間言語命令系列を一意に特定する。列16−2は中間言語命令系列である。
【0057】
このような中間言語を実行するために、データベース処理の呼び出し方が実施形態1に対して多少変わってくる。図13のログイン処理、図14のログ一覧表示処理の変更点を説明する。図13のステップS13−4、及び図14のステップS14−4の「DBクエリ生成」において、実施形態1ではSQL文を生成する処理であった。実施形態2では必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理になる。その際、各個所で必要なクエリの命令列IDを保持しておき、命令列IDを指定することで中間言語命令列を取得することになる。
【0058】
またデータベース処理の処理フローが実施形態1の図15から、実施形態2では図17のように変わる。
【0059】
図17は実施形態2に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS17−1において、指定されたSQL中間言語命令系列中の各命令を調査し、図11の高危険性リストに記載されている命令が含まれるかどうか検査し、危険性を評価する。ステップS17−2において、危険命令が含まれる場合は、実行してはいけないのでステップS17−9に分岐し、危険命令が含まれない場合はステップS17−3に進む。
【0060】
ステップS17−3において、命令系列に対して図10(b)の命令系列簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップS17−4において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップS17−9に分岐し、恒真命令系列がなかった場合にステップS17−5に進む。
【0061】
ステップS17−5において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS17−8に分岐する。所定レベル以下のアクセス権限である場合は、ステップS17−6に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真命令系列が簡約(縮退)された中間言語命令系列にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップS17−7において、危険パラメータが含まれるときは、危険と見なしてステップS17−9に分岐し、危険パラメータが存在しない場合は、ステップS17−8に進む。ステップS17−8において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できたので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS17−9は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0062】
このように構成することで「SQL構文解析」「中間言語命令列生成」などの処理を装置内部に保持する必要がなくなるので、より小規模で安価な装置を実現することができる。
【0063】
<実施形態3>
また、これまで述べた実施形態においては、データベースクエリとして、実施形態1はSQL文、実施形態2はSQL中間言語を使用しており、それぞれに対しどちらかの形式に対して危険性を判定していた。これに対し、SQL文とSQL中間言語の両方の形式に対して危険性が判断できるようにし、かつ、危険性のレベルを両者で異なるように判断するという実施形態が考えられる。
【0064】
SQL文はアプリ内の処理において自由に生成することができるが、反面、セキュリティ面での危険性が高いので、後述するようにデータベース処理で厳しい検査を行う。これでは、正当にテーブルをDROP処理したいなど、自由なデータ処理ができないので、その場合はSQL文ではなくSQL中間言語命令系列を使用するようにする。後述するようにSQL中間言語に対するデータベース処理の安全性検査は緩やかであり、自由に処理を記述することができる。これは、中間言語はシステム構築時に事前に準備され、事前にチェックが可能なので、SQLインジェクションの可能性がない安全な命令系列のみで構成することができるからである。
【0065】
実施形態3では、データベース処理の呼び出し方(図13のログイン処理、図14のログ一覧表示処理)が、実施形態1、2に対して多少変わってくる。図13のステップS13−4の「DBクエリ生成」において、ログイン処理はセキュリティ上重要な処理なので、より検査を厳しくし、必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理とする。
【0066】
ログ一覧処理の図14ステップS14−4の「DBクエリ生成」において、これはログイン処理に比べれば比較的安全な処理と考え、実施形態3ではSQL文を生成する処理とする。
図18は実施形態3に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップS18−1において、入力がSQL文であるかSQL中間言語命令系列であるか種別を判定し、中間言語であれば、中間言語への変換及びSQL文の危険性のチェックをスキップし、ステップS18−8に分岐する。このように中間言語の場合は、SQL文に対しては通常行われる危険性チェックが例外的にスキップされる。
【0067】
SQL文が入力されたときはステップS18−2に進み、ステップS18−2において、入力されたSQL文を構文解析し、図7の例に示す如き構文解析木を生成する。ステップS18−3において、生成された構文解析木中の各ノードを調査し、図11の高危険性リストに記載されている危険ノードが含まれるかどうか検査し、危険性を評価する。ステップS18−4において、危険ノードが含まれる場合は、実行してはいけないのでステップS18−12に分岐し、危険ノードが含まれない場合はステップS18−5に進む。
【0068】
ステップS18−5において、構文解析木をSQL中間言語に変換し、命令系列を生成する。ステップS18−6において、命令系列に対して図10(b)に示した命令系列簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップS18−6では、SQL文の構文解析木に対して図10(a)に示す構文解析木簡約(縮退)規則をかけて簡約(縮退)させ、簡約(縮退)中に危険性「高」の簡約(縮退)規則を適用したかどうか検査しても良い。
【0069】
ステップS18−7において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップS18−12に分岐し、恒真命令系列がなかった場合にステップS18−8に進む。
【0070】
ステップS18−8において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップS18−11に分岐する。所定レベル以下のアクセス権限である場合は、ステップS18−9に進み、図11の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。ステップS18−10において、危険パラメータが含まれるときは、危険と見なしてステップS18−12に分岐し、危険パラメータが存在しない場合は、ステップS18−11に進む。
【0071】
ステップS18−11において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップS18−12は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【0072】
このように実施形態3では、処理上不可欠だが危険と見なされうるクエリは事前作成されているSQL中間言語の命令系列で実行することにし、通常のSQL文で記述するクエリは全く危険性がない、必ず実行が許可されるクエリに限定する。このように構成することで、セキュリティ面から危険性のあるクエリを排除しつつ、危険と解釈されうる巧緻なクエリはシステム構築時に事前作成することで、安全かつ融通の利く装置を実現することができる。
【0073】
以上、実施形態を詳述したが、本発明は上述の実施形態に限定されるのではなく、本発明の趣旨を逸脱しない限りにおいて適宜変更が可能である。
【0074】
本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0075】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0076】
CPU マイクロプロセッサ
BUS バス
ROM 読出専用の不揮発性メモリ
RAM 読み書き可能なランダムアクセスメモリ
HDD ハードディスク
【特許請求の範囲】
【請求項1】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段とを備えることを特徴とする情報処理装置。
【請求項2】
前記簡約規則を用いた前記データ操作命令の簡約で、前記データ操作命令の条件が恒真となる場合に、前記危険性があることが前記保持手段に保持されることを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記データ操作命令は、SQLで表されることを特徴とする請求項1記載の情報処理装置。
【請求項4】
前記データ操作命令は、コンピュータ実行形式である中間言語で表されることを特徴とする請求項1記載の情報処理装置。
【請求項5】
前記中間言語は、外部機器で予め作成されることを特徴とする請求項4記載の情報処理装置。
【請求項6】
前記受付手段の受け付けたデータ操作命令の種別を判別する判別手段を更に備え、前記データ操作命令が中間言語で表されていると判別された場合、前記簡約を行わずに前記データ操作の実行を許可することを特徴とする請求項1に記載の情報処理装置。
【請求項7】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付工程と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段を参照して、前記受付工程で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約工程と、
前記簡約工程で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限工程とを備えることを特徴とする情報処理方法。
【請求項8】
コンピュータを、
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限手段として機能させるためのプログラム。
【請求項1】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段とを備えることを特徴とする情報処理装置。
【請求項2】
前記簡約規則を用いた前記データ操作命令の簡約で、前記データ操作命令の条件が恒真となる場合に、前記危険性があることが前記保持手段に保持されることを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記データ操作命令は、SQLで表されることを特徴とする請求項1記載の情報処理装置。
【請求項4】
前記データ操作命令は、コンピュータ実行形式である中間言語で表されることを特徴とする請求項1記載の情報処理装置。
【請求項5】
前記中間言語は、外部機器で予め作成されることを特徴とする請求項4記載の情報処理装置。
【請求項6】
前記受付手段の受け付けたデータ操作命令の種別を判別する判別手段を更に備え、前記データ操作命令が中間言語で表されていると判別された場合、前記簡約を行わずに前記データ操作の実行を許可することを特徴とする請求項1に記載の情報処理装置。
【請求項7】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付工程と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段を参照して、前記受付工程で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約工程と、
前記簡約工程で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限工程とを備えることを特徴とする情報処理方法。
【請求項8】
コンピュータを、
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限手段として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2012−43344(P2012−43344A)
【公開日】平成24年3月1日(2012.3.1)
【国際特許分類】
【出願番号】特願2010−186067(P2010−186067)
【出願日】平成22年8月23日(2010.8.23)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年3月1日(2012.3.1)
【国際特許分類】
【出願日】平成22年8月23日(2010.8.23)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]