![]() |
ガートナーのアナリストに聞く--Web 2.0アプリケーションとセキュリティ |
Gartner ITExpoでセキュリティアナリストのAndrew Walls氏にインタビューを行い、Web 2.0がアプリケーションのセキュリティに与える影響について聞いた。
Walls氏は、従来のデスクトップのセキュリティ対策がWeb 2.0の世界ではどのように不十分なのかについて説明し、開発者が自分の書いたコードのセキュリティについてより個人的な責任を負わなくてはならないと話した。
人間です。これは少し単純すぎ、冗談のようにも聞こえることは分かっていますが、結局のところは常に人間のアプリケーションの使い方、データの使い方の問題に至ります。すべての人が正直で、信頼に足り、本物であれば、セキュリティの問題は起きません。しかしセキュリティビジネスの世界では、誰もが嘘をつこうとしており、不正直で、金を巻き上げようとしているという現実的な仮定を置き、アプリケーションをできる限り安全なものにしようとしています。
Web 2.0の世界で、マッシュアップやウェブ上のアプリケーションについてわれわれが扱っている問題の多くは、実際にはセキュリティとアプリケーション開発の場面で昔からある問題です。入力データは検証する必要があります。例えばウェブページのフォームのフィールドに入力される情報が有効なデータであり、システムに入力したいと思っている情報であることを確認しなくてはなりません。そしてもちろん、そのシステムから出力されるデータが、出したいものであるということもです。
この基本的なルールを無視するシステムは、リスクを抱えています。2カ月ほど前、(オーストラリアの)首相のウェブサイトがハックされて大騒ぎになったのを覚えていますか。あれは標準的なフォームからデータを入力させる際、入力を検証していないことが原因の、古典的なJavaScript攻撃でした。これはよくある形の攻撃の1つですが、こういうことがまだ存在するということ自体が問題なのです。開発者の世界は、すべての入力と出力を検証し、またシステム上でやりとりされるすべてのデータにはっきりした境界線を設けるということを十分やってきていません。
基本的に、これらの問題は人間が原因で起こります。システムは人間に言われたことを何でもやりますが、攻撃をするのも、そこにあるものの制御をハックするのも人間なのです。最大の問題は常に人間自身にあります。
企業という言葉が何を意味するかによります。今はITExpoに出席していますが、このフロアにいる企業はすべて非常によく理解しています。しかしもちろんこれらの企業はITを専門にしており、彼らはセキュリティについて常に扱っています。一方で銀行や自動車メーカーの場合、それらの組織の企業リーダーと話しても、彼らは私が話したデータの検証のことのような細かいことについては理解していません。理解しているべきでもありません。彼らが理解すべきなのは、セキュリティの問題を処置せず、管理しないままにしておくと、彼らの企業にどのような影響があるかということです。彼らはセキュリティ管理者やプロフェッショナルを雇い、彼らの代わりに面倒を見させるでしょう。
セキュリティ管理者は、それらの技術上およびセキュリティ上のリスクを、ビジネスの言葉やビジネスリスクに翻訳できなくてはなりません。そうすれば、企業リーダーは彼らの企業に関して情報に基づいて判断することができます。彼らは特定の問題については知る必要はありません。それはセキュリティ管理者の仕事です。企業リーダーは最適な判断ができるよう、情報を知らされ、本当のデータを持っていなくてはなりません。
これら2つはうまく対応しません。まずデスクトップのセキュリティはうまく行っておらず、今でも多くの変更が行われており、われわれがデータ漏えい対策と呼ぶ、完全に新しい種類の製品が出始めています。これは、USBメモリへのデータ移動やCDへのコピーなどを対象にしています。これはID管理や、人間に強い認証トークンを持たせるいったことを超えた問題を扱っており、データがどのようにシステムを移動し、その情報をどう正しく管理するかということを対象にしています。
もしクレジットカード情報がネットワークや誰かのラップトップやUSBメモリ経由で自分のシステムの外に出るのを止めたいと思えば、クレジットカード番号がどのような形をしているかを知っており、それが間違った場所に移動されようとしているのを発見した場合どう処理したらいいかを知っているソフトウェアを持たなくてはなりません。これは、現在人気のあるほとんどのデスクトップセキュリティ環境の仕事を超えています。このため、これらの新しい製品が生まれようとしているのです。デスクトップはわれわれがそうあって欲しいと考えるほどは安全ではなく、今でもデスクトップとラップトップ側には大きな改善の余地があります。
さらに、Web 2.0環境のような、新しいアプリケーション環境があります。WestpacのDavid Backley氏の素晴らしい発表では、Westpac内でFacebook型のソーシャルネットワーキング環境を使ってどのように協調活動やチームワークを促進しているかについて示されており、Second Lifeのような仮想世界も同様のものとして見られています。この種の大規模な分散ネットワーク環境に依存する新しいアプリケーションは、あらゆる種類の新しいセキュリティリスクを持ち込みます。
このセキュリティリスクは、そのアプリケーションの種類――それが仮想世界、ソーシャルネットワーク、ブログなど何であろうと――を分解して、それを構成するコンポーネントを見れば、他のアプリケーションと違いはないというのが私の主張です。それらのアプリケーションはAJAXや新しい形のHTMLなど、少し新しい言語を使っているかも知れませんが、それらもやはり言語であり、同じ問題を抱えています。これは検証と、コードが変更されていないことを確実にすることであり、同じ基本的なことです。
Web 2.0の新しい環境で、われわれがみな取り組んでいる問題は、それらのコンポーネントがそれだけでは存在できないということです。Web 2.0アプリケーションは多くの場合、1つの形に収まったワープロのソフトを手に入れるというようなものではなく、何十もの個別のコンポーネントから作られています。これらのコンポーネントは異なる企業のものであるかもしれず、内部で開発された自前のものかも知れません。ネットワークのセキュリティを確保するためには、それらすべてのコンポーネントのセキュリティを確保する必要があります。
この集合体あるいはマッシュアップの複雑さが増すに従い、その安全性を確保するという課題は対数的に難しくなります。われわれがシステムを組む度に、それらの間で起こる可能性のある相互作用、それらの間生じる可能性のある問題をすべて安全なものにしていく必要があります。全体を安全なものにする唯一の方法は、各コンポーネントを監視し、データ転送を管理し、ファイアウォールを設置し、そして最終的にはそのアプリケーションを鵜の目鷹の目で観察し続けることです。これらはすべて標準的なアプローチであり、新しいことは1つもなく、これらすべてはわれわれが既にやっていることです。問題は、これがますます複雑になっていることで、われわれは以前と比べてより積極的にこれに取り組み、より素早く、アプリケーションのより細かいレベルでこれを行っていく必要があります。
その結果、ベンダーはアプリケーションの異なるレベルに焦点を当ててコードのレビューを行い、アプリケーションの脆弱性をスキャンし、テストし、アプリケーション体系を継続的にスキャンとテストし続ける商品やサービスを出してきています。これはすべて、われわれ組織の安全を確保し続けるためにこれらの仕事をどう自動化できるかという自己防衛であり、ますます大きくなっていくアプリケーション環境の複雑さをどう管理するかという問題です。プロセスはこれまでと同じものですが、それをより素早く、より多く行う必要があります。
そのためにより多くの予算を得られることなど稀であり、今ある資源でできることをやっていかなくてはなりません。自分のスタッフとツールを育て、ベンダーとの関係を作らなくてはなりません。最近では、セキュリティ管理を行うには、非常に熟練し、洗練された管理者である必要があります。
このギャップはある程度までは縮めることができますが、常に少しは遅れを取ることになります。これは、警察が直面している状況と同じです。政府は一般に、まだ悪いことをしていない人を逮捕することはできません。
まったく新しい攻撃を防ぐのは、非常に難しいことです。われわれは、既知の種類の攻撃に対しては防御方法を知っています。ウイルス?われわれはウイルスが本質的にどういう働きをするかを知っており、それに対しどう防御したらいいかを知っています。われわれはバッファオーバーフローを理解しており、これにどう対策し、これが起こらないようにするには、アプリケーションをどう作ったらいいかを知っています。まったく新しい種類の攻撃については、それに対しどう守ったらいいかを見越すのは難しく、できるだけのことをしても遅れを少し縮めることができるだけで、その遅れは絶対に0にはなりません。
多くのビジネスマンには理解されにくいのですが、この基本的なコンセプトは、バグのないシステムはなく、すべてのシステムは不具合を持っているというものです。認知できる不具合のない完璧なアプリケーションを書くことは可能ですが、そのアプリケーションを完成させてそれを世に出した瞬間、人々は新しい概念と、設計者が意図しておらず、予見もしていなかったそのアプリケーションの新しい使い方を思いつき始めます。そしていずれは壊れ、不具合を持つようになります。
私は遠い昔、SUVが道路を制覇する前、自動車が単なる自動車だったころのことを覚えています。車同士がぶつかっても、前や後ろのバンパーとシートベルトを気にして、それで終わりでした。その後、小さく素敵な車や、大きなSUVが登場しました。もし私がMINIを運転していて、大きなトラックに普通の乗用車のようにぶつかったら、トラックのバンパーは私の車のフロントグラスの高さになります。MINIは道路にMINIしかないときには安全でしたが、周囲の環境は変わり、今では安全性の問題を抱えているわけです。
アプリケーションのコードも同じことです。今は素晴らしいものに見えても、それを世に出すとすぐに、世界の方が変わってしまいます。言葉は少し乱暴になりますが、「バカよけシステムを構築すると、世界がより大きなバカを作り出す」という言い方もあります。これが、ソフトウェアベンダーや製品ベンダーが常にシステムを更新し続けている理由です。
基本的に、開発コミュニティがセキュリティに対して個人的に責任をとる必要があります。セキュリティは、できあがってしまったコードに後からかぶせられるようなものではありません。コードの断片の内部のすべての構造が、セキュリティを念頭に置いて作られる必要があります。以前はセキュリティがビジネス要件とは考えられていなかったため、アプリケーションやドライバーを開発する時には、性能や機能には左右されるものの、セキュリティ要件はその環境には入っていませんでした。その結果、システム内部は大量のバグのあるコードで一杯になり、10年間も更新されていないシステムの脆弱性を見つける者が常に出続けるということになっています。
ファイアウォールを増やしても、IDSを増やしても、これを直すことはできません。そういうものは時間を稼ぐことはできますし、攻撃を遅くすることもできますが、問題を解決することはできません。問題はコードの中にあり、正直なところすべての病を治すことはできず、何かを直すたびに新しい問題が浮かび上がるでしょうが、コードの構造とコーディングのアプローチには、あらゆる段階のプロセスでセキュリティを主な観点として扱う必要があります。
これは、プログラマーの教育方法にまで遡る問題です。われわれの大学は、今ではセキュリティをより深刻に捉えており、セキュリティを単なる必修単位として見ているのではなく、より多くの大学のすべてのプログラミング科目に1つの単位として含まれつつあります。これこそ、われわれがビジネスのすべてのプロセス、すべてのシステム開発の中で取るべき態度です。セキュリティは生成されるすべてのコードの断片に対する基礎的な要件でなくてはなりません。これはまず大学で起こりつつあり、ゆっくりと、しかし確実にビジネスの世界にも広がりつつあります。
この記事は海外CNET Networks発のニュースを編集部が日本向けに編集したものです。海外CNET Networksの記事へ
ZDNET Japanは、Ziff Davisからのライセンスに基づき株式会社4Xが運営しています。
ZDNET Japan is operated by 4X Corp under license from Ziff Davis.
Copyright © 2026 4X Corp, Inc. All rights reserved. No reproduction or republication without written permission.