データベースのセキュリティを考える際、「暗号化」というキーワードを真っ先に思い浮かべる方も多いのではないでしょうか。
暗号化は、個人情報保護規制や業界標準の要件を満たすうえで欠かせない要素であり、データ漏洩を防ぐための基本的な対策の一つです。
特に近年は、情報漏洩リスクの高まりやコンプライアンス要件が強まっており、暗号化の重要性がさらに注目されています。
たとえば、Webアプリケーションの主要な脆弱性を示すOWASP Top 10 (2021)では、「暗号化の不備(暗号化の失敗)」が2番目に挙げられており、適切な暗号化を行わないことで機微データの漏洩につながるリスクが高まると警告されています。
また、EU一般データ保護規則(GDPR)をはじめ、多くのセキュリティ標準や規制でも、機密性の高い情報を扱う際に暗号化の実施が推奨または義務づけられています。
こうした背景から、今日企業が扱う重要システムでは暗号化はほぼ必須の対策と言ってもいいでしょう。
本記事では、この暗号化の必要性を踏まえつつ、Oracle Databaseが提供する暗号化機能「透過的データ暗号化(TDE)」についてご紹介します。
一般に暗号化は「第三者による非正規経路からの攻撃」に有効です。この攻撃のイメージとしては、家に忍び込む際、玄関の鍵が厳重なら、侵入者は裏口や窓など別の入り口を探すのと同じです。
データベースでいえば、認証を突破してデータベースに正規にアクセスしようとする攻撃(いわゆる"正面突破")だけでなく、以下のようにDBログインをバイパスする攻撃経路が存在します。
適切なレイヤにて暗号化を行うことで、上記のような物理媒体レベル・ファイルシステムレベルでの盗み取り等による不正アクセス・情報漏洩からデータ自体を守ることができます。また暗号化に伴い、管理対象を暗号鍵の保護に集中させることで、管理や運用の負荷を軽減することができます。
暗号化が重要であることは分かっていても、アプリケーション側で暗号化を実装するとなると、コストや実装面から複雑になりがちです。 そこでOracle Databaseは、データベースの暗号化機能として「Transparent Data Encryption(TDE)」を提供しています。ライセンスとしましては「Oracle Advanced Security」オプションの一部としてご利用できます。
TDEは暗号化が意識されない(透過的な)仕組みでデータを暗号化する機能です。データベースはデータをストレージに書き込む前に自動的に暗号化、そしてストレージから読み取る際に自動的に復号します。 暗号化・復号の処理はデータベース側が実行するため、利用者が特別な操作を行う必要はありません。そのため、正当な権限を持つデータベースユーザーやアプリケーションは通常どおりアクセスすることができます。
一方、OSを介して直接データを読み取ろうとしたり、ストレージから直接アクセスを試みても、暗号化されたデータしか取得することができません。 そのため万が一、バックアップやファイルのコピーを盗まれた場合でも、データは暗号化されているため攻撃者によるデータの解読を困難にすることができます。
TDEでは列単位および表領域単位での暗号化が可能ですが、暗号化されていない列に機密データが挿入される懸念がないことや、索引や制約への影響が少ないことから、表領域単位の暗号化を推奨しています。 表領域暗号化により、一時表領域、UNDO表領域、REDOログなど、データベース全体にわたって暗号化された状態で保持することができ、新規で作成する表領域もデフォルトで暗号化するように設定することもできます。
OCI(Oracle Cloud Infrastructure)で提供されるDBサービスでは、TDEが常に有効化されています。そのため、Standard EditionでもTDEを利用可能であり、OCIを活用していただくことでデータベースのセキュリティを強化することもできます。
参考:https://docs.oracle.com/ja-jp/iaas/Content/Security/Reference/dbaas_security.htm
ストレージ製品の機能として提供されるストレージ暗号化とTDEはどちらも暗号化によるセキュリティ強化を目的としていますが、適用されるレイヤーや対応できるリスクがそれぞれ以下の表のように異なります。
ストレージ暗号化 | TDE | |
---|---|---|
暗号化の範囲 | ストレージ全体 | データファイルまたはASM |
対策可能なリスク | ・ ディスク盗難・ 物理的なメディアの流出 | データベース・ログイン以外の経路による不正アクセス |
限界 | OSからはデータが閲覧できる | DBサーバーより外部に出るデータ・通信は平文になる |
つまりストレージ暗号化は、物理的なディスク盗難などのリスクが懸念される場合に有効だと言えるのですが、データベースの場合においては、データセンターに忍び込みディスクをそのまま盗んでいく、、という事象が起きるリスクは比較的低いと言えるでしょう。そのため、データベース内のデータ保護には最適とはいえません。
TDEは(データベースで扱うデータのみに限定されますが)暗号化されたデータはOSを経由しても読み取ることはできません。そのため、物理ディスクの盗難はもちろん、OS管理者が乗っ取られてデータファイルを直接参照されるリスクや、バックアップファイルが持ち出されるリスクにも対応しやすく、より広範なリスクをカバーすることができることに違いがあります。
もちろんストレージ暗号化とTDEは、それぞれ異なるリスクに対応するため、ストレージ暗号化で物理的な盗難リスクを軽減しつつ、TDEでデータベースレイヤーのセキュリティを強化する、といった組み合わせて使用することで、多層防御を実現することが可能です。
暗号化処理とパフォーマンス速度はトレードオフの関係にありますが、TDEでは以下の2つのポイントを考慮することで、パフォーマンスへの影響を非常に低くすることができます。
TDE表領域暗号化ではディスクI/O時に発生します。メモリ上ではデータは平文の状態ですので、クエリの結果がキャッシュに存在する場合には暗号化・復号処理が不要となり、実質的にオーバーヘッドは発生しません。 そこで、クエリのキャッシュヒット率を高めることで、暗号化の影響を最小限に抑えることができます。また、キャッシュサイズを広げるためRAMを拡張することも有効です。
以下のような暗号化処理を高速化するハードウェア機能を活用することで、暗号化処理を短縮することができます。
AES-NI(Intel/AMD)
Intel社やAMD社のプロセッサに搭載されている暗号化処理の特殊な命令セット「AES-NI」を使用し、直接プロセッサで演算処理を行うことで処理速度を上げることが可能です。
Exadata
Hybrid Columnar CompressionやSmart Scanなど、Exadataの持つ機能と組み合わせることで、処理時間を削減することができます。
パフォーマンス影響の要因としてはそのほかにストレージ性能や暗号化アルゴリズムなどもあげられます。上記にかかわらず、パフォーマンスへの影響は環境や設定によって異なってきますので、本番環境で使用する際は事前に十分なテストを行うようにしてください。
Oracleが提供する新しい無償版DB「23ai FREE」では従来のXE(Express Edition)と比較して、セキュリティ機能(TDE・Database Vaultなど)が多く解放されており、試しやすくなりました。 今回ご紹介したTDEやDatabase Vaultなど、従来の無償版XEでは使用できなかった機能が使えるようになっていますので、ぜひ、お試しください。
本記事では、Oracle Databaseの暗号化機能「透過的データ暗号化(TDE)」について解説しました。 TDEは情報漏洩リスクの軽減やコンプライアンス対応のために不可欠な暗号化を、効率的かつ透過的に実現する機能です。 ユーザーにとって特別な操作が不要な点や、ハードウェアアクセラレーションを活用したパフォーマンス最適化により、実装や運用の負担を最小限に抑えることができます。
ただし、暗号化は非正規なアクセス経路に対して強力な対策となる一方、正規の経路を利用した攻撃には対応できません。そのため、暗号化と合わせてアクセス制御を適切に実施することが重要です。
次の記事では、Oracle Database 23ai FREEを使用し、TDEを実際に動かすデモ手順をご紹介します。 実際の操作を体験しながら、TDEの機能をさらに理解していただければ幸いです。
日本オラクルにてOracle CloudとDatabaseのセキュリティ製品を担当しています。
Next Post