サーバークラッキング

ここ数日、カカクコム事件に関連して、2つの記事を書いた。事件後のカカクコムの対応についてではなく(それは他の人に任せた)、そもそもサーバーをクラッキングから守ることのできる「最高のセキュリティ」というものが存在するのかという観点で見てきた。

id:finalventさんが6/1の日記で、

とか言って馬脚を現すの部類かもしれないが、どうも価格コムの一件もそうだが、ウィンドウズ=セキュリティに弱いシステム、とか広めている一派でもあるのだろうか。私の考えでは、そういうOS選択だけの問題とはとうてい思えないのだが。

と書いているのを見て、サーバークラッキングについて、例をあげて考察してみようと思います。


下に挙げたのは、ある企業が個人向けに提供しているWebサービスのシステムの構成を示したものです。これは非常に単純なもので、負荷分散装置などは備えておりません。(特にITに詳しくない人なら、これを見ただけでフリーズしそうですが、わからないからセキュリティには関係がないということはないということは、後述します)

○Webサーバー
 IBM xSeries 345
 Windows 2000 Server
 IIS 6.0
 PHP 4
○DBサーバー
 IBM xSeries 345
 Redhat 3
 oracle 8i
○管理端末
 IBM Thinkpad R40
 Windows 2000 Professional
ファイヤーウォールアプライアンス
 WatchGuard Firebox V60
ルーター
 cisco 2650
○スイッチ
 cisco catalyst 2950
○ネットワーク構成
 FWで、インターネット、DMZ、社内LANの3つのセグメントに分割
 WebサーバーとDBサーバーはDMZに、管理端末は社内LANに置かれています。

この単純なシステムに最高のセキュリティを施すには、どの程度の技術者がいればよいのでしょうか? まず、一人では無理で、チームになります。種類の違う複数の技術が組み合わさったシステムですから、一人で担当できる技術範囲よりも広いからです。しかも、セキュリティに詳しい技術者というのは、たいてい、その技術について詳しい技術者ですから、技術に定評のある単価の高い技術者が必要になります。(上にあげたすべてのシステムについて、全部一人で設計できますよという技術者は見たことがない。)
つまり、新しいサービスの開発に注力して会社を引っ張っていってほしい主力クラスの技術者を、チームでセキュリティ担当に割り当てる必要が出てくるわけです。そんなことができる企業は、多分、幸せな企業です。なぜなら、普通の現場では、そのクラスの技術者を一人確保することでも、なかなか大変なことではないかと思うからです。
また、これを見たらOSのセキュリティというのは、セキュリティ全体の中でのほんの一部でしかないということもわかります。たとえOSを最高のセキュリティにできたとしても、IISPHPのセキュリティが最高でなければ、Webサーバーはクラックされてしまいますし、Webサーバーが最高のセキュリティでも、DBサーバーをクラックできるかも知れませんし、サーバーを適切にセキュリティ対策していても、ファイアーウォールをクラックされればサーバーは丸裸になってしまいます。


さらに、環境をもう少し追加して、具体的にどんなクラックがありうるかを考えてみましょう。
この企業が「営業サーバー」というものを持っていたとします。これは、営業マンが情報共有のために、社内向けに設置したサーバーで、Webサービスでスケジュール管理と伝言掲示板を提供し、Windowsファイル共有でファイルサーバー機能をはたしているサーバーです。
営業マンは、社外に出ることが多いですから、社外からPHSを使ってインターネット経由で営業サーバーに接続できなければなりません。そのため、営業サーバーはDMZに置かれています。つまり、Webサーバー、DBサーバーと同じセグメントにあります。社内からは普通に接続できるようになっていますが、社外からは直接接続できるとセキュリティ的な問題がありますので、VPNでトンネルして接続することになっています。VPNサーバーは営業サーバーが兼務しています。
ところで、営業マンというのは、たとえIT企業といえども、技術については疎いものです(これは、本当です。ZIPファイルが解凍できないくらいはもちろん、ソフトのインストールも一人では無理という人もいるくらいです)。そんな営業マンのために、派遣社員の秘書がいて、VPNの設定を代わりに行ったり、パスワードの再発行を電話で対応したりしています。
こんな追加情報が手に入ったとして、どうやってクラックにつながるか分かりますか?
この場合は、営業の秘書をソーシャルエンジニアリングするのが正解です。これによって、DMZ内の営業サーバーに正規のユーザーでログインできるようになります。そうすれば、営業サーバーを踏み台にして、WebサーバーやDBサーバーを内部からクラックできるようになります。ファイヤーウォールにこんな大穴があいてしまえば、セキュリティなんてないも同然ですね。


上述の営業サーバーの例は、一見、十分なセキュリティ対策をしているように見えるにもかかわらず、デザイン的なセキュリティホールが存在した例です。つまり、ファイアーウォールでサーバーを守った上、VPNまで使ってセキュリティを確保したにもかかわらず、営業サーバーをクラックされただけでなく、隣接するWebサーバーやDBサーバーのクラックの踏み台にされてしまったわけです。たとえば、営業サーバーをVPNを使わずにWebサービスのみの利用に限定し、SSLとパスワードで保護した方がましだったかもしれません。あるいは、営業サーバーをWebサーバーやDBサーバーとは別の場所に、別のDMZを作成して、そこに配置するべきだったかもしれません。
このように、セキュリティとは、単なる技術の問題ではなく、その組み合わせで発生する問題なわけで、Windowsがどうのこうのといっている間は、サーバークラッキングから効果的に防衛することなど夢のまた夢だと思っておいた方がよいのです。