新卒でCy-PSIRTに入ってみて

こんにちは!Cy-PSIRTに所属している2021年新卒の田口です。
本記事では、私がCy-PSIRTに配属されてから今に至るまでの活動や取り組みについて振り返ります。 入社してから約2年が経過し、その間にスキルや業務でどのような変化があったのか新卒入社の視点から紹介していきます。

Cy-PSIRTとは

まずは私が所属しているCy-PSIRTについて簡単に紹介します。
Cy-PSIRTは"Cybozu inc. Product Security Incident Response Team"の略称で、その名前の通りサイボウズ製品のセキュリティ品質向上をミッションに活動しているチームです。 Cy-PSIRTでは、各製品のセキュリティをメンバーで分担して対応しており、私は主にkintoneを担当しています。 具体的な業務内容については以下の記事で詳しく紹介していますので、ご興味のある方はご覧ください。

blog.cybozu.io

新卒でCy-PSIRTへ

次に私の技術的なバックグラウンドと配属までの経緯を紹介します。
大学時代は主にネットワークセキュリティを専攻しており、Webとは離れたレイヤでの研究を行っていました。 研究のためにコードを書く程度の経験はありましたが、本格的な開発経験はありませんでした。 そのため、Webアプリケーションを開発する企業のセキュリティエンジニアとして入社する上で開発経験がないことに漠然とした不安を抱えていました。

私が入社した年は以下のようなスケジュールで研修を行いました。

4月:全体新人研修
5・6月:エンジニア新人研修

  • 講義
  • チーム体験(2週間*3チーム)
  • 実践演習

6月末:Cy-PSIRTへ配属

全体での新人研修を終えた後、開発本部・運用本部に配属された新人向けに「エンジニア新人研修」が実施されました。 ここでは、講義を通じてエンジニアとしての基礎知識を体系的に学ぶことができました。 その後、興味のあるチームへの業務体験や新人エンジニアでチーム開発を行う実践演習を終え、6月末ごろCy-PSIRTへ配属されました。私が入社した年はコロナ禍だったこともあり、研修は全てオンラインで行われました。

配属されてから

Cy-PSIRTに配属されてからは、チーム内のオリエンテーションを行いながら徐々に業務に入っていきました。 社内で行われる脆弱性検証の最初のステップとして、「検証要件確認」と呼ばれる業務があります。 これは開発が完了した要件に対して、脆弱性検証が必要かどうかを判断する業務です。バックログの内容やソースコードの差分を適宜確認しながら「その変更によって新たに脆弱性が発生する可能性があるか?」という観点で、あらゆる脅威を想定し判断していく必要があります。

私の場合、この検証要件確認に特に難しさを感じていました。開発経験がないことも一因かもしれませんが、根本的にWebやWebセキュリティに対する理解が不足している自覚があり、根拠を持って判断することができていませんでした。さらに、業務で発生するコミュニケーションにおいても技術的な理解が困難で、この点にも課題を感じていました。

一方でチームの心理的安全性は非常に高く、簡単に質問や相談ができる環境が整っていました。そこで、「Web開発とWebセキュリティの学習に専念する探求期間を3ヶ月程度欲しい」という旨を先輩方に相談したところ、快くOKをいただきました。それからは、自分の中で1年目を準備期間と捉え、知識の土台を固めるためにスキルアップを目指しました。 タスク量を調整していただき、チームタスクの時間以外はWeb周りの学習に専念しました。

具体的に取り組んだことは以下の通りです。

Web開発およびWebセキュリティの学習

Web開発に関しては外部のサービスを使って学習を行い、フロントエンドからバックエンドまでの開発の基礎を学びました。 Webセキュリティの学習には「安全なWebアプリケーションの作り方」を参考に進めました。 サンプルアプリを動かし、Burp Suiteでリクエストとレスポンスを確認しながら脆弱性が発生する仕組みやその対策を学習しました。

これらの学習により、Web開発の基礎とWebセキュリティにおける足りていない知識をインプットすることができました。 手を動かして学ぶことでWebアプリケーションへの理解が進み、解像度が上がりました。

やられ掲示板の開発

学習した知識のアウトプットとして、わざと脆弱性を組み込んだログイン機能付きの掲示板(やられ掲示板)の開発を行いました。 脆弱性を組み込んだバージョンと脆弱性を修正した対策済みのバージョンに分け、それぞれ実装しました。 脆弱性を組み込みやすくするためフレームワークは利用せずに実装し「安全なWebアプリケーションの作り方」に準拠した対策を行いました。
対策した脆弱性は以下の通りです。

  • XSS
    • Reflected XSS
    • Stored XSS
    • DOM Based XSS
  • SQLインジェクション
  • ディレクトリトラバーサル
  • OSコマンドインジェクション
  • CSRF
  • セッション固定化
  • クリックジャッキング

上記以外にも、ファイルアップロードや権限の脆弱性対策、サーバ設定、ヘッダ出力などあらゆるセキュリティ対策を施しました。 さらに、開発した掲示板の仕様書や脆弱な箇所の説明、攻撃例と実施した対策をまとめたドキュメントの作成も行いました。

やられ掲示板の開発は、前項で学んだWeb開発とWebセキュリティを同時に復習できる非常によいアウトプットになりました。 わざと脆弱性を組み込んでは改修を繰り返していくなかで、脆弱性が発生しやすい箇所や対策すべきポイントが少しずつ理解できるようになりました。 また、ブラウザのセキュリティ機構やヘッダ、施したセキュリティ対策の効果を体感しながら、より効果的に知見を得ることができました。

配属からこれまでに感じた変化

Cy-PSIRTに配属され探求期間を経て今に至るまでに感じた変化を、スキルと業務の両面から振り返ってみたいと思います。

スキルの変化

探求期間で培った知見を活かし、脆弱性検証や検証要件確認を積極的に取り組めるようになりました。 技術的に見るべきポイントが徐々にわかるようになり、明確な根拠を持って要否を判断できるようになりました。 さらに、探求によって知識が身についたのは勿論ですが、技術的なコミュニケーションを取る場面でも具体的な処理のイメージができるようになりました。

また、実際にタスクに取り組むことで得られる知見も多くありました。 kintoneではモブ形式で脆弱性検証を実施しており、これが検証技術や知識を学ぶ非常によい機会となります。 過去の記事からモブ検証の説明とメリットについて引用します。

モブ検証では、検証を担当するチームが実際に検証を実施するドライバーと検証に関してアドバイスを行うナビゲータの役割に分かれます。ドライバーは自身がどのような観点で検証をしているかについて話しながら検証を進めていきます。一方で、ナビゲータはドライバーが実施している検証内容を見ながら、検証に対する理解やアドバイスなどを行なっていきます。このように一つの検証を複数のメンバーで一緒に確認しながら進めていくのがモブ検証です。
モブ検証では、様々な観点で検証できたり、他のメンバーからのアドバイスを通じて知識をチーム内で共有することができたりするというメリットがあります。結果、検証の品質を一定に保つことやチーム全体での検証能力を向上させることができる取り組みとなっています。

Cy-PSIRTの紹介 - Cybozu Inside Out | サイボウズエンジニアのブログ

先輩方がドライバーとして検証をしている様子を目にする機会がよくあるため、 検証観点や脆弱性に対する考え方など、新たな知見を吸収し自分の検証にも応用しています。 自分がドライバーとして検証を行う際も、アドバイスを受けながら進められるので、安心感があり非常に学びが多いです。

さらに、Cy-PSIRTではワーキンググループ形式(以下WG)での取り組みが盛んに行われるようになってきています。 ここでは有志のメンバーを募り、やっていきたいことや勉強会を小さな規模で取り組むことができます。 直近ではソースコード診断WGに参加し、更なるkintoneのコード理解に向けてSpringの学習を進めています。 これからもチームメンバーへの知見共有やスキルアップの場として積極的に活用していきたいです。

業務の変化

業務の面でも大きな変化がありました。 脆弱性検証では、kintone本体に加え新たな領域の検証としてフロリアの検証を行っています。 こちらの検証ではフロントエンドのセキュリティやReactについて学ぶよい機会になっています。 また、空いている時間でアドホック試験*1も行なっており、 気になる箇所や普段検証されていない機能を対象として検証を進めています。

現在はツールを活用した自動検証の取り組みに特に力を入れています。 自動検証を担当するWGを立ち上げるため、仕組みやフローの検討、稼働に向けた準備を進めています。
Cy-PSIRT内でこれまで確立されていなかった自動検証の仕組みを作り、より効率的な脆弱性検証が行われている状態を目指しています。

その他にも、インターンシップのメンターや採用、脆弱性検証・バグバウンティの改善などにも取り組んでおり、1年目より業務の幅が広がりました。

また、出張できる機会も徐々に増え、セキュリティイベントにオフラインで参加できるようになってきました。 昨年はHardeningに参加し、インシデントレスポンスを体験しながら実践的に学びを深めてきました。 以下の記事で詳しくレポートしていますので、ご興味のある方は読んでみてください。

blog.cybozu.io

Cy-PSIRTに入ってみて

最後にCy-PSIRTにジョインして感じた魅力や感想についてまとめます。

魅力と面白いところ

ユーザー数が多く大規模な製品のセキュリティに直接関わることができるのは魅力的でとても面白いところだと思います。 また、脆弱性検証で発見した脆弱性やバグが改修されてリリースされたときには、日頃の検証が実を結んでいる実感があり、ユーザー企業ならではのやりがいを感じることができます。 脆弱性やバグを見つける楽しさも勿論ありますが、自社で開発している製品のセキュリティを担当できることは、とても価値のあることだと感じています。

さらに、技術探求ややりたいことを自分で進めていくことも可能です。 前述しましたがWGによって個人がメンバーを巻き込みながら挑戦できる環境が整っており、自ら機会を作っていくことができるのもCy-PSIRTの魅力の一つだと思います。

実際どうだった?

配属当初は知識が足りていないことから業務に対する不安はありましたが、焦ることなくタスクに入っていくことができました。 その一つの要因として、環境面の影響はすごく大きかったように思います。 Cy-PSIRT配属当初からチームメンバーにはあたたかく受け入れていただき、 業務を一から学べるオリエンテーションが準備されていたり、質問するための専用チャットルームがあったりと充実した環境が用意されていました。 なにより、業務として探求期間を確保することを快諾してもらえたことで、知識の土台を作ることに専念でき、スキルアップにつながりました。 個人的にはその期間が本当にありがたく、その経験が今の業務でも役に立っています。
これからCy-PSIRTにジョインするメンバーにも、このような学びやすい環境を引き継いでいけるよう尽力していきたいと思います。

おわりに

入社してから今に至るまでの約2年間を経験をもとに振り返ってみました。 Cy-PSIRTやセキュリティエンジニアに興味を持っている方の参考になれば幸いです!

Cy-PSIRTでは一緒に働く仲間を募集中です。ご興味のある方は以下をご覧ください。

cybozu.co.jp

また、プロダクトセキュリティコースのインターンシップを開催予定です!
エントリー期間や日程など詳細な情報は以下のページをご確認ください。

cybozu.co.jp

*1:試験仕様書を作らずにシステムを操作・検証し、不具合や脆弱性を発見する場当たり的な試験