クウネルハックの「バグハン合宿」で発見した大切なこと

みなさん、こんにちは。進捗どうですか?

忘れられたころに記事を書き上げることが得意な風穴です。先日、「cybozu.comバグハンター合宿」(2014年8月6日、7日)を開催しましたので、その模様をレポートします。

バグハン合宿とは?

「cybozu.comバグハンター合宿」、略して「バグハン合宿」。これは、オフラインで集まって寝食をともにしながら、cybozu.comというクラウドサービスのセキュリティ脆弱性発見コンテストをやってみよう、というもの。

実はこの企画、

というはせがわようすけさんのツイートをきっかけに、社内的には雑談的な話がいつのまにか……という感じで始まった企画でした(笑)。つまり裏方的にはドタバタだったわけですが、短い準備期間にもかかわらず、14名の腕利きハンターの皆さんが参加してくださいました。

また、「言い出しっぺ」のはせがわようすけさん、malaさん、ren_hxさん、そして、日本人と思われる「キヌガワ・マサト」さんの4名が、特別ゲストとして「参戦」してくれることに。

この計18名の「ハンター」が、初日午後から、翌日夕方までの約1日半に渡って、cybozu.comの検証環境を舞台に、脆弱性発見レースを繰り広げることになりました。目指す賞品は、最優秀者1名に贈られる「叙々苑の焼き肉券3万円分」。

バグハン合宿参加者に配布された「合宿のしおり」の表紙写真
バグハン合宿参加者に配布された「合宿のしおり」

狙うは「焼き肉券」か、それとも?

初日のオープニングで行われた参加者の自己紹介では、「XSSは○○さんに任せて、自分はxxxを狙います」といった「勝負」を意識した発言もありましたが、全体的には、見聞を広げたい、学びたいといった、「自分のため」派の声も多く聞かれました。

というのも、この合宿では、前述の「焼き肉券」のほかにも「手にできる」(可能性がある)ものがあったからです。

弊社では、2014年6月から「脆弱性報奨金制度」を始めており、この合宿中にいただいた脆弱性報告についても、その対象となります。この報奨金は、脆弱性の深刻度を客観的に評価する手法である「CVSSv2」の基本値にもとづいて計算されます。たとえば、報告した脆弱性が「CVSSv2基本値=3.0」と評価されると、報奨金は

3.0 × 1万円 = 3万円

です。CVSSv2の基本値が7.0以上の場合は、金額単価が3倍の「3万円」になるので、1件の報告で21万円以上となります。報奨金は、脆弱性1件当たりで支払われるので、すなわち、脆弱性の深刻度や発見総数によっては、「焼き肉券」よりもはるかに大きい金額を手にできる可能性もあるわけです(焼き肉券の金額が低いんじゃ……というツッコミはナシの方向で)。

それを意識してか、「結婚資金のために賞金を狙います」と語るハンターも。

バグハン合宿のオープニングで発表する伊藤 彰嗣(Cy-SIRT事務局)の写真
オープニングで「ルール説明」を行う、サイボウズの伊藤 彰嗣(Cy-SIRT事務局)。

バグハン合宿のオープニングで発表する山西の写真
サイボウズ・品質保証部の山西 生恵は、社内で行われている検証プロセスについて紹介。

ビデオメッセージの最後に「かかってこいや~!」ポーズを決める、サイボウズ社長・青野。
社長の青野は、ビデオ出演した主催者挨拶の最後に、まさかの「かかってこいや!」ポーズ(※筆者註:もちろんネタです)

オープニングと、それに続くライトニングトークが終わると、いよいよ脆弱性発見レースのスタートです。黙々と手を動かし始める人、どこから手をつけようか、まずはじっと思案する人、見知った参加者と雑談しつつも画面を見つめる目が真剣(マジ)な人……などなど。表面的には和やかな雰囲気ながら、静かに「戦い」の幕が切って落とされたのでした。

高く積まれたレッドブル(缶飲料)の写真
もちろんレッドブルは飲み放題

いきなりの想定外

合宿のタイムテーブルは、以下の通りです。

バグハン合宿のタイムテーブル。1日目は13時から始まり、22時45分に終了。2日目は、7時起床、9時から会議室オープンで、バグハンティングは15時まで。成績発表などのクロージングを行い、17時に終了。
バグハン合宿のタイムテーブル

初日は、ライトニングトークが16時からあるので、夕食前のhackタイムは実質2時間ほど。めいめい環境をセットアップしたり、方針を考えたり、ルールの詳細を確認したり……といった作業もあるでしょうから、本格的なhackは夜になるだろうなと考えていました。

あに図らんや。私たちはすぐに、その考えが「大甘」だったことに気づかされます。開始10分もしないうちに、さっそく最初の報告をいただいたのでした。

脆弱性の報告をいただくと、サイボウズのセキュリティ検証チームが再現性や発生条件を確認し、さらに脆弱性の深刻度を評価する段取りになっています。通常、この作業は、1週間程度、複雑なものになると数週間かかる場合もあります。ただし、この合宿中でいただく報告については、「優秀賞」(=焼き肉券)を決める関係上、「リアルタイム」で対応すべく、検証チームがスタンバイしていました。

最初の報告をいただいた後、ほどなくして、別の参加者からも報告が届きました。さらにもう1件、報告が飛び込んできて、最初の14時台だけで3件の報告をいただきました。

2日間の合宿で、こちらが用意した正味のhackタイムは10時間弱。このペースで報告をいただくとすると、通常の1月分を超える数の検証を2日間(実質的には1日)で行わなければならなくなります。検証チームを率いる伊藤の顔が、心なしか引き攣り始めているように見えます。

そうこうするうち、続く15時台も3件の報告をいただきました。

バグハン合宿の関連ツイート「『そもそも診断する人全員こっち来てるけど誰が診断するの』『ペース早いけど、これ明日順位発表までに深刻度認定できるんだっけ』みたいな声が聞こえてくる」「3本目のレッドブルに入ったのでだいぶ暗雲立ちこめてる」「スタッフが評価に専念するために帰社しました><」
初日夕方前の様子を伝えるツイート(togetterまとめ「cybozu.comバグハンター合宿」より)

結局、会場担当のスタッフを急遽、帰社させて、評価のリソースを増やすことになりました。開始早々の想定外な出来事でした。

malaさん登場

そんなドタバタが繰り広げられていたころ、1人の参加者が遅れて到着しました。セキュリティ界隈では著名なmalaさんでした。

空いている席に腰を下ろし、おもむろにPCを取り出して静かに作業を始めたかと思うと……。

会場に到着してから30分も経ったでしょうか。1時間はかかっていなかったと思います。ハンターの凄さをまざまざと見せつけられた瞬間でした。

「釜の飯」効果

今回のバグハン合宿の会場は、企業研修でも使われるような宿泊施設でした。

合宿2日目の昼食の写真(カレーライス、サラダ、フルーツヨーグルト、お吸い物、カツサンド)
ちなみにこれは、合宿2日目の昼食。メニューは、カレーライス、サラダ、フルーツヨーグルト、お吸い物。サラダのお皿には、意表をついたカツサンド(!)。

食事は、1Fの会議室から地下の食堂に移動し、皆で揃っていただきました。バグハンの最中は、一人で黙々と作業する方が大半だったのですが、食事のときは、そこかしこで談笑の輪ができていました。

「同じ釜の飯を」という馴染みの言い回しがありますが、ただ一緒に食事をするだけなのに自然と打ち解けてしまうのは、人という生き物の不思議なところです。こうした参加者同士の交流が生まれるのも合宿ならではと言えるでしょう。

企画段階では、参加者同士の交流をどうやって促そうかと頭を悩ませたりしていたのですが、何のことはない、大事なのは「一緒に飯を食う」という単純なことでした。「釜の飯」効果、侮り難し。

1日目の夕食をとりながら談笑する皆さんの明るい表情を見ながら、「あぁ、ハンターも人の子なんだな」と独りごちていた私は、そのときまだハンターの本当の実力おそろしさに気付いていなかったのでした……。

ハックは続くよ、どこまでも?

夕食後は、23時前まで会議室を確保していましたが、大浴場で汗を流したりしていただくなど、各自の自由な時間として想定していました。私たちスタッフは、皆さんと一緒に夕食をとった後、サイボウズ・ラボの竹迫さんを残して、全員帰途につきました。

脆弱性の発見数はともかく、参加者の皆さんに楽しんでもらえているようなので、まずは良かった、そんな暢気な話をしていました。この後、夕食前までにいただいていた数のさらに2倍となる脆弱性報告をいただくことになろうとは……。

夕食後から深夜までのツイートのまとめ。「『見つけたー』と思ったら報奨金対象外だった。。。」「脆弱性認定キター。」など奮闘の様子がうかがえる。
夕食後の関連ツイート(「cybozu.comバグハンター合宿」まとめより

以下は、合宿期間中における脆弱性報告数を、時間軸で並べてみたものです。

バグハン合宿中に報告された脆弱性を時間帯ごとに示したグラフ。1日目の16時と24時、2日目の9時、11時にピークがある。
バグハン合宿中に報告された脆弱性の件数(棒グラフ=時間帯別、折れ線グラフ=累計件数)

なんと、22時以降の報告数が11件もありました。深夜というか、明け方4時近くに報告された猛者もいました。ハンターに「夜」はない、これも1つの発見でした。

優勝はren_hxさん

運営の裏側はドタバタだったのですが、検証チームの臨機応変な対応と頑張りで、どうにかクロージングまでに順位を出すことができました。

クロージングで挨拶する、cybozu.com運用責任者、山本 泰宇の写真。
クロージングで講評を語る、cybozu.com運用責任者、山本泰宇。「これほどまでとは思いませんでした」と脱帽。

今回の「バグハン合宿」の栄えある優勝者は、27.1ポイント(筆者註:暫定スコア。最終的な報奨金のための確定値と異なる場合があります)を獲得したren_hxさんでした。おめでとうございます!

優勝賞品「叙々苑の焼き肉券3万円」を手に、喜びの表情を見せるren_hxさんの写真。
優勝賞品「叙々苑の焼き肉券3万円」を手にしたren_hxさん。

「バグハン合宿」をやってみて分かった大切なこと

「オフラインで集まる」といっても、実際にやることは、クラウドサービスとして提供されている「cybozu.com」の検証環境にアクセスして、脆弱性を見つけることです。インターネット接続さえあれば、それこそ地球上のどこからでも同じことは可能です。「合宿と称して、ひとつ所に集まる必要はあるのか?」というのは、もっともな疑問でしょう。

正直なところ、運営準備を進めていた私たちも、その点を100%見通せていたわけではありませんでした。対象がそもそもクラウドサービスだし、各自が黙々と作業するだけならオンラインでもオフラインでも大差ないのでは……、そんな疑問が頭をよぎることもありました。

しかし、そんなことは杞憂であり机上の空論でした。

前述した「釜の飯」効果もそうですし、一泊二日とはいえ「寝食を共に」することで生まれる親近感、連帯感は、思っていた以上にポジティブな成果だと感じました。これは、実際にやってみなければ分からないことでした。

一緒にいるとはいえ、バグハン中は、それぞれが黙々と作業している時間も多いことは確かです。でも、ふとしたきっかけで、以下のような会話が聞こえてきたりします。

Aさん:あー、やっぱりダメだ!
Bさん:どうしたの?
Aさん:xxxをxxxしたんだけど、xxxでダメなんだよね。
Cさん:あー、だったら、××xしてみたら?
Dさん:いや、それじゃダメでしょ。×x×を×x×してみたら?

カタカタ、カタカタ、パシッ(Aさんがキーボードを操作する音)

Cさん:んー、やっぱりダメか。
Bさん:じゃあ、××はどう? もしかするといけるかも。
Aさん、Cさん、Dさん:おーっ!

その場ですぐにインタラクティブなやり取りができるのも、合宿形式の醍醐味なのです。セキュリティの話題は、ときに慎重に扱う必要があったりしますが、関係者だけの密室であれば、その点がだいぶ気楽になるという点も大きいでしょう(※1:今回の合宿参加に当たっては、参加者の皆さんとNDAを結んでいます)。

「バグハン」中のひとコマ。1人の参加者の端末を、他の参加者がのぞき込んでいる様子の写真。
「バグハン」中のひとコマ

昨今、「ハッカソン」と呼ばれる技術的な集まりが広く行われるようになってきましたが、セキュリティ脆弱性に関することこそ、オフラインで集まる形式のメリットは大きいように感じました。今回、バグハン合宿を実際にやってみて、これは大きな発見でした。

◆     ◆     ◆

最後になりますが、ご協力いただいた参加者の皆さま、関係者の皆さま、本当にありがとうございました。おかげさまで、事後アンケートにお答えいただいた全員(17名)から「大変満足」「満足」という評価をいただきました。何人かの方からいただいた「また参加したいです」というお言葉は、望外の喜びです。運営側の私たちも、大変だったけどやって良かったと心から思える2日間でした。ありがとうございました!(了)

[参考リンク]
◎togetterまとめ「cybozu.comバグハンター合宿
◎「セキュリティクラスター まとめのまとめ 2014年8月版」(@IT Security&Trust)
◎「脆弱性見つける報奨金制度、予想超える成果もリスク覚悟」(ITpro)