mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

mixi Scrap Challenge - 学生向けイベント

こんにちは。坂本です。
今年も、就職活動の時期ですね。

弊社ではそんな中、mixi Scrap Challengeという学生の方々向けのセキュリティイベントを開催させていただいております。現在、こちらで第2回目の参加者を募集中です。

今回の記事では、2011/12/4に行われた第1回の様子を紹介させていただこうと思います。

mixi Scrap Challenge

普段WEBアプリケーションを開発している学生の皆さんに、セキュリティに関する意識をより高めてもらおうというイベントです。

守るためには、攻める側がどういう方法で攻撃してくるか?どんなことを考えてるのか?を知ることも大切です。そこでmixi Scrap Challengeでは、運営スタッフがmixi風の特設サイトを用意して、参加者に脆弱性を探して攻撃してもらいます。その後スタッフから、サイトがどう対策すれば脆弱性を防げるかを解説するという内容になっています。

セキュリティに関する講義

まず最初に、弊社技術部長からセキュリティに関する講義を行いました。
一般的なセキュリティの概論、実際に起こったCSSXSSを始めとする数例の実例解説、弊社におけるセキュリティ向上のための取り組みなど幅広く解説させていただきました。

講義を聞く参加者の皆さん

攻撃してみよう

実際にサイトを守るためには、具体的な攻撃手法についても知る必要があります。

イベントでは攻撃者の気持ちを知ってもらうため、mixiクローンな特設サイトを参加者の皆さんに攻撃してもらいました。
(※本物のmixiではなく、あくまでも今回の攻略実習用に構築された非公開のmixiクローンSNSサイトです)

チーム対抗形式にして、1チーム2-3人で用意された問題通りの攻撃を達成すればpointを獲得というルールで進行しました。

問題や、スコアランキングを確認するためのDashboardページ。

問題の解き方

例えばXSSの問題では、参加者はmixiクローンなサイト内の脆弱性を突いた攻撃用URLを作り、それを「鴨 ねぎ男」という運営側のアカウントにメッセージで送信します。
(ねぎ男は外部サイトは警戒してリンクを踏みませんが、サイト内のドメインのリンクなら必ず見てくれます。)
ねぎ男がURLを開き、問題通りの攻撃が実行されれば問題クリアとなり、ポイントが獲得できます。

丸一日攻撃用URLを送られ続け、そして踏み続けた、鴨ねぎ男

イベントの様子

一定時間ごとに各問題のヒントが追加で表示されて、それに伴い得られるpointも下がっていくルールにしました。
ヒントが出る前の難しい問題を解いて高ポイントを狙うチーム、作業分担して並列作業で進めるチームと、チームごとに様々な戦略をとってるようでした。

真剣に取り組む参加者の皆さん

イベントは、前半と後半にわかれていたのですが後半で一気に追い上げるチームがあったり、終盤で逆転があったりとドラマの多い展開でした。

届き続ける怪しげなメッセージ

鴨ねぎ男に届くメッセージも、もはや送信名からして怪しげなメッセージばっかりになっていました。

(※なお、前述したとおりイベントに使ったサイトは本物のmixiではなく、あくまでも今回の攻略実習用に構築された、非公開のmixiクローンSNSサイトです。)

最終的に優勝したチームは全10問中9問クリアという、運営側で想定していた以上のスコアでした。残り1問も、あと数秒あれば解けていた、とのことでした。

なお、優勝したのは唯一メンバーが2人だけのチームでした。(他は3人で1チーム)

脆弱性の塞ぎ方の解説

時間いっぱい攻撃してもらった後は、各脆弱性について、どうすれば防げたか?についての解説を行いました。

セキュアなサイトを作るには、「ユーザ(クライアント)からの入力を信用しない」というのが、基本的な原則となります。今回のイベントではXSS関係の問題が多く、どのように入力をエスケープするべきだったかという説明が中心になりました。

運営裏話 (と失敗談)

今回のイベントで攻撃してもらったサイトは実際のmixiのソースコードをforkしたもので、そこに脆弱性を用意しました。

サービスを起動するためには数十のDBが必要なのですが、イベント用のDBサーバに最低限必要なものを展開していきました。DBの他にもメール連動部分や、ガラケー認証部分、課金関係の処理などをMockしたりSkipしたりする必要があり独立したmixiを1つ作るのは当初の想定以上に時間がかかりました。
と、準備に時間をかけたつもりでいたものの......

実は第1回では、参加者の皆さんにサイトにアクセスしていただいた瞬間、イベント用のWebサーバの負荷が高くなりアクセス不能になりました。
このため、当初はWebサーバを1台しか用意してなかったのですが、予備の4台にイベント用のコードをデプロイして急遽、負荷を分散させました。

「攻撃する前に壊れた......!」などの声をいただきながら、なんとか30分ほどで無事アクセスを分散させて安定稼働させることができました。第1回の参加者のみなさん、こちらの不手際で進行がスムーズにいかず、申し訳ありませんでした。

第2回では、このようなことが起こらないようにあらかじめ対策した上でイベントを進行したいと思います。

Togetter

より、当日の雰囲気がわかるようなTogetterでのまとめも上がっておりますので、興味を持たれた方は読んで頂ければと思います。

株式会社ミクシィ 学生向けエンジニアイベント “Scrap Challenge 2011″の参加者tweetまとめ

まとめ

弊社では、このようなイベントは初めてで、不慣れな点もあり不手際もありましたがなんとか無事、終えることができました。
イベント終了後、懇親会で参加者の方々からは、「これから、もっとセキュリティについて勉強したい」、「自分で作ってるサイトの安全性を見なおしてみたい」などの感想をいただけました。参加者の皆さんのアプリケーション作りに、イベントの内容が少しでも役立てば嬉しいです。

第1回は想定よりとても多くの方々から応募していただき、大盛況で終えることが出来ました。現在、第2回目の参加者を募集しておりますので、この記事を読んで興味をもっていただけた学生の方は、下記のサイトから是非、参加申し込みをしていただければと思います!

http://mixi.co.jp/event/challenge-2012/