DUICUO

コンテナのセキュリティを向上させる 10 個の優れたオープンソース Docker および Kubernetes セキュリティ スキャン ツール!

Kubernetes (k8s) は、コンテナ化されたワークロードのデプロイ、スケーリング、管理を自動化する、人気の高いオープンソースのコンテナオーケストレーションシステムです。Kubernetes は、コンテナの自己修復、自動スケーリング、サービス検出機能を提供しますが、セキュリティリスクも伴います。Docker は、アプリケーションの構築、デプロイ、管理に使用されるコンテナプラットフォームです。軽量で移植性が高く、スケーラブルな Docker コンテナは、特にマイクロサービスアーキテクチャにおけるアプリケーションの開発と配信を大幅に容易にするため、多くの開発者や組織に選ばれています。しかし、コンテナ化の普及に伴い、Docker はますます複雑かつ深刻なコンテナセキュリティの課題に直面しています。

この記事では、主に Kubernetes と Docker が直面するセキュリティ問題を紹介し、オープンソースで無料のコンテナ セキュリティ ツールをいくつか推奨します。

Kubernetesのセキュリティ問題

(1)クラスターセキュリティ

クラスター セキュリティには、認証、承認、暗号化を有効にして、API サーバー、etcd、Kubernetes コントローラー マネージャーなどの制御コンポーネントを保護することが含まれます。

(2)ノードセキュリティ

ノード セキュリティとは、主に、不要なユーザー アカウントの削除やアプリケーション アクセスのコンプライアンスの確保など、ネットワークを適切に構成し、Kubernetes ランタイム環境を保護することを指します。

(3)アプリケーションセキュリティ

アプリケーションセキュリティとは、Kubernetesにおいてアプリケーションを実行するコンテナであるポッドを保護することを意味します。これらのアプリケーションを保護するには、ポッド自体を保護することが前提となります。Kubernetesは、アプリケーションを保護するためのセキュリティ機能を複数提供しています。これらの機能は、リソースへのアクセス制限、ネットワークポリシーの適用、コンテナ間の安全な通信のサポートなどに利用できます。

Dockerコンテナのセキュリティ問題

(1)鏡の汚れ

現在、Docker Hubにはサードパーティがアップロードしたイメージが大量にホストされており、その品質は大きく異なります。中には、ハッカーが悪意のあるプログラムを含むイメージを意図的にアップロードし、ユーザーがダウンロードして使用できるように偽装している可能性があります。ユーザーが誤ってこのようなイメージを使用してコンテナを起動した場合、コンテナが侵害される可能性は間違いなくあります。したがって、ユーザーはこれらのイメージをスキャンして検証し、コンテナで使用するイメージが信頼できるものであることを確認する必要があります。信頼できないサードパーティのイメージは可能な限り使用しないでください。

(2)サイバー攻撃

Dockerはデフォルトでブリッジネットワークを使用します。これらのネットワークは仮想ブリッジを作成し、同じブリッジに接続されたコンテナ同士が通信できるようにします。コンテナが侵害されると、攻撃者はネットワーク経由でホストマシン上の他のコンテナにアクセスできるようになる可能性があります。同時に、攻撃者はDDoS攻撃などの手法を用いてコンテナサービスを妨害し、ホストマシンのリソースを枯渇させ、場合によってはホストマシン全体をクラッシュさせる可能性があります。

(3)カーネル攻撃

ハッカーがコンテナにアクセスすると、共有カーネルのため、理論的にはカーネルを攻撃してホストを制御したり影響を与えたりすることが可能になります。

(4)不適切な操作

不適切な操作は、コンテナの脆弱性に簡単につながる可能性があります。例:

  • コンテナを起動するときに、ホストのルート ディレクトリをコンテナにマップします。
  • コンテナを有効化する際は、特権モードを使用してください。このモードでは、Dockerコンテナはホストマシン上のすべてのデバイスにアクセスでき、多数のデバイスファイルにアクセスできるようになります。

(5)Dockerデーモンを標的とした攻撃

Dockerはクライアント/サーバーアーキテクチャを採用しています。サーバーとして機能するDockerデーモンは、CLIまたはREST APIを介してクライアントからのコマンドを受け取り、コンテナ上で対応する操作を実行します。しかし、すべてのリクエストが信頼できるユーザーによって開始されるわけではありません。攻撃者はリクエストを偽造し、デーモンに危険な操作を実行させる可能性があります。

(6)Docker脆弱性攻撃

Docker自体はアプリケーションであり、コードに脆弱性が存在することは避けられず、プログラムへの攻撃につながる可能性があります。

まとめると、コンテナのセキュリティ確保には、デバイス、システム、ネットワーク、イメージ、アプリケーション、運用など、様々なレイヤーが関わってきます。中でも、コンテナ自体のセキュリティは見落とされがちです。以下のコンテンツでは、KubernetesクラスターとDockerコンテナの保護、Dockerイメージの静的スキャン、セキュリティ監査、Kubernetesクラスターの強化、ランタイムセキュリティの実現に役立つオープンソースツールを主に推奨します。

1. トリビー

https://github.com/aquasecurity/trivy

Trivyは、包括的かつ多用途なセキュリティスキャンソフトウェアです。セキュリティ上の問題を発見し、その問題が見つかる場所をターゲットとするスキャナーを搭載しています。コンテナ、Kubernetes、コードリポジトリ、クラウドにおける脆弱性、設定ミス、パスワード漏洩、SBOMエラーなどの問題を発見するために使用できます。Trivyは、ほとんどの一般的なプログラミング言語とクロスプラットフォームのオペレーティングシステムをサポートしています。

Trivy は次のオブジェクトのスキャンをサポートしています。

  • コンテナイメージ
  • ファイルシステム
  • Gitリポジトリ(リモート)
  • 仮想マシンイメージ
  • Kubernetes
  • AWS

Trivy が特定できる問題は次のとおりです。

  • 使用中のオペレーティング システム パッケージとソフトウェア依存関係 (SBOM)
  • 既知の脆弱性(CVE)
  • IaC の問題と誤った構成
  • 機密情報と秘密
  • ソフトウェアライセンス情報

Trivy スキャンを実行すると、脆弱性の重大度と CVE 番号を含む脆弱性のリストが生成されます。

実際のインストールと使用方法は以下の通りです。

(1)インストール

macOS および Linux 用の Homebrew を使用してインストールします。

 brew install trivy docker run aquasec/trivy

あるいは、スクリプトを使用してインストールすることもできます。

 curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.47.0

あるいは、ソース コードからインストールすることもできます。

 git clone --depth 1 --branch v0.47.0 https://github.com/aquasecurity/trivy cd trivy go install ./cmd/trivy

(2)コンテナイメージをスキャンする

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.47.0 image python:3.4-alpine

スキャン結果は次のとおりです。

2. セキュリティのためのDockerベンチ

https://github.com/docker/docker-bench-security

Docker Bench for Security は、Docker コンテナを本番環境にデプロイするための一般的なベスト プラクティスを数十個自動的にチェックする Docker セキュリティ関連のコマンドのセットです。

次のスクリプトはローカル マシンから実行できます。

 git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo sh docker-bench-security.sh

あるいは、Docker を使用して実行することもできます。

 docker run --rm --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /etc:/etc:ro \ -v /lib/systemd/system:/lib/systemd/system:ro \ -v /usr/bin/containerd:/usr/bin/containerd:ro \ -v /usr/bin/runc:/usr/bin/runc:ro \ -v /usr/lib/systemd:/usr/lib/systemd:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker-bench-security

3. クレア

https://github.com/quay/clair

Clairは、Dockerおよびappcコンテナの脆弱性を静的に解析するオープンソースプロジェクトです。このツールは複数のデプロイメントモードを提供し、高いスケーラビリティと可用性を実現します。ClairはREST APIをサポートし、HTML形式のスキャンレポートを提供します。また、Dockerレジストリと統合して脆弱性レポートを自動生成することもできます。

Clairの現在のバージョンであるv4は、コンテンツの検査と脆弱性の報告のためのエンジンとしてClairCoreライブラリを使用しています。より高レベルでは、ClairはClairCoreライブラリで提供される機能のサービスラッパーと見なすことができます。Clair V4のアーキテクチャは次の図に示されています。

詳細な使用方法については、公式ドキュメントを参照してください: https://quay.github.io/clair/howto/getting_started.html

4. キューブベンチ

https://github.com/aquasecurity/kube-bench

CISベンチマークは、ITシステムとデータの保護に関する世界的に認められた標準規格です。サイバー攻撃に対して脆弱なオペレーティングシステム、ソフトウェア、ネットワークを保護するための一連のガイドラインを提供します。

Kube-benchは、KubernetesのデプロイメントがCIS Kubernetesベンチマーク(Kubernetesセキュリティのベストプラクティスを網羅)に沿って最適化されているかどうかを確認するためのオープンソースツールです。したがって、CISベンチマークの目的でのみスキャンが必要な場合は、kube-benchが最適です。

Kubenchを実行する方法はいくつかあります。Pod内でKubenchを実行することもできますが、実行中のプロセスを確認するためにホストのPID名前空間へのアクセスと、設定ファイルなどのファイルが保存されているホスト上の特定のディレクトリへのアクセスが必要になります。GitHubリポジトリにはクラウド固有のjob-*.yamlファイルが含まれており、Kubenchはマシンで実行されているKubernetesのバージョンに基づいて、実行するテストスイートを自動的に決定します。

例えば:

 $ kubectl apply -f job.yaml job.batch/kube-bench created $ kubectl get pods NAME READY STATUS RESTARTS AGE kube-bench-j76s9 0/1 ContainerCreating 0 3s # Wait for a few seconds for the job to complete $ kubectl get pods NAME READY STATUS RESTARTS AGE kube-bench-j76s9 0/1 Completed 0 11s # The results are held in the pod's logs kubectl logs kube-bench-j76s9 [INFO] 1 Master Node Security Configuration [INFO] 1.1 API Server ...

詳細については、関連ドキュメントを参照してください: https://github.com/aquasecurity/kubench/blob/main/docs/running.md

5. kubeaudit

https://github.com/Shopify/kubeaudit

kubeaudit は、次のような一般的なセキュリティ制御に照らして Kubernetes デプロイメントを監査できるオープンソース ツールです。

  • 非ルートユーザーとして実行する
  • 読み取り専用のルートファイルシステムを使用する
  • 脆弱性を放棄し、新しい脆弱性を追加しないでください。
  • 特権で実行しないでください

kubeaudit 用の Brewhome のインストールは次のとおりです。

 kubeaudit all -f "/path/to/manifest.yml"

Kubeauditは、マニフェスト、クラスター、ローカルの3つのモードで実行できます。また、マニフェストの自動修復機能も備えており、競合製品との差別化を図っています。

マニフェスト モードで実行 - このモードでは、関連する Kubernetes リソースのマニフェスト ファイルが必要です。

例えば:

 kubeaudit all -f "/path/to/manifest.yml"

出力結果:

 $ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml" ---------------- Results for --------------- apiVersion: apps/v1 kind: Deployment metadata: name: deployment namespace: deployment-apps-v1 -------------------------------------------- -- [error] AppArmorAnnotationMissing Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added. Metadata: Container: container MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container -- [error] AutomountServiceAccountTokenTrueAndDefaultSA Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used. -- [error] CapabilityShouldDropAll Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list. Metadata: Container: container Capability: AUDIT_WRITE ...

さらに、クラスター モードもあります。

 kubeaudit all

ローカルモード:

 kubeaudit all -f "/path/to/config" br

さらに、kubeaudit には、外観、機能、制限、権限、rootfs、seccomp、netpols、asat など、複数の監査プロファイルがあります。

6. キューブスケープ

https://github.com/kubescape/kubescape

Kubescapeは、IDE、CI/CDパイプライン、クラスターに適したオープンソースのKubernetesセキュリティプラットフォームです。リスク分析、セキュリティ、コンプライアンス、構成ミスのスキャンなどの機能を備えており、Kubernetesユーザーと管理者の貴重な時間、労力、リソースを節約します。

インストール:

 curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash

スキャンを実行します:

 kubescape scan --verbose

結果は次のとおりです。

7. キューブハンター

https://github.com/aquasecurity/kube-hunter

kube-hunterは、Kubernetesクラスターのセキュリティ脆弱性を発見するためのPythonで開発されたオープンソースの侵入テストツールです。ローカルマシン、クラスター内、アクティブモードとパッシブモードの両方でリモート実行可能なカスタムモジュールの作成をサポートしています。

アクティブ モードでは、kube-hunter はあらゆる脆弱性を検出でき、ステージング環境でシミュレートされた攻撃ツールとして実行することもできます。

インストールと使用方法は以下の通りです。

 pip install kube-hunter # Installing Kube-hunter. kube-hunter --remote some.node.com # Running remotely. kube-hunter --cidr 192.168.0.0/24. # Network Scanning. kube-hunter --remote some.domain.com --active # Active Mode. kube-hunter --list --active # List of test cases. kube-hunter --remote some.node.com --json # Json output kube-hunter --k8s-auto-discover-nodes --kubeconfig "/path/config"

8. 繊毛

https://github.com/cilium/cilium

Ciliumは、eBPFベースのネットワーク可観測性とセキュリティソリューションを提供するネットワークセキュリティ検査プロジェクトです。DockerおよびKubernetesと互換性があり、アプリケーションコードやコンテナ設定を変更することなくセキュリティポリシーを適用できます。

9. シフトとグリープ

https://github.com/anchore/syft

https://github.com/anchore/grype

Syftは、コンテナイメージとファイルシステムからソフトウェア部品表(SBOM)を生成するために使用されるGoベースのCLIライブラリです。Grypeは、コンテナイメージとファイルシステムの脆弱性スキャンツールです。SyftをGrypeなどのスキャンツールと併用することで、システムの脆弱性や異常を検出できます。

Syft のインストール:

 curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

Grype のインストール:

 curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

具体的な使用方法については、公式ドキュメントを参照してください。

10. ドックル

https://github.com/goodwithtech/dockle

Dockle は、CIS (Center for Internet Security) Docker ベンチマークとベスト プラクティスに基づいて安全な Docker コンテナ イメージを構築するツールです。

Docker イメージをスキャンするためのコマンドは次のとおりです。

(1)Dockerイメージをスキャンする:

 $ dockle goodwithtech/test-image:v1 br

(2)Dockerイメージファイルをスキャンする:

 $ docker save alpine:latest -o alpine.tar $ dockle --input alpine.tar

(3)スキャンしたJSON結果を取得します。

 $ dockle -f json goodwithtech/test-image:v1 $ dockle -f json -o results.json goodwithtech/test-image:v1

詳しい手順については、公式マニュアルを参照してください。