こんにちは。Cy-PSIRTの純平です。
今回は、2022年7月に公開されたドキュメント「アジャイル開発におけるセキュリティ|パターン・ランゲージ」と弊社での取り組みを紹介したいと思います。
Cy-PSIRTとは
Cy-PSIRT(Cybozu inc. Product Security Incident Response Team)はサイボウズ製品のセキュリティ品質向上/信頼向上をミッションに掲げ、脆弱性検証はもちろん、報奨金制度の運営や検出された脆弱性情報の公開、インシデントハンドリングを行っています。
Cy-PSIRTの詳しい業務内容や目的は以下で紹介しています。ぜひご覧ください。
「アジャイル開発におけるセキュリティ|パターン・ランゲージ」とは
脆弱性診断士スキルマッププロジェクトが作成した『アジャイル開発においてセキュリティをどのように担保するか』のヒントを過去の成功事例などを基にパターン・ランゲージを使って解説したものです。 セキュリティエンジニアとしてプロダクトの脆弱性診断をしている方に加え、プロダクトマネージャや開発者など、アジャイル開発にかかわる多くの方に参考になる情報となっています。
弊社もCy-PSIRTから私と小西、アジャイルコーチからは天野(@ama_ch)で執筆に関わらせていただきました。 今現在アジャイル開発の中でセキュリティ活動を行っている方はもちろん、これから開発体制を検討する方やセキュリティ品質担保に興味のある方もぜひご覧ください。
パターン・ランゲージとは
パターン・ランゲージとは知識を共有するためのフレームワークです。 ある「特定の状況」とその状況で「発生する問題」、それに対する「解決方法」がセットで記述されます。
パターン・ランゲージについての詳細はご覧ください。
http://creativeshift.co.jp/pattern-lang/
「アジャイル開発におけるセキュリティ|パターン・ランゲージ」の読み方
本ドキュメントはパターン・ランゲージのフレームワークに従い、 それぞれのパターンを以下の内容で構成しています。
- タイトル
- 概要
- 状況:チームがおかれている状況
- 解決したい問題:「状況」において発生する問題
- 解決策:問題への解決策
- 参考資料
またそれぞれのパターンを以下のフェーズに分類しています。
- チームビルディング
- 開発計画・プロジェクト計画
- セキュリティテスト
- セキュリティ品質向上
すべてのパターンをチームに実装していく必要はなく、読者が所属するチームの現状やフェーズに応じてどのパターンを実装するかを取捨選択できます。 また、記載されている解決策も全て実施する必要はなく、チームに合わせて採用する解決策を検討します。
サイボウズでの取り組み
弊社での取り組みを本ドキュメントに照らして一部紹介いたします。
4. セキュリティスキル底上げのための開発者向けトレーニング
弊社では、主に新卒エンジニア向けの研修の一環で「セキュリティ」の講義を行っています。 講義の内容は、XSSやSQLインジェクションと言った、有名な脆弱性の紹介の座学とそれらの脆弱性が意図的に埋め込まれたサイトを用いた演習で構成されています。
セキュリティを含め、研修の講義資料は公開されています。ご興味あればご覧ください。 blog.cybozu.io
また、2022年から希望者を対象に、それぞれの脆弱性のより詳しい説明や、脆弱なコードからセキュアなコードに修正する演習などを含む、実践的に手を動かしながら学べるトレーニングを受講可能にしています。
このような活動を行うことで、個々のセキュリティ知識だけでなく、日々の開発の中でのセキュリティへの意識を高められると考えています。 実際に開発を進めていくと実施しているトレーニングの内容だけではカバーできない範囲のセキュリティ的な観点が必要な場合もありますが、セキュリティ意識が高ければその観点に気づき、対策が可能になります。また、この活動をCy-PSIRTが行うことで悩んだときの相談先としても認知してもらいやすくなります。
6. リスクに応じた脆弱性対応方針の策定
実際に検出された脆弱性はその脆弱性の性質はもちろん、製品の性質によっても対応方針は異なります。 そのためCy-PSIRTでは、開発チームが適切に脆弱性の対応方針を決定できるように脆弱性の悪用シナリオ、影響度などの情報提供を行います。
8. セキュリティテストの実施タイミングと方針検討
弊社には多くのプロダクトが存在します。プロダクトが違えば、開発チームの体制、開発の進め方、リリースタイミングが異なります。 リリースタイミングが違えば検証のタイミングも考える必要があります。また製品の開発フェーズによってもタイミングを検討する必要があります。
Cy-PSIRTでは基本的な検証方針をもちつつ、個々の開発チームと連携し適切な検証タイミングや内容を決定しています。 それにより、リリースのサイクルを遅らせることなく、ユーザーに安心して利用いただける品質を担保しています。
10. 利用環境の脆弱性管理
製品のセキュリティ品質を担保するには自社で開発した部分だけでなく、製品に取り込まれているライブラリなどの脆弱性管理も重要です。 自社でセキュアに開発していても利用しているライブラリの脆弱性を放置したら製品自体のセキュリティ品質にも影響します。 弊社ではyamoryという脆弱性管理ツールを用いて、そのようなライブラリなどの脆弱性情報を日々収集しています。
ライブラリの脆弱性を迅速に検出できるのはもちろんのこと、万が一ライブラリに大きい脆弱性が発見されたときも影響を受けるプロタクトやその影響範囲の特定を迅速に行うことができます。 yamory.io
11. セキュリティテストの自動化
検証の自動化には様々な目的があります。弊社では、製品の開発体制に適した効率的かつ迅速に検証を回すことと、回帰試験によるセキュリティ品質の担保を目的に利用を進めています。
自動検証ツールによっては自動で特定の範囲をクロールしスキャンができるものも増えてきており、より小さい単位で細かく自動検証ツールを回すことが可能になっています。 それにより、今まで時間を要していた手動検証のうち自動で検証できる部分の工数を削減でき、製品固有の検証項目を重点的に検証できるようになります。
最後に
今回は2022年7月に公開された「アジャイル開発におけるセキュリティ|パターン・ランゲージ」とサイボウズの取り組みを紹介しました。 開発に関わる方々の参考になれば幸いです。 Cy-PSIRTではこれからもみなさんが安心して使える製品をスピーディに提供できるように、それぞれに適したセキュリティ品質担保の形を考え、取り組みを強化していきます。