...
下表はコンテナアプリの開発時に必要とされるセキュリティ対策の一例です。全部またはどれか一つを実施すればよいというものではなく、セキュリティリスクやコストなどのトレードオフを勘案しながら、何をどの程度組み合わせて対策するかを検討する必要があります。本書ではこれら対策のうち一部のみを説明しますが、詳細やその他の対策事項については各位にてベストプラクティスの調査や実際の対応のご検討をお願い致します。
コンテナアプリ開発におけるセキュリティ対策例Examples of Security Measures in Container Apps Development
No. | セキュリティ対策 | 説明 |
---|---|---|
1 | ベースイメージの選択 | 軽量で、信頼性の高いベースイメージを選択します。公式イメージまたはセキュリティが強化されたイメージを使用することを検討してください。i-PROのSDKではベースとなるイメージを提供していますので、追加で必要なものを除きそれらを使用してください。 |
2 | イメージの脆弱性スキャン | コンテナイメージを定期的にツールでスキャンし、脆弱性を特定して修正します。 |
3 | セキュアなDockerfileの作成 | 不要なパッケージをインストールしない、COPYではなくADDを使用する、ユーザ権限を最小限にするなど、Dockerfileをセキュアに作成します。このようなプラクティスは上記の脆弱性ツールにより多くが検出できます。 |
4 | セキュリティコンテキストの適用 | コンテナに適切な権限とリソース制限を設定することで、リスクを最小限に抑えます。i-PROカメラはこれらの設定内容を制限をしており、許可範囲外の設定でコンテナを起動しようとするとエラーとなります。このエラーを避けるために、i-PROから提供されるテンプレート設定をご使用ください。 |
5 | コンテナのネットワークセキュリティ | ネットワーク設定を適切に構成し、不要なポートを開放しないようにします。また、コンテナ間の通信にもセキュリティポリシーを適用します。 |
6 | ロギングと監視 | コンテナの監視とログ収集を行い、異常やセキュリティインシデントを迅速に検出できるようにします。適切な範囲内の量、内容での出力ログの実装が必要です。 |
7 | 機密データの対策 | 機密データをコンテナ内に保持しないようにします。機密データを扱いたい場合やアプリケーションの設定を安全に管理するためには、セキュアなストレージソリューションを使用する等の対策が必要です。i-PROカメラでは一手段として named volume によるデータの保存環境を提供しています。 |
8 | CI/CDパイプラインのセキュリティ | ビルド、テスト、デプロイの各ステージでセキュリティチェックを実施し、不正な操作や脆弱性のあるコードを検出・修正します。先述の脆弱性のスキャンツールの使用もその一つです。CI/CDパイプラインに適切なアクセス制御を設定し、セキュリティのベストプラクティスを遵守してください。 |
9 | SBOMの作成と管理 | 脆弱性の管理やサプライチェーンリスクマネジメントのために、SBOMを作成・管理し、イメージに含まれるOSSを把握することを推奨します。 |
...
Run Vulnerability Checker against your Image
コンテナのセキュリティを強化する方法の一つとして、コンテナイメージ内の脆弱性をツールを用いて抽出し、それら脆弱性を可能な限り取り除いたり修正したりする方法があります。
...
また、本図では脆弱性チェックの対象として、自身の開発プロダクトであるアプリコンテナイメージだけでなく、その開発途中でマルチビルド等の目的でベースとして使用するコンテナイメージ(例: Debian の公式イメージなど) についても対象としています。その理由は使用するパッケージに対しての脆弱性を漏れなく調べるためなのですが、詳細は改めてTrivyの説明の節において記述します。
Trivy:
...
Comprehensive Vulnerability Scanner
Trivyは、コンテナイメージやファイルシステムに存在する脆弱性を検出するオープンソースのスキャナです。主にOSパッケージやプログラミング言語のライブラリに関連する脆弱性を対象にしています。TrivyはAqua Security社によって開発・メンテナンスされており、コンテナ開発者にとって信頼性の高いツールの一つです。
...
参考で、以下に公式の ubuntu のイメージに対し trivy を実行した例 (オプション指定無し) の抜粋を示します。(実行例は Trivy は 0.38.3 を使用しています。)
Example execution of trivy の実行例: ターゲットイメージ target image = ubuntu
buildhost$ trivy image ubuntu:latest 2023-02-22T15:23:36.453+0900 INFO Vulnerability scanning is enabled <<<<........ SNIP ........>>>> 2023-02-22T15:23:43.579+0900 INFO Detected OS: ubuntu 2023-02-22T15:23:43.580+0900 INFO Detecting Ubuntu vulnerabilities... 2023-02-22T15:23:43.596+0900 INFO Number of language-specific files: 0
ubuntu:latest (ubuntu 22.04) ============================ Total: 31 (UNKNOWN: 0, LOW: 16, MEDIUM: 14, HIGH: 1, CRITICAL: 0)
+---------------+---------------+----------+--------------+------------+---------------------------------------+ | Library | Vulnerability | Severity | Install Ver | Fixed Ver | |
Title | +---------------+---------------+----------+--------------+------------+---------------------------------------+ | bash | CVE-2022-3715 | LOW | 5.1-6ubuntu1 | | bash: a heap-buffer- |
overflow | | |
| |
| | |
| | in valid_parameter_ |
transform | | |
| | |
| |
| |
| https://avd.aquasec.com/nvd/ |
| | | | |
| |
| | cve-2022-3715 | +---------------+---------------+----------+--------------+------------+---------------------------------------+ | coreutils | CVE-2016-2781 | |
| 8.32-4.1 | | coreutils: Non-privileged session can | | | |
| | ubuntu1 | |
| escape to the parent session in chroot| | |
| |
| | |
| | https://avd.aquasec.com/nvd/ | | | |
| |
| |
| | cve-2016-2781 | <<<<........ SNIP ........>>>> +---------------+---------------+----------+--------------+------------+---------------------------------------+ | libssl3 | CVE-2023-0286 | HIGH | 3.0.2-0 | 3.0.2-0 | There is a type confusion |
| | | |
| |
| ubuntu1.7 | ubuntu1. |
8| vulnerability relating to X.400 | | | |
| | |
| | address proc ... | |
(4) Note for use:
ここで、Trivyにかけるイメージについて一つ注意点があります。Trivy はパッケージの脆弱性をスキャンする際にパッケージ情報を参照しています。しかし、コンテナイメージのビルドプロセスによっては、パッケージ情報が最終プロダクトであるコンテナイメージに含まれないことがあります。この場合、Trivy がパッケージ脆弱性の検出に関連する情報を取得できず、その機能を利用できない可能性があります。
...
以上、Trivy のようなツールを利用してコンテナイメージに含まれる脆弱性を定期的にチェックし、セキュリティリスクを低減させることが重要です。また、CI/CDパイプラインにTrivyを組み込むことで、自動化された脆弱性検出を実現し、開発プロセス全体のセキュリティを向上させることができます。
Dockle:
...
Container Image Security Linter
Dockle は、コンテナイメージのセキュリティベストプラクティスに基づいて、潜在的な問題を特定するオープンソースのツールです。Dockleは、Dockerfile やイメージ設定など、主にシステム関連の脆弱性を検出します。GoodwithTech 社によって開発・メンテナンスされており、Trivy と同様にコンテナ開発者にとって有益なツールの一つです。
...
参考で、以下に Azure IoT Edge のサンプルアプリケーションのイメージに対し Dockle を実行した例 (オプション指定無し) の抜粋を示します。
Example execution of Dockle の実行例: ターゲット イメージ target image = azureiotedge サンプル アプリケーションexample application
buildhost$ dockle |
mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0 INFO - CIS-DI-0005: Enable Content trust for Docker
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
INFO - CIS-DI-0008: Confirm safety of setuid/setgid files
<<<<........ SNIP ........>>>>
INFO - DKL-LI-0003: Only put necessary files
<<<<........ SNIP ........>>>>
|
以上、Trivy と同様に Dockle のようなツールを利用してコンテナイメージに含まれるシステム関連の問題を定期的にチェックし、セキュリティリスクを低減させることが重要です。また、CI/CD パイプラインに Dockle を組み込むことで、自動化されたセキュリティベストプラクティスのチェックを実現し、開発プロセス全体のセキュリティを向上させることができます。
...
Force-Limit on Access to Host Resources
セキュリティ上の理由から、i-PROカメラ上で動作するコンテナはアクセス可能なi-PROカメラのホスト側の権限やリソースが強制的に制限されています。Docker API に対し、i-PROに許可されていない権限やリソースの場所、範囲外の値のオプションを指定したコンテナを起動しようとした場合、ホスト側のチェック機構がそれら要求を拒否する仕組みが搭載されています (下記の図を参照)。
...