現代のシステム開発では、クラウドネイティブやクラウド上でコンテナ技術を用いた環境が主流となり、アプリケーションのリリースサイクルが短縮され、柔軟な基盤を活用した迅速な開発が求められています。[1]従来のセキュリティ対策は、開発の後工程で行われることが多く、リリーススピードとセキュリティのバランスが課題となっていました。このような背景から、開発プロセス全体にセキュリティを統合し、継続的にセキュリティを確保するDevSecOpsのアプローチが必要とされています。
本書では、DevSecOpsの基本的な概念から、その実装における課題、具体的なツールの選定方法について解説し、クラウドおよびコンテナ環境を含むさまざまな開発環境におけるセキュリティ対策についても言及します。
DevSecOpsとは、情報システムにおいて、開発(Development)と運用(Operations)が密に連携することで、開発にかかる期間を短縮しリリース頻度を高める「DevOps」という開発スタイルに、セキュリティ(Security)も融合させることで、セキュリティを確保しつつ、開発スピードを損なわないスタイルのことを指します。[2]
現代のシステム開発では、クラウド環境やコンテナ技術を活用し、アジャイル開発手法やCI/CDパイプラインを採用することで、迅速な開発と展開が可能になっています。従来型のセキュリティ対策はチェックリストによる確認や脆弱性診断による検査が行われていました。これは1回の実施に時間がかかりますが、長期の開発サイクルにおいては実施が可能でした。一方で、迅速さが求められるアジャイル開発においては、このような手法をそのまま適用することは難しいと言えます。
DevSecOpsは、これらの開発プロセスに適合するよう、セキュリティ施策を継続的に組み込むことで、開発の俊敏性を維持しながら、効果的なセキュリティ対策を実現します。
NIST SP 800-204Aでは、マイクロサービスアーキテクチャのアプリケーションにおいて、セキュリティリスクを事前に管理し、継続的なセキュリティ評価の対応、構成要素間の相互作用におけるセキュリティの担保など、DevSecOpsの重要性が指摘されています。[3]
DevSecOpsでは、セキュリティを開発プロセスの最初から最後まで一貫して組み込みます。[4]具体的には、以下のような点が異なります。
DevSecOpsの実装では、セキュリティをコードとして扱い、自動化することが重要です。
具体的には、以下のようなアプローチが一般的です。
これらの施策などにより、セキュリティを開発フローに組み込み、継続的にセキュリティ対策が実施できます。
DevSecOpsの実装には、多くの利点がある一方で、いくつかの課題も存在します。特に、セキュリティツールの選定、自動化のバランス、そして開発から運用までの継続的なセキュリティの確保に関する問題が挙げられます。
本章では、DevSecOpsにて課題となる代表的な例について紹介します。
DevSecOpsの導入において、適切なセキュリティツールの選定は極めて重要です。開発プロセス全体にセキュリティを組み込むためには、静的解析ツールや動的解析ツールを含むさまざまなセキュリティツールを統合し、CI/CDパイプラインで効果的に機能させる必要があります。しかし、多くの企業では、どのツールが自社の環境や開発に最適かを判断することが難しいという課題に直面しています。以下で、主なセキュリティツールを紹介します。
ソースコードの構文やロジックを分析し、コードを実行することなく脆弱性やバグを検出するツールです。言語特有のベストプラクティスや、バッファオーバーフロー、SQLインジェクションのリスクなどのセキュリティの脆弱性を検出します。開発の早い段階で実行できるため、問題の発見と修正のコストを抑えられることが特徴です。
代表的な製品
実際にソースコードやコンパイルしたアプリケーションを実行し、セキュリティ上の問題を検出するツールです。実行時の状況で脆弱性を解析できるため、ユーザーインターフェースやAPIの挙動も含めた実際のセキュリティ評価が可能です。
代表的な製品
IASTは、アプリケーションと一体的に稼働させ、実行環境を監視しながら脆弱性の検出を行う検査手法です。誤検知が少なく、実行環境に即した高精度な検査が可能です。
代表的な製品
クラウド環境やコンテナ技術特有のセキュリティリスクを検出するツールです。イメージをスキャンしたり、コンフィグレーションを監視するなどの手法で問題点を発見します。
代表的な製品
ツール選定の基準には、例えば以下のような例が挙げられます。[15]
DevSecOpsでは、開発・運用を一体化させ、その全プロセスにセキュリティを組み込むことで、継続的なセキュリティの実現を目指します。一方で、多くの企業では、開発や運用時にセキュリティ対策が十分に実施されていないケースが多々見られます。継続的にセキュリティを確保するために、以下のような対応が必要とされます。
セキュリティ診断を中心としたセキュリティ対策は診断対象システムを網羅的に検査し脆弱性を把握する点で優位性があります。しかし、DevOpsにおいては開発スプリントが完了してから脆弱性を把握し、セキュリティ対策を講じることとなります。これは脆弱性を把握してから対策を講じリリースするまでのリードタイムが非常に大きく、迅速さが求められるDevOpsではセキュリティ診断だけに頼れません。DevOpsにおいてはセキュリティ診断前である開発フェーズにおける設計や要件定義(ユーザストーリー分析)からセキュリティ観点で検討し、セキュリティ対策を講じることで、迅速さを失わない鍵となります。
運用フェーズでは、脅威は常に変化しています。新たな脆弱性が発見され、攻撃手法も進化しています。例えば、近年ではリモートワークの普及に伴い、フィッシング攻撃やサプライチェーン攻撃が増加しています。また、脆弱なAPIを狙った攻撃も見られるようになっています。そのため、リリース後のアプリケーションやインフラに対しても、継続的なセキュリティ監視が必要です。これには、インフラやアプリケーションの変更を監視し、脆弱性のスキャンを定期的に行う仕組みを導入することが求められます。脆弱性管理や、監視計画、インシデント時の対策は、DevSecOpsに限らず実施するものですが、継続的な運用・開発に合わせて、継続的に計画や対策のアップデートを行います。
本番環境では、開発時のセキュリティだけでなく、運用中のデータの安全性やネットワーク設定、アクセス制御も重要な要素です。特に、クラウド環境ではIAM(Identity and Access Management)やセキュリティグループの適切な設定、運用中のコンテナや仮想マシンの脆弱性管理が不可欠です。また、外部からの攻撃や不正アクセスのリスクへの対応として、運用中のセキュリティ監視とインシデント対応も重要です。
DevSecOpsにおいて、セキュリティの自動化は大きなメリットをもたらします。特に、CI/CDパイプライン上におけるセキュリティテストの自動化により、開発のスピードを損なうことなく、セキュリティ対策を実施できるようになります。しかし、すべてを自動化すれば良いというわけではありません。
自動化されたセキュリティテストは、コードの脆弱性や設定ミスを早期に発見するのに役立ちます。例えば、静的解析ツールを使用することで、コードレビューの段階で早期に潜在的なバグを特定できます。これにより、修正コストを低減し、開発スピードを維持することが可能です。また、定期的なスキャンの自動化によって、常に最新の脆弱性情報に基づいたチェックが行えるため、セキュリティ体制が強化されます。
一方で、自動化ツールだけでは、すべてのセキュリティリスクに対応できないことがあります。特に、ビジネスロジックの脆弱性や、特定の状況下でのみ発生する問題については、手動によるセキュリティレビューやペネトレーションテストが必要です。これらの手法は、自動化ツールが捉えられないコンテキスト特有の問題を識別するための重要な手段となります。
手動によるセキュリティテストは、特に複雑なシステムやカスタマイズされたアプリケーションにおいて重要です。また、組織のセキュリティポリシーに基づいて、定期的なレビューやテストを行い、人間の判断を加えることで、システムの安全性を確保します。
例えば、以下のような対応が考えられます。
クラウド環境では、オンプレミスのシステムとは異なるセキュリティの課題があります。例えばIAMの適切な設定やユーザ管理が挙げられます。これらについて、不要な権限が付与されていないか、不要なユーザが存在しないかなど、定期的な監視運用が必要となります。また、設計・構築当時には存在しなかったサービスなどが登場することで、セキュリティ対策を再設計する場合などもあり、一度設定した後も継続的に運用をする必要があります。
コンテナ環境では、コンテナイメージやレジストリ、コンテナホスト、オーケストレーションツール(Kubernetesなど)に対するセキュリティリスクがあります。そのため、イメージスキャンや実行時監視、コンテナホスト・オーケストレーションツールの設定監視などを継続的に実施する必要があります。
DevSecOpsは、セキュリティをソフトウェア開発ライフサイクル全体に組み込むアプローチであり、開発速度を損なうことなくセキュリティを強化することができます。セキュリティを最初から考慮した開発プロセスを取り入れることで、脆弱性を早期に発見し、迅速に対処することが可能となり、ビジネスにおけるセキュリティインシデントのリスクを大幅に軽減できます。
DevSecOpsを実装するためには、CI/CDパイプラインやクラウド、コンテナ環境における適切なセキュリティ対策を施すことが不可欠です。また、これらの対策を支援するために各種の自動化ツールを導入することが、セキュリティの一貫性と効率性を保つために重要となります。
DevSecOpsを導入し、継続的なセキュリティを確保するためには、適切なツール選定やプロセスの導入が不可欠です。また、運用におけるセキュリティ監視、定期的な脆弱性評価、インシデント対応体制の強化などの継続的なセキュリティ管理が求められています。
NRIセキュアテクノロジーズでは「DevSecOps実行支援サービス」として、組織に合わせたDevSecOpsの実装を支援し、企業のセキュリティ体制を強化するためのサポートを提供しています。また、セキュリティ人材をバーチャル“SECチーム”として開発現場に常駐させ、開発初期から運用まで幅広くサポートする「SEC Team Service」も提供しています。
その他にもパブリッククラウド・パブリッククラウド上のワークロードに対するセキュリティ対策として「Prisma Cloud」、NRIからはソースコード管理・CI/CD・(オプションで)静的解析をワンストップに提供し、開発の効率化と品質向上を支援する DevOps 環境構築支援サービスの「aslead DevOps」の提供も行っています。詳しくは以下をご覧ください。
[1] https://www.ipa.go.jp/digital/dx/hjuojm000000gx4n-att/000094497.pdf
[2] https://www.nri-secure.co.jp/glossary/devsecops
[3] https://doi.org/10.6028/NIST.SP.800-204A
[4] https://www.ipa.go.jp/jinzai/ics/core_human_resource/final_project/2022/ngi93u0000002kef-att/000100451.pdf
[5] https://www.microfocus-enterprise.co.jp/products/static-code-analysis-sast/
[6] https://docs.gitlab.com/ee/user/application_security/sast/
[7] https://www.sonarsource.com/
[8] https://www.ubsecure.jp/vex
[9] https://docs.gitlab.com/ee/user/application_security/dast/
[10] https://www.zaproxy.org/
[11] https://www.nri-secure.co.jp/service/solution/contrast
[12] https://www.nri-secure.co.jp/service/solution/prismacloud
[13] https://www.aquasec.com/aqua-cloud-native-security-platform/
[14] https://github.com/aquasecurity/trivy
[15] https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/e2a06143-ed29-4f1d-9c31-0f06fca67afc/b08708cd/20240131_resources_standard_guidelines_guidelines_05.pdf
[16] https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/e2a06143-ed29-4f1d-9c31-0f06fca67afc/7e3e30b9/20240131_resources_standard_guidelines_guidelines_01.pdf
[17] https://insights.sei.cmu.edu/documents/1287/2020_005_001_638589.pdf