特集
“バグハンター”たちが競い合うオフラインの「合宿」、報奨金も出るサイボウズの脆弱性発見コンテストで見えたこと
2019年12月26日 11:58
やや旧聞に属するが、サイボウズ株式会社が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万円とほぼ倍々ペースで増加している。
サイボウズの製品の脆弱性報告に伴う報奨金支払いが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メンバーと報告者がその場で対話することで対応した――と言っても、報告件数の多さに困ったようだ。
また、脆弱性審査は提出順に行うので、あとから報告された脆弱性報告の審査はあと回しになってしまう(今年の報奨金支払いルールでは「二番手」に報奨金が支払われない)。チームによっては事前に脆弱性を調べておき、バグハン合宿スタートとともに一気に提出するという戦略を取っていた。これが今年のバグハン合宿で多くの脆弱性が発見されたというカラクリだ。運営側からすると「ここまで多くの報告がある」のは想定外だったようで、スケジュールが一部変更になったほどだった。
また、チーム戦ということで、チームの別メンバーが発見した脆弱性をチーム内で共有することにより、他のバグハンターの得意分野と組み合わせた別の脆弱性として報告することが可能になった(これも今年のルールが変更になり、同じ脆弱性でも他の製品に波及する場合は製品数分支払われるようになったため)。
なお、今回のバグハン合宿ではこれまでの脆弱性報奨金制度の対象となっていなかったソフトも対象としており、脆弱性報奨金制度においても今後、招待制で実施するようだ。また、脆弱性認定に至らないケースも含め、ポイントを与える制度を開始している。
脆弱性をいち早く可視化し、重要性が高いものから修正するためのサイクルの確立
今回のバグハン合宿での報告で「これは」と思ったものを何点か紹介する。
1つ目はヒヤリハット事例で、開発サイドですでに脆弱性を把握しており、脆弱性情報をJPCERT/CC経由で公開直前の状態だった「修正されているハズの脆弱性」が報告されたことだ。Cy-PSIRTとしてはドキっとしただろうし、今後の脆弱性修正確認プロセスの見直しに繋がるだろう。
2つ目はサーバーとのやり取りで暗号化されているデータが「ある言語の中間コード」となっていたケースだ。報告したバグハンターはその中間コードをソースコードに再変換して、問題点を報告していた。可読性の高い言語だけが悪用されるとは限らず、難読化を施していても見破られ悪用されることがある以上、バグハンターも高いスキルを要求されるということを改めて認識した。
3つ目は「管理者の名前を変更することで悪意のある行動ができる」という報告だ。攻撃のためにはまず管理者権限を得る、あるいは管理者をだまして「かなり特殊な名前」に変更するというものだった。当初、「これは脆弱性と言えるのだろうか?」と感じたが、Cy-PSIRTの使命がサイボウズ製品の脆弱性をいち早く知ることであり、攻撃条件を限定しなくてもいいのかもしれないと考えを改めた。
後日、Cy-PSIRTの大塚由梨子氏は「脆弱性情報をいち早く収集してリスクを確認し、対応するか否かを決めたらよいと思っており、限られたリソースの中で対応優先度を総合的に考えたい」とコメントしていた。
合宿では「可能な限り低いCVSS v3値」の報告を行った方がいた。低ければ報奨金も少なくなるが、脆弱性報告の多様性を垣間見た。脅威度は低くても「使いやすい脆弱性」ならば悪用されやすく、単純にCVSS v3値が低いから問題ないとは言えない。現在はCVSS v3値が高いことでボーナスが与えられるが「攻撃の可能性はほとんどないが、脅威の深刻度が高い」脆弱性より、「脅威の深刻度はあまり高くないものの、比較的容易に攻撃できる」報告に対するボーナスが必要ではないかとも感じた。
脆弱性を突いた攻撃によって公開早々にサービス終了に追い込まれた「7pay」の事件はまだ記憶に新しい。人が作る以上、脆弱性が出るのは避けられないが、悪用されないためには製品・サービスに影響を及ぼす脆弱性をいち早く可視化し、評価し、重要性の高いものから修正するサイクルを確立しなければならないのだろう。
認定されたサイボウズ製品の脆弱性のうち、実際の攻撃に使える脆弱性は少ないだろう。一方で愚直に製品の脆弱性に対して向き合い対応する姿勢は高く評価するべきだ。
サイボウズのバグハン合宿はユニークな施策だ。その裏側には脆弱性報奨金制度で培われたCy-PSIRTスタッフの高い対応能力、バグハンターやCy-PSIRT、開発スタッフたちの交流の場が提供されること、バグハンターとサイボウズとの信頼関係がなければ行えないと感じた。