シフトレフトセキュリティ導入時のベストプラクティス

[**Snyk**](https://snyk.io/jp) (スニーク) の提供するセキュリティ基礎シリーズ DevSecOps 編より [**Shift Left Security: Best Practices for Getting Started**](https://snyk.io/learn/shift-left-security/) を翻訳しました。2022年2月17日に Developers Summit で行った @ToshiAizawa のセッション[『Snyk - デベロッパーファーストで実現するDevSecOps』](https://event.shoeisha.jp/devsumi/20220217/session/3661/)の後に読んでいただきたい内容の記事です。セッション参加者も、そうでない方も、ぜひご一読ください。

**読了時間：9分**

# シフトレフトセキュリティ導入時のベストプラクティス

今日、多数の企業がテクノロジーとソフトウェアを、業界内での差別化要因として位置づけています。そのため、ペースの速い開発はこれまでになく重要になりました。[ソフトウェアセキュリティ](https://snyk.io/learn/software-security/)の脆弱性を放置するのは大きな損失であり、組織を不必要なリスクにさらすことになります。だから最初からセキュアに開発することが大切で、これはシフトレフトセキュリティとして知られています。

しかし、セキュリティのシフトレフトを成功させるためには、修正すべき脆弱性のリストを開発者に伝えればよいのでしょうか。セキュリティ担当チーム向けのツールを開発者に渡せば十分でしょうか。そうではありません。開発者には、開発者向けのツールが必要です。セキュリティ担当チームからの継続的なサポートも不可欠です。

そこで、シフトレフトセキュリティについてよく検討することにしましょう。シフトレフトせずセキュリティを**右側** (下流工程) にとどめておく危険性、また、シフトレフトに取り組むためのベストプラクティスやツール群についてもお伝えします。


## シフトレフトセキュリティとは何か

シフトレフトセキュリティとは、[ソフトウェア開発ライフサイクル (SDLC: software development lifecycle)](https://snyk.io/learn/sdlc-software-development-life-cycle/) における開発フェーズの最初期にセキュリティチェックを行うこと。組織内でセキュリティに対する責任を共有することで、開発チームは開発ペースを変えることなく、安全なコードを書けるようになります。同時に、開発とセキュリティの両チーム間で、より大きな協力関係が成立します。ここではセキュリティチームは支援を提供する立場。自律的な開発を実現するために、専門知識とツールを開発チームに提供しながら、組織にとって不可欠なセキュリティの管理も担い続けます。


## シフトレフトセキュリティの重要性

シフトレフトセキュリティにより、アジャイル開発手法による迅速な開発のスピード低下を避けることができます。同時に、[クラウド技術](https://snyk.io/learn/cloud-native-security-for-cloud-native-applications/)の普及により生まれた新たなリスクへの対処も可能とします。

アジャイル手法と [DevOps 実践](https://snyk.io/learn/devops-tools/)により、ソフトウェアの開発とリリースは大きく様変わりしました。コードを書いて、新機能をリリースし、ユーザーからのフィードバックを受け取り次の手を打つというサイクルが加速しました。パワーアップした開発チームは、かつてないスピードで継続的なソフトウェア開発とリリースを行っています。技術や実装に関する意思決定は、他のチームに頼ることなく自律的なものになりました。

他のチームが進化する中で、セキュリティ担当チームは増大した要求を抱え、加速した開発サイクルのボトルネックとなる傾向にあります。従来からのアプリケーションセキュリティ用のツールや手法は、クラウド以前からの遅いペースでの開発が前提の設計です。アプリケーション開発のクリティカルパス上に、セキュリティ担当チームが位置してしまうのです。その結果として、新しいプロセスにおけるセキュリティを守る役割は開発者へとシフトすることになりました。

**図1: シフトレフトセキュリティ 5つのメリット** (迅速な開発、セキュリティ向上、コスト削減、セキュリティ統合、ビジネス的成功)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/a8ec8d68-8811-3d7e-f44a-675bdd7e0723.png)


## セキュリティを右側にとどめることの危険性

オープンソースソフトウェアの利用は、あらゆるソフトウェア開発現場で行われています。開発のエコシステムにおいては開発効率を上げるため、サードパーティーのオープンソースライブラリやパッケージへの依存は増す一方です。これらのオープンソースパッケージには、脆弱性が含まれることがあり、チェックしないままではこれらの脆弱性がビルドに影響を及ぼしてしまいます。多くの組織がオープンソースソフトウェアがセキュリティに与える影響を認識するようになりました。

どのような技術にも言えることですが、コンテナやインフラストラクチャ・アズ・コード (IaC: Infrastructure as Code) にもそれぞれ課題があり、セキュリティ面での脅威が認知されています。オープンソースのコミュニティはコンテナイメージや Kubernetes の設定を作成して共有するため、それらに含まれる脆弱性が運用環境にも混入していきます。

セキュリティは、自社で開発したカスタムコードの脆弱性対策だけでは済まなくなりました。現代のクラウドネイティブアプリケーションにおけるセキュリティとは、カスタムコード、依存関係、推移的 (間接的) 依存関係、コンテナイメージ、IaC の設定、これらすべてに関わる問題です。セキュリティーを右側にとどめておく選択肢は、すでに過去のものとなっています。リリースの直前までセキュリティレビューを先延ばしにすることは、大幅な遅れか、または、脆弱性を見過ごすことを意味するのです。


## シフトレフトテストとは何か

[シフトレフトテスト](https://snyk.io/learn/shift-left-testing/)とは、セキュリティを含めたソフトウェアテストを、SDLC 全体に統合して最初期から実行すること。その結果として、開発と運用の両チームがプロセスとツールを通じて責任を共有し、セキュアで高品質なソフトウェアのリリースを実現します。シフトレフトテストと、シフトレフトのツール群により、よくあるバグとセキュリティ問題のボトルネックを防ぎ、頻繁なソフトウェアリリースを可能にするのです。

**図2: シフトレフトテストを導入するための3段階** (1:セキュリティポリシーの策定、2:SDLC初期のテスト実施、3:セキュリティの自動化)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89952/4116b5f2-b712-4e8f-c126-a2dda9f9eb91.png)


## シフトレフトセキュリティのツールとは何か

既知の脆弱性を検出し、その結果を深刻度で分類するのがシフトレフトセキュリティのツールの役割です。傾向やパターンを把握するためにも使われます。システム侵害は多くの場合、アプリケーションレイヤーへの攻撃を通じて行われます。だからシフトレフトセキュリティのツールは、[アプリケーションレイヤーのセキュリティ](https://snyk.io/learn/application-security/)を強化するのに欠かせません。これらのツールは、ビルドやリリースのフェーズで、開発者が脆弱性 (とコード・エラー) のテストするのに使われます。新しい脆弱性が頻繁に表面化するので、シフトレフトセキュリティのツール利用には数多くの利点があります。


## シフトレフトセキュリティでよく使われるツール群

シフトレフトセキュリティを実現するためのツール群のうち、よく使われるもの5つを紹介します。

* [**静的アプリケーションセキュリティテスト (SAST: Static Application Security Testing):**](https://snyk.io/learn/application-security/static-application-security-testing/) SAST とは保存されたソースコードに対して構造的なテストを行うこと。脆弱性の原因となる問題を検出し、レポートを生成します。

* [**動的アプリケーションセキュリティテスト (DAST: Dynamic Application Security Testing):**](https://snyk.io/learn/application-security/dast-dynamic-application-security-testing/) DAST とは仕様に注目したテスト。動作中のアプリケーションに対して実行し、内部的な動作の詳細を必要としません。DAST ツールは[ファジング](https://owasp.org/www-community/Fuzzing)と呼ばれる手法により、リクエスト、レスポンス、インターフェース、スクリプト、インジェクション、認証、セッションを通じて問題を見つけ出し、動作中のコードを分析します。

* [**ソフトウェア構成分析 (SCA: Software Composition Analysis):**](https://snyk.io/blog/what-is-software-composition-analysis-sca-and-does-my-company-need-it/) SCA では外部から参照しているソフトウェア構成部品とライブラリをすべて分析します。既知の脆弱性を検出し、修正用パッチやアップデートの有無を報告します。

* [**インタラクティブアプリケーションセキュリティテスト (IAST: Interactive Application Security Testing):**](https://snyk.io/learn/application-security/iast-interactive-application-security-testing/) 静的と動的な手法を組み合わせたハイブリッドな IAST ツールは、事前に定義されたテストケースに基づいて、アプリケーションとデータフローのテストを行います。結果によっては、追加のテストケースを勧めることがあります。

* **アプリケーションセキュリティテスト as a Service (ASTaaS: Application Security Testing as a Service):** この手法では、アプリケーションに対する全テストを外部ベンダーへ委託します。ASTaaS は通常、ペネトレーションテストと API 評価を含めて、静的・動的セキュリティテストを組み合わせて実施します。



## シフトレフトセキュリティのベストプラクティス

セキュリティをシフトレフトするためのベストプラクティスを、以下にまとめます。

* **シフトレフトセキュリティのポリシーを定める:** シフトレフトセキュリティへの第一歩として、[セキュリティポリシー](https://snyk.io/learn/security-policies/)を定めることをお勧めします。ポリシーのおかげで、開発を通じて取り組むべき事柄が終始一貫して定まるため、セキュリティを含めた効率的な開発プロセスを実現することができます。

* **ソフトウェア開発の過程と方法を評価する:** 開発者が[セキュアコーディング手法](https://snyk.io/learn/secure-coding-practices/)への理解を深めるのに合わせて、ソフトウェア開発ライフサイクル (SDLC) について再評価すると効果的です。ソフトウェア開発の過程と方法を把握することで、テスト実行のより早いタイミングへのシフトが可能になります。加えて、コードベースに合わせた最適なツールが選べるようになります。

* **セキュリティ自動化に取り組む:** 開発チームはセキュリティの自動化ツールを採用すべきです。セキュリティの自動化とは、ソフトウェアに基づくプロセスにより、アプリケーションとシステムに対する脅威をプログラム的に検知・調査・修正することです。自動化をすすめることによって、開発のライフサイクルの加速と、リリース時間の短縮を実現します。

* **コード作成と並行してセキュリティの修正を行う:** 開発プロセスの早い段階へセキュリティを組み込み、すばやいフィードバックを提供することが理想的です。こうすることで、開発者はコードを書きながら直ちにフィードバックを受け取り、すぐに修正を実施することができます。

* **ビジビリティを文化の一部にする:** シフトレフトセキュリティの目的は、リリース時もその後もコードをセキュアに保つことです。そのためには、アプリケーションセキュリティへのビジビリティ (視認性) を常時、確保していることが大切です。ビジビリティがあるからこそ、必要なときにソフトウェアのアップデートをリリースすることを通じて、脆弱性への対策が実施できるのです。



## シフトレフトセキュリティの導入

シフトレフトセキュリティは [DevSecOps](https://snyk.io/series/devsecops/) 戦略を実行するための土台となりますが、それが本当に効果を生むために必要なことがあります。それは、開発者に対する強力なサポートです。従来の開発ワークフローへセキュリティをスムーズに統合すること。セキュリティ担当チームから適度な監督を受けること。これらが開発者にとっては必要不可欠です。
だから、開発者が[クラウドネイティブセキュリティ](https://snyk.io/learn/cloud-security-challenges-and-best-practices/)に貢献するには、従来の運用向けセキュリティツールではなく、開発者向けのツールが必須となります。


:::note warn
【おことわり】 翻訳には十分な注意を払っていますが、個人として翻訳したもので、内容についての責任は負いません。原文や訳文にある誤りの指摘や、ご質問は大歓迎です。
最終更新: 2022年2月21日
:::


:::note info
Snyk (スニーク) は Free Plan (フリープラン) にサインアップして無料でずっとご利用いただけます。
[**Free Plan (フリープラン) にサインアップする**](https://snyk.co/qiita)
:::