こんにちは。SI部の秋葉です。

OracleDBを管理についての第二回目は、データベースのセキュリティについて記載いたします。

データベースは、個人情報を含む多くの機密情報を扱うことがあります。
その場合は、データベース管理者(以下、DBA)含め、セキュリティ対応を徹底する必要があります。

今回は、データベースに対するセキュリティについての理解を深めるため、
権限最小化の原則、データベース監査について記載いたします。

1.【権限最小化の原則】

業務を遂行するに当たり必要な最小限の権限のみをユーザーに付与すること。

権限最小化の原則を徹底することにより、
本来そのユーザーにとって不要なデータの問い合わせ、変更処理を抑止することになり、
意図的、偶発的な事故発生の可能性が少なくなります。

・不要なソフトウェアはインストールしない

セキュリティホールが発生する可能性を抑えることができます。
また、マルウェアと疑われるものは導入しない。

・不要なサービスはアクティブにしない

サービスを減らすことにより、攻撃対象数を減らします。

・OS、データベースへのアクセス権は必要なユーザーにのみ付与する

アカウント数を減らすことにより管理対象を少なくし、
アカウントを最新の状態に保ちやすくなる。

・root、administratorへのアクセスを制限する

管理者アカウントは、複数の管理者で共有すべきでない。

・SYSDBA、SYSOPERアカウントへのアクセスを制限する

デフォルトアカウントではなく、
必要最小限の管理者にそれぞれのアカウントを作成し、権限を付与して管理する。
これらのアカウントは、監査する必要がある。

・ユーザーのアクセスを業務に必要なデータベースオブジェクトにのみ制限する

必要以上のオブジェクトやサービスにアクセス権を付与すると、
意図的、偶発的な事故発生の可能性が高くなります。

・データディクショナリの保護

Oracleシステムの内部情報も含まれるため、
データディクショナリを保護しないと悪意のあるユーザーによる
システム侵入やシステム破壊の恐れがある。

O7_DICTIONARY_ACCESSIBILITY初期化パラメータがTRUEの場合、
DROP ANY TABLE権限が付与されているユーザーが、
データディクショナリを意図的、偶発的に削除される可能性がある。

O7_DICTIONARY_ACCESSIBILITY初期化パラメータはFALSEに設定し、
必要なユーザー単位に、GRANTコマンドで付与するか、SELECT ANY TABLE権限を付与してあげる。

・PUBLICユーザーからの不要な権限取り消し

PUBLICユーザーがパッケージのEXECUTE権限を付与されている場合、
全てのデータベースユーザーがそのパッケージを使用できてしまいます。
権限最小化の原則に従い、パッケージを使用するユーザー単位にEXECUTE権限を付与するように留意しましょう。

・UTL_SMTP

DBをSMTPメールサーバーとして使用する。
メールメッセージの不正交換の危険性があります。

・UTL_TCP

DBがネットワークサービスに対して接続を確立できるようにします。
DBとネットワーク間でデータを送信される可能性がある。

・UTL_HTTP

DBが、HTTPを介してデータを要求、検索ができる。
悪意のあるWebサイトにデータが送信される可能性がある。

・UTL_FILE

OS上のファイルにアクセスできます。
任意のファイルに不正アクセスされる可能性がある。

・OSディレクトリへの制限

UTL_FILE_DIR初期化パラメーターで設定する事により、
PL/SQLでOSディレクトリへのアクセスが可能になります。
UTL_FILE_DIR=*とした場合、Oracleインスタンスがアクセスできるデータファイルや
データベースファイルを破壊する危険性があります。

・リモートデータベース認証について

リモートOS認証により、
クライアントPC上でOSユーザー名とデータベースユーザー名が一致した場合、
データベースパスワードを入力せずにデータベースインスタンスに接続することができます。

PCから接続するユーザーのOS認証だけで信頼できる場合のみ、
REMOTE_OS_AUTHENT初期化パラメータ―を、TRUEにする。

・管理権限の制限

データベースユーザーに必要以上の権限を付与しない。

権限を付与するGRANT権限、DBAロール、SYSDBA、SYSOPER権限
そのほか、DROP ANY TABLE権限を付与する際には慎重に行ってください。

・特権アカウントの保護

SYSDBA、SYSOPER、SYSASM権限を付与されているユーザーは、
データベースインスタンスや自動ストレージ管理インスタンスの管理ができるため、
厳しい認証を受ける必要があります。

サーバーにローカル接続した場合は、特権OSグループのメンバーであるかOSで認証します。
リモートから接続した場合、パスワードファイルを使用して認証します。

以下のように、ORAPWDユーティリティを使用して作成します。

orapwd file=[パスワードファイル名] password=[パスワード] entries=[特権ユーザー数] ignorecase=[N/Y]
※パスワードの大文字・小文字を区別する場合は、N。区別しない場合は、Y。

2. 【データベース監査】

ユーザーが適切な操作を行っているか、監視を行う。

・必須監査

他の監査オプションの設定の有無にかかわらず、常に取得する監査情報
簡易者権限によるインスタンス接続、データベース起動停止のたびに、
OSユーザー、端末識別子、タイムスタンプを監査レコードとして、
OSファイルやイベントビューアーに出力する。

・標準データベース監査

監査対象のイベントに対して、発生させたユーザー、端末接続し、タイムスタンプ情報を取得できます。

監査オプションの設定

以下3つの監査がある。

・「SQL文監査」
表に影響するDDL文を監査。監査対象のユーザーも指定できる。

・「システム権限監査」
ユーザーに付与されたシステム権限行使するSQLを監査する。
監査対象のユーザーも指定できる。

SQL文監査、システム権限監査の構文

kannsa-r-1

監査2

・「オブジェクト権限監査」
特定のスキーマオブジェクトに対して、特定のSQLに対する監査
データベースの全てのユーザーに常に実行される。

オブジェクト権限監査の構文

kannsa-r-2

監査4

標準データベース監査イメージ

監査5

・AUDIT_TRAIL初期化パラメーター
監査を使用可能にするために設定する。
パラメーターの設定は、以下のOracleリファレンスをご確認ください。
http://docs.oracle.com/cd/E16338_01/server.112/b56311/initparams017.htm

※補足
OSを設定した場合、OSの監査システムに格納されます。
・Windows ~ イベントビューアーに記録されます。
・UNIX、LINUX ~ AUDIT_FILE_DEST初期化パラメータ―で設定したディレクトリに格納されます。

DBを設定した場合、データディクショナリを検索し証跡の確認をします。
・DBA_AUDIT_TRAIL ~ すべての監査エントリを確認できる
・DBA_AUDIT_EXIST ~ AUDIT EXIST/NOT EXISTのレコードを確認できる
・DBA_AUDIT_OBJECT ~ スキーマオブジェクトに関するレコードを確認できる
・DBA_AUDIT_SESSION ~ すべての接続を確認できる
・DBA_AUDIT_STATEMENT ~ SQLの監査レコードを確認できる

・値ベース監査

データに対する変更を監査し、変更された実際の値も取得します。
値ベース監査は、データベーストリガーで実装し、独自の監査証跡に格納することができます。
データの変更を行うたびに監査トリガーを実行するために、パフォーマンスの劣化の原因にもなりえます。

INSERT、 UPDATE、 DELETE実行時に監査証跡用のテーブルに ID、NAMEを格納するトリガーの例です。

監査6

値ベース監査のイメージ

監査7

また、データベーストリガーを使用すれば、値ベース以外の証跡も記録できます。
ログイントリガー等を使用して、ログインユーザー情報の取得なども可能です。

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

SQLを監査し、特定の列や行を対象にした監査を行う。
実際に実行したSQLも取得します。
DBMS_FGA.ADD_POLICYプロシージャを使用して、対象の表やビューに対して監査ポリシーを作成します。
作成構文・オプションは以下を参照してください。
http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_fga.htm#CDEIECAG

列指定の場合、検索の際にSELECT句に対象列がなければ、監査対象にはなりません。

FGA監査証跡の確認
以下のデータディクショナリにアクセスしてFGAの監査証跡が確認できます。
DBA_FGA_AUDIT_TRAIL ~ すべてのFGAイベントを確認できる。

標準データベース監査とFGAでは、異なるデータディクショナリに結果が格納されますが、
AUDIT_TRAIL初期化パラメーターにて、DB.EXTENDEDを指定した場合、
DBA_COMMON_AUDIT_TRAILビューにおいて標準データベース監査と、FGA監査のレコードが確認できます。

また、以下は電子メール・アラートをファイングレイン監査ポリシーに追加する方法です。
表の選択または変更しようとしていることを通知する電子メール・アラートについても記載されています。

http://docs.oracle.com/cd/E16338_01/network.112/b56285/auditing.htm#CHDDHGDC

・DBA監査

SYSDBAおよびSYSOPERによる操作は標準監査やファイングレイン監査の監査証跡には残らないため、
SYSユーザーを監査するためにはこのDBA監査が必須となります。

SYSDBAおよびSYSOPER権限で接続したユーザーの接続、データベースの起動・停止に関して、
AUDIT_FILE_DEST初期化パラメータで指定した位置にログが出力される。

さらに、AUDIT_SYS_OPERATIONS初期化パラメータをTRUEに設定することで、
SYSDBAおよびSYSOPER権限で接続したユーザーのすべての操作を監査しOSファイルに出力できる。
この監査をDBA監査と呼びます。

まとめ

一人のユーザーがすべての権限を持つことは大きな脅威となりえるため、
DBAについても、それぞれに職務権限を割り当て、それぞれの権限を持ったユーザーが相互監視することによって、データベース内にて不正アクセスを行うことができない環境を構築する必要があります。

今回は、Oracleデータベースが提供している監査について記載しましたが、
このほかに、セキュリティ対策のためのOracle Database Vaultという製品もあります。

Oracle Database Vaultを使用することで、内部関係者、法令順守要件、および職務分離の実施という、
現在も課題である最も難しいセキュリティ問題に対応できます。

提供されている監査機能や、製品をフル活用して、セキュリティ対策を実施していきましょう。