投稿者:セキュリティ担当者

みなさま こんにちは

データベースを利用するときには、セキュリティ対策や監査対策のために、いつ誰がどういうアクセスをしたかのログを取っておくことが必要です。そこで役に立つのがGuradiumのようなDB監査製品となりますが、昨今ではデータベースはAWS、AZURE、IBMクラウドといったクラウド上でサービス利用できるDBやIIAS等のアプライアンスDBが主流となってきています。これらのクラウドDBやアプライアンスDBはデータベースサーバ側をユーザが自由に操作できない為、Guradiumのエージェント(S-TAP)をインストールする事が出来ないことがあります。

そのような時にGuardiumエージェント(S-TAP)を外部サーバにインストールしてデータベースの監査情報を取得する方法がございます。外部サーバにGuardiumエージェント(S-TAP)を導入したサーバをExternal S-TAPと呼び、当External S-TAPを用いる事でデータベースサーバにエージェントを導入することなく、アクセスログを取得できるようになります。また、後述において特に記載がない限りGurdiumエージェントを導入したサーバをExternal S-TAPと記述します。

※Guardiumについては以下をご確認ください。

https://www.niandc.co.jp/sol/product/guardium/

データベースサーバ内にS-TAPを導入し、DB監査情報を収集するイメージは以下のとおりです。

0_stap.png

データベースサーバ外にExternal S-TAPサーバを用意し、DB監査情報を収集するイメージは以下のとおりです。

0_stap_external.png

ここではExternal S-TAPの設定方法をご紹介します。

External S-TAPを導入・設定するには以下の設定手順が必要となります。


◆設定方法
1.Guardium Colletor導入・設定
2.External S-TAPサーバのOS/Docker導入・設定
3.External S-TAPクラスタ導入・設定
4.SQL実行


以下では各設定方法の詳細をご紹介します。

1.Guardium Collector導入・設定

1-1.「Security_Guardium_Product_Image_DVD.iso」メディアをサーバのDVDドライブに導入し、サーバを起動します。


1-2.インストール方法を「Standard installation (non CM」を選択し、Enterキーを押下します。


1-3.ネットワーク関連設定を入力します。

$ show network interface all
$ store network interface ip コレクタIPアドレス
$ store network interface mask サブネットマスク
$ store network routes defaultroute デフォルトゲートウェイIPアドレス
$ store system hostname ホスト名
$ store system domain ドメイン名
$ restart system

1-4.パッチを適用します。

以下コマンドで適用済みのパッチを確認します。

$ show system patch installed

以下コマンドでローカル端末上のパッチファイルをコレクタ上にアップロードするポートを開放します。(Enterを入力するとポートが閉じますので、コマンド入力画面のままにしてください。)

$ guardcollecter.yourcompany.com> fileserver <作業端末のIPアドレス> <接続時間>
Starting the file server...
The file server is ready at https://guard66.yourcompany.com:8445
The timeout has been set to 2000 seconds and it may timeout during the uploading.

The upload will only be accessible from the IP you are logged in from: 192.168.31.191

Press ENTER to stop the file server.

WEBブラウザに以下のURLを入力し[ファイル選択]を押下し、アップロードファイルをアップロードください。

URL: https://コレクタIPアドレス:8445

1-4-3.png

Enterを入力してアップロード用のポートを閉じます。

Starting the file server...
The file server is ready at https://guard66.yourcompany.com:8445
The timeout has been set to 2000 seconds and it may timeout during the uploading.

The upload will only be accessible from the IP you are logged in from: 192.168.XXX.XXX

Press ENTER to stop the file server. [Enter]

アップロードしたパッチを確認します。

$ show system patch available

store system patch install sysコマンドを実行しますと、パッチがリストアップされます。
対象パッチ名の左側の数字を入力してインストールください。
※「store system patch install sys」を実行しますと、パッチ適用処理は開始されますが、プロンプトから「ok」の出力がされても、パッチ適用処理が完了していないのでご注意ください。
※対象パッチ分「store system patch install sys」コマンドを実行してパッチをインストールください。

$ store system patch install sys

パッチが適用されたことを確認します。
※適用パッチの「Status」欄に「DONE: Patch installation Succeeded.」、または「DONE: Installation Successful.」と表示されていることを確認します。

$ show system patch installed

設定反映の為、システムを再起動します。

$ restart system

1-5.ライセンス登録をします。

WEBブラウザに以下のURLを入力し、adminユーザでGuaurdium Collectorにログインします。
トップ画面から[セットアップ]⇒[ツールとビュー]⇒[使用許諾条件]と遷移します。

URL: https://コレクタIPアドレス:8443

1-5-1.png

ライセンスキー(Base key)を入力して[適用]を押下します。

1-5-2.png


同様に[セットアップ」⇒[ツールとビュー]⇒[使用許諾条件]と遷移し、ライセンスキー(Append key)を入力して[適用]を押下します。
※表示された「ご使用条件」画面で「同意する」をクリックください。

1-5-3.png

以上にてGuardium Collector導入・設定が完了となります。

2.External S-TAPサーバのOS/Docker導入・設定


2-1.External S-TAPサーバにDocker hubが起動できるOSをインストールください。


2-2.External S-TAPサーバにDocker hubをインストールください。


2-3.Docker hubからIBM External S-TAPのイメージファイルをダウンロードください。

ブラウザでDocker Hubにログインをして、検索フォームから「IBM External S-TAP」を検索します。

2-3-1.png
External S-TAPのページで「Proceed to Checkout」をクリックします。

2-3-2.png
連絡先情報を入力して使用条件に同意し、「Get Content」をクリックします。

2-3-3.png

ResourcesセクションにDockerイメージをダウンロードするためのpullコマンドが表示されるので、テキストをコピーしておきます。

2-3-4.png

2-4.Dockerイメージをpullします。

$ restart system
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yourname
Password:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

$ docker pull store/ibmcorp/guardium_external_s-tap:v11.0.0.97
v11.0.0.97: Pulling from store/ibmcorp/guardium_external_s-tap
18b8eb7e7f01: Pulling fs layer
61af765554ff: Pulling fs layer
49ab54fc788e: Pulling fs layer
947458949c54: Pulling fs layer 947458949c54: Waiting 18b8eb7e7f01: Downloading [> 120B/120B947458949c54: Extracting [==] 120B/120B947458949c54: Pull complete Digest
Status: Downloaded newer image for store/ibmcorp/guardium_external_s-tap:v11.0.0.97

2-5.イメージがインストールされたことを確認します。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
store/ibmcorp/guardium_external_s-tap v11.0.0.97 c0bd79ef160e 10 days ago 336MB

3.External S-TAPクラスタ導入・設定


3-1.カーネル・コア・パターンの設定

Docker では、コア・ファイルを配置する場所を判別するためにホストのカーネル・コア・パターンを使用します。
一部のシステムでは、デフォルトのパスはコンテナの観点からは適切ではありません。
コア・ファイルが正確に保管されるように、Dockerホストのコア・パターンを変更します。

$ echo '/tmp/core.%t.%e.%p' | tee /proc/sys/kernel/core_pattern /tmp/core.%t.%e.%p

3-2.デプロイメント・スクリプトのダウンロード

External S-TAPクラスターは、GitHub(https://github.com/IBM/Guardium_External_S-TAP)で公開されているデプロイメント・スクリプトを使ってコンテナをデプロイすることで作成します。
また、ロードバランサーとしてNginxコンテナをデプロイするためのサンプルスクリプト(ロードバランサー・デプロイメント・スクリプト)も合わせて公開されています。
ロードバランサー・デプロイメント・スクリプトは、External S-TAPのデプロイメント・スクリプトの一部として実行することが可能です。
ブラウザでGitHubのGuardium_External_S-TAPページにアクセスし、「Clone or download」内の「Download ZIP」を使ってデプロイメント・スクリプトをダウンロードします。

3-2.png

3-3.デプロイメント・スクリプトの実行

デプロイメント・スクリプトを使ってExternal S-TAPのクラスターを作成し、Dockerコンテナをデプロイします。
デプロイメント・スクリプトは、DockerホストにSSHで接続してコンテナを管理するため、Dockerホスト上とリモートホスト上でのどちらでも実行できます。
ただしNginxコンテナをロードバランサーとしてデプロイするためのロードバランサー・デプロイメント・スクリプトはデフォルトでlocalhostに対してデプロイを行うように記述されているため、
これをそのまま使用する場合は、Nginxコンテナのデプロイ先となるDockerホスト上でデプロイメント・スクリプトを実行する必要があります。

デプロイメント・スクリプトは、デフォルトで対話的に実行されるように記述されていますが、引数に各種のパラメーターを与えることで、対話中の打鍵を省略することができるようになります。
また、一部のパラメーターはクラスターの作成後にコレクターのGUIから設定することも可能です。パラメーターには以下のようなものがあります。

3-3.png

なおこの例では変更していませんが、デプロイメント・スクリプトはDockerホストに対して繰り返しSSH接続を行うため、
SSHの認証方式をパスワード認証から鍵認証に変更しておくと、作業をスムーズに進めることができます。

$ ./container_mgmt.sh --c --state- file /root/estap.state --sqlguard-ip コレクタのIPアドレス --proxy-secret SSL証明書のトークン --svc-image store/ibmcorp/guardium_external_s-tap:v11.0 .0.97 --svc-host External S-TAPのIPアドレス --db-host DBのIPアドレス --db-type DBタイプ --db-port DBポート番号 --svc-container-num 1 --proxy-num-workers 1

Load-balancer script integration not specified, some functionality may be limited
Would you like to
(c)reate a new cluster
(p)rint env vars without creating cluster
(u)pgrade an existing cluster
(d)elete a cluster
remove (z)ombies
? [C]
Non-interactive parameter: --c
===============

Creating service containers for Guardium External S-TAP

What host do you want to use to host the service containers? [External S-TAPのIPアドレス]
Non-interactive parameter: --svc-host External S-TAPのIPアドレス

What is the port range for the exported service port? (0 means the ephemeral range on the service host) [0]
Non-interactive parameter: --svc-port-range 0

What user will be logging in to the host to start the service containers? [root]
Non-interactive parameter: --svc-host-user root

Enter the hash or tag for the service container image: [store/ibmcorp/guardium_external_s-tap:v11.0.0.97]
Non-interactive parameter: --svc-image store/ibmcorp/guardium_external_s-tap:v11.0.0.97

What is the username to be used if login is required to pull the service container image? (optional)
How many service containers would you like to create? [1]
Non-interactive parameter: --svc-container-num 1

Please enter a UUID for this group: [5b72b8cb-22a0-4f50-aaf6-8a3e56ce7461]
Non-interactive parameter: --uuid 5b72b8cb-22a0-4f50-aaf6-8a3e56ce7461

Enter the number of workers for each service container of Guardium External S-TAP: [1]
Non-interactive parameter: --proxy-num-workers 1

Enter the hostname or IP to which the DB the Guardium External S-TAP group will be relaying traffic: (optional) [DBのIPアドレス]
Non-interactive parameter: --db-host DBのIPアドレス

Valid DB types are "oracle", "mssql", "sybase", "mongodb", "db2", "mysql", "memsql", "mariadb", "pgsql", "greenplumdb", "verticadb"
Enter the type of database for the DB host: [DBタイプ]
Non-interactive parameter: --db-type DBタイプ

Enter the port for the DB to which the Guardium External S-TAP group will be relaying traffic: [DBのポート番号]
Non-interactive parameter: --db-port DBのポート番号

If proxy protocol version 1 is enabled for the DB traffic, enter 1, otherwise enter 0: [0]
Non-interactive parameter: --proxy-protocol 0

Do you wish to disconnect the clients if the DB server certificate cannot be verified? (y/n) [N]
Do you wish to log an error message if the DB server certificate cannot be verified? (y/n) [N]
If traffic is encrypted, enter the secret token which will be used to retrieve the key and certificate from the Guardium Collector: [6dfbd8cd-9d61-11e9-8b53-a025d1ef46ed]
Non-interactive parameter: --proxy-secret 6dfbd8cd-9d61-11e9-8b53-a025d1ef46ed
Enter the hostname or IP of the Guardium Collector: [コレクタのIPアドレス]
Non-interactive parameter: --sqlguard-ip コレクタのIPアドレス
Participate in load balancing or failover? 0: failover/no lb, 1) split, 2) redundancy, 3) not allowed, 4) threaded: [0]
Non-interactive parameter: --participate-in-load-balancing 0

Enter the CN to match when verifying the Guardium Collector's Certificate (blank to disable verification):
Non-interactive parameter: --sqlguard-cert-cn

===============
root@external-stap's password:
Login to external-stap successful
Creating new cluster, description will be stored in /root/estap.state
root@external-stap's password:
root@external-stap's password:
v11.0.0.97: Pulling from store/ibmcorp/guardium_external_s-tap
Digest: sha256:941feeb43a4f19063a183b901bd7480c45a58bee193294d08da4f28534c2bf75
Status: Image is up to date for store/ibmcorp/guardium_external_s-tap:v11.0.0.97
Creating service container gext0-5b72b8cb-22a0-4f50-aaf6-8a3e56ce7461 on external-stap
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:
root@external-stap's password:

=================================================
Started service container : f528b58711c874209376509171e040fbb645e756d024777342a934ac36a6e861 (CONTAINER_IP 172.17.0.2, HOST external-stap, EXTERNAL PORT 32768)
=================================================

3-4.Dockerコンテナの確認

Docker psコマンドで起動しているコンテナの状態を確認できます。

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f528b58711c8 store/ibmcorp/guardium_external_s-tap:v11.0.0.97 "/usr/bin/supervisor..." 4 minutes ago Up 4 minutes 0.0.0.0:32768->8888/tcp gext0-5b72b8cb-22a0-4f50-aaf6-8a3e

3-5.CollecterからExternal S-TAPの確認

ブラウザに以下の情報を入力してコレクタへログインします。

https://コレクタのIPアドレス:8443

3-5.png

[管理]⇒[アクティビティー・モニター]⇒[外部 S-TAP制御]と繊維します。

3-5-2.png

External S-TAPが存在することを確認します。

3-5-3.png

4.SQL実行

3-3.デプロイメント・スクリプトの実行にて、External S-TAPの設定としてDBポートの通信を受信した場合は、DBサーバへ送信する設定をしているので、
SQLをExternal S-TAP向けに実行するとコレクタでSQLのログが取得できます。

4-1.SQL開発ツールにてExternal S-TAP向けの接続情報を作成します。
※ここではSQL開発ツールとしてDBeaverを使用しています。

4-1.png

4-2.SQLを実行します。

4-2.png

4-3.コレクタにて実行したSQLの情報が取得できていることが確認できます。

4-3.png

◆所感


データベースにGuardiumエージェントの導入が禁止されおりましても、External S-TAPを使用することで操作情報を監査することが可能となります。
ただし、監査できる情報はExternal S-TAPを介した通信のみとなります。
※データベースサーバにローカル接続をして、SQL接続した場合は監査情報はコレクタに収集されません。

今回構築したパターンではExternal S-TAPを冗長構成で構築していないため、
実運用を考慮した場合は、複数のExternal S-TAPをロードバランサーで負荷分散をして性能や可用性を高める必要があります。

また、参考情報としてGuardiumがサポートしているクラウド製品一覧、および関連の記事をご紹介します。

Guardiumがサポートしているクラウド製品の一覧(2019/7/30現在時点)

0_比較表.png
Guardium Analyzer でデータベースのリスク分析を簡単に実行してみた
https://www.niandc.co.jp/sol/tech/date20190529_1770.php

security TechBlog/Guardium/ユーザのアカウントロック解除方法
https://www.niandc.co.jp/sol/tech/date20170330_629.php


以上です。