近年、日本においてITに関連した社会を脅かす事件や事故は対岸の火事とは言えない状況にあると筆者は考えます。「あらゆる場所」で「いつでも」、「好きなときに」ITの力を駆使して、今まで知りうることのなかった情報を簡単に入手することができるからです。
ITは人の生活に密接し、利便性を向上しているほか、今までだれも考えつかなかっただろう出来事を可能にしています。
当然、データ量が爆発的に増大しているため、セキュリティ事故に伴うデータ漏洩は社会に大きな影響を与え、多くの人の機会損失(お金を払っていることに対するサービスの享受が損なわれている)を与えています。
本連載では、データが最終的に集まる場所であるデータベースを対象として、セキュリティを確保するために考慮すべきことや日本オラクルのセキュリティコンサルタントのノウハウについて説明します。
データベースセキュリティとは?
データベースにおいてセキュリティを施行する、または強化するとはどういうことを意味すると思われますか?
わかりやすく例えるならば、データベースは家そのものであり、家の住人(家族)が鍵を持ち、鍵を使って解錠して家に入るのと同じようにデータベースユーザーもパスワード(鍵)を持ちます。
他人が勝手に玄関から入ってきて、危害が家や家族に及ばないように安全を確保することがセキュリティを確保することであり、勝手に入ってきたら警備会社に通報されるなどの仕組みがセキュリティを強化することとも言えます。
では、鍵をかけておけておけば、すべてが安全かというとそうとも言えません。施錠して安全を確保するということは、他人(外部)からの攻撃から守ることを前提としています。
もし、家族(内部)から何らかの攻撃が行われた場合、安全は確保されていると言えるでしょうか? ちょっと不謹慎かもしれませんが、身内についてはどうしても性善説が前提となり、ガードが甘くなるのではないでしょうか?
これは筆者の例ですが、子供の頃に父親の部屋からお金を盗んで遊び歩いていたことがあります。どうしてそんなことができたのでしょうか? 筆者の道徳心はさておき、考慮点は以下の通りです。
(1)お金は父親の部屋のどこかにある
父親の部屋で時間をかけて探せば、いつかお金は手に入るという環境を父親が作ってしまっています。
(2)父親の部屋に鍵がかかっておらず、家族なら誰でも入れてしまう
何気ない素振りでドアノブを回して、ドアを開ければ家族ならば怪しまれずに入ることができます。
(3)当然ながら監視カメラなんてないため、証拠が残らない
家族に対しては甘え(性善説)が発生し、当然ながら監視カメラなんて設置しないでしょう。しかし、事実を確認するなら、父親の部屋に入ったという事実を後日追うために証跡取得が必要でしょう。
(4)証拠を残すためのトラップの設定なんて、家族に対してまずしない
例えば、父親の部屋からお金を盗むという行為を「部屋に入る」→「ひたすら探す」→「タンス預金からお金を抜く」→「何事もなかったように痕跡を消す」→「部屋を出る」という動作に対して、一つ一つ証跡を取得・確認していたら時間が膨大になります。
(5)お金に対する安全性がタンス預金になっている
(1)の状態でかつ時間をかけて探すことができれば、いつかお金を得ることができます。家庭用の金庫を設置している場合もあると思いますが、それにいれておけば安全ですね。
上記は極端な例かもしれませんが、(1)~(5)をちゃんと実施しておけば少なくとも家族(内部)の犯行を防げる可能性は高くなります、同時に何かあったときに疑いを家族に向けることがなく、結果的に家族が不幸にならないセキュリティ対策を施行しているとも言えます。
つまり、守りたい対象物に対して、「ある一定の適切な処置が施されている状態」がセキュリティが確保されている状態と言えます。
さきほどの父親のお金を盗む例では、以下の点を網羅できれば、かなりの確率でセキュリティが確保されていると思います。
- お金がどこにあるかを特定させない仕組みづくり
- 特定の部屋に特定の人しかアクセスできないようにする
- 何かが行われ場合、その証跡がきちんと整理されている
- タンス預金ではなく、金庫にお金が厳重管理されている
ちなみに、後日、親にバレて死ぬほどひっぱたかれたという筆者の経験はちょっと脱線気味のオチだと思ってください(笑)。
多層防御とは?
上記の例ですが、いかがでしょうか、皆さんの中にも思い当たる苦い経験があったのではないでしょうか。
正直なところ、家族に対して疑いを持ちたくないですよね。したがって、ここからは情報を資産と考える企業をターゲットにセキュリティについて説明していきます。引き続き内部犯行に対する方針を紹介しましょう。
「え? 外部攻撃について考慮しなくていいの?」 という声があるかもしれません。
まず、セキュリティが確保されている状態とは一定の適切な処置が施されている状態であると説明しました。これは、適切な処置は1つの手法に限らず、複数の手法で満遍なく処置することを示します。
「いやいや、私は誰にも知られることなく、かつ解析不可能なパスワードで情報を守っているから平気だ!」という方もいるかもしれません。
仮に、パスワードが解析不可能だったとしても、暗号化されていない情報媒体(ここではデータベースのバックアップファイル)を入手して、正規の手法(※1)以外で情報を抜き出すことができたら、たぶんパスワード解析よりも時間がかからないかもしれません。
ダンプファイルに対して、LinuxのStringコマンド(※2)を実行すると、きれいに整理された情報ではありませんが、機密データを入手することはできます。
※1 ここでの正規の手法とは、SQLPLUSなどのインタラクティブなツールを使うことを指します。
※2 バイナリファイルに対して直接参照することが可能なコマンド
また、もっと簡単な方法は、データベースに精通している人や業務ユーザーを参照する権限を持つ人と結託する方法かもしれません。結託に至るまではいろいろとあると思います。
例えば、「お前の秘密を知っている、だから俺に協力して情報を盗んでこい」と恐喝されて仕方なく結託された場合もあれば、「俺の会社には有名企業や有名人が多く会員登録している有償サイトがある、このリストを業者に高値で売れる」といったように、両者の利害が一致している場合などが考えられます。
つまり、1つの方法(対策)のみに依存しすぎると、それが打破された場合にさらに被害が拡大する可能性があります。一昔前はネットワーク・ファイアーウォールによる水際対策が主流でしたが、内部の人間が犯行に及ぶと「正規のユーザー」による「正規のオペレーション」で取得した情報は水際対策ではカバーできません。
そのため、多層防御という複数のセキュリティ対策の層をいくつも作って、ある層が打破されても次の層で防御するという考え方が一般的になってきました。
ここで、前述した質問 「え? 外部攻撃については考慮しなくていいの?」に対する回答ですが、外部犯行を検知できる仕組みが既に存在するならば、セキュリティ上、データベースのレイヤーで外部攻撃に対する施策は必要ないかもしません。
ちょっと極端な言い方をしていますが、これはセキュリティを考える時に「どんな脅威から守るか?」ではなく、「どのデータをどのようなレイヤーで守るか?」という考え方をします。
日々、日進月歩で進化するテクノロジーに伴い、攻撃手法も数多く存在し、世界中の悪意あるハッカーを世の中から一掃することはできません。そのため、守りたいデータを中心に複数の防御策を講じて、攻撃を食い止めるまたは最小限の影響にとどめるという考え方をします。
先の例で、外部攻撃の対策はデータベースのレイヤー以外で実施し、仮に外部攻撃がデータベースに及んだとして、管理者権限を奪取されたとしてもデータそのものへアクセスを認可しないというルールを設けることでセキュアな状態が確保されていると言えます。
さて、ここまでセキュリティの基本について、簡単ですが伝えることができたと思います。
「まだ、データベースのセキュリティについて触れてないじゃない!」と思われるかもしれませんが、上記の考え方は非常に重要です。もちろん、すべてのセキュリティの思想をお伝えできてはいませせんが、少しでもセキュリティの重要性を実感していただけたら幸甚です。
次回以降は、今回説明したセキュリティに関する考え方をもとにデータベースセキュリティについて踏み込んでいきたいと思います。
茶園 太志
日本オラクル株式会社 クラウド・テクノロジーコンサルティング統括本部
日本オラクルのコンサルティング部隊において、データベースセキュリティを担当している。日夜、「みんなが守ってくれるセキュリティってなんだろうか?」と問う。