企業や組織においては、少なからず機密性の高い情報を保持しているだろう。その情報を具体的に管理しているのはデータベースシステムであることは自明だ。しかし、この当たり前のシステムが、セキュリティに関してはいまひとつきちんと管理が行われていない場合が意外と多く見受けられるといわれている。
例えば、アクセス権を適切に付与または制限しておらず、権限のないユーザーによって機密データをのぞかれ、詐取されてしまったりすることが問題となっている。データベースの安全性を確保するには、機密データへの権限のないユーザーからのアクセスの防止やデータの不当な削除・改ざんなどの破壊行為の防止、データに対するユーザーアクセスの監視などの対策が必要である。
本記事では、Oracle9iのセキュリティ機能を中心に、データベースのセキュリティを強化するために役立つ情報を説明していく。企業情報、セキュアなシステム構築において重要な位置を占める、データベースのセキュリティ対策としての基本を学んでいただければ幸いだ。
今回は、データベースソフトウェアとしてWindows、UNIXプラットフォームを問わず広く利用されているOracleデータベースについてのセキュリティ対策の手法とOracleデータベースが提供しているセキュリティ対策機能についてOracle9i(Oracle 9.2.0)をベースに説明する。
データベースのセキュリティ対策の重要性は、SQL Slammerで新たに注目されだした分野だが、基本的なセキュリティ対策の考え方は、Webサーバやメールサーバなどと同じように「意図した利用方法以外でサーバを勝手に利用されないようにする」(不正アクセスを防ぐ)というところではないだろうか。
ただ、Oracleデータベースにおけるセキュリティの重要性はデータベースに登録されているデータ管理という部分では、Webサーバなどのほかのアプリケーションとは少しその性質が異なるかもしれない*1。Webサーバは、情報を操作するためのインターフェイスとして利用されるので、多くの場合、ほかのサーバへの攻撃手段に利用されないような対策が必要だが、Oracleデータベースサーバの場合は、情報を蓄積・管理しているため、この蓄積・管理された情報(データベースに登録されているデータ)が外部に流出することを防ぐための対策が必要になる。当然、外部(インターネット)からの不正アクセスだけではなく、社内(イントラネット)からの不正アクセスに対しても有効な対策を行う必要がある。
*1
しかし、実際のところ、Webサーバやアプリケーションサーバの攻撃については、最終的にデータベースサーバから情報を取り出すためであったりすることもあるのだが……。
例えば、多くのOracleデータベースサーバには、重要な顧客データやクレジットカード番号などがデータとして保存されている。このような場合、インターネットからの不正アクセスを完全に防いでいても、イントラネットからの不正アクセスに対しては、それほど有効な対策を打っていない場合が多いのではないだろうか。これは、Oracleデータベースに登録されているデータの内容にもよるが、Oracleデータベースへのアクセスが許可されたユーザーに対するアクセスコントロールや監査を含めたセキュリティ対策についても有効な対策を行う必要性が出てくるかもしれない。こういった機能については、Oracleデータベースが標準で提供しているいくつかの機能を利用することでセキュリティ対策を行うことができる。
今回は、データベースソフトウェアについて、Oracleデータベースに特化した形で、できるだけコストをかけることなく、OSの部分からOracleデータベースが標準的に提供するデータベースオブジェクトまでのセキュリティ対策手法を項目ごとにできるだけ詳しく説明したい。
MEMO
2003年1月に発生したSQL Slammerの攻撃については、データの取得を狙ったというよりも、他サーバへの攻撃の踏み台として利用されたというものになるので、ここでいうデータベースサーバへの攻撃とは少し方向性が異なるイメージだろうか。
システム開発の現場でも、いまはそれほどでもないと思われるが、以前は「決済情報や顧客情報は、やはりOracleデータベースを利用した方がいい」という会話がシステム開発会社の担当者から聞かされたりすることがあったと思う。そのような場合、商用データベースであるOracleデータベースに対する信頼性や過去の経験などが採用の大きな要因になっているかもしれない(決してほかの商用データベースやPostgreSQLのフリーソフトウェアに問題があるのではなく、担当者の経験のあるプラットフォームをデータベース製品として提案するのが多いというのが実際のところだろうか。皆さんいかがだろう)。
ただし、Oracleデータベースを利用しているからといって、ほかのデータベースソフトウェアに比べて、セキュリティ的に安全であるということはいえるだろうか? いえ、決してそうではない。
また、データベースシステムのセキュリティを向上させるためには、Oracleデータベースだけではなく、アプリケーションサーバ、さらに、アプリケーションサーバにつながっているWebサーバも含めたシステム全体の対策が必要になる。
また、攻撃手法としては、近年バッファオーバーフローという手法が一般的だ。この攻撃は、バッファと呼ばれるソフトウェアのデータ格納領域を想定量以上の大量のデータであふれさせ、誤動作させることを利用する手法である。侵入者は、事前にこのようなセキュリティホールを調べ、侵入を試みる。それによって、root権限の奪取などによるホームページの改ざんが可能になる。データベースシステムにおいては、データを取り出すアプリケーションサーバを攻撃して、データベースサーバから重要な情報を取り出すという攻撃が行われている。とすれば、最終的にデータベースへの不正アクセスを防ぐことがOracleデータベースサーバセキュリティの本質だろう。
通常、Oracleデータベースが導入されているシステムにファイアウォールを導入しているケースは、多いのではないだろうか。その場合、以下のようなネットワーク図が考えられる。
Oracleデータベースを導入しているシステムだけに限らず、ひと昔前は、よく「ファイアウォールを入れているからうちのOracle データベースは安全だよ」ということを社内の情報システム担当者から聞かされただろう。確かにファイアウォールを入れることで、許可されていないポートへの攻撃に対してセキュリティを高めることができる。
しかし、ファイアウォールの最大の課題は、「許可されたポートに対しては、自由にアクセスできる」ということだ。このことは、問題点ではないが、この部分を利用して、攻撃者は、セキュリティパッチなどが当たっていないセキュリティ上問題があるサーバに対して、先ほど説明したようなバッファオーバーフローという攻撃手法を利用して、攻撃を行う。
Oracleデータベースのセキュリティ対策は、ファイアウォールを導入したり、IDS(不正侵入検知システム)を導入したり、とにかくコストが掛かるものだと思ってはいないだろうか。
しかし、実際には、先ほどのファイアウォールの問題点でも指摘したが、適正な運用が行われない場合や導入したセキュリティソリューションがどんなことをしてくれて、どんなリスクがあるかを十分に理解していない場合は、せっかく導入したセキュリティソリューションが効率的に機能しないということになりかねない。いい換えれば、まず、インストール作業などの初期導入時において適切なセキュリティ対策を行うことで、コストを抑えながら、Oracleデータベースのセキュリティを高めることができるということだ。
以上のことを踏まえて、Oracleデータベースのセキュリティ対策方法を考えてみよう。基本的に、事前に守るべきポイントが分かっていれば、作業範囲も限定されて、人的コストを含めたトータルでのコストも削減することができる。
構築しようとしているシステムを分析し、どの程度の危険性があるかを事前に分析することができれば、構築後の運用においても、適切な対応を行うことができるはずだ。その中で、優先順位の高い項目から対策を行うことで、高いセキュリティコストというリスクを軽減することができるはず。また、物理的な下位のレベルから対策を行うことで、より効果を上げることができる。
Oracleサーバの導入に際してもApacheなどのWebサーバと同じようにセキュリティ対策が必要になる。セキュリティ対策の手順としては、以下のような順序で実施することをお勧めする。
(1)設置場所 | Oracleデータベースをどこに設置するのが安全なのか? |
---|---|
(2)ネットワーク | ネットワーク上のどこに置くのが安全なのか? ネットワーク上での対策は? |
(3)サーバ | サーバの適切なインストール方法は? |
(4)Oracle | Oracleデータベースの適切な設定は? ・アカウントの管理 ・オブジェクトのセキュリティ対策 ・セキュリティパッチの適用 など |
表1 システムのセキュリティ対策想定例 |
まず、Oracleデータベースサーバの設置場所についても、セキュリティ要素として認識する必要がある。例えば、ファイアウォールやIDSなど高価なセキュリティ投資を行っていても、社内のマシンルームはだれでも自由に出入りできる環境でサーバコンソールからSQL*Plusなどで自由に情報が取り出せるような状況になったりしていないか?
このような状況を回避するために、一例として、部外者や不審人物などの入室を防ぐための入退室管理システムを備えているデータセンターなどにデータベースシステムを構築することで、物理的なセキュリティを高められるといった方法も考えられるだろう。
(1)入退出管理 | ICカードなどの認証システムを利用した入退出管理を行うことで、部外者の侵入を防ぐことができる。 |
---|---|
(2)監視カメラ | データセンター内に監視カメラが設置し、24時間監視する。 |
(3)施錠 | サーバが設置されているラックなどについて、施錠をすることによって、部外者の不正利用を防ぐことができる。 |
表2 データセンタが提供する主なフィジカルセキュリティ要素例 |
設置場所のセキュリティなどについては、まずどこに置くとどんな危険性があるという評価から始めてみてはどうだろう。またこのようなリスク分析は、セキュリティポリシーを策定することで予想されるリスクを事前に想定することができるだろう。またSecurity&Trustフォーラムの連載記事「実践セキュリティポリシー運用」などで紹介しているサンプルポリシーなどを利用することでも、最低限のリスク分析を行うことができる。
コラム セキュリティポリシー
セキュリティポリシーセキュリティポリシーの効用とは、ユーザーに対してどんなサービスを提供し、運用ではこんなことをすると事前に規定しておくことで、リスクを事前に分析し、リスクに対して対策を行うことができる。これにより、セキュリティ対策を行う手法および範囲を事前に規定しておくことができる。セキュリティポリシー構築に当たって、構築することばかりに目が行きがちだが、実際には、運用を行いながらの維持管理を行うことにその重要性がある。
特に、構築に非常にコストが掛かるため、なかなか手が付けられない部分だが、JNSA(日本ネットワークセキュリティ協会)にサンプルポリシーが掲載されている。このサンプルポリシーを利用して必要なものを抜き出して運用を始めて、徐々に運用体制を構築することも可能なため、JNSAのサンプルポリシーのページを一読することをお勧めする。
読者の皆さんの中には、Oracleデータベースにおいて豊富なサポート情報が提供されていることをご存じの方もおられるとは思うが、情報が豊富故に見逃してしまう部分もあるのではないだろうか。本連載では、サポート情報を参考として基本的な事項に絞り、必要最低限のセキュリティ対策に関連したことを、できるだけ分かりやすく紹介していきたいと思う。
次回は、データベースシステムにおけるネットワークセキュリティ対策として、パケットフィルタリングを利用したセキュリティ対策やファイアウォールを利用したセキュリティ対策、リスナーのセキュリティ対策などを紹介していこう。
Copyright © ITmedia, Inc. All Rights Reserved.