Facebookのソースコードがリーク

次の記事

Apple、「My iTunes」でソーシャル・ミュージックに参入

われわれのところに先ほど「Facebookのトップページのソースコードがリークして、Facebook Secretsというブログに掲載されている」という情報提供があった。ソースコードがリークする主な理由は2つある。ひとつはFacebookの開発者の誰かが公開したというもの。しかしもっとありそうな理由は、セキュリティーホールの利用その他の方法でFacebookのサーバあるいはソースコードを保管していた場所が攻撃され、盗み出されたというものだ。ソースコードがアップされたブログには、その記事たったひとつしか掲載されていない。つまりこのブログはソースコードを公開するというためだけの目的で作られたに違いない。誰にせよ、このブログを作った人間はセキュリティーホール発見の手柄を主張するつもりはなく、身元も知られたくないようだ。このソースコードが本物のFacebookのものかどうか確かめる方法はないが、ざっと見た限りでは、また中にあったいくつかのパスをチェックしてみたところでは、かなりの確度で、これは本物で、しかも最近のFacebookのメインページのものだといえると思う。

これが意味するものはいくつかある。第1に、ソースコードはFacebookのプログラムがどのように作動しているのかより正確に理解できるようになることで、部外者がさらなるセキュリティーホールやバグを発見するために役立つ。Facebookはソースコード非公開のアプリケーションなので、セキュリティーホールを発見するためにはソースコードが利用できない。この場合通常「ブラックボックス・テスト」と呼ばれる方法が使われる。これは部外者が試行錯誤でアプリケーションの反応をひとつずつ探って、脆弱性を発見しようとするものだ。ソースコード非公開のアプリケーションの場合、デザインや構造の欠点が秘密のベールで隠されることで守られている場合が多い。攻撃者がソースコードを手に入れた場合、さらなるセキュリティー上の脆弱性が発見されてしまう可能性が強い。このためオープンソースのアプリケーションのほうがソースコード非公開のアプリケーションよりセキュリティーが高いといわれる。つまりオープンソースのプログラムはそれだけ多くの目にさらされているため、プログラムの欠陥を「隠すことで守る」という手法が使えないからだ。

ソースコードの漏洩の意味するところの第2は、これによってFacebookのアプリケーションの構造やプログラマーの利用した開発の手法が詳しく明らかになってしまうということだ。リークされた1ページのソースコードを眺めただけでもFacebookというアプリケーション、さらにプラットフォーム全体についていろいろなことが類推できる。たとえば、Facebookアプリケーションはオブジェクト指向開発の手法をまったく利用しておらず、同一のネームスペースに多数のカスタム関数を収容した巨大な単一のPHPファイルのようだ。(それにおそらくSmartyテンプレート・エンジンを利用している。)

このリークはFacebookにとってはまことにありがたくない話だ。まず、ユーザーデータのセキュリティーに疑問符がついてしまう。サイトのトップページのソースコードが流出するようでは、他に何が流出するか知れたものではない。Facebookがこれほど大成功を収め、きわめて目立つ存在になったからには。多くの攻撃者の目標となるは当然である。たいていの大規模システムはいつかはセキュリティーが破られる経験をする ― 時間をかければ攻撃者はいつか成功するものだ。こういった事態に運営会社側がどう対応するかが重要だ。Facebookが今回の状況をうまく処理できるよう願う。Facebookはこの件についてなぜコードがが漏洩したのか、誰が漏洩させたのか、精力的に追求するはずだ。しかしFacebookがまず大急ぎでやらなければならないことは、ユーザーデータの漏洩の危険を最小限にするための対策を実行することだ。今のこの瞬間にも何百という攻撃者がリークされたコードを元にFacebookシステムに対する侵入方法を考えているにことは間違いない。ちょっと見ただけでも、このコードからはプラットフォームの隠された特質に関する情報がいくつか読み取れたので、攻撃者にとっては願ってもない第一歩を提供することになっていると思われる。

アップデート: Facebookはわれわれの問い合わせに対して以下のとおり公式の回答を寄せた。(またFacebookのBrandee Barkerが本記事にコメントを投稿している)。“ Facebookのソースコードのわずか一部が少数のユーザーに対して表示されてしまう事態が起きた。これは1台のサーバのプログラムのバグと設定ミスによるもので、直ちに訂正された。今回のリークはセキュリティーが破られた結果ではない。ユーザーデータはいかなる意味でも危険にされされていない。問題のソースコードを複写。公表することはいくつかの法律に触れることとなるので、これ以上ソースコードを配布することは控えるようお願いする。今回のリークの原因はapacheとmod_phpが解釈の結果ではなく、解釈されないままのソースコードを送り出してしまったことが原因のようだ。これはサーバの設定ミスか、高負荷による(これは既知のバグ)ものと思われる。Facebookでは過去にもこの問題が起きて、 他のページもリークしていたようだ。今回、初めて誰かが実際にコードをオンラインで公開してしまったということらしい。

アップデート2: 私は自分のブログにサーバからソースコードを流出させない方法を4つほど書いておいた。

[原文へ]