RACにaudit_trailを実装する2 -Oracle新人奮闘記-2

投稿日: 2006年10月18日

<RACにAuditを実装する2 -Oracle新人奮闘記->
ペンネーム: world famous beagle

先週、初めてAuditに触れた印旛くん。
今週は、運用方法を考えます。
データベース監査は、決まった方法があるわけではなく、個々のデータベース
環境にあった運用をしなければなりません。
Auditの運用は、印旛くんにはかなり難しいようです。
印旛くんの考えた方法も参考にしていただければと思います。

それでは、今週も早速スタート。
———————————————————————-
まず、重要な情報へのアクセスを監査するために、オブジェクト監査を使って、
重要な情報が格納されているテーブルにAuditをつけたけど、ログを見てみると、
わかりやすいのはOracleのユーザ名とOSのユーザ名がわかることかな。
ただ、これはクライアントサーバ環境じゃないと意味がないよね。
もしクライアントとDBサーバの間にWebサーバがあるような、3階層の環境なら、
Webサーバのユーザ名がとれるだけで、クライアントの情報はとれないもんね。
それでいいんだろうか?

「あの、岸田さん。Auditのログを見るとOracleとOSのユーザ名が取れるんで
すけど、これは3階層のシステムだと取れてもあまり意味がなくなる気がする
んですけど」
「そうだね」
「あ、やっぱりそうですか」
「3階層まではとりあえず考えなくていい
DBに直接アクセスしてくるユーザで不正アクセスがあったかどうかが、
わかればいいから」
「なるほど。じゃあ、内部犯行で情報漏えいなどがあった場合を考えればいい
ですね?」
「まあ、そうだね」
「じゃあ、今日は運用方法を考えてみます」
「うん、早くやって」

よし、Auditの実装から運用までの流れをまず考えよう。
今回は、顧客情報、従業員情報のような重要な情報が格納されているテーブル
にAuditをはるオブジェクト監査を実装する。

運用は、どうすればいいかな。
毎日ログがたまる一方だと、いくらOS上にファイル出力していても、その内デ
ィスクが一杯になっちゃうしな。
圧縮してバックアップファイルにしたいよね。

ってことは、RMANを実装した時
(参照:Oracle新人のRACインストール その19
https://old.insight-tec.com/mailmagazine/ora3/vol310.html)
みたいに、
cronにシェルスクリプトを登録して、
定期的にファイルを圧縮してバックアップを取ればいいかな。
どうやってやるんだっけ・・・。
手順的には・・・

1.cronで毎月月初めにシェルスクリプトを実行する
2.audit_logディレクトリ内の作成から
30日以上経過したAUDファイルをtarで固める
3.tarファイルをbzip2で圧縮
4.AUDファイルを削除
5.bzip2ファイルを/tmpにmove

こんな感じかな。
それじゃ、スクリプトを考えよう。

うーーーん。こんな感じかな・・・。
実行してみてと。
お、いけそうだね!

よし、これでいけそうだ!
Auditの実装手順をまとめてみよう。

----------------------------------------------------------------------
Audit実装手順
1.Auditのログを格納するディレクトリを作成する
        例: $ mkdir /home/oracle/audit_log

2.バックアップ用シェルスクリプトを作成する
        $ cd /home/oracle/audit_log
        $ vi audit_bk.sh
        ###audit_bk.sh###
        find /home/oracle/audit_log/ -name '*.aud' -mtime +30
                -exec tar cvf audit_bk`date +%y%m%d`.tar {} ;
        bzip2 /home/oracle/audit_log/*.tar ;
        find /home/oracle/audit_log/ -name '*.aud' -exec rm -Rf {} ;
        find /home/oracle/audit_log/ -name '*.bz2' -exec mv {} /tmp ;

3.cronに登録する(毎月、月初めの午前1時30分にaudit_bk.shを起動する)
        user: root
        # crontab -e
        30 1 1 * * su - oracle -c "/home/oracle/audit_log/audit_bk.sh"

4.初期化パラメータの変更
        SQL> alter system set audit_trail=OS scope=spfile;
        SQL> alter system set 
                audit_file_dest=/home/oracle/audit_log scope=spfile;

5.DBを再起動する
        $ srvctl stop database -d 
        $ srvctl start database -d 

6.Auditを実装する
        例:  SQL> audit select on ;
              監査が成功しました
----------------------------------------------------------------------

「岸田さん、Auditの実装手順をつくってみたんですが・・・」
「見せて」
「あの、いろいろ考えてみてわかったんですけど、
Auditを実装しようとした場合、まず監査をする対象、というか目的を決める
必要がありますよね?何を監査するために、Auditを実装しますみたいな」
「そうだね」
「それで、その目的にあったAuditを実装して、実装したAuditにあう運用方法
を考えなければいけないと思います」
「うん、それで」
「それで、一応スクリプトと運用方法の手順は作ったんですが、
これを実装するわけにはいかないと思います」
「例えば、何を考える必要があるの?」
「あ、はい。一応考えなければいけないことをまとめてみました」

■SYSの監査ができない
・オブジェクト監査を実装してもSYSユーザのログは出力されない
→SYS_OPERATION_AUDIT=TRUEにすることで、
SYSユーザが監査されます

■DBに負荷をかける
・パフォーマンステストをする必要がある
・AUD$表に監査情報を格納する場合、SYSTEM表領域を使用するので、
注意が必要

■OSファイルに書き出す場合の、AUDファイルのセキュリティ問題
・AUDファイルを書き換えることが容易なため、
ファイルのセキュリティ管理の方法を考える必要がある

■ログファイルを見ることが簡単ではない
・長期間溜まったログの中から、必要箇所を見つけるのが困難である

「段階的に、DB監査を実装する場合のファーストステップとしては、Oracleの
機能をつかうんだから、コストもかからないし、いいとは思います。
ただ、Auditを実装するにあたって一番重要なことは、監査をする目的であっ
たり、対象を明確にすることだと思います」
「まあ、そうだね」
「僕が作ったスクリプトだと、内部犯行で重要な情報にアクセスした、ユーザ
情報が取得できますけど、ファイルのセキュリティや、パフォーマンスにどれ
だけインパクトがあるかどうかは、テストしてみないとわかりません」
「じゃあ、やってみて」
「はい」

DB監査はかなりいろんなことを考える必要があるんだなぁ。
Auditの機能を実装するにも、まず監査する目的をはっきりさせないとね。

もっとDBセキュリティを学ぶ必要があるな。
こつこつと積み重ねていくしかない!

印旛くんは、Auditをマスターすべく、
そしてDBセキュリティを深く掘り下げる修行に出ることになりました。

近いうちにまたお会いできますように・・・。