2 Database Firewallによるネットワーク・ベースのSQLトラフィックの監視

データベース内のすべての操作を監査することは実現困難です。そのため、監査のみに焦点を当てたソリューションでは、異常を特定し、疑わしいアクティビティを特定し、エンタープライズ・データベースで不正なアクティビティが発生している場合にブロックするために必要な、データベース・アクティビティすべての全体像を把握できません。

Database Firewallはマルチステージのファイアウォールで、データベースに送信されるSQLトラフィックを検査し、SQLを許可、ログ、アラート、置換、またはブロックするかどうかを高い精度で判断します。SQLトラフィックは、IPアドレス、データベースまたはOSのユーザー、プログラム名、データ定義言語(DDL)やデータ操作言語(DML)などのSQL文カテゴリ、およびアクセスされるデータベース表に対するチェックを含む、複数のステージを通過します。拒否リストに記載されたSQLと、許可リストSQL文の許可されたセットに含まれていないSQLの両方をブロックしてアラートし、SQLインジェクション攻撃の防止に役立ちます。

Database Firewallのデプロイメントが成功するかどうかは、次に説明するように、効果的なファイアウォール・ポリシーを決定し、適切なファイアウォール・デプロイメントを選択することによって決まります。

2.1 効果的なファイアウォール・ポリシーの開発

ポリシーを決定する前に、だれがアクターか、どんなアクションをアクターが実行できるか、およびそのアクションが発生したときにどんなアクションをファイアウォールで実行するかを検討する必要があります。これに基づいて、この動作を実装するファイアウォール・ポリシーを作成できます。

Database Firewallでのポリシーの実行方法: Database FirewallはSQL文を評価し、ファイアウォールの各ステージで、一致がある場合はそのステージで指定されたアクションが実行されます。それ以外の場合はSQL文は評価のために次のステージに渡されます。

ファイアウォール・ポリシーは、セッション・コンテキスト・ルール、SQL文ルール、データベース・オブジェクト・ルール、デフォルト・ポリシー・ルールなどの1つ以上のルールで構成され、次の順序で評価されます。

図2-1 ルールの実行順序

図2-1の説明が続きます
「図2-1 ルールの実行順序」の説明
  1. セッション・コンテキスト・ルール

    セッション・コンテキストは、特定のSQL文を調べずに、セッション属性のセットに基づいてSQL文を許可または拒否する手段を提供します。セッション・コンテキスト・ルールは、他のすべてのポリシー・ルールをオーバーライドします。このルールはSQL文の構造を調べませんが、IPアドレス、データベース・ユーザー、OSユーザー、データベース・クライアントなどのデータベース・セッション属性をアクターとして使用して決定します。

    セッション・コンテキスト・ルールを使用すると、信頼できるアプリケーション・パスからの特定のトラフィックを、Database Firewallポリシー・エンジンでさらに処理することなく許可できます。一般的なユースケースは、次のとおりです。
    • 許可リストに記載された信頼できる一連のクライアントIPからのSQLリクエストがデータベースによって実行されるようにします。
    • 信頼できる一連のアプリケーション・ユーザーからのSQLリクエストをデータベースで実行できるようにします。そのようなIPとデータベース・ユーザーまたはIPとOSユーザーなどの複数のセットを組み合せると、Database Firewallを通過する許可トラフィックを柔軟に絞り込めます。ブロッキング、アラート、ロギングなど、これらのセッション属性の組合せによって定義された条件と一致する任意のSQLトラフィックに対してアクションを実行できます。アラートの場合、脅威の重大度レベルを指定できます。これについては、「SQL文がポリシーと一致する場合に実行されるアクション」というタイトルの項で詳しく説明されています。指定された条件と一致しないSQL文は、ファイアウォールの次のステージ、つまりSQL文ルールに転送されて実行されます。
  2. SQL文ルール

    Database Firewallの次のステージでは、SQL文法ベースのエンジンを使用してSQL文を解析し、ポリシーに指定されたアクションを実行します。同じ構文構造のSQL文がクラスタにグループ化されます。たとえば、特定の注文番号234324を検索するSQL問合せは、本質的には別の注文番号333221を検索する問合せと同じです。異なる文の類似度を理解すると、Database Firewallはポリシーを取得して、それを何百もの同等のSQL文に適用できます。

    Database Firewallは、一連のSQL文を取得して類似のクラスタにグループ化するようにトレーニングできます。クラスタのグループはSQLクラスタ・セットと呼ばれ、ポリシーの作成に役立ちます。SQLクラスタ・セットでは、クラスタに対してポリシー・ルールを実施できるように、クラスタを柔軟にグループ化できます。

    SQL文ルールはSQLクラスタ・セットとプロファイルを組み合せたもので、このプロファイルは、IPアドレス、データベース・ユーザー、OSユーザー、データベース・クライアントなどのデータベース・セッション属性の組合せとして定義されています。

    SQL文ルールを使用して、信頼できるアプリケーション・パスからのSQLトラフィックをデータベースで実行できるようにできます。通常の動作の許可リストを作成するには、Database Firewallをトレーニング・モードで実行します。このモードでは、一意のSQL文をログに記録し、テストまたはQAシステムで生成されたSQLのセットなど、通常のトラフィックを表す一連の予想SQLを取得します。SQLクラスタと呼ばれるこれらのSQLグループは、ポリシーの作成に使用できます。一般的なユースケースは、次のとおりです。
    • 許可リストに記載された、信頼できる一連のアプリケーション・ユーザーからのアプリケーションSQLリクエストを許可します。
    • Oracle SQL Developerなどのツールを使用してアクセスする、信頼できる一連の特権ユーザーからの特定の許可リスト記載SQLリクエストを許可します。

    SQL文がSQL文ルールと一致したときに実行できるアクションは、前述のセッション・コンテキスト・ルールのアクションと同じです。これについては、「SQL文がポリシーと一致する場合に実行されるアクション」というタイトルの項で説明されています。一致しないSQLトラフィックは、処理のために次のステージ、つまりデータベース・オブジェクト・ベースのルールに送信されます。

  3. データベース・オブジェクト・ベースのルール

    データベース・オブジェクト・ベースのルールは、表やビューなどの特定のデータベース・オブジェクトに対するDMLやDCLなどの特定のタイプのSQL文を阻止または許可するために使用されます。これらのルールは、特権ユーザーによる特定の機密アプリケーション・データベース・オブジェクトへのアクセスを停止する必要がある場合に、ネットワーク上で特権ユーザーの行動を制御するためによく使用されます。

    一般的なユースケースは次のとおりです。
    • アプリケーション表に対するSELECTのみを許可しますが、機密アプリケーション表に対するデータ変更を実行しようとした場合は、アラートまたはブロックします。
    • SQL文ルールで許可リストに記載されていないネットワーク上でのデータ変更試行時のアラート。SQL文がデータベース・オブジェクト・ベース・ルールと一致したときに実行できるアクションは、前述のセッション・コンテキスト・ルールのアクションと同じです。これについては、「SQL文がポリシーと一致する場合に実行されるアクション」というタイトルの項で説明されています。一致しないSQLトラフィックは、処理のために次のステージ、つまりデフォルト・ルールに送信されます。
    • SQL SELECT問合せ(Oracle AVDF 20.3以降)に応答してデータベースから返される行数について監視およびアラートすることで、潜在的なデータ抽出の試みを特定します。

    ネットワークを介した特権ユーザーの動作を監視し、アクセスが認可されていない機密アプリケーション・データベース・オブジェクトにユーザーがアクセスできないようにします。たとえば、アプリケーション表に対するSELECT問合せのみを許可し、機密アプリケーション表を変更するSQLをブロックします。これは、データベース・オブジェクト・ルールを使用して実現できます。これは、表やビューなどの特定のデータベース・オブジェクトに対する特定のタイプのSQL文(DML、DDLなど)をブロックまたは許可するために使用されます。

    特権ユーザーによる特定の機密表へのアクセスの監視に加えて、Database Firewallを使用して、返される行数(Oracle AVDF 20.3以降)を取得し、アラートの構成に使用することで、抽出の試みを特定できます。たとえば、返された行の数が特定の機密表のしきい値を超えた場合にアラートを生成できます。また、返された行数は、フォレンジック分析のレポートで使用できます。

    ノート:

    Database Firewallポリシーのデータベース・オブジェクト・ルールのプロファイルは、Oracle AVDF 20.4から導入されています。
  4. デフォルト・ルール

    デフォルト・ルールは、SQL文が、定義された他のルール(セッション・コンテキスト、SQL文またはデータベース・オブジェクト)のいずれとも一致しない場合に実行されます。この場合、指定されたアクション、ロギング・レベルおよび脅威の重大度がこのSQL文に適用されます。これは、次の他のポリシーで説明されている内容と同じです。

SQL文がポリシーと一致する場合に実行されるアクション

前述の各ファイアウォール・ポリシー・ルールでは、ポリシーで定義された条件が一致した場合にDatabase Firewallが実行するアクションを定義します。SQL文に対して実行されるアクションは、次のように要約できます。
  1. アクション:
    • パス: この場合、SQL文は処理のためにターゲットに渡されます。
    • アラート: SQL文は、指定された脅威の重大度とともにアラートとしてAudit Vault Serverに送信されます。
    • ブロック: SQL文はブロックされ、ユーザーはターゲットに対して実行する代替文を指定できます。
  2. ロギング・レベル: この情報はAudit Vault Serverに送信されます。イベントをログに記録して、Audit Vault Serverに転送するかどうかを指定します。
  3. 脅威の重大度: Warning Database Firewallポリシーに割り当てられた脅威レベルは、基本的に、セッション・コンテキスト、SQL文、データベース・オブジェクト、デフォルト・ルールなどのルールを組み合せて形成されるマルチステージのフィルタリング・メカニズムです。各ルールでは、条件と、SQLトラフィックがその条件に一致したときに実行するアクションを定義します。

2.2 ファイアウォールのデプロイメントの選択

ポリシーの定義の一部として、SQL文の監視と記録のみを実行するか、ブロックも実行するかを決定する必要があります。その選択に応じた、モニタリング/ブロッキング(プロキシ)、モニタリング(ホスト・モニター)またはモニタリング(帯域外)という3つのデプロイメント・モードがあります。

様々なデプロイメント・モードについてさらに学習するには、次の図と次の説明を参照してください。

図2-2 Oracle AVDF Database Firewallのデプロイ方法



  1. プロキシ・モードでの監視とブロック

    このモードでは、Database FirewallはSQLの監視とブロックの両方、さらに必要に応じてSQL文の置換を行うことができます。Database Firewallはプロキシとして構成されているため、データベース・サーバーへのすべてのトラフィックがDatabase Firewallを介してルーティングされます。データベース・クライアントがDatabase Firewallプロキシに接続すると、そのDatabase Firewallプロキシがデータベース・サーバーに接続して、データベース・クライアントから受信したすべてのデータを転送します。どのような場合でも、データベース・サーバーはDatabase Firewallをクライアントとして識別します。

    ファイアウォールがすべてのトラフィックを傍受し、定義されたポリシーに基づいて必要なアクションを実行できるように、クライアントはデータベースのかわりにデータベース・ファイアウォールに接続するように再構成する必要があります。Oracleでは、Database Firewallを経由しないすべての接続を拒否するようにデータベースを構成し、すべてのトラフィックがファイアウォールを介してルーティングされ、データベースで実行される前にSQLにポリシーを適用できるようにすることをお薦めします。

    アプリケーションがデータベース・ファイアウォール・プロキシ・モード・デプロイメントに接続するために必要な変更を簡略化するには、ローカル・ドメイン・ネーム・サーバー(DNS)を構成して、ターゲット・データベースの完全修飾ドメイン名をデータベース・ファイアウォールのIPアドレスに解決します。

    SQLトラフィックの監視のみを実行する場合は、他にも2つの選択肢(帯域外またはホスト・モニター)のデプロイメントがあります。

  2. ホスト・モニターを使用した監視

    ホスト・モニターは、データベースのネットワーク・インタフェース・カードが受信したトラフィックを監視および取得することにより、データベースへのSQLトラフィックを取得します。これは、バンド外、すなわち、スパン・ポート、テクノロジからすべてのネットワーク・トラフィックを取得するのに比べて、関連するトラフィックを取得するのに役立ちます。ホスト・モニターはSQLトラフィックのコピーを取得するため、監視のみが可能であり、ブロックはできません。このSQLイベント・データは、ネットワーク上でデータベース・ファイアウォールに安全に送信されます。データは、Oracle AVDFによって生成されるレポートで使用可能になります。

    ホスト監視は、帯域外デプロイメント・モードに必要なネットワークの再構成が複雑で除外されるという状況のために設計されています。

  3. 帯域外モードでの監視

    帯域外モードでデータベース・アクティビティ監視を構成する場合、Database Firewallはデータベースへのクライアント・リクエストやデータベースからのレスポンスなどのネットワーク・トラフィックをリスニングします。データベース・アクティビティは、定義されたポリシーに従って監視されます。データベース・ファイアウォールにデータベース・トラフィックのコピーを送信するために使用できるテクノロジがいくつかあります。これらのテクノロジには、スパン・ポート、ネットワーク・タップおよびパケット・レプリケータの使用などがありますが、これらに限定されません。

    このモードでは、Oracle Database FirewallはSQLトラフィックの監視およびアラートは実行できますが、SQL文のブロックまたは置換はできません。帯域外監視モードは、非ブロック・ポリシー要件の最も単純なデプロイメント・モードです。データベースでもクライアントでも、負荷が増えることはありません。Database Firewallで生じるレイテンシや単一点障害はありません。

2.3 まとめ

Database Firewallのデプロイには2つのステップが必要です。
  • SQLの監視と記録のみを行うか、SQLを監視してブロックするかを決定するには、ファイアウォールをデプロイする方法(プロキシ・モード、帯域外、またはホスト・モニター)を決定する必要があります。
  • ネットワーク上のSQLトラフィックに対するマルチステージのフィルタリング・ルールを定義するために役立つDatabase Firewallポリシーを決定します。必要なルール、およびルールが満たされたときに、データベース・ファイアウォールで実行するアクション。