アプリケーション・セキュリティ(AppSec)の分野では比較的新しい用語であるDevSecOpsとは、開発チームと運用チーム間の緊密な連携を拡張してセキュリティ・チームも含めることで、ソフトウェア開発ライフサイクル(SDLC)の早期にセキュリティを導入することです。開発、セキュリティ、テスト、運用の各チームで構成されるコア機能チーム全体で文化、プロセス、ツールを変更する必要があります。基本的に、DevSecOpsではセキュリティは共同責任とされ、DevOps CI/CDワークフローにセキュリティを組み込む際には、SDLCに関わる全員が何らかの役割を果たします。[1]
リリースの速度と頻度が高まるにつれ、従来のアプリケーション・セキュリティ・チームはリリースのペースに遅れずに各リリースのセキュリティを確保することができなくなっています。
これに対処するためには、DevOpsチームがスピードと品質に優れ、かつセキュアなアプリケーションを提供できるように、SDLC全体で継続的にセキュリティを構築する必要があります。セキュリティをワークフローに導入する時期が早いほど、セキュリティの弱点や脆弱性を早期に特定して修正することができます。この概念は、従来の開発環境のようにセキュリティの強化をSDLCの終盤になってから行うのではなく、セキュリティ・テストを開発時に移行し、開発者がほぼリアルタイムでコード内のセキュリティの問題を修正できるようにする「シフトレフト」に属します。
DevSecOpsを通じて、組織はセキュリティを既存の継続的インテグレーション/継続的デリバリー(CI/CD)プラクティスにシームレスに統合できます。DevSecOpsの範囲は、計画および設計からコーディング、構築、テスト、リリースまで、SDLC全体に及び、リアルタイムの連続フィードバック・ループと知見を提供します。
DevOpsは組織文化、プロセス、テクノロジーとツールの3本柱から成る理念であり、開発チームとIT運用チームが協力して、従来のソフトウェア開発プロセスよりも迅速、機敏、反復的な方法でソフトウェアを構築、テスト、リリースすることを目指しています。
『The DevOps Handbook』によると、「DevOpsの理念は、作業に関するフィードバックを開発者に迅速かつ定期的に提供することにより、コードを迅速に、独立して実装、統合、検証し、運用環境にデプロイできるようにすることです。」[2]
簡単に言えば、DevOpsとは、従来のサイロ化された開発チームと運用チームの壁を取り除くことです。DevOpsモデルでは、開発・テストからデプロイや運用まで、ソフトウェア・アプリケーションのライフサイクル全体を通じて開発チームと運用チームが協働します。
最近のほとんどのソフトウェア組織は、アジャイル・ベースのSDLCを採用し、更新や修正を含むソフトウェア・リリースの開発とデリバリを加速しています。DevOpsやDevSecOpsなどの開発手法では、さまざまな目的でアジャイル・フレームワークを利用します。DevOpsはアプリの配信速度に重点を置き、DevSecOpsは速度の向上に加え、セキュアなアプリをできるだけ迅速に提供することに重点を置きます。DevSecOpsの目標は、セキュアなコードベースの迅速な開発を促進することです。[3]
DevSecOpsの原理は、方向付け、設計、構築、テスト、リリース、サポート、保守その他を含むDevOpsライフサイクル全体にセキュリティを組み込むというものです。DevSecOpsでは、セキュリティはDevOpsバリューチェーン内の全員の共同責任です。DevSecOpsでは開発チーム、リリース管理(または運用)チーム、セキュリティ・チーム間の継続的で柔軟な協調が必要です。つまり、DevSecOpsはセキュリティを損なうことなくスピードを維持する役割を担います。
結論として、DevSecOpsはセキュリティをSDLCの早期段階で意識的に組み込むという点で重要です。[4]開発組織が最初からセキュリティを念頭に置いてコーディングすれば、運用またはリリース後になってから脆弱性を捕捉して修正するよりも、手間やコストを削減することができます。さまざまな業界の組織が、開発、セキュリティ、運用の間のサイロを打破するためにDevSecOpsを実装し、よりセキュアなソフトウェアをより迅速にリリースできます。
DevSecOpsを実装するには、CI/CDプロセスに統合するさまざまなアプリケーション・セキュリティ・テスト(AST)ツールを検討する必要があります。一般的に利用されているASTツールの一部を以下に示します。
SAST
SASTツールは、独自開発コードやカスタム・コードをスキャンして、コーディング・エラーや、悪用可能な弱点につながる設計上の欠陥を検出します。SASTツールは、主にSDLCのコーディング、ビルド、開発の各段階で使用します。Coverityは、そうしたSASTツールの1つです。
SCA
Black DuckなどのSCAツールは、ソースコードやバイナリをスキャンして、オープンソースおよびサードパーティーのコンポーネントの既知の脆弱性を特定します。また、セキュリティとライセンスのリスクに関する知見を提供し、優先順位付けと修正の取り組みを加速します。さらに、CI/CDプロセスにシームレスに統合して、ビルドの統合から実稼働前のリリースまで、新しいオープンソースの脆弱性を継続的に検出できます。
IAST
IASTツールは、手動または自動機能テスト中にバックグラウンドで動作し、Webアプリケーションの実行時の動作を解析します。たとえば、Seeker IASTツールはインストルメンテーションを用いてアプリケーションの要求/応答のやり取り、動作、データフローを監視します。実行時の脆弱性を検出し、自動的に結果を再生してテストし、発生したコード行までの詳細な洞察を開発チームに提供します。これにより、開発チームは重要な脆弱性に時間と労力を集中させることができます。
DAST
DASTは、ハッカーがWebアプリケーションやAPIを操作する方法を模倣する自動ブラックボックス・テスト技術です。この手法では、ペネトレーション・テストの場合とほぼ同様に、アプリケーションのクライアント側レンダリングを調べ、ネットワーク接続を介してアプリケーションをテストします。[5] DASTツールでは、スタックをスキャンするためにソースコードやカスタマイズにアクセスする必要がありません。Webサイトとやり取りして、低い誤検知率で脆弱性を発見します。たとえば、Synopsys DASTツールは、モバイル・バックエンド・サーバー、IoTデバイス、RESTful APIまたはGraphQL APIなどのWeb接続デバイスを含む、WebアプリケーションおよびAPIの脆弱性を特定します。[6]
[1] https://www.csoonline.com/article/3245748/what-is-devsecops-developing-more-secure-applications.html
[2] https://itrevolution.com/the-devops-handbook/
[3] https://blogs.cornell.edu/react/devops-vs-devsecops-what-is-the-difference/
[4] https://enterprisersproject.com/article/2018/1/why-devsecops-matters-it-leaders
[5] https://jaxenter.com/dast-devops-166973.html
[6] https://www.channele2e.com/investors/exits/synopsys-buys-tinfoil-security/