本文の内容は、2022年5月20日にAnna Belakが投稿したブログ(https://sysdig.com/blog/shift-left-secure-software-delivery/)を元に日本語に翻訳・再構成した内容となっております。
私たちは、加速された消費と配送の時代に生きています。無限にあると思われる商品を、何千キロも離れたところから2日以内に無料で届けることができる。ほんの数秒で、映画、音楽、ゲーム、教育、そして医療まで、無限の多様なサービスをオンラインで利用することができます。現代のこうした驚異的なスピードは、ソフトウェア開発、配信、運用における比較的最近の進歩によってもたらされたものです。
このような進歩の中には、DevOpsの実践、継続的インテグレーションと継続的デプロイメント(CI/CD)パイプラインの採用、インフラのプロビジョニングからテストと品質保証までの自動化などが含まれます。これらの進歩により、開発者はソフトウェアをより迅速に提供し、設計と開発の早い段階でセキュリティについて考えることができるため、より安全なソフトウェアを出荷できるようになります。
シフトレフトとは何か?
「シフトレフトは、従来のウォーターフォール型開発の落とし穴に対処するための哲学です。ウォーターフォールでは、多くのITチームが何週間、何ヶ月にもわたって作業を行い、最終的に大規模で美しいソフトウェアをリリースします。もちろん、人々は間違いを犯し、物事を忘れ、お互いにうまくコミュニケーションできないかもしれません。アプリケーションの要素がうまく相互運用できないことが判明すると、チームは必死になって可能なものは修正し、不可能なものは切り捨てようとしますが、そこには非常に厳しい期限が待ち構えています。製品は必然的に遅れて出荷され、まだどこか壊れており、セキュリティは後付けされたままです。シフトレフトとは、設計・開発の早い段階でセキュリティプロセスやツールを導入することです。セキュリティは、機能性や品質と同じくらい重要であるべきです。なぜなら、重要な依存関係の上に何十もの機能をビルドした後で、ビルドがフェイルする脆弱性を発見することは、何もビルドしない前に発見されるよりもずっと苦痛を伴うことだからです。問題を解決するには、新しいバージョンの依存関係を使用するのと同じくらい簡単かもしれませんが、今度は、あなたがカスタマイズしたすべてがまだ意図したとおりに動作することを確認する必要があります。
アプリケーション・セキュリティ・テスト(AST)には、システム開発ライフサイクル(SDLC)の早期にコードレベルの問題を検出することを目的とし た、いくつかの形式があります。シフトレフトするときの AST の 2 つの一般的なタイプは、ソフトウェア構成分析(SCA)と静的アプリケーション・セキュリティ・テスト(SAST)です。簡単に言うと SAST は、開発者が書いたカスタムコードをテストし、SCA は、開発者がコードに含める依存性をテストします。
最新のアプリケーションのセキュリティを評価するためには、両方のテストタイプが必要です。もし、あなたが、シフトレフトとは、問題を発見するだけでなく、問題を修正することであると考えるならば、開発者にやさしいツールが必要です。それが何を意味するかは、組織内の開発者のワークフローによって主観的になり得ますが、少なくとも、開発者は、セルフサービス、既存の CI/CD ツールチェーンへのシームレスな統合、および、実行可能な結果を必要としています。ほとんどの開発者はセキュリティの専門家ではないため、セキュリティに関する知見は、開発者に自分で探させるのではなく、最もリスクの高い問題に優先順位を付け、問題の発生源を示し、文脈に応じた修正を提供する必要があります。
ASTをランタイムインテリジェンスで補強する
多くの初期テスト(特にセキュリティテスト)を行う際の1つの課題は、テストをすればするほど、より多くの発見があることです。残念ながら、結果の一部は偽陽性であり、他は比較的低いリスクをもたらす真陽性である可能性があります。高度なセキュリティ専門知識を持つ開発チームは、発見された不具合を選別し、深刻で対処可能な不具合に優先順位をつける必要がありますが、そのような専門家は不足しており、この種の作業は退屈です。セキュリティテストの落とし穴に対処することは、単純ではありません。それぞれの発見に関するリスクを推論し始めるために、できるだけ多くの文脈的情報を収集することが必要です。
脆弱性のリスクについて推論することは、簡単ではありません。私たちは、対処を決定するために問題の重要度をランク付けしようとします。この問題を2つの部分に分けることができます。
脆弱性自体のコンテキストには、CVSSスコアのような重大性の指標と、エクスプロイトが公開されているかどうか、攻撃が野放しになっているかどうかといった脅威のインテリジェンスが含まれます。この情報は、スキャンツールや、NVD、MITRE、CISAなどのサードパーティソースから容易に入手できます。
しかし、被害を受けた資産の環境コンテキストは、アプリケーションとインフラストラクチャーに固有のものです。この部分を実際に埋めることができるのは、お客様の組織だけです。例えば、影響を受けるアプリケーションは、緩和的なセキュリティコントロールで保護されていますか?インターネットに公開されていますか?脆弱なコンポーネントは全く使用されていないのでしょうか?これは、アプリケーションが意図された本番環境で実行されるまで、知ることは難しいか不可能です。
シフトレフトは、現代のサイバーセキュリティを前進させる方法ですが、ランタイムインテリジェンスを取り入れることで、このアプローチは大幅に強化されます。これにより、最初に修正すべき内容に優先順位をつけることができ、摩擦がなくなり、多数のITチームのサイクルが短縮され、組織の脆弱性リスクが低減されます。
リリース後はどうする?
シフトレフトの目的は、安全なソフトウェアをより早くリリースすることですが、次に何が起こるでしょうか?あなたの完璧で美しいコードは、その見事な機能セットと印象的なパフォーマンスでお客様を喜ばせています。ところが、週末直前の、何もしていない金曜日の午後に、予測しようとしてもできなかったような恐ろしいゼロデイに見舞われることになります。このような事態が発生した場合、環境内で実行されている影響を受けるすべてのワークロードを迅速に特定し、優先順位を付けて修復する必要があります。パッチが入手できない場合や導入に時間がかかりすぎる場合は、直ちにパッチを適用するためにこれらのワークロードをオフラインにしたり、ネットワークアクセスを制限したり、その他の方法で問題を軽減することが必要になる場合があります。実際のところ、シフトレフトは成功するセキュリティプログラムの一部分に過ぎず、シフトライトの本番環境に対する保護、検出、修復活動も組織の安全と成功にとって極めて重要であるということです。
まとめ
シフトレフトによりすべてのセキュリティ問題が解決されるわけではありませんが、信頼性が高く、高速で安全なソフトウェア配信パイプラインの基盤が構築されます。 セキュリティチームと開発チームは、多くの場合、大量のノイズといくつかの有用なシグナルに悩まされています。 彼らが本当に必要としているのは、リスクについて適切な決定を下すための一貫した規範的な方法です。 ランタイムシグナルを含む、スタックの複数のレイヤーを介して複数のソースからコンテキストを収集すると、DevSecOpsチームがツールから受け取り、対処する必要のある情報の品質が大幅に向上します。Snykの製品ディレクターであるEffiGoldsteinがこの記事を共同執筆しました。 詳細については、SysdigとSnykの2022年のコンテナセキュリティトレンド:エキスパートパネルライブストリームをご覧ください。
日本でのSnykとSysigとの共同ウェビナー資料(2022年7月27日開催)では日本語で上記内容に触れています。こちらでダウンロード