In this article
シフトレフトテストを始めるための基本
シフトレフトの考え方でアプリケーションセキュリティテストを最新化
シフトレフトテストとは
シフトレフトテストとは?
シフトレフトテストとは、ソフトウェア開発ライフサイクル(SDLC)のできるだけ早い段階から、セキュリティを含むソフトウェアテストの実践を取り入れることです。これにより、開発チームと運用チームは、セキュアで高品質なソフトウェアを提供する責任をプロセスやツールを通じて共有できます。シフトレフトテストとシフトレフトツールを活用することで、組織はよくあるバグやセキュリティ上の問題によるボトルネックを防ぎ、ソフトウェアをより頻繁にリリースできます。
従来の継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインでは、テストは通常、8段階のサイクルのうち4番目に行われます。一方、シフトレフトテストでは、テストの多くの要素をビルドとコードの段階に組み込み、文字どおりセキュリティとバグの検出を前倒しします。

アジャイル開発でセキュリティをシフトレフトする方法
一般的なクラウド環境では、ソフトウェア開発にアジャイル手法が採用されることが多く、シフトレフトテストとよく適合します。アジャイル開発では、通常、小さなコード単位で機能を素早く反復します。その結果、ソフトウェアのデプロイ頻度も高くなります。高いデプロイ速度を維持するには、テストツールとその目的を、動的で急速に変化する環境に適応させる必要があります。
シフトレフトテストはアジャイル手法にうまく適合します。
テスト駆動開発を使って、シフトレフトテストをコーディング段階へさらに前倒しする組織もあります。開発するコードのテストを先に作成することで、テスト駆動開発ではコードをすぐに検証し、バグを防止できます。同様に、セキュリティテストも前倒しすれば、セキュリティ上の問題を防止できます。アプリケーションセキュリティツールは予防的に機能し、セキュアソフトウェア開発ライフサイクル(SDLC)全体をエンドツーエンドでカバーできる必要があります。
さらに、SDLC全体を予防的にスキャンするシフトレフトセキュリティツールは、大規模組織でよく見られるマルチクラウド環境にも適しています。プライベート、パブリック、ハイブリッドの各クラウドプラットフォームを組み合わせると、新たな複雑さが生まれます。柔軟性と拡張性を求めてマルチクラウドを導入する組織は増えていますが、こうした利点には重大なセキュリティ上の課題が伴います。プロセスの早い段階からセキュリティ自動化を統合し、たとえばIaCスキャンを導入すれば、開発チームとセキュリティチームはマルチクラウドの課題により適切に対応できます。
テストをさらに前倒しするもう1つの方法は、静的アプリケーションセキュリティテスト(SAST)ツールなどの静的解析ソリューションを利用することです。SASTツールは、パラメーターの型やインターフェースの誤った使用に関する問題を特定します。コーディング中にミスを表示するSASTスキャナーもあります。
セキュリティテストをシフトレフトする方法
シフトレフトテストの形は組織によって異なります。組織の規模、セキュリティ担当者の数、現在のプロセス、製品のリスクにさらされる度合いなどが、各チームの取り組み方に影響します。それでも、次のステップを踏めば、効果的なスタートを切れます。

ステップ1:セキュリティポリシーを導入する
セキュリティポリシーの導入は、シフトレフトテストのよい第一歩です。ポリシーによって作業開始前に境界を自動的かつ一貫して定め、セキュリティを含む効率的な開発プロセスに必要な重要情報を提供できます。
コーディング標準への合意も、セキュリティポリシーの一部にする必要があります。標準では、特定の状況でチームが使用する言語や構成を定めます。すべての開発者が共通認識を持つことが重要です。これにより、コードレビューを迅速化できるだけでなく、コードの品質も向上します。ベストプラクティスに従うポリシーを設ければ、開発者が不適切または安全でないコードを避けやすくなり、バグを減らせます。
ステップ2:SDLCの早い段階でテストを導入する
開発者のセキュアコーディングへの意識が高まったら、SDLCを見直すとよいでしょう。現在のプラクティスを把握することで、テストを前倒しするために実施できる小さなステップを特定できます。また、コードベースに適したツールも見つけられます。
考えられる方法の1つは、小さなコード単位で開発を進めるアジャイルSDLCを採用することです。さらに、各スプリントに開発とテストのフェーズを設けます。これにより、小さな機能ごとに適切なテストを実施できます。
大幅な変更を行ってシフトレフトテストへ移行するのが難しい組織もあります。その場合、開発チームは、開発する各機能に対してユニットテストを作成することに合意できます。
ステップ3:セキュリティ自動化を取り入れる
シフトレフトテストでは、セキュリティ上の問題をより頻繁にスキャンするため、開発チームはセキュリティ自動化ツールを積極的に活用する必要があります。セキュリティ自動化では、ソフトウェアベースのプロセスを用いて、アプリケーションやシステムに対する外部の脅威をプログラムで検出、調査、修正します。そのため、自動化によって開発ライフサイクルが短縮され、市場投入までの時間を削減できます。
セキュリティ自動化は開発ライフサイクルを短縮し、市場投入までの時間を削減します。
たとえば、プルリクエストに対するセキュリティゲートは、セキュリティ自動化を導入する早期の方法です。Gitベースの開発ワークフローの基盤としてよく使われるプルリクエストは、開発者がコードリポジトリに変更をコミットしてマージする際に、アプリケーション内で簡単に共同作業できる場を提供します。自動化ツールを使えば、コードをマージする前に、プルリクエストのセキュリティ上の問題やライセンスの問題をテストできます。
シフトレフトは単なる新しいツールではなく、文化の変革
セキュリティとテストのソリューションはシフトレフトテストを支えるうえで重要ですが、ツールはより大きな要素の一つにすぎません。シフトレフトテストには、大きな文化の変革も伴います。成功するには、従来のIT部門が担っていた責任を開発チームへ移し、フィードバックループを速めることも必要です。シフトレフトテストでは、アジャイルな方法で開発、運用、セキュリティチームの責任範囲を変えるため、新しいツールを導入するだけでは問題を解決できません。
シフトレフトテストでは、アジャイルな方法で開発、運用、セキュリティチームの責任範囲を変える必要があります。
たとえば、最近のESGの調査では、開発者に適切なトレーニングを提供せずに、アプリケーションのセキュリティテストに関する責任をより多く与えていることが分かりました。ほとんどの組織がセキュリティトレーニングを必須としていますが、調査回答者の35%は、開発チームの半数未満しか正式なトレーニングに参加していないと答えています。組織文化によるサポートが不十分だと、セキュリティツールへの投資効果も損なわれます。開発者が新しいテスト手法を学ぶ意欲を持てなければ、新しいセキュリティプラクティスは定着しません。後工程の時間を削減できることを示すセキュリティトレーニングや、使いやすく統合されたツールは、新たなセキュリティ責任への関心を高めるのに役立ちます。
シフトレフトテストの文化は、組織内のさまざまな職種の間に共感と共通の目標を育むことを目指します。開発、運用、セキュリティの各チームがより緊密に連携し、責任を共有することで、テストの負荷を分散する必要があります。この文化をDevSecOpsと呼ぶアナリストもいます。
シフトレフトテスト
以下に示す4種類のテストを実施すれば、開発者はテストを前倒しし始めることができます。いずれも、ソフトウェア開発におけるセキュリティと品質保証の工程で、摩擦を減らしながら最小限の負担で導入できます。
ユニットテスト:ユニットテストでは、単一のメソッド、関数、またはクラスの動作を検証します。通常、プロシージャ、インターフェース、クラスなど、テスト可能な最小のソフトウェア単位に対して実行します。ユニットテストに合格すれば、その単位をより大きなコードベースに安全に統合できます。入力を与えても正しい値が返されない場合は失敗と判定され、そのコードはそれ以上使用できません。
基本機能テスト:機能テストでは、ユニットテストのように単一の出力だけを見るのではなく、コードのすべての側面が正しく動作するかを評価します。たとえば、アプリケーションは正しく表示されるか、開発環境以外でも動作するか、ユーザーがアプリケーションをクラッシュさせずにデータを送信できるか、呼び出されるAPIが各機能をサポートしているかを確認します。こうしたテストを実施すれば、後工程のQAやセキュリティにかかる時間を削減できます。
コードレビュー:コードレビューでは、同僚による検証を通じてコーディングプロセスを加速できます。多くの開発者は自分のコードの誤りを見落としがちですが、第三者の視点があれば矛盾点を見つけられることがあります。短時間の手動による二重チェックでも、ソースコードの整理に大きな効果があります。レビューするコードにセキュリティ上の問題がないか確認することも大切です。
静的コード解析:静的コード解析では、自動化ツールを使用して、コードを実行せずにエラーをスキャンします。コードの構造を調べ、標準的な基準を満たしているかを確認します。静的解析では、次のような問題をスキャンします。
一般的なセキュリティ脆弱性(SAST)
プログラミングエラー
コーディング標準への違反
構文エラーや異常
未定義の値
静的コード解析ツールにはさまざまなものがありますが、ソリューションは本番環境へ移行する前に、プロジェクト内の未テストコードをすべてスキャンできる必要があります。静的コードアナライザーは、事前に定められた標準やルールに照らしてコードを確認し、準拠状況を判定します。このスキャンにより、既知のセキュリティ問題がセキュリティ工程でCI/CDパイプラインを妨げないようにできます。
シフトレフトセキュリティの重要性
シフトレフトセキュリティにより、クラウドテクノロジーがもたらす新たなリスクに対処しながら、セキュリティをアジャイル開発手法のスピードに適応させられます。
アジャイル手法とDevOpsのプラクティスは、ソフトウェアの開発と提供の方法を変えています。コードの作成から顧客への価値提供、市場からの学びと適応までのサイクルが加速しています。権限を与えられた開発チームは、かつてない速さで継続的にソフトウェアをリリースし、仲介を挟まず自律的にテクノロジーや実装を決定します。
組織の他の部門が進化する一方で、セキュリティチームへの要求は高まり、ボトルネックになりがちです。クラウド以前の低速な時代を前提に設計された従来のアプリケーションセキュリティツールやプラクティスでは、セキュリティチームが高品質なアプリケーションの提供を妨げる重要な工程になってしまいます。
シフトレフトセキュリティにより、開発チームは自分たちが構築するものを、自分たちのペースでセキュリティ保護できます。
こうした課題に対処するため、企業はセキュリティプラクティスを変え、セキュリティをシフトレフトし始めました。組織全体でセキュリティ責任を共有すれば、開発チームは自分たちが構築するものを自分たちのペースで保護できると同時に、開発担当者とセキュリティ担当者の連携も強化できます。これにより、セキュリティチームは支援部門として専門知識やツールを提供し、開発者の自律性を高めながら、ビジネスに求められるレベルの監督を維持できます。
シフトレフトテストの5つのメリット
テストを前倒しすることには、次のようなメリットがあります。
迅速なリリース:テストをパイプラインに組み込むことで、ソフトウェアの提供速度が向上します。バグをデプロイ前に特定して修正できるため、開発者は機能のリリースに集中できます。
セキュリティ態勢の強化:設計段階からセキュリティを機能の一部として扱います。責任共有モデルにより、構築、デプロイから本番ワークロードの保護まで、セキュリティを緊密に統合できます。
コストの削減:デプロイ前に脆弱性やバグを特定することで、リスクと運用コストを大幅に削減できます。
セキュリティ統合の向上と迅速化:開発後にセキュリティ制御を後付けする必要がなくなるため、セキュアなソフトウェアを提供するためのコストと時間を削減できます。
ビジネス全体の成功を促進:開発したソフトウェアのセキュリティに対する信頼を高め、新しいテクノロジーを活用することで、収益の成長と事業の拡大につながります。
ご覧のとおり、シフトレフトテストには多くのメリットがあります。こうしたメリットは、アジャイル手法にも当てはまると言えるでしょう。
シフトレフトテストを導入して、より大きな成果を実現する
今日のアジャイルな開発プロセスとソフトウェアコンポーネントの複雑化を背景に、多くの企業がテストを前倒しし、市場の変化にすばやく対応できるようにしています。また、シフトレフトテストによって、より多くのリソースが必要となるCI/CDパイプライン後半での問題修正コストを削減できます。早い段階でテストを行えば、リスクへの曝露を抑え、ソフトウェアの完全性を高めて顧客の期待に応えられるため、企業の評判向上と収益拡大にもつながります。