2.2.2 SQLファイアウォールの使用開始

SQLファイアウォールの使用を開始するには、次のステップを完了する必要があります。これらのステップを開始する前に、前提条件がすでに完了していることを確認してください。

次のステップに従って説明します

  1. Oracle Database 23ai以降でのSQLファイアウォールの有効化
  2. SQLトラフィックの収集
  3. SQLトラフィックの収集の停止
  4. SQLファイアウォール・ポリシーの生成および実施
  5. SQLファイアウォール違反ログの表示
  6. SQLファイアウォール違反の監査証跡およびアラート・ポリシーの作成
  7. SQLファイアウォール違反の通知の構成

これらのステップを完了することで、データベース・フリートをSQLインジェクション攻撃および侵害されたアカウントから保護する対策を取ります。

2.2.2.1 ステップ1: ターゲット・データベースでのSQLファイアウォールの有効化

このステップにより、ターゲット・データベースでSQLファイアウォールが有効になります。

  1. 「セキュリティ・センター」で、「SQLファイアウォール」をクリックします。
  2. (オプション)「リスト範囲」で、ターゲット・データベースを含むコンパートメントを選択します。必要に応じて、「子コンパートメントを含む」を選択し、子コンパートメントからターゲット・データベースをリストに含めます。
  3. (オプション)「フィルタ」で結果のリストをフィルタ処理し、次を実行します:
    1. (オプション)「期間」メニューから期間を選択します。
    2. (オプション)「ターゲット・データベース」メニューからターゲット・データベースを選択します。
  4. ターゲット・データベースの名前をクリックします。

    「構成詳細」ページが表示されます。

  5. 「有効化」をクリックします。これは、データベース・セキュリティ構成の名前の下にあるボタン、または「データベース・セキュリティ構成の情報」タブの「ターゲット・データベース」セクションにある「有効化」オプションのいずれかを使用して実行できます。
  6. リソースが「アクティブ」に変わるのを待ってから、次のステップに進みます。

2.2.2.2 ステップ2: データベース・ユーザーのSQL収集の開始

このステップでは、データベース・ユーザーについて想定されるSQL文および想定されるデータベース接続パスの収集を開始します。信頼できるデータベース接続パスから通常のアプリケーション・ワークロードを実行します。

  1. 前のステップの「構成詳細」ページで、「SQL収集の作成および開始」をクリックします。
  2. 収集を作成する必要があるデータベース・ユーザーを選択します。
  3. 「SQL収集レベル」を選択します:
    • ユーザーが発行したSQLコマンド - データベースで実行されるユーザーから直接発行されたSQL文です。これがデフォルトです。
    • ユーザーが発行したSQLコマンドとPL/SQLユニットから発行されたSQLコマンド - ユーザーから直接発行されたSQL文と、ユーザーが起動したPL/SQLユニット内のSQL文が含まれます。

      ノート: SQL収集では、内部再帰的SQL文は記録されません

  4. 「SQL収集の作成および開始」をクリックします。
  5. 選択したデータベース・ユーザーに対して、アプリケーションで一般的な日次タスクを実行します。
  6. SQL収集をしばらく実行できるようにします。これについては、「ステップ3: インサイトを使用したSQL収集の進捗状況のモニタリング」で詳しく説明します。

2.2.2.3 ステップ3: インサイトを使用したSQL収集の進捗状況のモニタリング

このステップでは、SQL文の収集をモニタリングし、収集を停止できるタイミングを決定します。実行中のワークロードから新しい着信の一意のSQL文または信頼できる接続パスがないことを確認するまで、SQL収集をモニタリングします。

  1. 「SQL収集インサイト」タブをクリックします。
  2. 「SQL収集」タブの情報は1時間ごとにリフレッシュされますが、必要に応じて「インサイトのリフレッシュ」をクリックします。
  3. (オプション) SQL収集を確認する期間を選択します。
  4. 「一意のSQL文」グラフを確認します。

    収集されたSQL文は、収集期間全体にわたって一意であるかどうかを判断するために分析され、このグラフには、選択した時間間隔における一意のSQL文の数が表示されます。開始される新しい一意のSQL文がなくなったら(つまり、グラフがゼロのままになったら)、収集を停止することをお薦めします。一意のSQL文の数がゼロになるまで待つと、ターゲット・データベースで通常実行されるすべての文が確実に収集され、現状の確立に役立ちます。

    たとえば、収集の初日に実行されたSQL文が250個あるが、そのうち225個のみが一意である場合、その日のグラフには225が表示されます。翌週、同じ250個の文と追加の200個の新しい一意の文が実行された場合、グラフには200としか表示されません。これは、250個の文がすでに第1週に収集および検出されているので、一意ではないためです。一意のSQL文が検出されなくなると、一意のSQL文の数はゼロになります。参考として、図2-3を参照してください。

    ゼロで安定化するのに十分な数の一意のSQL文を収集するのに、数日から数週間かかる場合があります。

    図2-3 「SQL収集インサイト」の「一意のSQL文」グラフ


    225から始まり、3週間で175に減少し、翌週に45に下がり、1週間後に0に達してさらに4週間その状態が続き、1週間後に60に跳ね上がり、その後再び減少してゼロになったままの一意のSQL文の折れ線グラフを示しています。一意のSQL文の数がゼロに減少したら、収集を停止できます。ゼロは、ファイアウォールで新しい一意のSQL文が検出されなくなったことを示し、一意のSQL文をすべて収集したことを意味します。

  5. 「クライアントIP」、「クライアントOSユーザー」および「クライアント・プログラム」の各グラフを確認します。

    これらのグラフには、ターゲット・データベースで毎日SQLコマンドを実行しているクライアントIPアドレス、OSユーザーおよびプログラムの数がそれぞれ表示されます。特定のコンテキスト情報は、グラフの下の表に表示できます。

    SQL文は毎日同じセッション・コンテキストから取得する必要があるため、グラフが日々一定の値で安定したら、収集を停止することをお薦めします。

  6. セッション・コンテキスト・タイプおよび値のリストを確認します。

    クライアントIPアドレス、クライアントOSユーザーおよびクライアント・プログラムのリストを確認すると、トラフィックの発生元を特定できます。この情報を使用して、他のすべての場所からのトラフィックをログに記録またはブロックするルールを設定できます。これについては、「ステップ4: SQLファイアウォール・ポリシーの生成および実施」で詳しく説明します。

  7. 一意のSQL文を十分に収集したら、「停止」をクリックして収集を停止します。

    収集を停止すると、「SQL収集の情報」タブの「収集タイムライン」に開始時間、停止時間および経過時間が表示されます。

2.2.2.4 ステップ4: SQLファイアウォール・ポリシーの生成および実施

このステップでは、収集中に収集された情報を確認し、収集されたデータに基づいて許可リストを含むポリシーを作成します。ポリシーは、違反を検出および許可するためにも、違反をブロックするためにも実施できます。

  1. 前のステップの「SQL収集の詳細」ページで、「ファイアウォール・ポリシーの生成」をクリックします。「ファイアウォール・ポリシー詳細」ページが表示されます。
  2. 「SQLセッション・コンテキスト」および「一意の許可されたSQL文」の各表を確認します。

    必要に応じて、ポリシーに含めるセッション・コンテキスト情報を追加、編集または削除できますが、ポリシーで収集した一意のSQL文を追加、編集または削除することはできません。

  3. (オプション)許可されたSQLセッション・コンテキスト値を必要に応じて更新します。
    1. 各行の「更新」をクリックします。
    2. 値を削除するには、パネルの行の最後にある「X」をクリックします。
    3. 値を追加するには、「追加」をクリックし、空のフィールドに新しい値を入力します。
    4. 選択したコンテキスト情報に応じて、「クライアントIPの更新」/「クライアント・プログラムの更新」/「クライアントOSユーザーの更新」をクリックします。
  4. (オプション)すべての一意の許可されたSQL文のPDFまたはXLSレポートをダウンロードします。
    1. 「レポートの生成」をクリックします。

      ポップアップが表示されます。

    2. レポートの形式(「PDF」または「XLS」)を選択します。
    3. レポートの名前を入力します。
    4. 必要に応じて、レポートの説明を入力します。
    5. 「レポートの生成」をクリックします。
    6. レポートをダウンロードします。次の2つのオプションがあります。
      • 「レポートの生成」ウィンドウで、「ここ」リンクをクリックします。ドキュメントのダウンロードが開始されます。
      • 「閉じる」をクリックして、「レポートの生成」ウィンドウを閉じます。次に、「レポートのダウンロード」ボタンをクリックします。ドキュメントを開いたり保存するためのオプションが提示されるダイアログ・ボックスが表示されます。
  5. 「デプロイと実施」をクリックします。
    1. 「実施スコープ」を選択します:
      • すべて(セッション・コンテキストとSQL文)
      • セッション・コンテキストのみ - このオプションは、データベース接続パスに対してのみチェックを実施します。
      • SQL文のみ - このオプションは、SQL文に対してのみチェックを実施します。
    2. 違反に対するアクションを選択します:
      • 違反の検出(許可)とログ記録 - このオプションは、すべてのSQL文およびデータベースへの接続を検出および許可すると同時に、違反をログに記録します。
      • 違反のブロックとログ記録 - このオプションは、ポリシーにリストされていないSQL文およびデータベース接続をすべてブロックし、違反をログに記録します。SQLファイアウォールでデータベースへの認可されていないSQLトラフィックを防止する場合は、このオプションを検討してください。
    3. 違反がないか監査します
      • オン - このオプションでは、違反レコードが監査証跡に書き込まれます。アラートを有効にし、監査要件へのコンプライアンスを示すのに役立ちます。監査イベントを収集するには、必ずData Safeで監査証跡を開始してください。これらの監査イベントは、ターゲット・データベースごとに1か月当たり100万件の監査レコードという月間無料制限に加算されます。
      • オフ
    4. 「デプロイと実施」をクリックします。

2.2.2.5 ステップ5: SQLファイアウォール違反レポートの表示

このステップでは、実施されたSQLファイアウォール・ポリシーについて違反のレポートを表示できます。違反レポートに移動するには様々な方法があり、その一部では、選択したSQLファイアウォール・ポリシー、ターゲット・データベース、期間などにフィルタが自動的に適用されます。

ノート:

SQLファイアウォール・ポリシーを実施した直後に違反が表示されることはほとんどありません。

データベース・フリート全体でのすべての違反のレポートを表示するには、次のステップを実行します。

  1. 「セキュリティ・センター」で、「SQLファイアウォール」をクリックします。
  2. 「関連リソース」で、「違反レポート」をクリックします。
  3. (オプション)「リスト範囲」で、ターゲット・データベースを含むコンパートメントを選択します。必要に応じて、「子コンパートメントを含む」を選択し、子コンパートメントからターゲット・データベースをリストに含めます。
  4. 「事前定義済レポート」タブから、表示するレポートを選択します:
    • すべての違反レポート - SQL違反とコンテキスト違反の両方
    • SQL違反レポート - SQL文の違反
    • コンテキスト違反レポート - データベース接続パスの違反
  5. レポートにアクセスすると、次のようなOracle Data Safeの標準レポート・アクションをすべて実行できます:
    • 基本フィルタの適用
    • 拡張SCIMフィルタの適用
    • カスタム・レポートの作成
    • レポートのスケジュール
    • レポートの生成およびダウンロード
    • 表示する列の管理

過去1週間の特定のターゲット・データベースに対するすべての違反のレポートを表示するには、次のステップを実行します。

  1. 「セキュリティ・センター」で、「SQLファイアウォール」をクリックします。
  2. 「違反サマリー」タブをクリックします。
  3. (オプション)「リスト範囲」で、ターゲット・データベースを含むコンパートメントを選択します。必要に応じて、「子コンパートメントを含む」を選択し、子コンパートメントからターゲット・データベースをリストに含めます。
  4. (オプション)「フィルタ」で結果のリストをフィルタ処理し、次を実行します:
    1. (オプション)「期間」メニューから期間を選択します。
    2. (オプション)「ターゲット・データベース」メニューからターゲット・データベースを選択します。
  5. リストからターゲット・データベースの名前を選択します。

    違反レポートが表示されます。

  6. 違反レポートは、選択した期間の選択したターゲット・データベースの違反のみを表示するように自動的にフィルタ処理されます。
  7. レポートにアクセスすると、次のようなOracle Data Safeの標準レポート・アクションをすべて実行できます:
    • 基本フィルタの適用
    • 拡張SCIMフィルタの適用
    • カスタム・レポートの作成
    • レポートのスケジュール
    • レポートの生成およびダウンロード
    • 表示する列の管理

選択したSQLファイアウォール・ポリシーに固有の違反のレポートを表示するには、次のステップを実行します。

  1. 「セキュリティ・センター」で、「SQLファイアウォール」をクリックします。
  2. (オプション)「リスト範囲」で、ターゲット・データベースを含むコンパートメントを選択します。必要に応じて、「子コンパートメントを含む」を選択し、子コンパートメントからターゲット・データベースをリストに含めます。
  3. (オプション)「フィルタ」で結果のリストをフィルタ処理し、次を実行します:
    1. (オプション)「期間」メニューから期間を選択します。
    2. (オプション)「ターゲット・データベース」メニューからターゲット・データベースを選択します。
  4. 「ターゲットのサマリー」タブのリストからターゲット・データベースの名前を選択します。

    「構成詳細」ページが表示されます。

  5. 「リソース」で、「SQLファイアウォール・ポリシー」をクリックします。
  6. リストからSQLファイアウォール・ポリシーを選択します。

    「ファイアウォール・ポリシー詳細」ページが表示されます。

  7. 「実施情報」で、「違反レポート」の横にある「レポートの表示」をクリックします。
  8. 違反レポートは、選択したターゲット・データベースの選択したータベース・ユーザーの違反のみを表示するように自動的にフィルタ処理されます。

    違反レポートが表示されます。

  9. レポートにアクセスすると、次のようなOracle Data Safeの標準レポート・アクションをすべて実行できます:
    • 基本フィルタの適用
    • 拡張SCIMフィルタの適用
    • カスタム・レポートの作成
    • レポートのスケジュール
    • レポートの生成およびダウンロード
    • 表示する列の管理

2.2.2.6 ステップ6 (オプション): SQLファイアウォール違反の監査ポリシーおよびアラート・ポリシーの作成

このステップでは、SQLファイアウォール違反の監査ポリシーおよびアラート・ポリシーを作成して、データベース・フリートでのアクティビティをより適切に追跡およびモニタリングできるようにします。このステップはオプションですが、アラートを可能にし、監査要件へのコンプライアンスを示すのに役立つため、お薦めします。

アクティビティ監査およびアラートの前提条件を満たします。

  1. アクティビティ監査ワークフローを完了して、SQLファイアウォール違反を監査します。

    対応する監査ポリシーがアクティビティ監査で有効として表示されるようにするには、SQLファイアウォール・ポリシーを実施するときに「違反の監査」を有効にしておく必要があります。「監査ポリシーの詳細」の「SQLファイアウォール監査」セクションにリストされているSQLファイアウォールの監査ポリシーを表示および管理できます。

    ヒント:

    アクティビティ監査ワークフローでSQLファイアウォール監査ポリシーを管理する前に、SQLファイアウォール・ポリシーで「違反の監査」を有効にする必要があります。詳細は、「SQLファイアウォール・ポリシーの実施の更新」を参照してください。
  2. アラート・ワークフローを完了して、SQLファイアウォール違反のアラートを受信します。

    SQLファイアウォールのアラート・ポリシーは、「SQLファイアウォール違反」です。

2.2.2.7 ステップ7 (オプション): SQLファイアウォール違反の通知の構成

このステップでは、SQLファイアウォール違反が発生した場合の通知を構成します。このステップはオプションですが、SQLファイアウォール違反が発生した場合にほぼリアルタイムのアラートを受信できるようになるため、お薦めします。

Data Safeでは、SQLファイアウォールで使用可能なワークフローを介してイベント通知を作成できます。これにより、コンテキストでイベント通知を作成できます。共通イベントまたは拡張イベント通知ワークフローのクイックスタート・テンプレートを使用して、通知を作成できます。

前提条件:

イベント通知の作成に必要なIAM権限があることを確認してください。詳細は、『Oracle Data Safeの管理』「コンテキスト・イベント通知を使用する権限」を参照してください。

通知を作成するには:

  1. 「セキュリティ・センター」で、「SQLファイアウォール」をクリックします。
  2. 「通知」タブをクリックします。
  3. 「通知の作成」をクリックします。

    選択したリソースに対して通知が作成されていない場合は、使用可能なクイックスタート・テンプレートのリストが表示されます。かわりに、これらのいずれかをクリックすることもできます。

    「通知の作成」サイド・パネルが表示されます。

  4. クイックスタート・テンプレートまたは「拡張イベント通知」のいずれかからイベント通知を作成するように選択します。

    クイックスタート・テンプレートを使用すると、一般的なイベント・シナリオのリストから選択できます。クイックスタート・テンプレートから通知を作成すると、ルールおよびイベントが自動的に作成されます。

    ノート:

    ルールおよびイベントは、通知ワークフローの開始時に作業していたコンパートメントに作成されます。ルールおよびイベントは、コンパートメントおよびそれらが作成されたコンパートメントの子コンパートメントに対してのみトリガーされます。
  5. 前のステップで「クイックスタート」を選択した場合は、クイックスタート・テンプレートを選択します。

    前のステップで「拡張イベント通知」を選択した場合は、「ルール名」を入力し、「イベント・タイプ」を選択します。

    イベントの詳細は、『Oracle Data Safeの管理』「SQLファイアウォール・イベント・タイプ」を参照してください。

  6. 「新規トピックの作成」または「既存のトピックの選択」のいずれかを選択します。
  7. 「コンパートメント」を選択します。

    ノート:

    このコンパートメントは、ルールおよびイベントがモニタリングされる場所ではなく、トピックが作成される場所です。
  8. 新しいトピックを作成する場合はトピック名を入力し、あるいは既存のトピックを使用する場合はトピック名を選択します。
  9. 「サブスクリプション・プロトコル」を選択します。
  10. 選択したサブスクリプション・プロトコルに必要な入力を指定します。
  11. 必要に応じて、「拡張オプションの表示」をクリックして通知にタグを付けます。
    1. 「+ 別のタグ」をクリックして、テナンシのリソースを編成および追跡するための追加のオプション・タグを作成します。
    2. ドロップダウン・リストから「タグ・ネームスペース」を選択します。
    3. 「タグ・キー」および「タグ値」を指定します。
  12. 「通知の作成」をクリックします。

これらのステップが完了すると、SQLファイアウォールは着信SQL文およびデータベース接続パスの検出を開始し、違反があればログに記録しながら、実施されたSQLファイアウォール・ポリシーに基づいてSQLトラフィックがターゲット・データベースに進むことを許可またはブロックします。データ・セーフでSQLファイアウォール違反をモニタリングできます。監査およびアラート構成を構成すると、SQLファイアウォール違反が発生した場合にOCI通知がトリガーされます。