開発ライフサイクル
本記事では以下のように継続してアプリケーションを開発するような開発ライフサイクルを前提として説明します。
また、DevSecOpsを実践するための土台として、テストやデプロイが自動化されていることを想定とします。しかし、自動化されていない環境であっても、考え方の多くはそのまま適用できます。基本的な考え方は「シフトレフト」と「自動化」です。シフトレフトとは、セキュリティ対策をできる限り前工程で行おうという考え方です。この考え方を取り入れることで、セキュリティ対策による手戻りを減らすことができます。自動化はDevOpsの目標とする、迅速かつ頻繁にアプリケーションをリリースするために必須の考え方であり、DevSecOpsでも同じく必須の考え方となります。
(1)計画
どのようなアプリケーションを開発するか、リリース後どのような運用を行うか計画するフェーズですが、このタイミングでセキュリティ要件や、脆弱性ごとの対策方法も明確に定義します。そうすると、アプリケーションの設計に無理なくセキュリティを組み込むことが可能になります。セキュリティ要件や、脆弱性ごとの対策方法については、「OWASP Top 10 - 2017」や、「安全なWebサイトの作り方」などを参考にするとよいでしょう。このタイミングでは、各フェーズでどのようなツールを導入するか、どのような運用が効果的か、十分に検討することが重要になります。
本記事では、前回の記事で提案したツールのうち、以下のツールを使った実現方法について説明します。 各ツールの特徴は、以下のとおりですが、詳細な説明については、前回の記事をお読みください。
SCA(Software Composition Analysis)
アプリケーションが利用するライブラリに対して脆弱性が報告されていないかどうかをチェックするツールです。
静的解析ツール(Static Application Security Testing)
アプリケーションのソースコードを解析し、脆弱性が含まれていないかどうかチェックするツールです。ソースコードのどの部分に脆弱性が含まれているか判断できますが、実際に悪用可能かどうかまで判断することは難しいため、過剰検知が大量に報告される可能性があります。
動的解析ツール(Dynamic Application Security Testing)
アプリケーションを実際に動かし、脆弱性が含まれていないかどうかチェックするツールです。実際に悪用可能な脆弱性が報告されますが、ソースコードのどこに脆弱性が含まれるかまでは判断できません。
どのようなツールを導入するとしても、過剰検知の扱いが課題になります。そのため、セキュリティ対策ツールを開発プロセスの一部に取り込むためには過剰検知を管理することが必要になります。