シフトレフトの先にあるアプリケーション開発のセキュリティとは
サイバー攻撃は私たちの日常に大きなダメージを与えることがあります。2017年のWannaCryによるインシデント、2021年の石油パイプライン企業へのサイバー攻撃は、ITとは無縁な人にまでサイバー攻撃の脅威を知らしめました。いまや、多くの企業や組織はITなしには成り立ちません。あらゆる層でITの防御を固めていく必要があります。
ITプロフェッショナルの多くにとって、2020年末に起きたソーラーウィンズへのサイバー攻撃は衝撃的でした。ハッカーにより正規のソフトウェアにマルウェアが仕込まれてしまい、かつてないほど被害が広がりました。私たちはソフトウェアのサプライチェーンにも目を配り、コードそのものだけではなくアプリケーションも保護することの必要性について改めて考えさせられました。
今では多くの企業でDevOpsが理解され、DevOpsのためのプラットフォーム、データストアの統合も進んでいます。ソフトウェア開発ライフサイクル(SDLC)全体でセキュリティに目を光らせる必要性も理解され、DevSecOpsという言葉もよく目にするようになってきました。
ソフトウェア開発においては、セキュリティを後から組み込むのではなく、できるだけ早い段階から組み込むようにする動きも出てきています。これが「シフトレフト」です。しかし、セキュリティの組み込みを前倒しするシフトレフトへの旅はまだ始まったばかりです。セキュリティはDevOpsプラットフォームの一部である必要があります。ソフトウェアを今まで以上にサイバー攻撃から保護するには何ができるでしょうか。
コード化が進む中にもセキュリティを組み込む
DevOpsはDevとOpsのギャップを埋め、協力しあう仲間としてマインドセットや文化を変え、ソフトウェアのライフサイクルを早めることに貢献してきました。開発やデプロイに必要な環境をすぐに構築できるようにと、IaC(Infrastructure-as-Code)としてインフラのコード化も進みました。IaCは構成に加えられた変更履歴の追跡を可能としました。
ただし、IaCはクラウドサービス、コンテナ、オーケストレーター、ソフトウェアのビルドと展開ツールなど、悪用される可能性が多数あるところが課題です。全体を見渡して適切な構成であると判断することは難しくなっています。
また、DevOpsの自動化によりポリシーを一元的に管理し、あらゆるプロジェクトに同じポリシーを適用できるため、コードの一貫性を保つことができます。属人的な判断やミスを排除することにも役立ちます。しかし、悪意ある構成の一斉配布を狙う攻撃者にとっては、チャンスにもなりかねません。
IaCを用いると、コードおよびそれに依存するインフラストラクチャは瞬時に本番環境にプッシュされてしまいます。そのため、IaC変更に伴うセキュリティチェックも自動化を進めていく必要があります。結果的にセキュリティポリシーがSecurity-as-Codeとなるのです。
Security-as-Codeを実現するための3つのポイント
では、セキュリティの自動化やSecurity-as-Codeを実現するにはどうしたらいいでしょうか。重要なポイントは3つあります。
より安全なコードを提供する
セキュリティテストを自動化し、CIパイプライン内でコードを書きながらテストができるようにします。ここでは、使用するスキャンや適用範囲などの実行ポリシーを定めておきます。
理想としては、コードをコミットするたびに最低でもSAST(静的アプリケーション・セキュリティ・テスト)、DAST(動的アプリケーション・セキュリティ・テスト)、依存関係、コンテナのスキャンを実行することが望ましいです。続いて、脆弱性が特定された時に実行するアクションのポリシーも設定しておきます。
アプリ周囲のインフラストラクチャを保護する
ここでは構成に誤りがないかをテストしてから、予期しない変更が起きていないかを監視する必要があります。次に挙げる側面をすべて考慮するようにしてください。
- コンテナ:内部にあるライブラリや依存関係
- オーケストレーター(例:Kubernates):コンテナを実行する方法、場所、タイミングを設定し、どのアプリが他のどのアプリと通信できるか、それぞれのアプリが消費できるコンピューティングリソースとストレージリソースなど
- クラウドサービス:仮想マシンとコンテナをホストする環境
- IaC(API、パッケージ、Helmチャート、Terraformなど):マイクロサービス化が進むにつれ、より多くのAPIを使用する。理想的には監査のために全てのAPIコールをキャプチャ、保存、表示し、挙動をテストできるようにする必要がある
ソフトウェアファクトリーを保護する
悪意ある介入からCIパイプライン(工場なら組み立てラインにあたる)を保護する必要があります。人間、マシン、APIのアクセス管理はもちろん、DevOpsツールチェーン、上述したアプリ周囲のインフラストラクチャも含めてゼロトラスト原則を適用します。
自動化されたCI/CDにはアクセス管理だけではなく、職務の分離、承認のマージなど、コンプライアンスのための共通制御を適用します。これは監査の簡素化にも役立ちます。
ソフトウェアファクトリーの隅々までセキュリティを
昨今のアプリケーションには、コードのテストを早めるためのシフトレフトだけではなく、最新のアプリケーション開発環境向けのセキュリティ手法が必要になります。
開発サイクルが加速していくにつれ、コードの保護はますます重要になるのです。こうした手法を取り入れることで、これまでサイロ化していた環境では実現しえなかった開発のスピード、リスクの可視化、制御など新たなメリットも生まれます。
ソフトウェアファクトリーにエンド・ツー・エンドでセキュリティを組み込むことで、あらゆる脅威に備えましょう。