V14: 構成

管理目標

検証対象のアプリケーションが以下を備えていることを確認します。

  • セキュアで、再現性があり、自動化されたビルド環境。

  • 古くなったコンポーネントやセキュアでないコンポーネントがアプリケーションに含まれないようにするための、堅牢なサードパーティライブラリ、依存関係、構成管理。

箱から出してすぐのアプリケーションの構成はインターネット上で安全であるべきです。つまり、そのままで安全な構成であるということです。

V14.1 ビルドとデプロイ

ビルドパイプラインはリピート可能なセキュリティの基盤です。セキュアではないものが発見されるたびに、ソースコード、ビルド、またはデプロイメントスクリプトで解決され、自動的にテストされます。既知のセキュリティ問題が本番環境にデプロイされることを防ぐために、ビルドを警告または中断する自動セキュリティおよび依存関係チェックを備えたビルドパイプラインの使用を強くお勧めします。手動で不規則に実行された手順は回避できないセキュリティ上の誤りに直接つながります。

業界が DevSecOps モデルに移行するにつれて、「既知の良好な」状態を達成するために、デプロイメントと構成の継続的な可用性と完全性を確保することが重要です。これまで、システムがハックされた場合、それ以上の侵入が行われていないことを証明するのに数日から数か月かかりました。今日では、ソフトウェア定義のインフラストラクチャ、ダウンタイムゼロでの迅速な A/B デプロイメント、自動コンテナ化ビルドの出現により、危殆化されたシステムに代わる「既知の良好な」代替品を自動的かつ継続的に構築、堅牢化、デプロイできます。

従来のモデルがまだ存在している場合は、手動で手順を実行してその構成を堅牢化およびバックアップし、危殆化されたシステムをタイムリーに完全性が高く危殆化されていないシステムに迅速に置き換えることができる必要があります。

このセクションに準拠するには自動ビルドシステムと、ビルドおよびデプロイメントスクリプトへのアクセスが必要です。

#説明L1L2L3CWE

14.1.1

アプリケーションのビルドおよびデプロイメントプロセスが、CI / CD 自動化、自動構成管理、自動デプロイメントスクリプトなど、セキュアでリピート可能な方法で実行されている。

14.1.2

スタックのランダム化、データ実行防止など、利用可能なすべてのバッファオーバーフロー保護および警告を有効にし、安全ではないポインタ、メモリ、書式文字列、整数、文字列操作が見つかった場合にはビルドを中止するようにコンパイラフラグを設定している。

120

14.1.3

[修正] すべてのサードパーティ製品、ライブラリ、フレームワーク、サービスにおいて、それぞれの推奨事項に従って、設定の堅牢化が実行されている。

16

14.1.4

[削除, スコープ外]

14.1.5

[修正] デプロイされた環境の有効期間が短く、頻繁に再デプロイされて「既知の良好な」更新された状態である。あるいは、有効期間が長い環境ではデプロイされた構成が安全でない状態に変更されないように、何らかの形の「ドリフト防止」を使用する必要がある。

14.1.6

[14.2.2 から移動] すべての不要な機能、ドキュメント、サンプルアプリケーション、構成が削除されている。

1002

14.1.7

[追加] 本番環境にテストコードが含まれていない。

489

14.1.8

[追加] ビルドとデプロイメントプロセスに関連するデータ、状態情報、およびサーバーインスタンスはそのプロセスが終了した後には保持しない。 (一過性)

14.1.9

[追加] アプリケーションコードや機能は標準的な更新プロセスまたはビルドプロセスを通じてのみ変更可能であり、アプリケーション機能やその他の直接変更メカニズムを通じて本番環境で直接変更することはできない。

V14.2 依存関係

依存関係管理はあらゆる種類のアプリケーションを安全に運用するために不可欠です。古い依存関係やセキュアでない依存関係で最新に保てないことが、これまでで最大かつ最高となる攻撃の根本原因です。

注意: レベル 1 では、14.2.1 順守はより正確なビルド時の静的コード解析や依存関係解析よりも、クライアント側および他のライブラリやコンポーネントの監視や検出に関連します。これらのより正確なテクニックは、必要に応じてインタビューにより発見可能です。

#説明L1L2L3CWE

14.2.1

できれば依存関係チェッカーをビルド時またはコンパイル時に使用して、すべてのコンポーネントが最新である。

1026

14.2.2

[14.1.6 へ移動]

14.2.3

[50.6.1 へ移動]

14.2.4

サードパーティコンポーネントは事前定義済みで信頼でき、継続的に保守されているリポジトリから取得している。

829

14.2.5

使用しているすべてのサードパーティライブラリのソフトウェア部品表 (SBOM) が保守されている。

14.2.6

[修正, 14.2.8 へ分割, レベル L2 > L3] リスクの高いサードパーティライブラリや脆弱性の履歴があるライブラリは、必要な動作のみを利用できるようにカプセル化され、攻撃対象領域を減らしている。

1061

14.2.7

[追加] 依存関係攪乱攻撃を防ぐために、サードパーティコンポーネントが内部で所有および開発されたアプリケーションとは別に供給されている。

427

14.2.8

[追加, 14.2.6 から分割] リスクの高いサードパーティライブラリや脆弱性の履歴があるライブラリは、最も機密性の高いシステムモジュールやサービスからサンドボックス化され、たとえライブラリの脆弱性が悪用されたとしても、機密性の高いシステムモジュールやサービスが侵害されることがない。

1061

注: 特定の言語およびパッケージマネージャには、複数の要素 (groupId や artifactId など) を使用してパッケージを識別することを要求するエコシステムがあります。これによりビルドプロセスでリソースをより具体的に識別できるようになります。そうでない場合、パッケージマネージャは含まれているリポジトリまたはミラーの順で動作します。検索順を具体的に示すには、パッケージマネージャに相談してください。

V14.3 意図しない情報漏洩

プロダクションの設定を堅牢化して、一般的な攻撃から保護すべきです。対策としては、デバッグコンソールの無効化、クロスサイトスクリプティング (Cross-site Scripting, XSS) およびリモートファイルインクルージョン (Remote File Inclusion, RFI) 攻撃に対するハードルの引き上げ、そしてペネトレーションテストレポートに散見される些細な情報発見の「脆弱性」の排除などが挙げられます。これらの問題の多くは重大なリスクとみなされることはめったにありませんが、それらは他の脆弱性と連鎖しています。これらの問題がデフォルトで現れなければ、それはほとんどの攻撃が成功する前にハードルを引き上げます。

#説明L1L2L3CWE

14.3.1

[削除, 7.4.1 と重複]

14.3.2

[修正] デバッグ機能の開示や意図しない情報漏洩を防ぐために、本番環境ではすべてのコンポーネントのデバッグモードが無効になっている。

497

14.3.3

[修正] HTTP ヘッダまたは HTTP レスポンスの一部がサーバサイドコンポーネントの詳細なバージョン情報を開示していない。

200

14.3.4

[追加, 4.3.2 から分割] 明確に必要でない限りディレクトリ参照が無効化されている。

548

14.3.5

[追加, 4.3.2 から分割] アプリケーションは Thumbs.db, .DS_Store, .git, .svn フォルダなどのファイルやディレクトリメタデータの漏洩や開示を許していない。

14.3.6

[文法, 12.5.1 から移動] 意図しない情報漏洩やソースコード漏洩を防ぐために、Web 層が特定のファイル拡張子を持つファイルのみを処理するように設定されている。例えば、バックアップファイル (.bak など) 、一時作業ファイル (.swp など) 、圧縮ファイル (.zip, .tar.gz など) やエディタで一般的に使用されるその他の拡張子は、必要でない限りブロックする。

552

V14.4 HTTP セキュリティヘッダ

#説明L1L2L3CWE

14.4.1

[修正, 14.4.8 へ分割] すべての HTTP レスポンスにはレスポンスの実際のコンテンツと一致する Content-Type ヘッダが含まれている。

173

14.4.2

[削除, 50.5.3 により廃止]

14.4.3

[50.2.1 へ移動]

14.4.4

[50.2.2 へ移動]

14.4.5

[50.2.3 へ移動]

14.4.6

[50.2.4 へ移動]

14.4.7

[50.2.5 へ移動]

14.4.8

[追加, 14.4.1 から分割] レスポンスが "text/*", "*/*+xml", "*/xml" の Content-Type を指定する場合、charset パラメータで安全な文字セット (UTF-8, ISO-8859-1 など) も指定している。

173

V14.5 HTTP リクエストヘッダバリデーション

#説明L1L2L3CWE

14.5.1

[修正] アプリケーションはアプリケーションまたは API が使用している HTTP メソッド (preflight リクエスト時の OPTIONS を含む) にのみ応答し、未使用のメソッド (TRACE など) はブロックされる。

749

14.5.2

[削除, 4.1.1 と重複]

14.5.3

[50.2.6, 50.3.3 へ分割]

14.5.4

[削除, 不正確]

14.5.5

[修正, 13.2.1 から移動] HEAD, OPTIONS, TRACE, または GET verb を使用する HTTP リクエストがバックエンドデータ構造を変更することや、状態変更アクションを実行することがない。これらのリクエストは安全なメソッドであるため、副作用を持つべきではない。

650

14.5.6

[追加] ロードバランサ、ファイアウォール、アプリケーションサーバを含むすべてのアプリケーションコンポーネントは RFC 2616 に準拠しており、Transfer-Encoding ヘッダが存在する場合には Content-Length ヘッダを無視して、HTTP リクエストスマグリングを防いでいる。

444

14.5.7

[追加] アプリケーションが依存する HTTP セキュリティ機能をサポートしていない古いブラウザを使用しているユーザーに対して、Web アプリケーションが警告を発している。古いブラウザのリストは定期的に見直して更新する必要がある。

1104

14.5.8

[追加] アプリケーションにより使用され、ロードバランサやプロキシなどの中間デバイスにより定義された、X-Real-IP や X-Forwarded-* のような HTTP ヘッダがエンドユーザによってオーバーライドできない。

346

V14.6 HTTP/2

#説明L1L2L3CWE

14.6.1

[追加] Content-Length リクエストヘッダの値がビルトインのメカニズムを使用して計算された長さと一致している。

400

14.6.2

[追加] すべての Transfer-Encoding ヘッダがメッセージから削除されるか、リクエストが完全にブロックされている。

14.6.3

[追加] フル CRLF (\r\n) シーケンスは HTTP/2 ヘッダ内で無効化されている。

113

V14.7 Web サーバまたはアプリケーションサーバの構成

#説明L1L2L3CWE

14.7.1

[文法, 12.6.1 から移動] Web サーバまたはアプリケーションサーバはサーバがリクエストを送信したり、データやファイルをロードできるリソースやシステムの許可リストで構成されている。

918

参考情報

詳しくは以下の情報を参照してください。

Last updated