DevOpsは、企業の業務の進め方を一変させた。企業は革新的な製品をより迅速に市場投入し、その過程で大幅なコスト削減も実現している。しかし、サイバー攻撃が増加するなか、組織はDevOpsモデルにおけるセキュリティの側面を無視するわけにはいかない。2017年に発生したEquifaxの情報漏えいは、製品化プロセスにセキュリティチェックを導入することがいかに必要かを示す数多くの事例の1つだ。 その必要性を示している。 パッチが適用されていなかった脆弱性が 米国での情報漏えいに伴う和解金として、同社に7億米ドルという驚くべき損失をもたらした。
IDCの調査によると、世界の企業の3分の1以上が過去12カ月間に情報漏えいを経験している。別の調査では、CISOの71%が、本番環境で稼働させる前の自社コードには脆弱性がないとは言えないと考えている。これらの数字は憂慮すべきものだ。
チームは、安全なインフラを実現するためにDevSecOpsを導入する必要がある。 ただし、 スピードや 生産性を損なってはならない。DevOpsのワークフローが急速に反復する世界では、セキュリティを後回しにすることはもはや許されず、アプリケーション開発と並行して進めなければならない。実際、セキュリティをSDLCに早い段階で組み込むほど、組織全体の健全性にとって望ましい。
「DevSecOpsは、アプリやデータの周囲に境界セキュリティを構築することではなく、アプリにエンドツーエンドのセキュリティを組み込むことだ」と、CloudReachのクラウドアドバイザーであるKevin Davis氏はCloudReachで指摘している。「これにより、ソフトウェアとシステムのロジスティクスチェーンを活用してセキュリティ脆弱性を迅速に特定し、顧客に悪影響を及ぼすリスクを低減するとともに、サイバー攻撃やダウンタイムの可能性を最小限に抑えられる。総じてDevSecOpsによって、企業は開発、運用、セキュリティの各チーム間のコラボレーションとコミュニケーションを効率的に融合できる。まさに三方よしだ」
DevSecOpsとは何か?
DevSecOpsは、既存のDevOpsサイクルにセキュリティを組み込むソフトウェア開発手法だ。SDLCの各工程にセキュリティプロトコルを導入することで、従来のSDLCを根本から変える。その結果、チームは開発サイクルの後半で対応するのではなく、セキュリティ脅威が発生した時点で対処できる。
以前は、ソフトウェアのリリースはごくまれだった。DevOpsはSDLCを数日間に短縮した。そのような状況で、セキュリティチームが本番環境でコードをテストすると、不要な遅延が生じ、迅速かつアジャイルなDevOpsという理念そのものが損なわれる。安全で迅速な製品 リリースは、SDLCを完全に自動化して初めて実現できる。DevSecOpsを導入すれば、企業はアジャイル性を保ちながら安全にイノベーションを推進できる。
関連記事: NetOpsとDevOps:ネットワークに自動化をもたらす
DevSecOps導入の主要要素
Sean Wright氏(Immersive Labsのアプリケーションセキュリティ担当SME)は、次のように述べている。「DevSecOpsには本気で取り組む必要がある。これは、プロセスのライフサイクル全体にセキュリティを組み込み、適切な段階で適切なツールを用意し、何よりも、そうしたツールを使いこなし、セキュリティ上の問題を防止・修正できる正しい知識とスキルをスタッフに身につけさせることを意味する。最終的には、アプリケーションやサービスのセキュリティに全員が関与できるようになる」
組織にDevSecOpsを導入する際に押さえておくべきベストプラクティスを、以下にいくつか挙げる。
脆弱性スキャン
サイバー犯罪者はコードの脆弱性を悪用できる。そのため、CDパイプラインの各段階で脆弱性を検出することがDevSecOpsにとって重要になる。しかし、迅速なデプロイに向けてターンアラウンドが短縮されるなか、 脆弱性を手作業でくまなく調べるのは、ほぼ不可能だ。
自動脆弱性スキャナーはセキュリティ体制を強化し、脅威アクターによるシステムの脆弱性悪用を防ぐ。静的アプリケーションセキュリティテスト(SAST)と動的アプリケーションセキュリティテスト(DAST)は、アプリケーション保護に使われる代表的な自動化技術だ。
開発者はSDLCの初期段階でSASTを使い、 ソースコードに潜む脆弱性を調べる。 DASTはブラックボックス型のテスト手法で、DASTツールはハッカーのように振る舞い、アプリケーションが起動して稼働し始めると攻撃を仕掛ける。
DASTツールは、SASTツールよりもはるかに多くの 有用な結果を導き出す。SASTツールは誤検知を大量に報告することが多い。SASTとDASTを組み合わせることで、プリプロダクション環境と本番環境の双方でアプリケーションを保護できる。
インタラクティブアプリケーションセキュリティテスト(IAST)は比較的新しい技術アプローチで、コードに計測機能を組み込み、稼働中のアプリケーションを監視する。アプリケーション内に配置されたエージェントがアプリケーションを監視し、SASTやDASTのツールでは 見落とされるセキュリティ上の抜け穴を特定する。
Asaf Karas氏、JFrogのセキュリティCTOは、次のように述べている。「パッケージの脆弱性スキャンは、現代のほぼあらゆるソフトウェアデリバリーパイプラインを保護するための基本的なステップだ。アプリケーションのデプロイに使われる各パッケージ内の既知の脆弱性を自動的に特定することで、パッケージスキャナーは安全でないソフトウェアを本番環境に投入するリスクを大幅に低減できる。また、包括的な脆弱性データベースへの投資も賢明だ。MITRE CVEやNIST National Vulnerability Databaseなどの公開脆弱性データベースには、常に最新の脅威情報が含まれているとは限らないからだ」
イミュータブルインフラストラクチャに移行する
イミュータブルインフラストラクチャは、安全なDevSecOpsパイプラインに欠かせない要素だ。可変インフラストラクチャとは異なり、イミュータブルインフラストラクチャでは構成ドリフトが発生しないため、脆弱性の問題を診断しやすい。イミュータブルサーバーが侵害された場合、 開発者はパッチを適用する必要がなく、代わりに新しいサーバーへ置き換えればよい。
「イミュータブルインフラストラクチャは、アプリケーションアーキテクチャ全体をコード化するInfrastructure as Codeの利用と直接結びついている」と説明するのは、Aakash Shah氏(oak9のCTO兼共同創業者)だ。「Infrastructure as Codeによって、企業はさらにシフトレフトを進め、設計上のギャップをスキャンして修正することで、セキュリティ、安定性、品質を設計段階から確実に組み込める」
Kate Adam氏、Juniper Networksのセキュリティ製品マーケティング担当シニアディレクターは、「イミュータブルインフラストラクチャは非常に良い考えだが、組織のアプリケーションは成熟度が異なる段階にある可能性が高いため、あらゆる場所に導入するのは現実的ではない。さらに、将来必要となるすべてのサーバー要件を洗い出すための時間を、計画サイクルに十分確保していない組織も多い。それを実行している組織には敬意を表したい」と指摘する。
Adam氏はさらに、「しかし、チームがアプリケーションをステートレスにできる場合、イミュータブルインフラストラクチャの実装ははるかに容易であり、実施すべきだ。この方法でインフラストラクチャをロックダウンすれば、攻撃者はそのインフラストラクチャや上で稼働するアプリケーションサービスを悪用しにくくなる」と述べている。
関連記事:速度とパフォーマンスに優れたネットワークテストツール2021年版
ランタイム保護
ランタイム保護は、DevSecOpsの導入を成功させるうえで不可欠だ。ランタイムアプリケーション自己保護(RASP) は有望な技術であり、 シグネチャベースの検知を提供するだけでなく、脆弱性の診断やリアルタイムでの攻撃阻止にも有効だ。
RASPはコードに計測機能を組み込み、アプリケーション内の脆弱性とともに配置される。アプリケーション層を詳細に可視化することで、悪意ある攻撃を高精度に評価し、誤検知を排除できる。RASPを適切に実装すれば、コードはあらかじめ 自己防御できるように構築される。
しかし、Aqua Securityの製品担当バイスプレジデント、Story Tweedie-Yates氏は、「現在、ランタイムセキュリティについては大きな知識の隔たりがあり、最近の調査では、クラウドネイティブセキュリティの取り組みにおいて十分に重視されていないことが示されている。組織はランタイム保護に投資する必要がある。これがなければ、攻撃者が本番環境にアクセスした場合、シフトレフト、ハードニング、スキャンなど、クラウドのライフサイクル全体にわたるセキュリティ戦略の他の重要な要素が無効になりかねない」と指摘する。
安全なコンテナイメージ
コンテナはDevOps環境で一般的に使われている。 継続的なデプロイと継続的デリバリーを実現できるためだ。しかし、DevSecOpsの観点では、一定のセキュリティリスクをもたらす可能性がある。コンテナイメージには、特にパブリックリポジトリに由来するものを中心に、脆弱性が含まれている場合がある。 そのため、あらゆるDevSecOpsプロセスで コンテナイメージを保護し CI/CDパイプラインの全段階を通じて対策を講じなければならない。
強固なセキュリティ体制を構築するには、次のような方法がある。
- 小さなベースイメージを使う。これは単純な方法だ。イメージのサイズが小さいほど、攻撃対象領域も小さくなる。
- すべての段階でイメージスキャナーを使う。脆弱性は日々発見されているため、CI/CDライフサイクルの各段階でイメージスキャナーを使うほうが安全だ。
- イメージをrootとして実行しない。コンテナイメージをrootとして実行することは、開発者にとって高くつく過ちになり得る。root権限を持つ脅威アクターは、組織に取り返しのつかない損害を与えられる。
関連記事: マルチクラウド環境全体のセキュリティ管理
企業文化の変革
DevSecOpsはDevOpsの枠組みにセキュリティプラクティスを導入し、セキュリティチームとエンジニアリングチームのさらなる連携を求める。しかし、言うは易く行うは難しだ。実際のところ、開発、運用、セキュリティの各チームは サイロ化している。これらを1つの枠組みの下にまとめるのは 複雑な作業になる。
企業文化が組織全体の あらゆる事業領域に根付いているなか、DevSecOpsのプラクティスを導入するだけでは 組織全体の変革にはつながらない。リーダーはその代わりに、それぞれのチームに適した仕組みを構築し、チーム間のコラボレーション文化を育てなければならない。
DevSecOpsに万能な方法はない。
Adam氏は次のように述べている。「DevSecOpsを担う人材は、開発プロセスと方法論に精通していなければならない。セキュリティについても熟知し、役割を効果的に果たすには外交官であると同時にセキュリティの大使でなければならない。DevSecOpsは製品でも特定のテクノロジーの集合でもない。ソフトウェア開発プロセスは企業ごとに異なり、ソフトウェアも企業ごとに異なるため、人間が担う必要のある役割なのだ」
DevSecOpsがもたらすメリットにもかかわらず、 DevSecOpsの導入に依然として懐疑的な組織は多い。DevOpsと同様、DevSecOpsには考え方のパラダイムシフトが必要だ。企業は セキュリティはInfosecチームだけでなく、全員の責任だと認識する必要がある。 DevSecOpsの実装は容易ではないが、その変革は十分に価値がある。