データベースにおけるセキュリティ対策は、システムがネットワーク内部に存在するためか、その他システムと比べて見過ごされがちです。しかし、データベースは組織の重要な機密データを直接管理しているため、「多層防御」というセキュリティ戦略の観点からみても、むしろ強固な対策が求められます。

それではデータベース・セキュリティを始める際、どこから着手すればよいのでしょうか?

 

まず、データベース・セキュリティを始める上で必要なことは、現状のデータベース構成と発生しうるリスクを正確に把握し、必要な機能を特定することです。また、企業としてCISベンチマークやEU GDPRなど、関連する規制やガイドラインに正しく準拠しているかを確認し、必要な対策を講じることも重要になってくるでしょう。

 

Oracleでは、上記のようなデータベースのセキュリティ診断を簡単に行うツールとして「Oracleデータベース・セキュリティ診断ツール(DBSAT)」を提供しています。このツールは、Oracleと保守契約を結ばれているお客様であれば、My Oracle Supportページから無償でダウンロードいただけます。
お持ちのOracle Database環境にてDBSATを実行することにより、OracleのベストプラクティスやCISベンチマークの推奨事項に基づき、データベースの構成やユーザー、権限、機密データなどを分析、セキュリティリスクを診断します。この診断により、現状のシステムに眠るセキュリティリスクを特定し、それに対処するための具体的な対策の検討をサポートします。

 

この記事では、DBSATの基本的な概要とコンポーネント、そしてレポート出力の具体的な手順について解説していきます。
データベース保護のための第一歩として、ぜひDBSATを活用していきましょう!


DBSATとは?

Oracleデータベース・セキュリティ診断ツール、通称DBSAT(Oracle Database Security Assessment Tool)はJavaとPythonで作成された完全自動化スクリプトです。データベースの設定・構成から、運用上リスクを招く恐れのある部分を特定し、リスク低減のための対策や制御方法を評価レポートとして出力します。

DBSATで取得できる評価レポートとして、「セキュリティ評価レポート」「機密データ評価レポート」の2つがあります。

 セキュリティ評価レポート 

・データベース内の潜在的なセキュリティリスクを洗い出すためのレポート
・設定やユーザー、権限、パッチ状況、暗号化の有無など、さまざまな側面から、データベースにおけるセキュリティリスクを診断・評価します
 機密データ評価レポート ・データベースに格納されている機密データを特定するためのレポート
・クレジットカード番号や住所、電話番号など、機密性が高いデータがどこに保存されているかを明確にします

セキュリティリスクを把握するためには、まずはセキュリティ評価レポートを見てみることが大切です。リスクを可視化することで、どの部分に対策が必要か明確化します。

また、記事の後半では、セキュリティ評価レポートを出力する手順を解説しています。

DBSATはMy Oracle Support (MOS) アカウントをお持ちであれば、以下のリンクからダウンロードすることができます。

Doc ID 2138254.1 Oracle Database Security Assessment Tool (DBSAT)

ドキュメント

2024年9月現在、DBSATの最新バージョンは3.1.0です。詳細については公式ドキュメントをご参照ください。

DBSATのコンポーネント

DBSATは「Collector」「Reporter」「Discover」の3つのコンポーネントから構成されており、それぞれの役割は次のとおりになっています。

  • Collector:データベースとOSの情報を収集してJSONファイルに出力。
  • Reporter:収集したデータをもとにセキュリティ評価レポートを生成。
  • Discover:データベース内の機密データを検索・評価し、機密データ評価レポートを作成。

実行時のポイントとしてまず抑えておきたいことは、以下の2点です。

  1. セキュリティ評価レポートを取得したい場合は、CollectorとReporterを実行します。
  2. 機密データ評価レポートを取得したい場合は、Discoverのみを実行します。

実行時に重要なポイントを押さえたところで、各コンポーネントの詳細について説明します。

Collector

  • SQLコマンドとOSコマンドを実行し、データを収集してJSONファイルに出力します。
  • SQLコマンドでは主にデータベースのディクショナリビューを参照し、OSコマンドではプロセス情報やOracleネットワーク設定ファイルの内容などを調査します。 アプリケーションのデータへは参照を行いません。
  • 実行ツールとしてはSQL*Plusを使用します。リモートで実行することも可能ですが、この場合、OSデータは収集されません。網羅的なデータ収集を希望する場合、データベースサーバー上で実行することをおすすめします。
  • データベースの構成ファイルとディクショナリビューからのみデータを収集するため、実行にあたりデータベースのパフォーマンスが低下することはありません。

Reporter

  • Collectorが生成したJSONファイルを整形し、セキュリティ評価レポートを生成します。
  • レポートはHTML、Excel、JSON、テキストの4つの形式で出力されます。
  • 実行にはJava環境が必要ですが、データベースサーバー以外の環境でも実行することができます。

Discover

  • 設定ファイルと正規表現パターンファイルに基づいてSQLで機密データを検索し、その結果をもとに機密データ評価レポートを生成します。
  • 正規表現パターンを用いてメタデータをスキャンし、どこにどれほどの機密データが保存されているかを特定します。特に個人情報など、保護すべきデータの管理に役立ちます。
  • レポートはHTML、CSVの2つの形式で出力されます。
  • Discoverは独立した単体のモジュールとして動作するため、CollectorやDiscoverの実行は不要です。
  • 機密データのタイプを定義するパターンファイルとして欧州の主要言語のものが準備されていますが、日本語については提供されていません。そのため、実行にあたり、別途日本語に合わせたパターンファイルを作成する必要があります。

前提条件とサポートされる環境

DBSATがサポートする環境は以下の通りになります。

OS・Linux (x86-64, 64bit Arm)
・Windows x64
・HP-UX IA (64bit)
・IBM AIX (64bit)
・Linux on zSeries (64bit)
DBバージョン  Oracle Database 11.2.0.4 以降
DBサービスオンプレミス
Oracle Database Standard Edition 2
Oracle Database Enterprise Edition

クラウドサービス
・Autonomous Databases (Serverless, Dedicated, Cloud@Customer)
・Autonomous JSON Database
・Oracle Exadata Database Service (Dedicated, Cloud@Customer)
・Oracle Base Database Service (BaseDB Enterprise Edition, Standard Edition)

 

その他注意点

  • Windowsの場合、OSデータの収集はスキップされます。
  • Unix/LinuxではBashで実行する必要があります。

詳細な前提条件についてはこちらをご確認ください。 


DBSATでセキュリティ評価レポートを取得してみよう!

ここでは、DBSATを使用してセキュリティ評価レポートを取得する手順について説明します。
実行例は以下の環境での実行結果に基づいています。

  • OS: Oracle Linux 8.10
  • DBバージョン : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 
  •  Oracle Database Security Assessment Tool: DBSAT Release 3.1.0

1. DBSATのダウンロードとインストール

DBSATをダウンロードするには、My Oracle Supportにログインし、以下のリンクから入手します。

MOS: Doc ID 2138254.1

ページにアクセス後、「I AGREE」を選択すると、dbsat.zipファイルのダウンロードが開始されます。

データベースサーバーに/home/oracle/dbsatディレクトリを作成し、ダウンロードしたdbsat.zipをその配下に展開します。

実行例

# Oracleユーザーに切り替える
$ sudo su - oracle
# dbsatディレクトリを作成
$ mkdir –p /home/oracle/dbsat

# dbsat.zipをdbsatディレクトリ配下で展開
$ unzip /path/to/dbsat.zip –d /home/oracle/dbsat
Archive:  ./dbsat/dbsat.zip
  inflating: /home/oracle/dbsat/dbsat
  inflating: /home/oracle/dbsat/dbsat.bat
  inflating: /home/oracle/dbsat/sat_collector.sql
  inflating: /home/oracle/dbsat/sa.jar
  inflating: /home/oracle/dbsat/jython-standalone-2.7.3.jar
  inflating: /home/oracle/dbsat/xlsxwriter/app.py
...
  inflating: /home/oracle/dbsat/Discover/conf/sensitive_nl.ini
  inflating: /home/oracle/dbsat/Discover/conf/sensitive_el.ini

# 展開されたdbsatの内容を確認する
$ ls -l /home/oracle/dbsat/
total 89828
-r-xr-xr-x. 1 oracle oinstall    15053 Jul 11 23:09 dbsat
-r-xr-xr-x. 1 oracle oinstall    15037 Jul 18 06:22 dbsat.bat
drwxr-xr-x. 5 oracle oinstall       40 Sep  9 05:07 Discover
-rw-r--r--. 1 oracle oinstall 45447419 Jul 18 07:11 jython-standalone-2.7.3.jar
-r--r--r--. 1 oracle oinstall   124415 Jul 18 07:11 sa.jar
-rw-rw-r--. 1 oracle oinstall    94887 Jul 18 07:09 sat_collector.sql
drwxr-xr-x. 2 oracle oinstall     4096 Sep  9 05:07 xlsxwriter 

# dbsatのバージョンと文法・オプションを確認する
$ /home/oracle/dbsat/dbsat Database Security Assessment Tool version 3.1 (July 2024) Usage: dbsat collect [ -n ] <database_connect_string> <output_file> dbsat report [ -a ] [ -n ] [ -g ] [ -x <section> ] [ -u <user> ] <input_file> dbsat discover [ -n ] -c <config_file> <output_file> Options: -a Report with all user accounts, including locked and schema-only, Oracle-supplied users -n No encryption for output -g Show all grants including Common Grants in a Pluggable Database -x Specify sections to exclude from report (may be repeated for multiple sections) -u Specify users to exclude from report -c Configuration file for discoverer

 以下、作業はすべてOracleユーザーで行っていきます。

2. Collectorの実行に使用する DBユーザーの権限を確認する

Collectorでデータを収集するために使用するDBユーザーを準備します。本手順ではSYSTEMユーザーを使用します。

実行のためには以下の権限が必要になりますので、別のユーザーを作成または使用される際は、以下の権限が足りているかを確認しておきましょう。また、マルチテナント環境の場合、DBユーザーが対象のPDBに存在できるかどうかも確かめておきます。

-- Collectorの実行に必要な権限 grant create session to dbsat_user; grant select_catalog_role to dbsat_user; grant select on sys.registry$history to dbsat_user; grant read on sys.dba_audit_mgmt_config_params to dbsat_user; grant select on sys.dba_users_with_defpwd to dbsat_user; grant read on sys.dba_credentials to dbsat_user; grant execute on sys.dbms_sql to dbsat_user; grant audit_viewer to dbsat_user;-- 12c以降 grant capture_admin to dbsat_user; -- 12c以降

なお、Database Vaultを有効化している場合、権限付与は特権ユーザーでは行うことができませんので、DV_OWNERロールを持つユーザーで行ってください。また、上記の権限に加えて、以下のコマンドでDV_SECANALYSTロールが必要になります。

-- Database Vaultが有効化されている場合、別途必要な権限 grant DV_SECANALYST to dbsat_user; 

3. Colletorを実行し、データを収集する

DBユーザーの準備ができたら、Collectorを実行してデータを収集します。ここでは実行するDBユーザーとしてSYSTEMユーザーを使用しています。

CollectorはSQL*Plusを使用してターゲットDBに接続し、sat_collector.sqlスクリプトを実行します。その後、調査レポートをzip暗号化ファイルとして出力を行います。

Collector実行コマンド

dbsat collect [ -n ] <database_connect_string> <output_file>


デフォルトで出力ファイルはzip暗号化されるため、途中でパスワードを設定します。

  • <database_connect_string>(接続文字列)
    • 対象のデータベースに接続するための接続文字列を指定します。 詳しくはこちらのドキュメントをご参照ください。
    • 例のようにコマンド実行時にパスワードを省略することで、コマンドライン上でパスワードが表示されるのを防ぐことができます。
    • 接続記述子を使用
      • 形式:db_user/password@connect_string
      • 例:dbsat_user@ORCLPDB
    • 簡易接続ネーミングを使用
      • 形式:username/password@host[:port][/[service_name][:server_type][/instance_name]]
      • 例:dbsat_user@dbsat-demo.example.com:1521/ORCLPDB1:DEDICATED

  • <output_file>(出力ファイル)
    • 出力されるファイル名と保存先のパスを指定します。拡張子は不要です。
    • 例:/home/oracle/dbsat/output_ORCLPDB

暗号化のオプション

デフォルトでは、出力ファイルは暗号化されますが、-n オプションを指定すると暗号化を無効化することができます。ただし、Collectorレポートには機密情報が含まれるため、暗号化を無効にすることは推奨されません。-n オプションを使用した場合、出力ファイルは .json 形式になります。

 実行例

# Collectorを実行する
$ /home/oracle/dbsat/dbsat collect system@ORCLPDB /home/oracle/output_ORCLPDB
Database Security Assessment Tool version 3.1 (July 2024)
This tool is intended to assist you in securing your Oracle database...
...
Connecting to the target Oracle database...
SQL*Plus: Release 19.0.0.0.0 - Production on 木 9月 12 01:42:09 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
パスワードを入力してください: <SYSTEMユーザーのパスワードを入力>
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
Setup complete.
SQL queries complete.
...
OS commands complete.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
DBSAT Collector completed successfully.
Calling /opt/oracle/product/19c/dbhome_1/bin/zip to encrypt output_ORCLPDB.json...
Enter password:  <出力ファイルのパスワードを設定>
Verify password: <出力ファイルのパスワードを再入力>
  adding: output_ORCLPDB.json (deflated 85%)
zip completed successfully.
# 指定した名前で、zipファイルが作成されていることを確認
$ ls -l /home/oracle/output_ORCLPDB.zip
-rw-------. 1 oracle oinstall 44023 Sep 12 01:43 /home/oracle/output_ORCLPDB.zip

なお、Collectorの実行にSYSユーザーを使用する際、コマンドは以下のようになります。

/home/oracle/dbsat/dbsat collect "/ as sysdba" /home/oracle/output_test

4. Reporterを実行するためのJava環境を準備する

Reporterの実行のためにはJava Runtime Environment (JRE) 1.8 (jdk8-u172) 以降のバージョンが必要となります。
v3.0以前のバージョンではPythonも準備する必要がありましたが、DBSATはv3.0より実行環境としてJythonを使用するようになったため、Pythonをインストールする必要がなくなりました。

Javaは以下のリンクからダウンロードできます。
https://www.oracle.com/jp/java/technologies/downloads/

Collectorの実行と同じ環境でReporterを実行する必要はありませんので、お手元の環境でReporterを動作させることも可能です。

Javaバージョンの確認

Javaが適切なバージョンでインストールされているかを確認します。

# Java 1.8以降がインストールされているかを確認 $ java -version java version "1.8.0_421" Java(TM) SE Runtime Environment (build 1.8.0_421-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)

javaをインストール後、JAVA_HOMEに適切なパスを設定します。

export JAVA_HOME=/usr/lib/jvm/jre-1.8.0_421-oracle-x64/


複数javaがインストールされている場合、JAVA_HOME が正しいバージョンを指しているか確認します。

$ echo ${JAVA_HOME} /usr/lib/jvm/jre-1.8.0_421-oracle-x64/

5. Reporterを実行し、出力されたレポートを確認する

Javaの環境が整ったら、Reporterを実行しCollectorで取得したレポートからセキュリティ評価レポートを生成します。

 Reporter実行コマンド

dbsat report [ -a ] [ -n ] [ -g ] [ -x <section> ] [ -u <user> ] <input_file>

<input_file>にはcollectorから取得したファイルのパスを入力します。collectorから出力されたzipファイルをそのまま指定してもいいですし、展開してJSONファイルを指定しても大丈夫です。いずれにせよ拡張子は不要ですのでご注意ください。

こちらもデフォルトでzip暗号化されますが、オプションで -n を指定することでzip暗号化を無効にすることができます。

その他オプションについては以下の通りです。

  • -a:すべてのユーザーアカウント(ロックされているものやスキーマ専用のアカウント、Oracle提供のユーザーも含む)をレポートに含めます。
  • -n:出力を暗号化せずに生成します。
  • -g:Pluggable Database(PDB)内の共通グラントも含めてすべての権限を表示します。
  • -x:レポートから除外するセクションを指定します。コンマ区切りにすることで複数回指定が可能です。有効なセクション項目については、こちらを参照ください。
  • -u:レポートから除外するユーザーを指定します。コンマ区切りにすることで複数ユーザーを指定できます。

実行例

# Reporterを実行する
$ /home/oracle/dbsat/dbsat report /home/oracle/output_ORCLPDB
Database Security Assessment Tool version 3.1 (July 2024)
This tool is intended to assist you in securing your Oracle database
...
Archive:  output_ORCLPDB.zip
[output_ORCLPDB.zip] output_ORCLPDB.json password: <ファイルの暗号化パスワードを入力>
  inflating: output_ORCLPDB.json
DBSAT Reporter ran successfully.
Calling /usr/bin/zip to encrypt the generated reports...
Enter password:  <レポートのパスワードを設定>
Verify password: <レポートのパスワードを再入力>
...
zip completed successfully.
# セキュリティ評価レポートが出力されていることを確認
$ ls -l output_ORCLPDB_report.zip
-rw-------. 1 oracle oinstall 159139 Sep  9 06:45 output_ORCLPDB_report.zip

これでセキュリティ評価レポートの取得が完了しました。

評価レポートには英語で記述されます。また、テキスト、HTML、エクセル、JSON形式が含まれており、内容はすべて同じです。以下の画像はHTML形式のものです。

このレポートには、システムの脆弱性や潜在的なリスクが記載されています。レポートの分析結果や指摘されたリスクに対して適切な対応を行い、データベースのセキュリティの改善を行っていきましょう!


評価レポートの活用

取得した評価レポートの中で、注目すべき項目をかいつまんで見てみましょう。

基本情報

レポートの上部には、レポートの要約となる基本情報が記載されています。

1. Assessment Date & Time

     CollectorとReporterを実行した時間とReporterのバージョン情報

2. Database Identity

     ターゲット・データベースの詳細情報

3. Summary

     セクションごとの調査結果とリスクレベルの内訳

評価情報

Summaryから始まる各評価セクションは、複数の調査結果(Finding)にてそれぞれ評価されます。

1つの調査結果の項目は以下のようになります。

1. Status(ステータス)

     結果のリスクレベルを表示します。レベルに応じて優先順位をつけることに役立てていただけます。

ステータス意味説明
Pass合格リスクが見つかりませんでした
Evaluate要評価手動による評価・分析が必要です
Advisory改善のアドバイスOracle Databaseのセキュリティ機能、オプションで改善することができます
Low Risk低リスク対処をメンテナンス作業にまとめることもできます
Medium Risk中リスク短期間で対処を行うよう計画してください
High Risk高リスク迅速な対処が必要です

2. Summary(サマリー)

     結果のサマリーが表示されます。

3. Details(詳細)

     収集データから、サマリーを補足する詳細な情報が表示されます。

4. Remarks(注釈)

     評価の理由と推奨される対処方法について説明されます。

5. References(参照)

     評価結果が以下を参照する場合、右上のアイコンとともに表示されます。

  • GDPRに関連したOracleのベストプラクティス(OBP)
  • CIS Oracle Database Benchmark 12c~ v2.0.0
  • 米国国防総省情報システム局(DISA)のOracle Database向けセキュリティ技術実装ガイド(STIG V2R8)

各セクションがどの領域の評価情報を含むかについての詳細は、ドキュメントをご覧ください。


まとめ

データベース構成に潜むリスクを把握することは、多層防御を実現するための第一歩となります。DBSATではセキュリティの保護に役立つ情報と推奨事項を示してくれます。あくまで情報提供が主となっており、徹底的な分析とはなりませんが、現状を把握する分には十分です。

また、前回の記事では「多層防御」というセキュリティ戦略とデータベース・セキュリティの重要性について解説しています。ご興味がありましたらご覧ください。

 

Oracleでは、セキュリティ評価レポートをもとにアセスメントを行う、「Oracle Databaseセキュリティ・リスク・アセスメント」サービスを無償で行っております。Oracleの持つセキュリティ対策のベストプラクティスと実際のお客様のヒアリングを通して、データ保護の側面からセキュリティの改善を提案させていただきます。

ご興味のある方はぜひ弊社営業までお問い合わせください。