> For the complete documentation index, see [llms.txt](https://coky-t.gitbook.io/owasp-tcasvs-ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coky-t.gitbook.io/owasp-tcasvs-ja/owasp-shikkukuraiantoapurikshonsekyuriti/06-tasvs-conf.md).

# TASVS-CONF: 構成と構築 (Configuration and Building)

## 管理目標

アプリケーションの構成管理プロセスが安全で、信頼性が高く、自動化されていることを確保します。これには、安全なビルドおよびデプロイメントプロセスの検証、適切なコンパイラフラグ構成、自動デプロイメントスクリプト、不要な機能な削除、信頼できるリポジトリからのサードパーティコンポーネントの調達、ソフトウェア部品表 (Software Bill of Materials, SBOM) の維持、すべてのソフトウェアのコンポーネントの最新状態の維持を含みます。

この管理目標はセキュリティ脆弱性を緩和し、コンプライアンスを確保し、アプリケーションの完全性と可用性を維持するのに役立ちます。

## テストチェックリスト

| TASVS-ID       | 説明                                                                                                                                 | L1 | L2 | L3 |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -- | -- | -- |
| TASVS-CONF-1   | 一般的な構成チェック (General Configuration Checks)                                                                                          |    |    |    |
| TASVS-CONF-1.1 | アプリケーションのビルドとデプロイメントのプロセスが、CI/CD 自動化、自動構成管理、自動デプロイメントスクリプトなど、安全で反復可能な方法で実行されることを検証します。                                             | X  | X  | X  |
| TASVS-CONF-1.2 | コンパイラフラグが、スタックのランダム化、データ実行防止など、利用可能なすべてのバッファオーバーフロー保護と警告を有効にし、安全でないポインタ、メモリ、フォーマット文字列、整数、文字列操作が見つかった場合にビルドを中断するように構成されていることを検証します。 | X  | X  | X  |
| TASVS-CONF-1.3 | アプリケーション、構成、すべての依存関係が、自動デプロイメントスクリプトを使用して再デプロイできること、文書化されテストされたランブックから妥当な時間で構築できること、バックアップから適時にリストアできることを検証します。                    |    | X  | X  |
| TASVS-CONF-1.4 | 不要な機能、ドキュメント、サンプルアプリケーション、構成がすべて削除されていることを検証します。                                                                                   | X  | X  | X  |
| TASVS-CONF-1.5 | サードパーティコンポーネントが、あらかじめ定義されて信頼できる継続的に保守されているリポジトリから取得していることを検証します。                                                                   | X  | X  | X  |
| TASVS-CONF-1.6 | 使用しているすべてのサードパーティライブラリのソフトウェア部品表 (Software Bill of Materials, SBOM) が保守されていることを検証します。                                              | X  | X  | X  |
| TASVS-CONF-2   | 権限とパーミッション (Privileges and Permissions)                                                                                            |    |    |    |
| TASVS-CONF-2.1 | ソフトウェアが最小権限の原則に従い、期待通りに動作するために最低レベルの権限で実行することを確保します。複数レベルの権限が必要となる場合、その IPC インタフェースが明確に定義され、必要以上の機能は公開していません。                      | X  | X  | X  |
| TASVS-CONF-2.2 | シッククライアントは「2 のルール」に従っており、信頼できない入力で動作、メモリ安全でない言語で記述、高い権限で/サンドボックスなしで動作、の 2 つ以上を持つことはできません。                                          | X  | X  | X  |
| TASVS-CONF-2.3 | インストールプロセス時、機能の使用時 (オンデマンドでローカルに作成されるログなど)、実行時に、オープン、削除、変更、作成されるすべてのフォルダに対して、パーミッションが適切に構成されています。                                  | X  | X  | X  |

## コントロールグループ定義

### *TASVS-CONF-1 - 一般的な構成チェック (General Configuration Checks)*

### TASVS-CONF-1.1 - アプリケーションのビルドとデプロイメントのプロセスが、CI/CD 自動化、自動構成管理、自動デプロイメントスクリプトなど、安全で反復可能な方法で実行されることを検証します。

ビルドとデプロイメントのプロセスは自動化され、安全で、繰り返し可能であるべきです。これには CI/CD 自動化、自動構成管理、自動デプロイメントスクリプトを含みます。これらのプロセスは、アプリケーションが一貫して安全にビルドされデプロイされることを確保し、エラーや脆弱性のリスクを軽減するのに役立ちます。

### TASVS-CONF-1.2 - コンパイラフラグが、スタックのランダム化、データ実行防止など、利用可能なすべてのバッファオーバーフロー保護と警告を有効にし、安全でないポインタ、メモリ、フォーマット文字列、整数、文字列操作が見つかった場合にビルドを中断するように構成されていることを検証します。

コンパイラフラグは、スタックのランダム化、データ実行防止など、利用可能なすべてのバッファオーバーフロー保護と警告を有効にし、安全でないポインタ、メモリ、フォーマット文字列、整数、文字列操作が見つかった場合にビルドを中断するように構成されているべきです。これらの保護はバッファオーバーフローやフォーマット文字列脆弱性のような一般的なセキュリティ脆弱性を防ぐのに役立ちます。

### TASVS-CONF-1.3 - アプリケーション、構成、すべての依存関係が、自動デプロイメントスクリプトを使用して再デプロイできること、文書化されテストされたランブックから妥当な時間で構築できること、バックアップから適時にリストアできることを検証します。

アプリケーション、構成、すべての依存関係が、自動デプロイメントスクリプトを使用して再デプロイでき、文書化されテストされたランブックから妥当な時間で構築でき、バックアップから適時にリストアできるべきです。これにより、障害や災害が発生した場合に迅速に復旧できるため、ダウンタイムを短縮し、ビジネスの継続性を確保できます。

### TASVS-CONF-1.4 - 不要な機能、ドキュメント、サンプルアプリケーション、構成がすべて削除されていることを検証します。

不要な機能、ドキュメント、サンプルアプリケーション、構成がアプリケーションからすべて削除されているべきです。これは、アプリケーションの攻撃対象領域を低減し、パフォーマンスを向上し、メンテナンスを簡素化するのに役立ちます。不要な機能を削除すると、セキュリティ脆弱性とコンプライアンス問題のリスクも軽減します。

### TASVS-CONF-1.5 - サードパーティコンポーネントが、あらかじめ定義されて信頼できる継続的に保守されているリポジトリから取得していることを検証します。

サードパーティコンポーネントが、あらかじめ定義されて信頼できる継続的に保守されているリポジトリから取得しているべきです。これにより、コンポーネントが安全で、信頼性が高く、最新の状態であることを確保するのに役立ちます。信頼できるリポジトリからコンポーネントを調達することで、セキュリティ脆弱性、マルウェア、その他の問題をアプリケーションに持ち込むリスクを軽減します。

### TASVS-CONF-1.6 - 使用しているすべてのサードパーティライブラリのソフトウェア部品表 (Software Bill of Materials, SBOM) が保守されていることを検証します。

使用しているすべてのサードパーティライブラリのソフトウェア部品表 (Software Bill of Materials, SBOM) が保守されているべきです。SBOM は、サードパーティライブラリ、フレームワーク、ランタイムなど、アプリケーションで使用されるすべてのソフトウェアコンポーネントの詳細なインベントリを提供します。これにより、依存関係を追跡し、脆弱性を特定し、ライセンス要件への準拠を確保することに役立ちます。

### *TASVS-CONF-2 - 権限とパーミッション (Privileges and Permissions)*

### TASVS-CONF-2.1 - ソフトウェアが最小権限の原則に従い、期待通りに動作するために最低レベルの権限で実行することを確保します。複数レベルの権限が必要となる場合、その IPC インタフェースが明確に定義され、必要以上の機能は公開していません。

シッククライアントは最小権限の原則に従い、期待通りに動作するために必要な最低レベルの権限で実行する必要があります。複数のレベルの権限が必要な場合、その IPC インタフェースを明確に定義し、必要以上の機能を公開しないようにする必要があります。これにより、攻撃者が権限昇格の脆弱性を悪用してシッククライアントを侵害するのを防ぐのに役立ちます。

たとえば、シッククライアントが昇格した権限で実行される場合、攻撃者はシッククライアントの脆弱性を悪用して機密情報にアクセスしたり、任意のコードを実行する可能性があります。シッククライアントを期待通りに動作するために必要な最低レベルの権限で実行することで、攻撃対象領域が縮小し、権限昇格の脆弱性のリスクが最小限に抑えられます。

### TASVS-CONF-2.2 - シッククライアントは「2 のルール」に従っており、信頼できない入力で動作、メモリ安全でない言語で記述、高い権限で/サンドボックスなしで動作、の 2 つ以上を持つことはできません。

シッククライアントは「2 のルール」に従う必要があります。以下の特性のうち 2 つ以上を持つことはできません。

* 信頼できない入力で動作する
* メモリ安全でない言語で記述する
* 高い権限で、またはサンドボックスなしで実行する

これにより、攻撃者がシッククライアントのセキュリティ脆弱性を悪用するのを防ぐのに役立ちます。たとえば、シッククライアントが信頼できない入力で動作し、メモリ安全でない言語で記述される場合、攻撃者がメモリの脆弱性を悪用して任意のコードを実行する可能性があります。「2 のルール」に従うことで、シッククライアントがセキュリティ脆弱性のリスクを軽減し、機密情報を認可されていないアクセスから保護できます。

### TASVS-CONF-2.3 - インストールプロセス時、機能の使用時 (オンデマンドでローカルに作成されるログなど)、実行時に、オープン、削除、変更、作成されるすべてのフォルダに対して、パーミッションが適切に構成されています。

シッククライアントはインストール時および実行時に作成されるすべてのフォルダのパーミッションを制限し、シンボリックリンク攻撃やその他の永続化シナリオや権限昇格シナリオのリスクを軽減すべきです。

プロセスは、その機能の一部として、あるいは他のアクションを実行するために、特定のバイナリを自動的に実行することがあります。ターゲットバイナリを含むファイルシステムディレクトリの権限、またはバイナリ自体のパーミッションが不適切に設定されている場合、ターゲットバイナリはユーザーレベルパーミッションを使用して別のバイナリで上書きされ、元のプロセスによって実行される可能性があります。元のプロセスとスレッドがより高いパーミッションレベルで実行されている場合、置き換えられたバイナリもより高いレベルのパーミッションで実行します。これは SYSTEM などとなる可能性があります。

攻撃者はこのテクニックを使用して、より高いパーミッションレベルでコードを実行する手段として、正当なバイナリを悪意のあるものに置き換える可能性があります。実行プロセスが特定の時間または特定のイベント (システム起動など) の際に実行するように設定されている場合、このテクニックは永続化にも使用できます。

ファイルを作成またはオープンする際:

* 作成する前に、ファイルが既に存在するかどうかをチェックします
* プログラミング言語に応じて、フラグを使用してシンボリックリンクをたどらないようにします (Go 言語の O\_NOFOLLOW など)
* 適切なエラー処理を実装します
* ファイルの存在確認と操作実行の間の競合状態に注意してください。可能であればアトミック操作を使用して、Time-of-Check-to-Time-of-Use (TOCTOU) 脆弱性のリスクを緩和します。

例:

```go
file, err := os.OpenFile("filename", 
os.O_RDWR|os.O_CREATE|syscall.O_NOFOLLOW, 0666)
if err != nil {
  // Handle error
}
```

\newpage{}
