ソーシャルネットワークでマーク・ザッカーバーグが「ハック」するシーンをプログラミング的に解説する

https://www.youtube.com/watch?v=BPazh2kDdvA

僕が初めてソーシャルネットワークを見たとき、この有名なハッキングシーンでマーク・ザッカーバーグが何をやっているのかが理解不能でした。

しかし、エンジニアとなってから2年ほど経過した今なら、ジェシー・アイゼンバーグ演じる若きマーク・ザッカーバーグが何をやっていたのか、よーくわかります。ということで、ハッキングシーンでは実際に何が行われているのか、解説してみます。

I’m a little intoxicated, I’m not gonna lie. So what if it’s not even 10PM and it’s a Tuesday night? The Kirkland facebook is open on my desktop and some of these people have pretty horrendous facebook pics.

ちょっと酒飲んで興奮しているみたいです。

Billy Olson’s sitting here and had the idea of putting some of these next to pictures of farm animals and have people vote on who’s hotter.

動物の写真を比べて、どちらがかわいいか投票する、というアイディアをマークの友達が披露。

Yea, it’s on. I’m not gonna do the farm animals but I like the idea of comparing two people together. It gives the whole thing a very “Turing” feel since people’s ratings of the pictures—

じゃあ、人を比べて、レーティングしてみよう、とマークは考えます。フェイスマッシュ(2人の顔を比べて、どちらがイケてるか投票するアプリ)の始まりです。

--will be more implicit than, say, choosing a number to represent each person’s hotness like they do on hotornot.com. The first thing we’re going to need is a lot of pictures.

顔を比べるために、まず大量の顔写真が必要だよねってこと。

Unfortunately, Harvard doesn’t keep a public centralized facebook so I’m going to have to get all the images from the individual houses that people are in. Let the hacking begin.

ハーバードでは、全学生の顔データを集約したシステムを持ってないので(ここで出てくるfacebookは、会社のFacebookではないです。念の為)、各寮のシステムをハッキングしてデータを取ってこようということみたいです。

ちょっと解説すると、アメリカは基本的に全寮制で、各寮に対して名前がついているんですね。ハリー・ポッターのグリフィンドールとか、スリザリンとか、そういう感じです。

First up is Kirkland. They keep everything open and allow indexes in their Apache configuration, so a little WGET magic is all that’s necessary to download the entire Kirkland facebook. Kids’ stuff.

最初はカークランド寮(Kirkland)。"Apache"(アパチ)というのは、サーバーの設定をするソフトだと思ってください。"allow indexes in their Apache configuration" とありますが、このApacheの設定次第では、サイトのデータがどこにあるか、という一覧(index)が見れるようになってしまうんですね。

だから例えば、学生の顔データ一覧、みたいなURLがどれかわかってしまったりするんですよ。

"WGET"というのは、linuxコマンドと呼ばれるものの1つで、このWGETを使うと、インターネット上からデータをダウンロードできるんです。

マークが何をやっているかというとすごい単純で、カークランド寮は、学生の情報に誰でもアクセスできてしまうので、そこのサイトにWGETというコマンドを実行して、女性の顔写真をダウンロードしたぜ、ってことですね。簡単ですよね。マークも Kids' stuffと言っています。

Next is Elliot. They’re also open but with no indexes on Apache. I can run an empty search and it returns all of the images in the database in a single page. Then I can save the page and Mozilla will save all the images for me. Excellent. Moving right along.

お次はエリオット寮(Elliot)です。先程のカークランド寮とはApacheの設定がちょっと違っており、同じ手法がつかえません。何もキーワードを入れずに検索したところ、画像データが1枚のページに全て入った出てきたので、それを保存して完了です。

Mozillaは、要はブラウザのFirefoxのことです。ブラウザの機能の1つで、画像を全て保存してくれるので、めっちゃ楽だったぜ!、とマークは言ってます。

Lowell has some security. They require a username/password combo and I’m going to go ahead and say they don’t have access to main FAS user database, so they have no way of detecting an intrusion.

ローウェル寮(Lowell)はちょっとセキュリティが厳しいとのこと。ログインしないといけないのですが、どうやら、サイトに侵入をしても検知をする仕組みがないようで、ハッキングしてもばれないみたいです。

Adams has no security but limits the number of results to twenty a page. All I need to do is break out the same script I used on Lowell and we’re set.

アダムス寮(Adams)はセキュリティがザルですが、検索をしたときに、1ページあたり20枚の顔写真しか返ってきません。このあたりは時間的な制約で説明に飛躍があり、全てを明らかにすることはできないのですが、ローウェル寮のときと同じプログラムを実行して、データを入手できたそうです。

Quincy has no online facebook, what a sham. Nothing I can do about that.

クインシー寮(Quincy)は学生データを持ってないようで、これにはマークも残念な様子。何もできないのでスルーです。

Dunster is intense. Not only is there no public directory, but there’s no directory at all. You have to do searches, and if your search returns more than 20 matches, nothing gets returned. And once you do get results, they don’t link directly to the images; they link to a php that redirects or something. Weird. This may be difficult. I’ll come back later.

ダンスター寮(Dunster)は厳しいそうです。奇妙な構造をしており、簡単にはいかなさそうなので、後回しです。

ディレクトリ(directory)というのは、"フォルダ"のことだと思ってください。公開ディレクトリがないし、そもそもディレクトリ自体が存在してねえわ、ってことみたい。

検索をしても、20件以上ヒットしたら何も返ってこないし、仮にヒットしたとしても、"PHP"というプログラミング言語が実行され、単純に画像が返ってくるわけではないみたいです。

うーん、ちょっと説明がしっくり来ませんね。

Leverett is a little better. They still make you search, but you can do an empty search and get links to pages with every student’s picture. It’s slightly obnoxious that they only let you view one picture at a time, and there’s no way I’m going to go to 500 pages to download pics one at a time, so it’s definitely necessary to break out emacs and modify that perl script. This time it’s going to look at the directory and figure out what pages it needs to go to by finding links with regexes. Then it’ll just go to all of the pages it found links to and jack the images from them. It’s taking a few tries to compile the script…another Beck’s is in order.

レヴェレット寮(Leverett)はちょっとマシらしい。検索をすると、生徒のデータが返ってくるんですが、1ページに対して1人のデータしか返ってこず、全ての学生のデータを取得するには、500ページ分回らないといけない。

ただ、そんな面倒なことをプログラマーはやりません。

"break out emacs and modify that perl script"

emacsというのは、エディターの1つ。プログラムを書くのに使うんですね。perlというのは、プログラミング言語の1つ。ちょっとemacsでperlのプログラムを書いて、一気に画像データを取得しようとしてるんですね。

"by finding links with regexes. "とありますが、regexesというのは、「正規表現」というもののことで、例えば正規表現では、ドット(. のことです)は、「任意の一文字」を意味します。つまり、「a」も「b」も「c」も、ドット(.)にマッチするんですね。

正規表現を検索に使うことで、検索するのに必要なURLのパターンを導き出して、そこのURLにアクセスして、データを取ってきてるんですね。

最後の、"It’s taking a few tries to compile the script"とは、perlというプログラミング言語でプログラムを書いたわけですが、そこにミスがあったので、実行してもうまくいかなかったんですね。なので、何回か修正したのち実行をしたら、うまくいったよ、っていう話です。

emacs: エディターの1つ

perl: プログラミング言語の1つ

regexes: 正規表現

compile: 書いたプログラムを「翻訳」すること。コンピューターは2進数しか理解できないため、人が書いたプログラムを、コンピューターが理解できるように、翻訳することをコンパイルといいます。

Mather is basically the same as Leverett, except they break their directory down into classes. There aren’t any freshmen in their facebook…how weak.

メイザー寮(Mather)は、レヴェレット寮と同じみたいです。ただ、freshman(新入生)のデータがまだないらしく、マークは失望してますね。

Done.

カタカタカタッターン!

完了です!