More Related Content
Similar to [db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法 by 日本電気株式会社 黒澤彰 (20)
More from Insight Technology, Inc. (20)
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法 by 日本電気株式会社 黒澤彰
- 2. Page 2 © NEC Corporation 2015
アジェンダ
1. DBを取り巻く環境
2. 情報漏えい対策と暗号化
3. PostgreSQLのデータ暗号化とアプリケーション開発者の要望
4. Transparent Data Encryption for PostgreSQL
5. 鍵管理とAmazon Web Services(以下、AWS)
Key Management Service (以下、KMS)の利用
6. メンテナンスツール(PostgreSQLデータ保全ツール)の機能
- 4. Page 4 © NEC Corporation 2015
DBを取り巻く環境
DB
各種システムが収集する
個人情報や秘密情報が増大
DBサーバを含む情報システムの
運用を第三者に委託することが
一般化しつつある
個人情報を含む
多くの秘密情報を
保持
組織内外からの
不正アクセスに対し
データ保全の仕組みが必要
DBMS運用環境は常に危険にさらされています
システム開発環境
• 情報システム投資の圧縮
• 開発期間の短縮化
• クラウド環境の利用拡大
社会環境
• 電子商取引、電子マネー
• スマートフォン、ICカード/
RFID等電子デバイスの利用拡大
• 各種センサ
- 5. Page 5 © NEC Corporation 2015
DBを取り巻く環境
「2013年 情報セキュリティインシデントに関する調査報告書 ~個人情報漏えい編~」
NPO日本ネットワークセキュリティ協会
情報漏えいの影響範囲は広範にわたり、
事業の継続に多大なインパクトを与える
- 7. Page 7 © NEC Corporation 2015
情報漏えい対策と暗号化
DBアクセス権限の所有者や
DBファイル、通信からの情報漏えい対策としては不十分
• 適切なセキュリティフィックスの適用
• SQLインジェクション対策など、
アプリケーションによる漏えい対策
アプリケーション
サーバ
• 認証による接続制限
• データベースオブジェクトへの各種アクセス権
設定による参照制限
DBMS
DBMSを利用するシステムの情報漏えい対策と問題点
- 8. Page 8 © NEC Corporation 2015
情報漏えい対策と暗号化
アプリケーション
サーバ DB
通信の傍受
DBファイルの
持ち出し
データベースファイル
DBのアクセス権やアプリケーションでの対策では不十分
バック
アップ
ファイル
バックアップファイル
(物理/論理データ)の
持ち出し
権限所有者による
不正なデータ抽出
- 9. Page 9 © NEC Corporation 2015
情報漏えい対策と暗号化
アプリケーション
サーバ DB
通信の暗号化
(SSL)
データの暗号化
データベースファイル
ネットワークやOS、HWレベルでのデータ漏えいに対する対策
バック
アップ
ファイル
バックアップファイルの
暗号化
DB管理者と
復号用の鍵管理者の
分離
- 10. Page 10 © NEC Corporation 2015
情報漏えい対策と暗号化
「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版
2014年9月10日データベース・セキュリティ・コンソーシアム
内部からの情報漏えいの可能性は常に存在し、
全データにアクセス可能な権限者の存在はリスクをともなう
DBAによる情報売却の
可能性を否定できない
- 12. Page 12 © NEC Corporation 2015
postgres=# create extension pgcrypto;
CREATE EXTENSION
postgres=# create table testtbl (c1 bytea);
CREATE TABLE
postgres=# insert into testtbl values (pgp_sym_encrypt('testdata', 'password'));
INSERT 0 1
postgres=# select * from testtbl;
c1
------------------------------------------------------------------------------------------------------------
--------------------------------------------
¥xc30d0407030259fe70ee2960fd7665d239015fab8e8ba8c952023ed7a78822f7478f7624b5eb7695ac868e712e8faae05a1d78dfc6
9ef196d69106e45974002b0c8533c3764e41a76ae2
(1 row)
postgres=# select pgp_sym_decrypt(c1, 'password') from testtbl;
pgp_sym_decrypt
-----------------
testdata
(1 row)
PostgreSQLにおけるデータ暗号化
▌pgcrypto
貢献パッケージ(contrib)として提供される暗号化関数
列に格納するデータをTEXT、BYTEA型のデータとして出力
pgpを組み合わせた高度な暗号化も可能
データ挿入
pgcrypto導入
検索
関数による暗号化
関数による復号
- 13. Page 13 © NEC Corporation 2015
アプリケーション開発者の要望
• 関数実行による暗号/復号処理
• 列単位でのデータ暗号化
• 関数実行時に暗号鍵を指定
pgcryptoの
特徴
アプリケーション開発者の要望
• 移行性が低下するため、PostgreSQL専用の
クエリを発行したくない
• APサーバ上に暗号鍵を置きたくない
• 鍵管理はアプリケーション側で行いたくない
関数による暗号化の
実装は好まれない
- 14. Page 14 © NEC Corporation 2015
アプリケーション開発者の要望
「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版
2014年9月10日 データベース・セキュリティ・コンソーシアム
アプリケーション開発に負担をかけない暗号化手段が必要
アプリケーション改修が必要な
暗号化手法は、
データ暗号化導入の妨げとなる
- 15. Page 15 © NEC Corporation 2015
アプリケーション開発者の要望
▌商用DBMSにおける対応
商用DBMSはアプリケーション開発者に負担をかけない「透過的暗号化」
機能を提供している
DBMS側の設定や準備だけで、アプリケーションの改造が不要
暗号化の対象
• データベース、テーブルスペース、列単位に暗号化を行う
• 大小比較を含む一連の検索処理を問題無く行うことができる
暗号鍵管理
• 暗号鍵は各RDBMS製品に固有な鍵管理の仕組みを持つ
• データの暗号鍵が流出しないよう暗号鍵は2重、3重に暗号化されている
OSS DBMSにも透過的暗号化機能が必要
- 16. Page 16 © NEC Corporation 2015
Oracle Advanced Security (TDE)
• 表領域、列暗号化の対象
• 二種類の鍵を使用
• Oracle Walletでマスター鍵を管理
• マスター鍵をソフトウェア/ハードウェア・キーストアに格納
暗号鍵の管理方法
•AES(キー長:128,192,256bit)
•トリプルDES
暗号アルゴリズム
Oracle Wallet
マスター鍵 データ暗号化鍵
DB
データ暗号化鍵は
マスター鍵で暗号化
データは
データ暗号化鍵で
暗号化
- 17. Page 17 © NEC Corporation 2015
SQL Server 透過的暗号化機能
• データベース暗号化の対象
•三種類の鍵を使用
•サービスキーを使用してデータベースマスターキーを暗号化
•データベース暗号化キーは、データベースマスターキーを使用して暗号化
暗号鍵の管理方法
•AES(キー長:128,192,256bit)
•トリプルDES
暗号アルゴリズム
サービスマスターキー
データベースマスターキー
DB
サービスマスターキーで
暗号化し、
masterデータベースに
格納される
インストール時に生成
データベース暗号化キー
データベースマスターキー
で暗号化され、
データベースの暗号化に
使用する
- 19. Page 19 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌PostgreSQLの透過的暗号化機能
2015年6月、弊社はTransparent Data Encryption for PostgreSQL
(TDE for PostgreSQL)を公開しました。
http://jpn.nec.com/press/201506/20150605_01.html
- 20. Page 20 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌NECが提供するPostgreSQL向け透過的暗号化機能
暗号化列属性をEXTENTIONとして実装
基本的な機能を提供するFree Edition(OSS版)とデータ保全機能、鍵
管理機能(AWS KMS利用)を加えたEnterprise Editionをリリース
•ソースからコンパイル
•暗号化列属性追加
•暗号鍵はクライアントAPから
専用関数(ストアドプロシージャ)を使用し平文で通知
• https://github.com/nec-postgres/tdeforpg/
Free Edition
(OSS版)
•インストーラ
•暗号化列属性追加(NUMERIC、TIMESTAMP)
•運用コマンド提供
•複数バージョンの暗号鍵に対応
•AWS KMSを利用した鍵管理
Enterprise Editionの
強化項目
- 21. Page 21 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌暗号化列属性
暗号化が必要になると想定されるTEXT、BYTEA(バイナリ)、
NUMERIC、TIMESTAMP属性に対し、暗号化列属性を追加。
TEXT
BYTEA
NUMERIC
TIMESTAMP
ENCRYPT_TEXT
ENCRYPT_BYTEA
ENCRYPT_NUMERIC ※
ENCRYPT_TIMESTAMP ※
暗号化列属性
※ NUMERIC、TIMESTAMPの暗号化列属性はEnterprise Editionのみの機能です。
- 22. Page 22 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌PostgreSQLにおける属性追加
暗号化列属性追加
入出力関数の実装
比較用関数の実装
CASTの実装
カタログ登録
属性追加の際、各属性の入出力関数、インデックス検索用の比較関数、
属性変換処理、カタログ情報の追加を行います
- 23. Page 23 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌TDE for PostgreSQL Free Editionの利用手順
OSS版TDEをコンパイル
PostgreSQL設定変更(TDEのライブラリ読み込み)
セットアップ用スクリプト実行(属性追加)
鍵をDBに登録
暗号化列を使用したテーブル定義
DBに接続
専用関数でセッション開始を宣言
SQL文発行
専用関数でセッション終了を宣言
TDE
利用環境の
準備
TDEの利用
- 24. Page 24 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
$ cd $PGSRC/contrib/pgcrypto
$ make
$ make install
$ psql << EOF
> CREATE EXTENSION pgcrypto;
> EOF
$ $ sudo ln –s$PGHOME/lib/pgcrypto.so /usr/lib64/libpgcrypto.so
$ cd $PGSRC
$ ./configure
$ cd $TDEHOME/SOURCES/data_encryption
$ sh makedencryption.sh 93 $PGSRC
$ sudo ln -s $TDEHOME/SOURCES/data_encryption/93/data_encryption93.so /usr/lib64/data_encryption.so
$ echo “shared_preload_libraries=‘/usr/lib64/data_encryption.so’” >> postgresql.conf
$ pg_ctl restart
$ cd $TDEHOME/SOURCES
$ sh bin/cipher_setup.sh $PGHOME
Transparent data encryption feature setup script
Please select from the setup menu below
Transparent data encryption feature setup menu
1: activate the transparent data encryption feature
2: inactivate the transparent data encryption feature
select menu [1 - 2] > 1
Please enter database server port to connect : <port_number>
Please enter database user name to connect : <user_name>
Please enter password for authentication : <password>
Please enter database name to connect : <db_name>
pgcryptoのインストール
TDE for PostgreSQLのビルド
TDE for PostgreSQLの導入
DBへのTDE機能導入
Free Editionの導入
- 25. Page 25 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
-- CREATE TABLE
CREATE TABLE Employee(
EmployeeID Integer PRIMARY KEY,
Name TEXT,
Address ENCRYPT_TEXT,
TelephoneNumber ENCRYPT_TEXT
);
-- START SESSION
select pgtde_begin_session('cipherkey');
-- INSERT DATA
insert into Employee values(1,'従業員1','滋賀','003-0001-0001');
-- SELECT ALL
select * from Employee ;
-- END SESSION
select pgtde_end_session();
暗号化列属性を指定したテーブル定義
Free Editionの利用
暗号・復号セッション開始
(データ鍵をDBに通知)
データの挿入(通常のSQL文)
データの検索(通常のSQL文)
暗号・復号セッション終了
- 26. Page 26 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Free Editionのメリット・デメリット
• 暗号化関数が不要でアプリケーション開発が容易に
• 検索、更新を行うためにSQL文を発行するたびに鍵を
送信する必要がなくなる
メリット
• 鍵をアプリケーション側で管理する必要がある
• TDEの利用開始時に鍵を送信しなければならない
• 鍵の更新の際にはデータの再暗号化が必要
デメリット
Enterprise Editionでは鍵管理と鍵の更新に対する機能を追加
- 28. Page 28 © NEC Corporation 2015
鍵管理とAWS KMSの利用
アプリケーション
サーバ
鍵管理機能
暗号化した
DB暗号化用の鍵を
提供
復号した鍵で
データを暗号・復号化
機密性確保のため、暗号・復号に使用する鍵は
AP、DBサーバから独立して管理されることが望ましい
復号した
DB暗号化用の鍵を
提供
- 29. Page 29 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌鍵管理の方法
OSS-DBMSと連携する鍵管理機能としては
クラウドサービス上の鍵管理が適している
•導入は容易だが、鍵管理のしくみはつくり込が必要
•鍵を格納したファイルをDBサーバ上に置くため、機密性に
不安がある
ファイルによる
暗号鍵管理
•高度な鍵管理の仕組みを提供可能
•導入費が高額であるため、OSS-DBMSを利用するシステム
での採用は難しい
専用HW
(Hardware Security
Module)による暗号鍵管理
•高度な鍵管理の仕組みを提供可能
•ランニングの費用はかかるが、導入費は抑えられる
クラウドサービス上の
鍵管理
- 30. Page 30 © NEC Corporation 2015
鍵管理とAWS KMSの利用
2014年11月
アマゾン ウェブ サービス(AWS)による鍵管理サービスの開始
- 31. Page 31 © NEC Corporation 2015
鍵管理とAWS KMSの利用
AWS KMS(Key Management Service)とは
データの暗号化に使用される暗号化キーの作成と管理機能を提供
するサービス。
• キーの作成、説明、リスト表示
• キーの有効化と無効化
• キーの使用ポリシーの設定と取得
• キーエイリアスの作成、削除、リスト表示
• データの暗号化、復号化、再暗号化
• プレーンテキストでサービスからエクスポートできるか、サービスをそのま
まにしないキーで暗号化できるデータキーの生成
• 暗号化アプリケーションに適したランダムな数値の生成
参考:http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/overview.html
AWS KMSを利用し、
DB-クライアント外に
暗号鍵生成、暗号化、復号機能を
持つことが可能
TDE for PostgreSQL Enterprise Editionは
AWS KMSを利用した鍵管理機能を提供
- 32. Page 32 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌TDE for PostgreSQL Enterprise Editionでは3種類の鍵を使用
• データ鍵を暗号化するための鍵
• セキュリティ管理者が生成(AWS KMS)
CMK
(Customer Master Key )
• データを暗号化するための鍵
• 暗号鍵をAWS KMSで復号して取得
データ鍵
• 暗号化されたデータ鍵
• APサーバ上に保有し、透過的暗号化利用時に
DBに提示
暗号鍵
- 33. Page 33 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌AWS KMSを利用したTDE for PostgreSQLの登場人物と保有情報
• AWSアクセス用の情報
• 復号権限のあるユーザアカウント
DBA
• セキュリティ管理者が発行した暗号化された鍵
(暗号鍵)
AP開発・
運用者
•AWS IAMの利用権
•鍵作成・管理用権限のあるユーザアカウント
•CMK(Customer Master Key)
→ データ鍵および暗号鍵の作成
セキュリティ
管理者
データの復号に必要な情報や権限は分散して管理され、
「データ鍵」を常時保有する登場人物は存在しない
- 34. Page 34 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌TDE for PostgreSQL Enterprise Editionの鍵バージョン管理
鍵の更新時に全暗号化データの再暗号化は不要/
データ更新時に最新の鍵で暗号化する
DB内に暗号化した複数バージョンのデータ鍵を持ち、
利用時に復号しメモリ展開したデータ鍵を使用する
バージョン 暗号化データバージョン データ鍵
バージョン データ鍵
バージョン データ鍵
暗号化列の構造鍵管理テーブル
メモリ展開した
鍵テーブル
参照時に
過去のバージョンの鍵で復号可能
※ 鍵のバージョン管理はAWS KMS無しでも利用可能
- 35. Page 35 © NEC Corporation 2015
鍵管理とAWS KMSの利用(準備)
▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用
(準備)
暗号鍵受領
AP開発・運用者 セキュリティ管理者 DBA
IAMアクセス(管理者)
復号用ユーザ追加
CMK作成
CMKのキーIDを指定し
データ鍵・暗号鍵を生成
TDE導入
AWSアクセス情報作成
(設定ファイル)
DB
暗号化したデータ鍵を
DBに格納
- 36. Page 36 © NEC Corporation 2015
鍵管理とAWS KMSの利用(利用)
▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用
(利用)
DBアクセス時に暗号鍵提示
クエリ発行
AP AWS KMSDB
APから暗号鍵取得
AWSに接続し暗号鍵を復号
(データ鍵)
鍵管理テーブルを復号し
メモリ展開
データ鍵を利用した暗号・復号
DBセッション内での
暗号・復号に利用
暗号鍵の復号
KeyID、暗号鍵
データ鍵
- 37. Page 37 © NEC Corporation 2015
AWS Management Consoleで暗号化キー作成を行う
① IAM
② 暗号化キー作成
画面へ
AWS KMSの機能は、
AWS IAM(Identity &
Access Management)から
利用します
- 38. Page 38 © NEC Corporation 2015
CMKを作成する
③ CMK作成
- 39. Page 39 © NEC Corporation 2015
KeyIdを確認する
④ KeyIDを確認
KeyIDはCMKを
一意に指定します。
- 40. Page 40 © NEC Corporation 2015
データ鍵/暗号鍵生成
⑤ DBサーバで登録用コマンド実行
⑦ AWS接続情報入力
⑧ KeyID入力
⑨ 暗号化アルゴリズム選択
⑥ KMSを使用するか選択
- 41. Page 41 © NEC Corporation 2015
psqlでの利用例
⑪ 暗号化鍵をDBに提示
⑩ 暗号化鍵を渡さずテーブル参照
(エラー)
⑫ データの復号に成功
- 42. Page 42 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Free Edition、Enterprise Edition共通の利用上の注意
一部ではありますが、アプリケーション改造
(透過的暗号化セッションの開始/終了宣言)が必要です
Hashインデックスにのみ対応しています
(B-Treeインデックスには未対応です)
大小比較やソートは可能ですが、全データの復号が必要となるため、
DBサーバに大きな負荷がかかります
▌Enterprise Editionの利用上の注意
AWS KMS利用時に「pgtde_begin_session」関数の応答時間が数秒か
かることがあります。
- 44. Page 44 © NEC Corporation 2015
メンテナンスツール(PostgreSQLデータ保全ツール)の機能
▌データ破壊発生後の復旧作業
バックアップ後のDB更新箇所を復旧するには、膨大な作業が必要となる。
• 破壊箇所の確認やデータの救出作業は工数がかかる
• エラー発生個所以外にDB壊れていないことを確認するには、
全DBオブジェクトのチェックが必要
•データ破壊が発生しエラーとなる箇所の特定
•アクセス不能なレコードを回避しつつ、参照可能なレ
コードを抽出
•救出データのリストア
•インデックスの再作成
•他に破壊されたファイルが無いか、全レコードの抽出
および正常性確認
•ファイルをダンプし、破壊箇所の復旧…Etc.Etc.
データ破壊からの
復旧作業
- 45. Page 45 © NEC Corporation 2015
▌TDE for PostgreSQL Enterprise Editionは、
TDE機能に加えPostgreSQLのメンテナンスツールを提供します
Verify機能
テーブルの構造やデータとインデックスの整合性チェック
Salvage/Revive機能
起動しないDBからのデータ救出/リストア
メンテナンスツール(PostgreSQLデータ保全ツール)の機能
root
branch
leaf
leaf
branch
Leaf
leaf
インデックスとデータの整合性チェック
テーブル
データの構造チェック
データブロック
破損
…
起動不能なDB
破損
データ救出 救出データのリストア
整合性
インデックス
- 47. Page 47 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Edition別の比較一覧
機能/サービス Enterprise Edition Free Edition
Transparent Data Encryption機能
列単位の
暗号化機能
テキスト 〇 〇
バイト列(画像など) 〇 〇
数値 〇 ×
日付・時刻 〇 ×
鍵の更新、バージョン管理機能 〇
△
暗号鍵のバージョン管理機能なし
一括更新のみ可
Amazon Web Service 鍵管理機能
(Key Management Service)とのシームレスな連携
〇 ×
Maintenace機能
データベース診断・復旧機能 〇 ×
サポート・サービス
Transparent Data Encryption for PostgreSQLの
PPサポートサービス
〇 ×
PostgreSQL本体のサポートサービス 〇 ×
- 48. Transparent Data Encryption for PostgreSQL
Free Editionから
PostgreSQLの透過的暗号化機能を
是非ご体験ください
https://github.com/nec-postgres/tdeforpg/
鍵管理機能をご要望の皆様には、
Enterprise Editionをご検討ください