1.3 Oracle SQL Firewallの開始
Oracle SQL Firewallを開始するには、3つのステップに従います。1. Oracle SQL Firewallを有効にします。2. ユーザーの通常のSQLアクティビティをキャプチャします。3. 許可リストを有効にして強制します。
- SQLファイアウォールの有効化。適切な権限を持つ管理者として、OracleデータベースのSQLファイアウォールを有効にします。
- 通常のSQLアクティビティのキャプチャ。SQLファイアウォールで保護するすべてのデータベース・ユーザーに対して、SQLファイアウォールを有効にしてデータベース・ユーザーの通常のSQLトラフィックを学習する必要があります。これは、信頼できるデータベース接続パスを介して認可されたSQL文をすべてキャプチャすることによって行われます。SQLファイアウォール固有のデータ・ディクショナリ・ビューを問い合せて、このキャプチャしたデータを確認し、収集されたSQL文および接続パスが許可リストを構成するのに適切かどうかを判断できます。
キャプチャしたSQL文を確認した後、許可されたSQL文と許可されたコンテキストのベースラインを設定する許可リストを使用して、SQLファイアウォール・ポリシーを生成できます。許可されたSQL文は、承認されたSQL文を構成します。実行時にポリシーが強制されると、ポリシー許可リストのSQLシグネチャと構文的に類似した構造を持つ着信SQL問合せは、対応するランタイム実行コンテキストが一連の許可されたコンテキストも満たしている場合、実行のために渡されます。許可されたコンテキストは、信頼できるデータベース接続パスを表し、クライアントIPアドレス、オペレーティング・システム・プログラム名およびオペレーティング・システム・ユーザー名の3つの異なるグループで構成されます。ユーザーがデータベースに接続すると、SQLファイアウォールは現在のセッション・コンテキスト属性をチェックし、データベースへのアクセスが許可リストに定義された信頼できるエンドポイントからのみ実行されるようにします。
DBMS_SQL_FIREWALL
プロシージャを使用し、いつでも許可リストを確認して変更できます。 - 許可リストの有効化および強制。生成されたSQLファイアウォール・ポリシーを有効にすると、データベース・ユーザーが保護されます。SQLファイアウォールは、ユーザーがデータベースに接続してSQL文を発行するときに許可リストを強制してチェックします。SQLファイアウォールに、許可されたコンテキストまたは許可されたSQL文(あるいはその両方)に対するチェックを強制するかどうかを指定できます。着信SQLトラフィックのデータベース接続パスおよびSQL文が、有効で強制された許可リストのエントリと一致しない場合、SQLファイアウォール違反がトリガーされ、このインシデントが違反ログに記録されます。SQLファイアウォールに、SQLファイアウォール違反インシデントへの対応方法、つまりトラフィックのデータベースへの前進を許可するかブロックするかを指定できます。ブロックすると、
「ORA-47605: SQLファイアウォール違反」
エラーが発生し、SQL文の不一致によるSQL違反のためにクライアント接続を中断することなく、異常なデータベース・アクセスを防止します。ただし、コンテキスト違反をブロックすると、コンテキストの不一致によりクライアント接続が中断して終了します。SQLファイアウォールは、SQLファイアウォール・ポリシーの有効な許可リストのエントリに照らして、データベース接続またはSQLコマンド実行のあらゆる不一致シナリオについて、違反をリアルタイムに報告し、ログに記録します。セキュリティ管理者は、SQLファイアウォール違反ログ
DBA_SQL_FIREWALL_VIOLATIONS
をモニタリングして、これらの異常の存在を検出できます。SQLファイアウォール違反(特にブロックされた違反)の監査が必要になる場合があります。このような違反の発生は、SQLインジェクションや資格証明の盗用や不正使用など、異常なデータベース・アクセス試行を示している可能性があります。違反の監査では、違反の記録がデータベース監査証跡に格納され、改ざんから保護できます。
考慮する必要がある重要な点は、次のとおりです:
- Oracle Databaseは、すべてのSQLファイアウォール管理アクションを強制的に監査し、それらを統合監査証跡データ・ディクショナリ・ビュー
UNIFIED_AUDIT_TRAIL
に書き込みます。統合監査ポリシーを作成して、SQLファイアウォール違反をモニタリングすることもできます。SQLファイアウォールをモニタリングおよびトラブルシューティングするもう1つの方法は、SQL_FIREWALL
トレース・ファイル設定を使用することです。 - 既存の許可リストを含め、SQLファイアウォール・メタデータをエクスポートおよびインポートするには、Oracle Data Pumpの
EXPDB
およびIMPDB
ユーティリティを使用します。 - 通常のSQLファイアウォール管理タスクの一環として
DBMS_SQL_FIREWALL.PURGE_LOG
プロシージャを使用して、違反ログを定期的にモニタリングしてパージすることをお薦めします。十分にトレーニングされた環境では、違反ログは大量にはならないと考えられます。 - SQLファイアウォールは、ユーザーが直接発行するSQL文またはユーザーがターゲット・ユーザーのセッションで起動するPL/SQLユニットから発行するSQL文をキャプチャします。
- SQLファイアウォールは、正常に実行されたSQL文のみをキャプチャします。つまり、SQL文がエラーのために実行に失敗した場合、それに対応する文はSQLファイアウォールではキャプチャされません。
- SQLファイアウォールは、内部の問合せ変換(ビューまたはマクロ展開や、Oracle Virtual Private Databaseポリシーの強制など)が実行される前にSQL文をキャプチャします。
- SQLファイアウォールは、キャプチャしたSQL文を正規化し、リテラル値を特殊記号で置き換えてからログ表に格納します。
- セッション・コンテキスト属性(クライアントIPアドレス、オペレーティング・システム・ユーザー名およびオペレーティング・システム・プログラム名)は、セッションの作成時に1回のみチェックされます。
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST
プロシージャまたはDBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQL
プロシージャを次の2つのソースから使用して、いつでも既存の許可リストに追加できます:- 違反ログ:
DBA_SQL_FIREWALL_VIOLATIONS
データ・ディクショナリ・ビュー - キャプチャ・ログ:
DBA_SQL_FIREWALL_CAPTURE_LOGS
データ・ディクショナリ・ビュー
- 違反ログ:
- 許可リストが有効になる前に作成された既存のセッションの場合、SQLファイアウォールでは許可されたコンテキストもチェックされますが、セッション・コンテキストが一致しない場合でも既存のセッションは終了されません。この場合、SQLファイアウォールは違反をログに記録しません。