Audit Trailについての検証 その4

投稿日: 2003年8月27日

Oracleデータベースの監査機能である、Audit Trail に関する性能検証、機能検証をLevel1-4でまとめた人気コンテンツのeBook版。標準監査機能の基本から応用まで全8回で解説。

Level 1)Audit sessionなどによる文監査
Level 2)オブジェクト監査
Level 3)ファイングレイン監査 Basic
Level 4)ファイングレイン監査 Advanced

*eBook版のダウンロードをご希望の方は、画像をクリック

<Audit Trailについての検証 ~その4~>
ペンネーム ベロ

今回はより柔軟な監査が実施できる9iからの新機能「ファイングレイン監査」
について見ていく予定でしたが、その前にどうしてもオラクルのセキュリティ
に関して見ておきたいことがあるので、ファイングレイン監査は来週に持越し
にします。

今週はデータの外部漏洩を防ぐことは可能か?を検証していきたいと思います。

昨今、データの外部漏洩に対する考え方がシビアになってきているとはいえ、
なかなか手が回っていないのが現状だと思います。
皆さんはいつデータが外部媒体へコピーしたか(例えばエクスポートなど)を
把握しているでしょうか?

誰が、いつ、データをコピーしたのかを把握することは、AUDITによりデータ
がどのようにアクセスされたかよりレベルの高い監査項目となります。

ということで、データ漏洩の可能性があるオペレーションを考えてみよう。
主に以下の2つが考えられる。

1. expコマンドによる外部ファイルへのデータ漏洩
2. SQL*Plusコマンドのspoolによる外部ファイルへデータ漏洩

これらのオペレーションについて監査及び監視は可能なのであろうか?

expコマンドやsqlplusコマンドに関しては、OSから適切なパーミッションが
与えられて然るべき所であるが、皆様のサイトでは適切なパーミッションで
運用されているでしょうか?

expやsqlplusのOS的見地からのセキュリティは、別の機会に譲るとしてオラクル
的にどのようにセキュリティを高めていけるのかを今回は検証したいと思います。

——————————————————————————-
1. expコマンドによる外部ファイルへのデータ漏洩
——————————————————————————-

基本的にエクスポートの監査及び監視をする機能をオラクル自身は実装してい
ない。しかし、データ漏洩に繋がるエクスポートの監査するニーズは高いと思
われる。

何とかエクスポートの監査はできないものか?ということで、エクスポートの
仕様としてexp実行時にオラクルが発行する以下のSQLに着目してみる。

■□■□■□■□■□■□■□■□■□■□■□■
□                                          □
■      SELECT FUNC_SCHEMA                  ■
□            ,FUNC_PACKAGE                 □
■            ,FUNC_PROC                    ■
□            ,CALLARG,OBJ_TYPE             □
■            ,USER_ARG                     ■
□      FROM   SYS.EXPACT$                  □
■      WHERE  SYS.EXPACT$.OWNER = :b1      ■
□      AND    SYS.EXPACT$.NAME  = :b2      □
■      AND    SYS.EXPACT$.CODE  = :b3      ■
□      ORDER BY SYS.EXPACT$.CALLORDER;     □
■                                          ■
□■□■□■□■□■□■□■□■□■□■□■□

つまりSYS.EXPACT$の監査を実施することで、expコマンドの監査が可能である。

※ EXPACT$(EXPort ACTion表)
EXPACT$表はIMPORT Utilityが実行するアクションを記録する。これにより、
IMPORT UtilityはInternal Triggerを再作成することができます。

では、実際にEXPACT$表に監査を実施し、エクスポートの監査を行ってみよう。

audit all on sys.expact$ by session;

監査が成功しました。
$ exp userid=sample_a/sample_a file=sample.dmp
・・・
エクスポートは警告なしで正常終了しました。

□■
クライアントマシン「WIN2K」から同様にexpを実行
・・・
エクスポートは警告なしで正常終了しました。

col os_username for a15
col export_user for a15
col terminal for a10
col export_time for a25

select os_username
           ,username                                   export_user
           ,terminal
           ,to_char(timestamp,'yyyy/mm/dd hh24:mi:ss') export_time
     from   dba_audit_object
     where  obj_name = 'EXPACT
OS_USERNAME               EXPORT_USER     TERMINAL   EXPORT_TIME
------------------------- --------------- ---------- ---------------------------
oracle                    SAMPLE_A        pts/0      2003/08/25 17:06:12
Administrator             SAMPLE_A        WIN2K      2003/08/25 18:15:55  connect system/****
insert into product_user_profile
   (product
   ,userid
   ,attribute
   ,scope
   ,numeric_value
   ,char_value
   ,date_value
   ,long_value)
values
   ('SQL*Plus'
   ,'SAMPLE_A'
   ,'SPOOL'
   ,null
   ,null
   ,'DISABLED'
   ,null
   ,null);

commit;

ここでSAMPLE_Aユーザで接続し、spoolコマンドを発行してみると・・・

spool test
SP2-0544: コマンド: spoolが無効です。

SQL*PlusからSAMPLE_Aユーザでのspoolコマンドが無効化されていることが確認
できた。

また、さらにセキュリティを高めるために、このPRODUCT_USER_PROFILE表を監査
対象にすることをお忘れなく!

やっと、夏真っ盛りの茅ヶ崎より。