EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

データベース・セキュリティの実装 第4回 最前線の防御を可能にするOracle Database Firewall

edited by DB Online   2011/11/16 00:00

パターンマッチングの限界

 Oracle Database Firewall以外でも、SQLをブロックすることができる機能をもっている製品がある。ただこれらの製品はSQLを判別するのにパターンマッチングを使用している。このパターンマッチングは、検知の正確性という点は、大きな欠点がある。

 パターンマッチングは、正規表現などで特定の文字列を見つけることだが、SQLインジェクションでは、よくTRUEとなる条件やUNIONを使ったSQLが使われることが多い。

 例えば、TRUEが成り立つ条件として、簡単に思いつくのは1=1だが、20000=(1000+19000), 'dog'='dog', LEFT('catastrophe', 3)='cat', SIN(45) = COS(45) , CAST(123) as STR <> 123、これらもすべてTRUEとなる条件である。uni/* */on, char(117,110,105,111,110)、これらはUNIONの文字を別な表記で表している。このように、パターンマッチングで検知させるすべての文字列を漏れなく網羅することは不可能に近い。つまり、これは検知の精度が低下し、フォールスポジティブやフォールスネガティブが増加することを意味しているのである。

SQL文法を理解した正確な検知

 そもそもSQLには、約400のキーワードや厳格な文法のルール(ISO/IEC 9075)が定義されている。Oracle Database Firewallは、パターンマッチングではなくそれらの定義されているSQL文法を理解した上での検知を行っている。

SQLの文法構造
SQLの文法構造

 上記のSQLを見てみると、UPDATEやWHEREというキーワード、スキーマ、データ、演算子といくつかのカテゴリに分離することができる。この例では、DATAの中に文字列としてselect や演算子等が含まれているが、これらは文法上のDATAに入っておりSQLインジェクションとして成立するSQLにはなりえない。パターンマッチングだと誤検知してしまう可能性があるSQLでも、Oracle Database Firewallは、Oracle Database, SQL Server, DB2といったそれぞれのデータベースごとの高精度のSQL文法解析エンジンを搭載しており、正確にSQL文法構造を理解し、検知することを可能なのである。

Oracle Database FirewallによるSQLブロック

 では実際にOracle Database FirewallによってSQLインジェクションのSQLをブロックするとどうなるのか見ていきたい。実際に良く使用されるUnion Selectで組み立てたSQLを実行する。詳しい解説は控えるが、これはOracle DatabaseのサンプルスキーマであるSHユーザーのPRODUCTS表を検索しているSQLに、user_tables表が検索するSQLを注入したものである。

 SELECT null,null,null,null,null,prod_name FROM PRODUCTS WHERE 1=2 union select null,table_name,null,null,null,null from user_tables

 Oracle Database Firewallのポリシーの設定は、ホワイトリスト方式。これはデフォルトブロックを意味しており、Passの登録されていないSQLはすべてブロックされる。当然上記のSQLインジェクションのSQLは許可されていないのでBlockされる。

Oracle Databaes Firewall Web Console
Oracle Databaes Firewall Web Console

 右側にAction codeとあるが、緑色がPassしたSQL、赤色がBlockしたSQLである。SQLが実行された時間、クライアント情報、ユーザー名、データベースの情報等、ログとして必要な情報はすべて記録される。Blockした情報をリアルタイムアラートとしてメール送信することや、ネットワーク機器の監視サーバがある場合にそのサーバへのsyslog配信など随時、管理者へ情報発信をすることができる。


著者プロフィール

  • oracletech.jp編集部(オラクルテックジェイピーヘンシュウブ)

    oracletech.jpは、オラクル・データベースと関連製品をお使いいただいている皆様、開発に携わっているエンジニアの皆様、オラクル製品を販売いただいている皆様すべてにとって有益な情報源となることを目指しています。 エンタープライズ系ITを中心に、製品情報や技術情報からテクノロジー・トレンド、キャンペーンやイベント/セミナー情報まで多岐にわたります。日本オラクルの社員だけでなく、外部の有識者やフリーランス・ライターを含む幅広い執筆陣により"ベンダー発"の枠を脱したコンテンツ発信を目指します。 好奇心が、エンジニア人生を豊かにする。 oracletech.jp

バックナンバー

連載:oracletechアーカイブス!
All contents copyright © 2007-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5