goodbyegangsterのブログ

備忘録的な

Oracle DBの監査ログの取得方法

Oracle DBの監査ログを取得することになったので、その時のメモです。

Oracle DBでの監査ログ取得方法として、12c以降ですと以下2種類の方法が用意されているようです。

  • 非統合監査(従来型監査)
    • 今まであったOracle DB監査機能
    • 本記事で取り上げる内容
  • 統合監査
    • 12cでの新機能

両者の比較、統合監査機能についての説明は、以下の公式資料より。

f:id:goodbyegangster:20191004044234j:plain

f:id:goodbyegangster:20191004044238j:plain

f:id:goodbyegangster:20191004044248j:plain

Oracle Database 12cで進化したセキュリティ機能

AWSのRDSでは、現在、混合モードの統合監査はサポートされているようですが、単独での統合監査はサポートされていないようです。

Amazon RDS Oracle では、次の Oracle データベース機能をサポートしています。

・ 統合監査、混合モード (バージョン 12.2 以降) 詳細については、Oracle ドキュメントの「混合モード監査」を参照してください。

Amazon RDS Oracle では、次の Oracle データベース機能はサポートしていません。

・ 統合監査、Pure モード

AWS RDS - Oracle データベースの機能のサポート

今回は、昔からある非統合監査機能を利用した方法を記載します。

環境情報

AWS RDSを利用しています。

  • Oracle Standard Edition Two 12.2.0.1

出力ログ設定

デフォルトで出力される監査ログの形式は非常に解析しにくいので、XML形式で出力するよう設定しておきます。

初期化パラメータの AUDIT_TRAIL の値を、 xml, extended と指定します。extendの値をつけておくことで、実行されるSQL文やbind変数の値も、監査ログで取得してくれるようになります。

AUDIT_TRAIL

AWSではParamter Groupで指定することが可能です。パラメータグループの AUDIT_TRAIL の値を変更後、RDSインスタンスを再起動します。

確認コマンド。

SQL> show parameters audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      XML, EXTENDED

監査設定

用意されている監査機能の種類は、以下の4種類があります。

f:id:goodbyegangster:20191004044330j:plain

Oracle Direct Seminar - Oracleデータベースの監査

資料上は12cの記述がないですが、12cでもちゃんと使えます。下記にて詳細を確認していきます。

必須監査

必須監査とは、

監査が有効かどうかにかかわらず、デフォルトで監査されるアクティビティ。これらのアクティビティには、管理者権限でのインスタンスへの接続、データベースの起動、データベースの停止などがあります。これらのアクティビティは、オペレーティング・システム監査証跡に書き込まれます。

用語集 - 必須監査

有無を言わさず有効となっている監査機能です。基本的なログを出力してくれています。

DBA監査

DBA監査の機能は、初期化パラメータの AUDIT_SYS_OPERATIONS の値により管理されています。

AUDIT_SYS_OPERATIONSは、トップレベルの操作(SYSASM、SYSBACKUP、SYSDBA、SYSDG、SYSKMまたはSYSOPER権限で接続しているユーザーによって直接発行されたSQL文)の監査を有効または無効にします。(PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルとはみなされません。)

AUDIT_SYS_OPERATIONS

SYSDBA等で接続したユーザーより発行されたSQL文を取得してくれるようです。

尚、AWS RDSでは、SYSユーザーやSYSTEMユーザーといった管理アカウントは、エンドユーザー側に公開されていません。そのため、AWS RDSでは、DBA的操作を実行するためのプロシージャを多数用意してくれています。

Oracle DB インスタンスの一般的な DBA タスク

では、AWS側で用意されているDBAタスク用のプロシージャ実行時のログは、一体どこに出るのでしょうか。パラメータグループには AUDIT_SYS_OPERATIONS の値も用意されており変更可能のようですが、上述のOracleマニュアルでは、 PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルとはみなされません。 と記述ある通り、プロシージャによる操作はDBA監査の対象としてくれないようです。

しかしながら、下記で記載する 標準監査 の機能を利用すれば、プロシージャ実行の履歴は収集することができるので、そういった方法で対応するのが良いのかと思っています。

標準監査

標準監査とは、

標準監査では、SQL文、権限、スキーマ・オブジェクトおよびネットワーク・アクティビティを監査します。AUDIT SQL文を使用して標準監査を構成し、NOAUDITを使用してこの構成を解除します。監査レコードは、データベース監査証跡またはオペレーティング・システム監査ファイルに書き込むことができます。

標準監査の概要

上述のDBA監査では対応できない非DBA的操作を補える機能となります。この機能を利用するには、監査対象とする操作に対して、AUDIT SQL文にて事前に監査設定をしてあげる必要があります。

該当のAUDIT SQL文のリファレンスは下記。

SQL言語リファレンス AUDIT(従来型監査)

実行するDBユーザは、RDSマスターユーザとなっています。上記のOracle DBのマニュアルによると、 AUDIT SYSTEMシステム権限 が必要とあります。

前提条件

SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。

以下からサンプルたち。

ログイン・ログオフの操作を取得。

SQL> audit session;

ユーザーやロールに関する操作を取得。

SQL> audit user;
SQL> audit role;

create, drop, truncate table の実行処理を取得。

SQL> audit table;

admin スキーマsample テーブルへの参照処理を取得。

SQL> audit select on admin.sample;

デフォルト監査オプションの設定。今後作成されたテーブルに対して、参照処理の監査を自動的に設定される。

SQL> audit select on default;

以下から、現在の監査設定を確認する方法。

システム全般に対する監査設定状況の確認。user_nameがnullになっているのは、全ユーザーが対象となっている設定です。

SQL> column user_name format a12
SQL> column proxy_name format a12
SQL> column audit_option format a20
SQL> column success format a12
SQL> column failure format a12
SQL> select * from DBA_STMT_AUDIT_OPTS;

USER_NAME    PROXY_NAME   AUDIT_OPTION         SUCCESS      FAILURE
------------ ------------ -------------------- ------------ ------------
                          CREATE SESSION       BY ACCESS    BY ACCESS
                          USER                 BY ACCESS    BY ACCESS
                          ROLE                 BY ACCESS    BY ACCESS
                          TABLE                BY ACCESS    BY ACCESS

DBA_STMT_AUDIT_OPTS

オブジェクトに対する監査設定の確認する方法。

SQL> set linesize 160
SQL> column owner format a13
SQL> column object_name format a13
SQL> column object_type format a13
SQL> column alt format a5
SQL> column aud format a5
SQL> column com format a5
SQL> column del format a5
SQL> column gra format a5
SQL> column ind format a5
SQL> column ins format a5
SQL> column loc format a5
SQL> column ren format a5
SQL> column sel format a5
SQL> column upd format a5
SQL> column ref format a5
SQL> column exe format a5
SQL> column cre format a5
SQL> column rea format a5
SQL> column wri format a5
SQL> column fbk format a5
SQL> select * from DBA_OBJ_AUDIT_OPTS;

OWNER         OBJECT_NAME   OBJECT_TYPE   ALT   AUD   COM   DEL   GRA   IND   INS   LOC   REN   SEL   UPD   REF   EXE   CRE   REA   WRI   FBK
------------- ------------- ------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
ADMIN         SAMPLE        TABLE         -/-   -/-   -/-   -/-   -/-   -/-   -/-   -/-   -/-   A/A   -/-   -/-   -/-   -/-   -/-   -/-   -/-

DBA_OBJ_AUDIT_OPTS

オブジェクトに対するデフォルト監査設定の確認。

SQL> set linesize 160
SQL> column alt format a5
SQL> column aud format a5
SQL> column com format a5
SQL> column del format a5
SQL> column gra format a5
SQL> column ind format a5
SQL> column ins format a5
SQL> column loc format a5
SQL> column ren format a5
SQL> column sel format a5
SQL> column upd format a5
SQL> column ref format a5
SQL> column exe format a5
SQL> column cre format a5
SQL> column rea format a5
SQL> column wri format a5
SQL> column fbk format a5
SQL> select * from ALL_DEF_AUDIT_OPTS;

ALT   AUD   COM   DEL   GRA   IND   INS   LOC   REN   SEL   UPD   REF   EXE   FBK   REA
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
-/-   -/-   -/-   -/-   -/-   -/-   -/-   -/-   -/-   A/A   -/-   -/-   -/-   -/-   -/-

ALL_DEF_AUDIT_OPTS

設定した監査設定を削除する方法は、以下の noaudit コマンドより。

NOAUDITコマンド

安易に設定すると、当然ですがすごくログが出力されることになります。

FGA(ファイングレイン)監査

FGA監査とは、標準監査より細かく監査設定(収集したい情報の定義)をしたい場合に利用できる機能です。なお、この機能はEnterprise Editionでないと利用できません。

ファイングレイン監査では、ポリシーを作成して、監査が実行される特定の条件を定義できます。これにより、内容に基づいてデータ・アクセスを監視できるようになります。問合せと、INSERT、UPDATE、およびDELETE操作に対して詳細な監査を提供します。たとえば、中央の税務当局は、所員による権限外の閲覧を防止するために、どのデータがアクセスされたかを判断できる十分な詳細を使用して納税申告書へのアクセスを追跡する必要があります。特定の表に対して特定のユーザーによってSELECT権限が使用されたことを知るのみでは不十分です。ファイングレイン監査によって、完全な監視機能が実現します。

通常、ファイングレイン監査ポリシーは、選択的監査の条件である、表オブジェクトに対する単純なユーザー定義SQL述語に基づいています。フェッチ中に行がポリシーの条件を満たすと、その問合せが監査対象となります。

ファイングレイン監査を使用すると、次のタイプのアクションを監査できます。

・午後9時から午前6時の間、または土曜日と日曜日に表にアクセスする場合

・社内ネットワーク外部のIPアドレスを使用する場合

・表の列を選択または更新する場合

・表の列の値を変更する場合

ファイングレイン監査の概要

設定を行うには、 DBMS_FGA というパッケージ内にあるプロシージャを利用することになります。

DBMS_FGAパッケージ

以下はサンプル。 ADD_POLICY というプロシージャにて、FGA監査設定を追加することができます。Enterprise Editionの環境がなかったので、下記SQL文の今回実行テストしていません。

BEGIN
   DBMS_FGA.ADD_POLICY(
   object_schema      =>  'admin',
   object_name        =>  'sample',
   policy_name        =>  'sample_fga_policy',
   audit_condition    =>  'col1 > 0',
   audit_column       =>  'col1,col2',
   handler_schema     =>   NULL,
   handler_module     =>   NULL,
   enable             =>   TRUE,
   statement_types    =>  'SELECT',
   audit_trail        =>   DBMS_FGA.XML + DBMS_FGA.EXTENDED,
   audit_column_opts  =>   DBMS_FGA.ANY_COLUMNS);
END;
/

各パラメータの詳細については、上記のリファレンスリンクを確認してください。用意されているプロシージャには、定義のdropやdisableするためのものも用意されているので、その点に関しても公式リファレンスを参照すること。

設定されている情報は、以下の ALL_AUDIT_POLICIES というViewより確認可能です。

ALL_AUDIT_POLICIES