ミクシィ「Scrap challenge for security」に参加した。

株式会社ミクシィが主催する「Scrap challenge for security」なるイベントに参加してきた。Twitterやブログなどに書いておいてほしいという風に言われていることもあり、アンケートへの回答を兼ねて普段書くこともなくて更新していないブログかどうかよくわからないこのページに参加した記録でも書いておこうと思う。

このイベントでは、先ほどのリンク先が示す通り「なんらかのプログラミング経験があり、1人でアプリケーションを作成する実力をお持ちの方」を対象とした、Webセキュリティに関するレクチャーを受けた上で実際に(仮想環境上に設けられた)某SNS(スライドから原文ママ)に似ているSNSを攻撃するというもの。

鴨ネギ男(6チームに対して3人、各2チームからの攻撃を受けてくれる)に対して脆弱性をつくようなリンク(サイト内)を送りつけるというのが基本的なタスクで、問題が前半6問、後半4問(後半は前半の問題にも引き続き回答可能)。脆弱性をついて、問題に指定された通りの挙動を鴨ネギ男の使用するウェブブラウザ上で出させることに成功すれば得点(一部鴨ネギ男のブラウザ以外で実行するものもある)。徐々にヒントが出るがヒントが出た後の回答は点数が下がるというシステム。問題にもよるが、途中からネタバレに近いヒントが出るものもあった。

1人でアプリケーションを作成する程度の能力を求められるとはいえ、主にWebを扱っているわけではない人も対象に含まれていることもあり、XSSなどの基本的な攻撃手法を用いる問題が主であったが、攻撃手法そのものがよく知られたものでも制限に合わせて工夫しなければ達成されないものもあったり、いくつかの攻撃手法を組み合わせないといけないものもあった。

攻撃する側として考えて実際にやってみる機会はなかなかないため、よい機会として楽しめた。防御する側としても「このような入力でエラーが出るならSQLインジェクション/XSSを疑ったほうがよい」的なものは重要であり、どのあたりに、というのはある程度検討がつくものの、実際に攻撃を成功させるとなると容易ではなかった。また、普段JavaScriptをあまり書かずに生活しているが、JavaScriptの知識も要求された。もちろんGoogle検索にも頼ったが、特に同じチームのK氏がJavaScriptを普段扱っており、必要となる機能を口走るとそれに必要な関数の名前を口走ってくれたりある程度要点を絞った程度の発言にJSで実装する方針を口走ってくれたりしたし、彼自身HTMLとCSSでごりごり書くような課題とかややこしそうな課題を色々やってくれたりしたので心強く、またS氏も問題を解いて提出してくれたりしたため、最後30秒前ぐらいでヒントが出るまで放置していた問題を漸く提出して全問正解、チームとして優勝することができた。問題の核心部分には触れられないので、具体的な内容としてはこのぐらいに留めておく。

最初のレクチャーで出た質問で「XSS」は何がcross-siteなのか、といったものが出ていたが、確かにわかりづらい、一方で確かに今後XSSなどの概念を説明するときに抜けてはならない視点だなと思ったりした。実際に仮想サーバーをもう一台ぐらい用意してcross-siteの攻撃をやってみるとかはやってみたかった気もする。というか、問題の趣旨を無視して自宅サーバーへのリンクを送りつけてWrong Answerくらっててへぺろしても良かった気もする。最後の時間のぎりぎりさを考えると、たとえ2分ぐらいで終わる(自宅サーバーサイドはApacheのアクセスログを見ればスクリプト不要ってのも極論可能)としてもそんなことをしていては間に合わなかっただろうが。

また、懇親会でミクシィの社員の方とお話しできた。昔からのシステムを維持するのは手間が掛かるよな、という話もあったが、新しい手法も色々取り入れているのだとか、あとは色々なところからこのイベントに来ているよな、とか、そういう話もあったりした。会社についての元から抱いていた印象と違うな、と思うようなことはなかったが、そういう話を聞くと親近感が湧いたりする。

なお今回、接続には普通の会社のゲスト用無線LANを利用していたが、このようなイベントにかぎらずパソコンでサーバーに繋がせるタイプのイベントでの配線ってどのようにするべきなのだろう、とか思ったりはする。無線LANは相性が悪い機械があったり、ユーザーが増えると遅くなったりすることを考えられるので、3Gを使わない場合は有線LANを併設したりするとよいと思ったりした。また、インターネット接続は今回必要だったが、サーバーはVPSだった。イベントで何に繋がせて何かをさせる場合、接続先のサーバーは室内LAN内に置いたほうが安定するだけではなく何かと自由が効くのではないかと思ったりした。最近ノートパソコンにVMware入れるだけでも結構性能が出たりするので。

あとは、やらなかったけど個人的にやっておけばよかったなと思う極めてどうでもいいこと。まず、問題に書かれておらず害のない派手な攻撃、具体的には鴨ネギ男ブラウザでmp3やYouTubeなどを勝手に再生する(鴨ネギ男は同室にいるため部屋に響き渡る)脆弱性を別な回答と一緒に送りつけること。それと、仮想環境に対するポートスキャン(だから何かができるわけでもないが)。もしここを見ている人で今後(おそらく来年度以降)このイベントに参加する人がいれば、この発想にとらわれず何かやらかしてほしい。