SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

EnterpriseZine Day Special

2024年10月16日(火)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

oracletechアーカイブス!

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


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

 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配信など随時、管理者へ情報発信をすることができる。

次のページ
Oracle Database Analyzerによるポリシーの作成

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
oracletechアーカイブス!連載記事一覧

もっと読む

この記事の著者

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

oracletech.jpは、オラクル・データベースと関連製品をお使いいただいている皆様、開発に携わっているエンジニアの皆様、オラクル製品を販売いただいている皆様すべてにとって有益な情報源となることを目指しています。エンタープライズ系ITを中心に、製品情報や技術情報からテクノロジー・トレンド、キャンペーンやイベント/セミナー情報まで多岐にわたります。日本オラクルの社員だけでなく...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3540 2012/02/10 18:10

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング