EN

NRIセキュア ブログ

DevSecOpsの実践と課題|クラウド時代における継続的セキュリティの実現に向けて

目次

    DevSecOpsの実践と課題|クラウド時代における継続的セキュリティの実現に向けて

    現代のシステム開発では、クラウドネイティブやクラウド上でコンテナ技術を用いた環境が主流となり、アプリケーションのリリースサイクルが短縮され、柔軟な基盤を活用した迅速な開発が求められています。[1]従来のセキュリティ対策は、開発の後工程で行われることが多く、リリーススピードとセキュリティのバランスが課題となっていました。このような背景から、開発プロセス全体にセキュリティを統合し、継続的にセキュリティを確保するDevSecOpsのアプローチが必要とされています。

     

    本書では、DevSecOpsの基本的な概念から、その実装における課題、具体的なツールの選定方法について解説し、クラウドおよびコンテナ環境を含むさまざまな開発環境におけるセキュリティ対策についても言及します。

     

    DevSecOpsとは

    DevSecOpsの基本概念

    DevSecOpsとは、情報システムにおいて、開発(Development)と運用(Operations)が密に連携することで、開発にかかる期間を短縮しリリース頻度を高める「DevOps」という開発スタイルに、セキュリティ(Security)も融合させることで、セキュリティを確保しつつ、開発スピードを損なわないスタイルのことを指します。[2]

    現代のシステム開発では、クラウド環境やコンテナ技術を活用し、アジャイル開発手法やCI/CDパイプラインを採用することで、迅速な開発と展開が可能になっています。従来型のセキュリティ対策はチェックリストによる確認や脆弱性診断による検査が行われていました。これは1回の実施に時間がかかりますが、長期の開発サイクルにおいては実施が可能でした。一方で、迅速さが求められるアジャイル開発においては、このような手法をそのまま適用することは難しいと言えます。

     

    DevSecOpsは、これらの開発プロセスに適合するよう、セキュリティ施策を継続的に組み込むことで、開発の俊敏性を維持しながら、効果的なセキュリティ対策を実現します。

    NIST SP 800-204Aでは、マイクロサービスアーキテクチャのアプリケーションにおいて、セキュリティリスクを事前に管理し、継続的なセキュリティ評価の対応、構成要素間の相互作用におけるセキュリティの担保など、DevSecOpsの重要性が指摘されています。[3]

    DevOpsとDevSecOpsの違い

    DevSecOpsでは、セキュリティを開発プロセスの最初から最後まで一貫して組み込みます。[4]具体的には、以下のような点が異なります。

    • セキュリティのシフトレフト
      開発の初期段階の要件定義や設計でセキュリティの検討を行い、セキュリティリスクの早期発見・早期修正を目指します。開発の初期のうちに、セキュリティの検討を実施することで、セキュリティリスクの修正にかかる時間やコスト、問題の見落としなどを最小限に抑えます。
    • 自動化されたセキュリティテスト
      CI/CDパイプライン内で、ソースコードや使用しているアプリケーション、コンテナイメージなどのセキュリティテストを組み込み、テストに通過しなければデプロイできないようにします。これにより、セキュリティテストが行われていない状態を抑制できます。
    • 継続的なセキュリティ監視
      開発だけでなく、運用しているシステムに対してのセキュリティ監視を実施します。開発時には発覚していなかった新たな脆弱性などに対処するプロセスを実施する必要があります。

    DevSecOpsの実装アプローチ

    DevSecOpsの実装では、セキュリティをコードとして扱い、自動化することが重要です。

    具体的には、以下のようなアプローチが一般的です。

    • Infrastructure as Code(IaC)による構成管理
      インフラストラクチャの構成をコードとして管理し、セキュリティ設定の標準化と自動適用を実現します。
    • 脆弱性スキャンの自動化
      依存パッケージやコンテナイメージの脆弱性を自動的にスキャンし、既知の脆弱性を含むコンポーネントの使用を防止します。
    • セキュリティテストの統合
      静的解析(SAST:Static Application Security Testing)や動的解析(DAST:Dynamic Application Security Testing)などのセキュリティテストをCI/CDパイプラインに組み込み、継続的なセキュリティ検証を実現します。
    • コンプライアンスの自動チェック
      セキュリティポリシーやコンプライアンス要件をコードとして定義し、自動的な検証を行います。

    これらの施策などにより、セキュリティを開発フローに組み込み、継続的にセキュリティ対策が実施できます。

    DevSecOpsの実装における課題

    DevSecOpsの実装には、多くの利点がある一方で、いくつかの課題も存在します。特に、セキュリティツールの選定、自動化のバランス、そして開発から運用までの継続的なセキュリティの確保に関する問題が挙げられます。

    本章では、DevSecOpsにて課題となる代表的な例について紹介します。

    セキュリティツールの選定

    DevSecOpsの導入において、適切なセキュリティツールの選定は極めて重要です。開発プロセス全体にセキュリティを組み込むためには、静的解析ツールや動的解析ツールを含むさまざまなセキュリティツールを統合し、CI/CDパイプラインで効果的に機能させる必要があります。しかし、多くの企業では、どのツールが自社の環境や開発に最適かを判断することが難しいという課題に直面しています。以下で、主なセキュリティツールを紹介します。

    静的解析(SAST)ツール

    ソースコードの構文やロジックを分析し、コードを実行することなく脆弱性やバグを検出するツールです。言語特有のベストプラクティスや、バッファオーバーフロー、SQLインジェクションのリスクなどのセキュリティの脆弱性を検出します。開発の早い段階で実行できるため、問題の発見と修正のコストを抑えられることが特徴です。

     

    代表的な製品

    • Fortify SCA: ソースコードを網羅的に静的解析する。多くの言語に対応しており、多くの環境で利用できる[5]
    • GitLab SAST: GitLab CI/CD に統合されたセキュリティスキャンツール。複数のOSS製スキャンツールのラッパーとなっており、GitLabのFreeプランでも利用可能。使用するセキュリティスキャンツールは選択することも可能。[6]
    • SonarQube: オープンソースで、多言語対応しており、昨今ではAIを活用したセキュリティスキャンも実施可能。[7]

     

    動的解析(DAST)ツール

    実際にソースコードやコンパイルしたアプリケーションを実行し、セキュリティ上の問題を検出するツールです。実行時の状況で脆弱性を解析できるため、ユーザーインターフェースやAPIの挙動も含めた実際のセキュリティ評価が可能です。


    代表的な製品

    • Vex: 国内多数導入実績のあるWeb脆弱性診断ツール。高精度・柔軟性・わかりやすいレポート・初心者にも嬉しい手厚いサポートが魅力で、CI/CDに統合して継続的な検査が可能。 [8]
    • GitLab DAST: GitLab SASTと同様に GitLab CI/CDに統合されたセキュリティスキャンツール。プロキシベースのスキャンだけでなく、APIテストなどについても実施可能。[9]
    • OWASP ZAP: オープンソースのWebアプリケーション脆弱性スキャナー。与えられたWebページに対して攻撃テストを実施する。[10]

    IAST (Interactive Application Security Testing) ツール

    IASTは、アプリケーションと一体的に稼働させ、実行環境を監視しながら脆弱性の検出を行う検査手法です。誤検知が少なく、実行環境に即した高精度な検査が可能です。


    代表的な製品

    • Contrast Security : アプリケーションにエージェントを組み込むことで、開発中はIASTやSCAによる高精度な脆弱性検出を行い、本番環境ではRASPでリアルタイムに攻撃をブロックする次世代セキュリティプラットフォーム。 [11]

    コンテナ・コンテナオーケストレーション環境向けツール

    クラウド環境やコンテナ技術特有のセキュリティリスクを検出するツールです。イメージをスキャンしたり、コンフィグレーションを監視するなどの手法で問題点を発見します。

     

    代表的な製品

    • Prisma Cloud: クラウドの設定ミス診断、コンプライアンス順守のチェック、異常行動の検知、ネットワークの可視化、脆弱性診断、マルウェア防御を自動で行う。また、ワークロード(サーバ、コンテナ、サーバレス)環境に対しても脆弱性診断や設定診断、マルウェア防御が可能。[12]
    • Aqua Security: コードスキャン、クラウド検出と対応(CDR)、クラウドワークロード保護(CWPP)、Kubernetesセキュリティなど、コンテナ・オーケストレーションツール、クラウドと環境全体のセキュリティ管理に使用できるプラットフォームを提供。[13]
    • Trivy: Aqua社がオープンソースで提供するセキュリティスキャナー。コンテナ・ファイルシステム・Gitリポジトリなどに利用できる。[14]

     

    ツール選定の基準には、例えば以下のような例が挙げられます。[15]

     

    • 開発環境との親和性
      a.使用している開発言語やフレームワークがサポートされているか
      b.使用しているCI/CDパイプライン環境へ統合することができるか
      c.既存の開発フローへの影響
    • スキャン性能と精度
      a.誤検知の発生率
      b.スキャン速度とリソース消費
      c.脆弱性データベースの更新頻度
    • 運用面での考慮事項
      a.ライセンスコスト
      b.導入や運用に必要なスキル
      c.サポートの有無

    開発から運用までの継続的セキュリティの確保

    DevSecOpsでは、開発・運用を一体化させ、その全プロセスにセキュリティを組み込むことで、継続的なセキュリティの実現を目指します。一方で、多くの企業では、開発や運用時にセキュリティ対策が十分に実施されていないケースが多々見られます。継続的にセキュリティを確保するために、以下のような対応が必要とされます。

    開発フェーズにおけるセキュリティ対策

    セキュリティ診断を中心としたセキュリティ対策は診断対象システムを網羅的に検査し脆弱性を把握する点で優位性があります。しかし、DevOpsにおいては開発スプリントが完了してから脆弱性を把握し、セキュリティ対策を講じることとなります。これは脆弱性を把握してから対策を講じリリースするまでのリードタイムが非常に大きく、迅速さが求められるDevOpsではセキュリティ診断だけに頼れません。DevOpsにおいてはセキュリティ診断前である開発フェーズにおける設計や要件定義(ユーザストーリー分析)からセキュリティ観点で検討し、セキュリティ対策を講じることで、迅速さを失わない鍵となります。

    継続的セキュリティ監視の必要性

    運用フェーズでは、脅威は常に変化しています。新たな脆弱性が発見され、攻撃手法も進化しています。例えば、近年ではリモートワークの普及に伴い、フィッシング攻撃やサプライチェーン攻撃が増加しています。また、脆弱なAPIを狙った攻撃も見られるようになっています。そのため、リリース後のアプリケーションやインフラに対しても、継続的なセキュリティ監視が必要です。これには、インフラやアプリケーションの変更を監視し、脆弱性のスキャンを定期的に行う仕組みを導入することが求められます。脆弱性管理や、監視計画、インシデント時の対策は、DevSecOpsに限らず実施するものですが、継続的な運用・開発に合わせて、継続的に計画や対策のアップデートを行います。

    本番環境におけるセキュリティ対策

    本番環境では、開発時のセキュリティだけでなく、運用中のデータの安全性やネットワーク設定、アクセス制御も重要な要素です。特に、クラウド環境ではIAM(Identity and Access Management)やセキュリティグループの適切な設定、運用中のコンテナや仮想マシンの脆弱性管理が不可欠です。また、外部からの攻撃や不正アクセスのリスクへの対応として、運用中のセキュリティ監視とインシデント対応も重要です。

    自動化のバランス

    DevSecOpsにおいて、セキュリティの自動化は大きなメリットをもたらします。特に、CI/CDパイプライン上におけるセキュリティテストの自動化により、開発のスピードを損なうことなく、セキュリティ対策を実施できるようになります。しかし、すべてを自動化すれば良いというわけではありません。

    自動化の利点と限界

    自動化されたセキュリティテストは、コードの脆弱性や設定ミスを早期に発見するのに役立ちます。例えば、静的解析ツールを使用することで、コードレビューの段階で早期に潜在的なバグを特定できます。これにより、修正コストを低減し、開発スピードを維持することが可能です。また、定期的なスキャンの自動化によって、常に最新の脆弱性情報に基づいたチェックが行えるため、セキュリティ体制が強化されます。


    一方で、自動化ツールだけでは、すべてのセキュリティリスクに対応できないことがあります。特に、ビジネスロジックの脆弱性や、特定の状況下でのみ発生する問題については、手動によるセキュリティレビューやペネトレーションテストが必要です。これらの手法は、自動化ツールが捉えられないコンテキスト特有の問題を識別するための重要な手段となります。

    手動介入の重要性

    手動によるセキュリティテストは、特に複雑なシステムやカスタマイズされたアプリケーションにおいて重要です。また、組織のセキュリティポリシーに基づいて、定期的なレビューやテストを行い、人間の判断を加えることで、システムの安全性を確保します。
    例えば、以下のような対応が考えられます。

     

    • ペネトレーションテストの実施
      専門のセキュリティチームによるペネトレーションテストの実施を行うことで、システムスキャンだけではカバーしきれない脆弱性やプログラムのバグによる脆弱性を回避することができます。
    • セキュリティポリシー遵守の確認
      組織におけるセキュリティポリシーに遵守しているかの確認が必要です。
      設定内容などの確認については自動化することが可能ですが、環境による差異や対応要否の判断などについては手動で確認することが推奨されます。
    • コードレビューの実施
      変更差分に対する人によるレビュー。設計どおりのコードであることやテストケースが妥当であることを確認、セキュリティツールが検出したセキュリティリスクへの対応要否を判断します。

    DevSecOpsにおける各環境でのセキュリティ対策

    DevSecOpsは、開発段階から本番運用まで、すべての段階でセキュリティを確保することを目指しています。[16]
    本章では、DevOpsでよく利用されるクラウド、コンテナ環境といった、オンプレミス環境とは異なる技術環境における対策について説明します。

    クラウド環境におけるセキュリティ

    クラウド環境では、オンプレミスのシステムとは異なるセキュリティの課題があります。例えばIAMの適切な設定やユーザ管理が挙げられます。これらについて、不要な権限が付与されていないか、不要なユーザが存在しないかなど、定期的な監視運用が必要となります。また、設計・構築当時には存在しなかったサービスなどが登場することで、セキュリティ対策を再設計する場合などもあり、一度設定した後も継続的に運用をする必要があります。

    コンテナ環境におけるセキュリティ

    コンテナ環境では、コンテナイメージやレジストリ、コンテナホスト、オーケストレーションツール(Kubernetesなど)に対するセキュリティリスクがあります。そのため、イメージスキャンや実行時監視、コンテナホスト・オーケストレーションツールの設定監視などを継続的に実施する必要があります。

    DevSecOpsの実践に向けた文化の醸成

    DevSecOpsを成功させるためには、技術的な面だけではなく、組織文化の変革も必要です。セキュリティを開発・運用のサイクルに組み込むためには、チーム間の協力やチーム全体のセキュリティ意識を高めることが必要となります。
    本章では、DevSecOpsの文化の中で重要となる内容について記載します。

    組織間の連携の強化

    DevSecOpsでは、開発・運用・セキュリティチームの連携が非常に重要となります。DevOpsでも同様のことが言えますが、チーム間連携には以下のような施策が有効なアプローチとなります。
    • コミュニケーションの促進
      チーム間で定期的なミーティングなどを実施し、コミュニケーションや情報共有を促進します。また、定期的なふりかえりや、課題解決を通じて、開発・運用・セキュリティそれぞれの課題をチーム全体で解決していくことが重要となります。
    • DevSecOps統合チームの形成
      開発段階は開発チームだけ、運用段階に入る段階で運用チームが参加する、またセキュリティ対策を開始する際にセキュリティ担当が参加する、のようなチームビルディングではなく、プロジェクト初期から開発者・運用担当者・セキュリティ担当者それぞれが1つのチームとして協力し、リリースの速度と運用、セキュリティ対策の3つの観点を持って開発を進める必要があります。

    継続的なフィードバックと改善

    DevSecOpsにおける継続的なフィードバックと改善は、組織全体のセキュリティ意識を向上させる重要な手法です。DevSecOpsは、オープンで協力的なコミュニケーションを重視します。チームメンバが自由に意見やフィードバックを行える環境を整備することで、失敗やミスが発生した際に学びの機会としても有効となります。また、ポジティブなフィードバック文化へと変化させることで、メンバのモチベーション向上や協力を促します。[17]

    まとめ

    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