特集

“バグハンター”たちが競い合うオフラインの「合宿」、報奨金も出るサイボウズの脆弱性発見コンテストで見えたこと

泊まり込みで2日間行われた「サイボウズ バグハンター合宿2019」を取材してきた

 やや旧聞に属するが、サイボウズ株式会社が4月20日、同社の提供する製品・サービスの脆弱性を報告すると報奨金が支払われる「脆弱性報奨金制度2019」を開始した。翌21日までの2日間で198件の脆弱性が報告され、155件が脆弱性として仮認定された。

 なぜ短期間で大量の脆弱性が報告されたのか。これは製品やサービスに悪影響を及ぼさないためのサイボウズによる脆弱性対応策「サイボウズ バグハンター合宿2019」(バグハン合宿)の成果によるものだ。

ゼロデイ脆弱性を早期発見するための取り組み、報奨金は1件あたり最大100万円

今回、合宿地として選ばれたのは湯河原温泉。宿から少々離れた不動滝脇からも湯煙が上がっていた
特別仕様の「バグハンの実」なども用意されていた

 サイボウズは2002年から自社製品の脆弱性ハンドリングを社内で行っていたが、2006年に外部からの脆弱性に対する問い合わせがあったことを機にPSIRT(Product Security Incident Response Team)を設立した。その後、2011年に同社のクラウド基盤「cybozu.com」のリリースと合わせるかたちでCSIRT(Computer Security Incident Response Team)の「Cy-SIRT」を立ち上げた。現在はPSIRTとセキュリティに関するヘルプデスクを担当する「セキュリティ室」となっており、Cy-PSIRT(23名)とセキュリティ室(3名)が協力して運営を行っている。

 CSIRTは企業へのサイバーセキュリティインシデントに対応する部署だが、PSIRTは製品のセキュリティインシデントに対応する部署だ。つまりソフトウェアが関わるモノづくりを行っている会社ならば、本来PSIRTがあるべきだろう。

 やや古いデータになるが、2018年12月にJPCERT/CCが公開した「2017年度 CSIRT構築および運用における実態調査」に関する報告書を見ると、日本シーサート協議会加盟の企業のうち、PSIRT機能を保有してる組織は22%程度、脆弱性対応の経験がある組織は半分程度で、日本企業の自社製品の脆弱性に対してまだ対応がよろしくない。

 そしてCSIRTとPSIRTが独立して連携して運用している企業は6%未満と少ない。脆弱性報告窓口を用意しているサイボウズは、日本の中では製品脆弱性対応に非常に積極的な企業であるといえるだろう。

 冒頭の脆弱性認定件数は、脆弱性報奨金制度が機能しているからこその数字ということができ、脆弱性に対して早期に対策することができる。

 サイボウズのCy-PSIRTは製品開発の全ての脆弱性判断を行い、時には外部の専門会社に監査やペネトレーションテストも依頼している。しかし、それでも発見しきれない脆弱性が残ってしまう可能性は否定できない。

 悪意のある攻撃者が脆弱性情報を得てしまった場合、その脆弱性を利用した攻撃が行われる可能性がある。また、過去の設計、実装の時点では問題にならなかった仕様も現在の観点で評価すると脆弱というケースもある。

 サイボウズが2014年に開始した脆弱性報奨金制度は、いわゆる「ホワイトハッカー」からサイボウズ製品に対する脆弱性レポートを受け付け、脆弱度合に応じた報奨金を支払う制度だ。現在の規定では製品の脆弱性1件の報告で最大100万円がサイボウズから支払われる。過去3年の報奨金支払額は2016年に約400万円、2017年が約1100万円、2018年が約2105万円とほぼ倍々ペースで増加している。

「サイボウズ 脆弱性報奨金制度2019」の主な変更点の説明。以前は最大200万円だったが100万円に減額。一方、複数製品で同じ脆弱性が適用できる場合は製品数×100万円まで得られる
新たな脆弱性に対しての報奨金以外に、ポイント制度を導入。100ポイント獲得か年度内のランキングトップ3で景品贈呈

 サイボウズの製品の脆弱性報告に伴う報奨金支払いが2017年になって急増したのは、特定製品の脆弱性報告にボーナスを付けるキャンペーンと2017年に行われたバグハン合宿の結果といえるだろう。

 2017年のバグハン合宿では15名のバグハンターが泊まり込みでハンティングを行った。その結果、57件の脆弱性報告があり、これは2017年の脆弱性報告数の4分の1を占める。

 合宿は事前の準備が必要なため、2018年には行われず、2019年のバグハン合宿は4月20~21日に開催された。ちなみに2018年に認定された脆弱性は155件で、奇しくも同じ数の脆弱性が2019年のバグハン合宿の期間で見つかったことになる。

 原稿執筆にあたり、サイボウズに問い合わせをしたところ、9月18日時点で42件の脆弱性(報奨金は約300万)が確定したという(合宿で報告されていても、最終的に確定していないものもまだ残っている)。

 今回のバグハン合宿では外部のバグハンターとサイボウズの開発担当社員が一緒にチームを組んでいる。実際に脆弱性をあぶりだすバグハンターの活動を開発技術者が目の当たりにすることによって、意識改革につながるのを狙っていることも考えられる。

大量の脆弱性報告をこなすPSIRTチーム前提の合宿

 通常の脆弱性報告とバグハン合宿で異なることが2つある。通常の脆弱性報告ではサイボウズ側の検討にある程度の時間がかかり、その間に報告者とのメール等でのやり取りがあり、認定まで時間がかかる。

 一方、バグハン合宿ではチーム戦の表彰もある関係で、2日目までに暫定判定をしなければならないのでより早い対応が求められる。この点は仮判定にすることと、Cy-PSIRTメンバーと報告者がその場で対話することで対応した――と言っても、報告件数の多さに困ったようだ。

あいさつと説明後、14時に1日目午後のバグハンスタート
評価担当者の顔もまだ明るい
開始14分。早くも31件の脆弱性が報告されている。このボードは夕飯時まで逐次更新されていた

 また、脆弱性審査は提出順に行うので、あとから報告された脆弱性報告の審査はあと回しになってしまう(今年の報奨金支払いルールでは「二番手」に報奨金が支払われない)。チームによっては事前に脆弱性を調べておき、バグハン合宿スタートとともに一気に提出するという戦略を取っていた。これが今年のバグハン合宿で多くの脆弱性が発見されたというカラクリだ。運営側からすると「ここまで多くの報告がある」のは想定外だったようで、スケジュールが一部変更になったほどだった。

本来はメール等で詳細のやり取りを行うが、合宿なので評価チームが説明やデモを聞きながら判断できる
バグハン開始47分後。すでに72件の脆弱性が報告されている。これはあらかじめ調べておいた脆弱性をまとめて報告していたため。原則、先に報告されたものから審査するので他のチームの審査を遅らせる戦略だ
18時。4時間で115件報告され、41件が仮認定されて、いったんお開き

 また、チーム戦ということで、チームの別メンバーが発見した脆弱性をチーム内で共有することにより、他のバグハンターの得意分野と組み合わせた別の脆弱性として報告することが可能になった(これも今年のルールが変更になり、同じ脆弱性でも他の製品に波及する場合は製品数分支払われるようになったため)。

 なお、今回のバグハン合宿ではこれまでの脆弱性報奨金制度の対象となっていなかったソフトも対象としており、脆弱性報奨金制度においても今後、招待制で実施するようだ。また、脆弱性認定に至らないケースも含め、ポイントを与える制度を開始している。

引き続き夜の部スタート。終了時刻は未定だったが、バグハンターによっては深夜まで作業していたようだ
夜になるとスコアボードが消え、評価チームは報告者に詳細を聞いて評価を進める
翌朝8時前。さすがに机にはあまり人がいないが、早起きして始めたのかオールナイトでやっていた方がいたのか、人がちらほら(バグハンルームは終日解放されていた)
朝食も取らずに沈没中の評価チーム
その後、昼までラストスパート
Cチームが評価トップになった

脆弱性をいち早く可視化し、重要性が高いものから修正するためのサイクルの確立

 今回のバグハン合宿での報告で「これは」と思ったものを何点か紹介する。

 1つ目はヒヤリハット事例で、開発サイドですでに脆弱性を把握しており、脆弱性情報をJPCERT/CC経由で公開直前の状態だった「修正されているハズの脆弱性」が報告されたことだ。Cy-PSIRTとしてはドキっとしただろうし、今後の脆弱性修正確認プロセスの見直しに繋がるだろう。

 2つ目はサーバーとのやり取りで暗号化されているデータが「ある言語の中間コード」となっていたケースだ。報告したバグハンターはその中間コードをソースコードに再変換して、問題点を報告していた。可読性の高い言語だけが悪用されるとは限らず、難読化を施していても見破られ悪用されることがある以上、バグハンターも高いスキルを要求されるということを改めて認識した。

チームごとにライトニングトーク。中間コードを合宿中に解読するのは困難ではないかと思っていたが、「宿題」と書いてあるように合宿前に発見していたようだ
筆者が寝ていた深夜にバグハンター同士のレクチャーがあったようだ

 3つ目は「管理者の名前を変更することで悪意のある行動ができる」という報告だ。攻撃のためにはまず管理者権限を得る、あるいは管理者をだまして「かなり特殊な名前」に変更するというものだった。当初、「これは脆弱性と言えるのだろうか?」と感じたが、Cy-PSIRTの使命がサイボウズ製品の脆弱性をいち早く知ることであり、攻撃条件を限定しなくてもいいのかもしれないと考えを改めた。

 後日、Cy-PSIRTの大塚由梨子氏は「脆弱性情報をいち早く収集してリスクを確認し、対応するか否かを決めたらよいと思っており、限られたリソースの中で対応優先度を総合的に考えたい」とコメントしていた。

 合宿では「可能な限り低いCVSS v3値」の報告を行った方がいた。低ければ報奨金も少なくなるが、脆弱性報告の多様性を垣間見た。脅威度は低くても「使いやすい脆弱性」ならば悪用されやすく、単純にCVSS v3値が低いから問題ないとは言えない。現在はCVSS v3値が高いことでボーナスが与えられるが「攻撃の可能性はほとんどないが、脅威の深刻度が高い」脆弱性より、「脅威の深刻度はあまり高くないものの、比較的容易に攻撃できる」報告に対するボーナスが必要ではないかとも感じた。

 脆弱性を突いた攻撃によって公開早々にサービス終了に追い込まれた「7pay」の事件はまだ記憶に新しい。人が作る以上、脆弱性が出るのは避けられないが、悪用されないためには製品・サービスに影響を及ぼす脆弱性をいち早く可視化し、評価し、重要性の高いものから修正するサイクルを確立しなければならないのだろう。

 認定されたサイボウズ製品の脆弱性のうち、実際の攻撃に使える脆弱性は少ないだろう。一方で愚直に製品の脆弱性に対して向き合い対応する姿勢は高く評価するべきだ。

 サイボウズのバグハン合宿はユニークな施策だ。その裏側には脆弱性報奨金制度で培われたCy-PSIRTスタッフの高い対応能力、バグハンターやCy-PSIRT、開発スタッフたちの交流の場が提供されること、バグハンターとサイボウズとの信頼関係がなければ行えないと感じた。