DevSecOpsは、アプリのセキュリティ分野で最近登場した新しい概念で、開発サイクルの早い段階でセキュリティを取り入れることを目指しています。これは、DevOpsの開発・運用チーム間の密な連携により、セキュリティチームも統合して実施する方法です。開発、セキュリティ、テスト、運用など、コアなチーム全体での文化、組織、ツールの変革が求められます。基本的には、セキュリティは全員の責任であり、開発サイクルに関わる全員がその統合に寄与するという考え方です。 DevOps CI/CDのプロセスにセキュリティを組み込むことが肝要です。
展開の速度と頻度が増す中、従来のアプリセキュリティチームだけでは、すべての展開が安全であることを保証するのは難しくなっています。
この問題に対処するため、組織は開発サイクル全体でセキュリティを一貫して実施し、DevOpsチームが迅速かつ高品質なアプリを提供できる体制を整える必要があります。早期にセキュリティを業務に取り込むことで、問題点を早く把握し修正することが可能となります。この考え方は「左シフト」において重要であり、セキュリティテストを初期段階に移すことで、開発中にコード中のセキュリティの問題を迅速に対処できるようにします。
DevSecOpsを活用すれば、組織は継続的インテグレーションや継続的デリバリー(CI/CD)のプロセスにセキュリティをしっかりと組み込むことができます。DevSecOpsは、計画、開発、構築、テスト、運用と、開発サイクル全体で自動化とフィードバックを継続的に行う仕組みです。
世界はDevOpsに囲まれていますが、実際には何を意味しているのでしょうか?DevOpsは、関係者によって多少異なる意味を持ちますが、基本的にはクラウド組織のビジネス変革を促す文化や考え方を指しています。
組織内の変革は、共通のビジョンを持つチームの形成から生まれます。技術革新は、開発、デリバリー、運用全体の自動化を進めることで、より早く高品質かつ安全なコードを提供するのに役立ちます。
しかし、DevOpsに関する議論は複雑になりがちです。計画作業では、解決すべき問題や目的よりも、プロセスやツールの細部に気を取られることがあり、結果として、開発の本来の目的である迅速かつ安全な製品提供が見失われることがあります。
セキュリティを組み込む表現として、DevOpsやOpsDevという言葉よりも、DevSecOps、SecDevOps、DevOpsSecの3種類が存在する点が興味深いところです。当初は全体像を捉えず、やがて業界標準となり、クラウド組織の継続的かつ安全な運用を実現するための戦略に繋がるものと考えていました。しかし、よく考えると、この3つの呼び方それぞれが、製品開発サイクルにセキュリティを組み込む際の異なる課題を示しているのだと感じるようになりました。
DevOpsプロセスにセキュリティを取り入れる重要性についても触れておくべきです。従来、セキュリティは開発やテスト工程の一部とみなされることが多く、あまり重視されていませんでした。また、セキュリティは開発やデリバリーを妨げる要因と捉えられ、別チームが脆弱性修正に当たるという状況でした。
かつては、1人でアプリ開発を行い、リリースサイクルが1年程度で、アプリは複数の安全装置の背後で提供される環境では、この考え方も機能していました。しかし、複数の関係者が参加するクラウド環境では、1つの脆弱性が多くの顧客や組織の信用を脅かす可能性があります。それにもかかわらず、従来の方法に頼り、安全なコーディングやテストのプロセスを十分に取り入れられていませんでした。セキュリティ対策を最後の工程まで後回しにし、多くの脆弱性を放置していたのです。やがて、誰かが脆弱性を突くと、全てが混乱に陥りました。
DevSecOpsの手法には、以下の主要な要素が含まれます。
DevSecOpsの大きな利点は、スピードとセキュリティにあります。開発チームは、より迅速に安全なコードを提供でき、その結果、コスト削減にも寄与します。
「DevSecOpsの背景と目的は、全員がセキュリティに責任を持ち、最も現場に近い人々に対して、速度と規模を持って安全にセキュリティの判断を分散させる点にあります。これにより、必要なビジネス成果を損なうことなくセキュリティ対策が可能となります」と、DevSecOpsマニフェストの共同作成者であるShannon Lietzは述べています。
DevSecOpsでない環境では、コード作成時にセキュリティ問題が発生すると大幅な遅延が生じ、修正に多大な時間と費用がかかることがあります。DevSecOpsの迅速かつ安全なデリバリーは、セキュリティ問題のために再度サイクルを回す必要を減らし、時間とコストを節約します。
この仕組みは、不要な再検査や無駄なパッチを防ぎ、安全なコードを実現するため、効率的かつ経済的です。
DevSecOpsでは、開発サイクルの初期からセキュリティ対策が組み込まれ、コードは評価、解析、検査、追跡されます。問題は発見されるとすぐにモニタリングされ、追加の変更前に修正されるため、早期対処が容易になります。
さらに、開発、セキュリティ、運用チームの連携が強化され、インシデント発生時の対応力が向上します。DevSecOpsは、欠陥の改善機会を提供するとともに、セキュリティチームがより価値のある業務に集中できる環境を作り出します。これにより、後付けのセキュリティ対応を回避できます。
DevSecOpsの大きな利点は、セキュリティ上の脆弱性を迅速に特定・修正できる点です。開発と運用のサイクルに脆弱性チェックと修正を組み込むことで、一般的な問題(CVE)の発見と修正が速まり、攻撃者が悪用する時間が短縮されます。
信頼性の高い開発パイプラインを活用している組織なら、セキュリティテストを自動化されたテストスイートとして実施することが可能です。
セキュリティチェックの自動化は、開発とシステム全体の統一目標に依存します。自動テストにより、コードが適正な修正レベルに達していることが確認され、セキュリティユニットテストに合格していることが証明されます。さらに、静的および動的なテストで、本番リリース前にコードの品質を確保できます。
組織が成長するにつれて、セキュリティ対策も進化します。DevSecOpsは、繰り返し可能かつ柔軟なサイクルに適合し、環境の変化や新たな要件に応じて常に一貫したセキュリティを提供します。適切にDevSecOpsを実行すれば、強固な自動化体制、設定管理、組織、ポリシー、さらにはサーバーレスな連携環境が整備されます。
Security as Code (SaC)
Security as Code(SaC)とは、DevOpsパイプライン内のツールにセキュリティを組み込むことを意味します。これは、手動作業ではなく自動化を前提とし、全コードベースではなく変更部分に対して静的解析ツールを使用するアプローチです。ここで、セキュリティがツールやプロセスに統合されます。
この手法では、構築済みのアプリが通常、静的アプリセキュリティテスト(SAST)や動的アプリセキュリティテスト(DAST)ツールでチェックされます。自動化が基本となりますが、セキュリティ上重要な部分については手動チェックも必要です。Security as CodeはDevOpsツールチェーンとプロセスの中心的要素であり、これらのツールと自動化は継続的デリバリーフレームワーク内に組み込む必要があります。
Infrastructure as Code (IaC)
Infrastructure as Code(IaC)とは、DevOpsツールを用いてインフラの設計や更新を行う手法です。Ansible、Chef、Puppetなどのツールが利用されます。IaCでは、システムに問題が発生した際、問題の部分を隔離し、速やかに新しいものを展開して補います。これにより、安定した管理環境を維持します。
従来の手作業や使い捨てスクリプトによる変更ではなく、Puppet、Ansible、Chefなどのツールを用い、共通のソースコード管理システムで設定変更を管理します。インフラに問題が生じた場合は、個別に修正するのではなく、設定管理システムのワーカーを展開することで対応します。
結局のところ、DevSecOpsは開発サイクルの初期から意識的にセキュリティを取り入れるために不可欠です。開発組織が最初からセキュリティを考慮してコードを書くことで、製品が大きく進む前あるいはリリース後に脆弱性を修正する手間や費用を削減できます。各事業部は、開発、セキュリティ、運用のリポジトリを分離することで、より安全なソフトウェアを迅速に提供できます:
自動車業界では、開発期間を短縮しつつ、MISRAやAUTOSARなどのコンプライアンス基準を遵守します。
医療業界では、HIPAAなどの規則に従い、機微な患者情報のセキュリティを維持しながらイノベーションを推進します。
金融、小売、オンラインビジネスでは、OWASPトップ10のウェブアプリケーションのセキュリティリスクを改善し、PCI DSSに基づく決済カード規約を守りながら、データ保護とコンプライアンスを維持します。
組み込み、エンタープライズ、ミッションクリティカル、顧客向けおよびIoTデバイスでは、CWEトップ25の重大なソフトウェアエラーのリスクを低減する安全なコード作成が求められます。
Static application security testing (SAST)
静的アプリセキュリティテスト(SAST)ツールは、コードの書き方や設計上の欠陥を検査し、悪用される恐れのある脆弱性を特定します。SASTツールは、主にコード作成、ビルド、開発段階で使用されます。Coverityなどがその例です。
Software composition analysis (SCA)
SCAツール(例:Black Duck)は、ソースコードやライブラリをスキャンし、オープンソースやサードパーティ製コンポーネントの既知の脆弱性を特定します。また、セキュリティやライセンスリスクに関する情報を提供して、対策の優先順位付けと修正作業を支援します。さらに、CI/CDプロセスにシームレスに統合し、ビルド統合から本番前リリースまで新たなオープンソース脆弱性を継続的に検出します。
Interactive application security testing (IAST)
対話型アプリセキュリティテスト(IAST)ツールは、手動または自動の機能テスト中にバックグラウンドで動作し、アプリの実行時の挙動を解析します。例えば、Seeker IASTは計測機能を用いて、アプリのリクエスト/レスポンスのやり取りや、処理、データフローを検査します。実行時の脆弱性を検出した後、その結果を再現・検証し、問題が発生している正確なコード行まで明確に示すため、開発者は重要な問題に注力できます。
Dynamic application security testing (DAST)
動的アプリセキュリティテスト(DAST)は、自動化された脆弱性検出技術で、開発者がウェブアプリやAPIと関わる方法を模倣します。ネットワークを通じてアプリをテストし、クライアント側の挙動をシミュレートします。DASTツールは、ソースコードやカスタムコードへのアクセスを必要としません。
これらのツールはウェブサイトと連携し、誤検知を最小限に抑えながら脆弱性を特定します。例えば、Tinfoil SecurityのDASTは、ウェブアプリやAPI、さらにはバックエンドサービス、IoTデバイス、RESTfulやGraphQL APIなどにおける問題を検出します。
『Shift left』はDevSecOpsのマントラであり、開発者にセキュリティを工程の初期段階、すなわち左側に移すことを促します。DevSecOps環境では、セキュリティが開発工程の最初から組み込まれており、組織はネットワーク保証エンジニアやアーキテクトを開発チームに統合しています。彼らの役割は、スタック内の各コンポーネントが安全に構成され、問題がないことを確認することです。
左側へのシフトにより、セキュリティリスクや脆弱性を早期に特定し、迅速に対策を講じることが可能になります。開発チームは、効率的に製品を作ると同時に、セキュリティも実装していきます。
セキュリティはプロセスとコンプライアンスの組み合わせです。組織は、開発、運用、コンプライアンス各チーム間で、全員がセキュリティポリシーとベストプラクティスを共有する合意を形成する必要があります。
セキュリティ対策は一部門だけの責任ではなく、全員がセキュリティポリシーを遵守する文化を作ることが大切です。開発者、システムアーキテクト、テスターなど、各担当者が最終的にセキュリティに対して責任を負うようになります。
開発プロセスに関与する全員が、安全なコーディング、OWASPトップ10、アプリセキュリティテストなどの基本事項を理解する必要があります。開発者は、正規表現やコンプライアンステスト、脆弱性評価、対応策、セキュリティコントロールの実施方法について知識を持つことが求められます。
優れたリーダーシップは、組織内で変革を促す文化を育みます。DevSecOpsでは、プロセスや製品の所有権の面でもセキュリティを浸透させることが重要です。これにより、開発者やエンジニアが各自の担当部分の所有者となり、責任を持つことが可能になります。DevSecOps実践チームは、自身に適した開発プロセスやツールを選定し、作業環境を整えることで、プロジェクト成果に積極的に関与できるようになります。
DevSecOpsサイクルにおいて、可視性、監査可能性、トレーサビリティを実装することで、透明性が高まり、より安全な環境が実現されます:
SecDevOpsは、セキュリティチームがより良い対策を模索する中で、活力をもたらし、イノベーションを促進しています。組織が部門ごとに閉じこもるのではなく協力して作業することで、継続的な革新が実現されます。
NetflixやGoogleなどの著名な組織は、すでにDevOps文化の中でセキュリティを基本要素として取り入れ、前例のない成果を上げています。貴社のチームも、セキュリティを初期段階から導入し、SecDevOpsを採用することで一歩前進できるでしょう。
最新情報を購読