Oracle 11g 暗号化 + 監査

投稿日: 2007年12月12日

<Oracle 11g 暗号化 + 監査 >
ペンネーム: ぽっちゃりメタボン 他2名

読者の皆様こんにちは。
いつもご愛読ありがとうございます。
おかげさまで、今回の配信は2007年内最終となりました。
いやー、2007年最後を飾れるなんて・・・感激です。

来年は、少し新しいチャレンジをする予定です。
今年同様、ma-e-no-me-ri spiritsで邁進する所存ですので
今後ともメタボンを・・・
いやインサイトテクノロジーをよろしくお願いします。

また読者の皆様だけに、先行してお知らせします。
なんと!インサイトテクノロジーの製品やサービスに特化したムック本
「Insight Press」が翔泳社より発売されます。

http://www.amazon.co.jp/Insight-Press-%E5%86%85%E9%83%A8%E7%B5%B1%E5%
88%B6%E6%99%82%E4%BB%A3%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%
E3%83%BC%E3%82%B9%E5%BC%B7%E5%8C%96%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%
BC%E3%82%B7%E3%83%A7%E3%83%B3PISO-Performance-Insight%E5%BE%B9%E5%BA%
95%E6%B4%BB%E7%94%A8/dp/4798115991/ref=sr_1_2?ie=UTF8&s=books&qid=1197360543&sr=8-2

弊社社内すべての英知を結集して社員全員で作成した本です。
皆様のデスクに一冊、ご自宅の書斎に一冊、鞄に一冊!
ぜひご覧ください。

それでは、今週もはりきって検証しちゃいます。

▼ はじめに

先週のメールマガジン「表領域暗号化」を皆さん読んでいただけましたでしょ
うか?表領域をすべて暗号化するという(実際は表領域配下のデータファイル)
機能の、データベースセキュリティにおける、その位置づけと適用範囲がイ
メージできたと思います。社内にてその後、引き続き検証を実施していったこ
とろ、暗号化された表領域ではデータファイルのサイズが結構大きくなる傾向
がありました。ま、当然と言えばそうなんですが・・・。データベースに格納
するデータの暗号化も要件に含まれるような構築案件や、既存データを暗号化
された表領域へ移行するなどのケースでは多少考慮が必要ですね。

先週、へぇーと余裕かましてメルマガを見ていると、ふと思いました。
「おいらが検証した”LogMiner”って、データが暗号化されていて、リカバリや
監査ができるのだろうか?」と。

そんな事を考えつつ、11gの新機能をぱらぱら調べていると、

なんと!

TDEの新機能として “LogMiner対応” の文字が!!

はて、これは一体どういうことでしょう?
10gまでは、対応していなかったということ?

これは、検証せずにはいられません!
ということで・・・

今回のテーマは、「暗号化 + 監査」のセキュリティ機能マッシュアップで
むりやり執拗にデータベースをセキュアしてみようと考えついちゃいました。

前回も紹介しましたが、データベースセキュリティの基本といえば・・・

1.ユーザー認証とユーザー一元管理
2.アクセスコントロール
3.暗号化(格納データおよび通信データ)
4.監査

今回は、前回検証時に使用したTDEを活用してカラムを暗号化し、さらにメタ
ボン唯一の得意分野であるLogMinerを使用して「監査」してみます。
はたして、データは見えるのか?
暗号化したのに、データは見えて良いのか?悪いのか?

※注意
今回の検証は、表領域暗号化ではなくカラム単位で暗号化可能なTDEを使用。

*TDEについては「Oracleで暗号化に関する検証」を参照してください。
https://old.insight-tec.com/mailmagazine/ora3/vol271.html

********今回の検証内容********
1.10gR2 環境においてTDEで暗号化したカラムを更新(UPDATE)する
→ 更新前後の値がみられるか?
2.11g 環境においてTDEで暗号化したカラムを更新(UPDATE)する
→ 更新前後の値がみられるか?
3.REDOダンプの中身はどうなっているか?
******************************

まずは、検証環境の準備から。

・検証用ユーザ作成
        SQL> create user &username identified by &username;

・テーブルを作成して、データを入れる
        通常のテーブル
        SQL> create table metabon_normal
                      (id number
                       ,name varchar2(40)
                       ,sal number);
         SQL> insert into metabon_normal values (1,'metabon1',500);
         SQL> insert into metabon_normal values (2,'metabon2',1000);
         SQL> insert into metabon_normal values (3,'metabon3',1500);
         SQL> commit;

         暗号化されたテーブル(sal列を暗号化)
         SQL> create table metabon_encrypt(id number , name varchar2(40)
                   ,sal number encrypt);
         SQL> insert into metabon_encrypt values (1,'metabon1',500);
         SQL> insert into metabon_encrypt values (2,'metabon2',1000);
         SQL> insert into metabon_encrypt values (3,'metabon3',1500);
         SQL> commit;

・最小サプリメンタルロギングを有効にする
        SQL> alter database add supplemental log data;

・sal列をupdateする
        SQL> update metabon_normal set sal=sal*2;
        SQL> update metabon_encrypt set sal=sal*2;
        SQL> commit;

準備完了!
早速、LogMinerで、それぞれのテーブルの更新情報を見てみます。
まずは、10gを見てみるのだ。

1.10gR2 環境においてTDEで暗号化したカラムのREDO情報を確認する

OS: RedHat ES4 update4
Oracle: 10gR2(10.2.0.3)

SQL_REDO
----------------------------------------------------------------------
update "METABON"."METABON_NORMAL" set "SAL" = '1000'
            where "SAL" = '500';

update "METABON"."METABON_NORMAL" set "SAL" = '2000'
            where "SAL" = '1000';

update "METABON"."METABON_NORMAL" set "SAL" = '3000'
            where "SAL" = '1500';

update "METABON"."METABON_ENCRYPT" set "SAL" = Unsupported Type
            where "SAL" = Unsupported Type;

update "METABON"."METABON_ENCRYPT" set "SAL" = Unsupported Type
            where "SAL" = Unsupported Type;

update "METABON"."METABON_ENCRYPT" set "SAL" = Unsupported Type
            where "SAL" = Unsupported Type;

おーーーっと。

やはり、”METABON_ENCRYPT”の方は、SAL列の値が”Unsupported Type”
となっていますね。
10gR2まではTDEを使用して、データを暗号化すると、LogMinerではデータの参
照ができませんね。
これじゃ、監査もリカバリもできないな・・・。

気持ちを入れ替えて、11gでやってみるのだ。

2.11g 環境においてTDEで暗号化したカラムのREDO情報を確認する

OS: RedHat ES4 update4
Oracle: 11gR1 (11.1.0.6)

SQL_REDO
----------------------------------------------------------------------
update "METABON"."METABON_NORMAL" set "SAL" = '1000'
            where "SAL" = '500';

update "METABON"."METABON_NORMAL" set "SAL" = '2000'
            where "SAL" = '1000';

update "METABON"."METABON_NORMAL" set "SAL" = '3000'
            where "SAL" = '1500';

update "METABON"."METABON_ENCRYPT" set "SAL" = '1000'
            where "SAL" = '500';

update "METABON"."METABON_ENCRYPT" set "SAL" = '2000'
            where "SAL" = '1000';

update "METABON"."METABON_ENCRYPT" set "SAL" = '3000'
            where "SAL" = '1500';

本当に見えるのかと、若干疑いながらやってみたものの、METABON_ENCRYPTも
データがしっかりと見えます。
TDEの11g新機能、「LogMiner対応」は確実にされてますね。

本当にREDOログが暗号化されているのか、念のためダンプも見てみましょう。

3.REDOダンプの中身はどうなっているか?

まずは、10g。

METABON_NORMALの更新処理が含まれるREDOダンプは、こんな感じ。

[UNDO]
col  2: [ 2]  c2 06  ← "sal = 500"

[REDO]
col  2: [ 2]  c2 0b  ← "sal = 1000"

METABON_ENCRYPTの更新処理が含まれるREDOダンプは、こんな感じ。

[UNDO]
col  2: [52]
 ad 6b 85 99 6c 64 28 b0 42 15 6d 19 89 2d 3c 7f ea bc 91 96 78 43 3a 7b 3f
 05 59 f5 bb 32 d9 18 90 89 a2 a1 a1 08 37 8d a8 5e 38 dc c7 fd ff 80 05 01
 a1 25 ← "sal = ????"

[REDO]
col  2: [52]
 98 32 e0 9f 63 6f ab 01 c1 54 95 9a c0 3b 2b f7 73 72 14 61 ef af 4e b4 42
 d0 5d 4f 5b 9f 1a 35 2b 5e f2 b2 ba 61 d8 61 89 4d 62 26 bc c4 0e 11 d0 55
 08 0f ← "sal = ????"

やっぱり暗号化されてます。

お次は、11g。

METABON_NORMALの更新処理が含まれるREDOダンプは、こんな感じ。

[UNDO]
col  2: [ 2]  c2 06  ← "sal = 500"

[REDO]
col  2: [ 2]  c2 0b  ← "sal = 1000"

METABON_ENCRYPTの更新処理が含まれるREDOダンプは、こんな感じ。

[UNDO]
col  2: [52]
 9c 61 f8 44 4b 7b da ac 0c 99 2c 3f a0 05 ee 41 f0 1a d7 29 e2 27 18 45 84
 06 ec fd c9 73 84 41 45 d6 02 c6 67 94 84 c7 d5 68 b5 de 1f be 3e e4 1d ed
 ea 44 ← "sal = ????"

[REDO]
col  2: [52]
 40 6c 84 64 96 b4 22 d9 84 f4 23 d6 e7 a7 17 ee c7 08 a6 83 ae b4 26 a2 e5
 bd ab 3a e9 52 92 7e b4 f1 a9 74 2c 3b 96 62 1c fc 39 c8 8d 40 be 9a 89 ca
 00 24 ← "sal = ????"

ふむ。
REDOログは、10gであっても11gであっても、暗号化されていました。

********検証結果のまとめ********

1.10gR2 環境においてTDEで暗号化したカラムを更新(UPDATE)して
更新前後の値が参照可能か?
→ ”参照できない”
2.11g 環境においてTDEで暗号化したカラムを更新(UPDATE)する
更新前後の値がみられるか?
→ ”参照できる”
3.REDOダンプの中身はどうなっているか?
→ 10gR2、11gともにencrypt指定カラムの値は暗号化されていた

やはり、TDEを使用してデータを暗号化すると、10gまではLogMinerではデータ
が参照できなかったが11gでは参照できるようになってます。
ふむふむ・・・マニュアル通りである。

今回は、データが暗号化されている場合であってもLogMinerを使用してどこま
で「LogMiner監査」ができるのか? を確認しました。11gで対応されたという
事実から推測すると、データが暗号化されているからといってもLogMinerを使
用するのであればデータはその変更内容は確認できるようになったほうがよい
ということですねー、ふ~~~~ん。
ただ、裏を返すとデータベースのバージョンでできる事とできないことがある
ということで、正直少し気を使いマスますね・・・。

現実として、「暗号化 + LogMiner 監査」って、Too Much、なかなかここまで
凝った対策を施す企業様はいないでしょう。

やはり、データベースセキュリティはリスク・オリエンティッドで検討したほ
うが良いということでしょうか。

2007年は、さまざまな法令に合わせたデータベースセキュリティ製品が人気を
博しました。その中でも僭越ではありますが弊社PISOは大健闘!
パチ!パチ!!パチ!!!
茅ケ崎にある開発部隊に感謝し、パートナー様へ感謝し、お客様へ感謝して
今年を締めくくりたいと思います。

ありがとうございましたっ!!。

あっという間に一年が過ぎた 茅ヶ崎より