ソフトウェア環境

導入:ソフトウェア環境(SE)

ソフトウェア環境実践法では、OSやプラットフォームのパッチ適用(クラウドを含む)、Webアプリケーション・ファイアウォール、インストールおよび構成のドキュメンテーション、コンテナ化、オーケストレーション、アプリケーションの監視、変更管理、およびコード・サイニングを行います。

ソフトウェア環境レベル1

[SE1.1: 66] アプリケーション入力監視を使用している。

組織は、攻撃を検知するために、実行するソフトウェアへの入力を監視します。Webコードの場合は、Webアプリケーション・ファイアウォール(WAF)を使用できますが、他の種類のソフトウェアでは他の方法を使用する必要がある場合が多くなります。SSGは、監視システムの維持と入力監視を担当できますが、インシデント対応はこのアクティビティには含まれません。Webアプリケーションの場合、ログを定期的に監視して対処する従業員がいれば、WAFによるログ・ファイルへの書き込みが効果的です。その他のソフトウェアおよびテクノロジ・スタック(モバイルやIoTなど)では、独自の入力監視ソリューションが必要になる可能性があります。サーバーレスおよびコンテナ型ソフトウェアでは、適切なログと監視データを取得するためにベンダー・ソフトウェアとのやり取りが必要になる場合があります。クラウド展開やPaaS(Platform as a Service)の利用により、監視、収集、集約の手法がさらに難しくなる可能性があります。

[SE1.2: 111] ホストおよびネットワーク・セキュリティの基本事項が実施されていることを確認する。

組織は、ホストおよびネットワーク・セキュリティの基本事項が実施されていることを確認することによって、データセンターおよびネットワーク全体にわたるソフトウェア・セキュリティの確固とした基盤を提供します。ネットワーク境界の進化、接続性とデータ共有の増加、ベンダーとの相互依存性の高まり(コンテンツ配信、ロード・バランシング、コンテンツ検査サービスなど)により、基本を正しく理解することさえ難しくなっています。ネットワーク・セキュリティを実施する前にソフトウェア・セキュリティを設定するのは、本末転倒です。

ソフトウェア環境レベル2

[SE2.2: 36] インストール・ガイドを発行する。

SSDLは、ソフトウェア・セキュリティをインストールおよび構成する導入チームやオペレーターのために、インストール・ガイドまたは、コンテナなどが明確に記述された構成を作成する必要があります。デプロイメントのセキュリティを保証するために特別な手順が必要な場合は、手順をインストール・ガイドで説明するか、自動化されたデプロイ中に明示的に表示する必要があります。このガイドではCOTSおよびベンダー・コンポーネントについても説明する必要があります。場合によっては、ソフトウェアを購入した顧客にインストール・ガイドを配布します。自動化されたデプロイはすべて、機械だけでなく、人間によってもよく理解できるようになっている必要があります。そのため、インフラストラクチャのスクリプト(Terraform、Helm、Ansible、Chefなど)のインストール・ガイドとしての役割が増しています。

[SE2.4: 27] コード・サイニングを使用している。

組織は、信頼済みの複数の境界にわたって、ソフトウェアを公開するために、コード・サイニングを使用します。コード・サイニングは、市販化されるアプリケーションやシック・クライアントなどの、組織の統制を離れるソフトウェアの整合性を保護する上で特に有用です。クラウド環境では、ベンダーのレジストリまたは社内でホストされたレジストリを通じてモバイル・アプリケーション、コンテナ、およびマシンイメージをパッケージ化・配布する場合、コード署名を活用することが重要になる場合があります。一部モバイル・プラットフォームでアプリケーション・コードに署名する必要があったとしても、コード・サイニングを組織的に使用しているとはみなされません。

ソフトウェア環境レベル3

[SE3.2: 13] コード保護を使用している。

組織は、知的財産を保護し、開発の悪用を困難にするために、ソフトウェアのリバース・エンジニアリングの防止対策(改ざん防止、デバッグ保護、アンチパイラシー機能、ランタイムインテグリティなど)を実施します。これは、広範囲に配布されるモバイル・アプリケーションの場合に特に重要です。難読化技術を、運用環境のビルトおよびリリース・プロセスの一貫として適用できるソフトウェアもあります。また、アプリケーションが展開後に動的に再生成される場合に、ソフトウェア・デファインド・ネットワーク層またはソフトウェア・オーケストレーション層で保護を適用できる場合もあります。プラットフォームによっては、Data Execution Prevention (DEP)、Safe Structured Error Handling (SafeSEH)、Address Space Layout Randomization (ASLR)などを適用すると、開発のエクスプロイトをより困難にするための良い足がかりになります。

[SE3.3: 4] アプリケーションの動作監視および診断を使用する。

組織は、運用環境のソフトウェアを監視し、誤動作や攻撃の兆候を検出します。このアクティビティは、悪意のある動作の兆候などのソフトウェア固有の問題を検出するためのホストおよびネットワーク・モニタリング以上のものです。アプリケーション・レベルでの侵入の検知や異常検出システムは、アプリケーションとオペレーティング・システムの間の交信(システム呼び出しによる)、またはアプリケーションが消費、操作、またはアプリケーションから送信する種類のデータに注目します。いずれにせよ、アプリケーションが想定どおりに動作していないことを示す兆候はソフトウェアとその環境に固有なため、単一の共通ソリューションではおそらく満足な結果をもたらさないでしょう。環境の種類によっては(PaaSなど)、このデータと関連する予測分析の一部がベンダーから取得される場合があります。

[SE3.4: 14] アプリケーション・コンテナを使用している。

組織は、アプリケーション・コンテナを使用して、ソフトウェア・セキュリティの目標を支援します。その目標としては、導入が簡単なこと、アプリケーションとその依存関係をより緊密に結合できること、イミュータビリティ、インテグリティ([SE2.4 コード・サイニングを使用している]を参照)、仮想マシン上にOSを完全にデプロイするオーバーヘッドなしに隔離できることなどが考えられます。コンテナを使用することで、セキュリティ統制を簡単に適用でき、整合性のある方法で更新できます。コンテナは開発環境やテスト環境でも役立ちますが、実稼働環境での利用によって真価を発揮します。

[SE3.5: 5] コンテナおよび仮想化環境のオーケストレーションを使用する。

組織は、自動化を用いてサービス、コンテナ、仮想マシンの導入を統制のとれた形でスケール変更します。オーケストレーションのプロセスでは、組み込みおよびアドオンのセキュリティ・コントロールを利用することで、導入されたワークロードが規定のセキュリティ要件を確実に満たすようにします。セキュリティ動作を全体的に設定することにより、必要が生じたときに迅速な変更が可能になります。オーケストレーション・プラットフォーム自体も運用環境に含まれるソフトウェアであるため、セキュリティのパッチ適用と構成が必要です。つまり、Kubernetesを使用する場合は、必ずKubernetesのパッチを適用してください。

[SE3.6: 3] 運用部品表を用いてアプリケーションのインベントリを向上させる。

健全な企業経営にとって、運用環境におけるアプリケーションとその保存場所の一覧は不可欠な情報です([CMVM2.3 アプリケーションの運用環境インベントリを作成する]を参照)。また、運用環境のすべてのソフトウェアのコンポーネント、依存関係、コンフィグレーション、外部サービスなどの詳細情報を記載したマニフェストがあれば、組織のすべてのセキュリティ体制の強化に有効です。これはつまり、攻撃者や攻撃の進化に応じて機敏に対応するために、コンプライアンス要件は変更され、パッチの適用対象となる項目数も膨大に増えていくことを意味します。プライベート・データセンターにあるか、クラウド上にあるか、市販製品であるかを問わず、実行中のソフトウェアのすべてのコンポーネントの所在を把握していれば、不幸な事態に見舞われた場合に速やかに対応できます。コンテナ・セキュリティ・ソリューションの組織的な使用を適切に行えば、インベントリ作業を大幅に簡素化できます。

[SE3.7: 9] クラウド・セキュリティの基本事項を確認する。

組織は、ホストおよびネットワーク・セキュリティの基本事項が実施されていることを確認するとともに、クラウド環境についてもその基本要件が満たされていることを確認する必要があります。クラウドベースの仮想資産には、プライベート・データセンターの場合とは異なるアタックサーフェス(クラウドベースのストレージなど)をもたらす一般向けのサービスが存在することが多いため、資産のセキュリティ構成と管理をカスタマイズする必要があります。ソフトウェア・デファインドがますます進展する中、SSGは、全員がプライベート・データセンターでケーブルと物理ハードウェアを使用して構築する場合に匹敵するクラウドベースの機能とコントロール(クラウド・プロバイダーの管理コンソールなどに対して構築できるものもある)を明示的に実装するためのサポートを行う必要があります。クラウド・プロバイダーの責任共有セキュリティ・モデルに関する詳細な知識は必須です。