Dockerは便利ですが、セキュリティ上のリスクもあります。特に本番環境でDockerホストを実行している場合は、DockerEngineを潜在的な脅威から保護することが重要です。
Docker Bench for Securityは、構成の問題を見つけるのに役立つ自動化されたスクリプトです。ベンチスクリプトはホストをスキャンして、DockerEngineセットアップの弱点を見つけます。これは、Docker自体によってオープンソースのセキュリティ監査ツールとして提供されています。
Docker Benchを使用する最も簡単な方法は、スクリプトをダウンロードして直接実行することです。内容が気になる場合は、GitHubで調べることができます。
Gitを使用してベンチリポジトリのクローンを作成します。シェルを使用してスクリプトを実行します。 DockerBenchはsudo
で実行する必要があります 、ルートアクセスを必要とするチェックが含まれているため。
git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo sh docker-bench-security.sh
ターミナルに監査結果が表示されます。スキャンには数秒かかります。実行中のコンテナがたくさんある場合は、1分以上かかる場合があります。
レポートは色分けされているため、問題をすばやく特定できます。青のINFO
行は、エントリをさまざまなスキャンセクションに記録します。緑のPASS
行は、システムがチェックを満たしたことを示しています。赤のWARN
線は潜在的な脆弱性を示しています。
Docker Benchは、合計で200を超える個別のチェックを実行します。網羅的なリストは、プロジェクトのGitHubリポジトリで入手できます。テストの分類方法は次のとおりです。
このグループのテストは、ホストのセキュリティ監査の弱点に焦点を当てています。 Dockerディレクトリの適切な監査、コンテナ専用のパーティションの使用、および更新されたDockerバージョンのインストールについてチェックが行われます。
デーモン指向のテストでは、Dockerのソケットがセキュリティで保護されていない接続を介して公開されていないかどうかを確認します。デフォルトのbridge
上のコンテナ間のネットワークトラフィック ネットワークを制限し、安全でないレジストリを削除する必要があります。
このセクションでは、コンテナへの不適切な特権の付与も探します。コンテナは新しい特権を取得できないようにする必要があります。これにより、攻撃者がコンテナを大きくする可能性があります。
次のセクション、Dockerデーモン構成ファイルにも同様の焦点があります。これにより、DockerインストールディレクトリとUnixソケットに適切な権限と所有権が付与されます。 Dockerのファイルシステムはroot:root
が所有している必要があります 644
の制限付き権限 。
Docker Benchは、既知のイメージのDockerfilesの基本的なチェックを実行します。専用のコンテナユーザー、HEALTHCHECK
の存在を探します 指示、およびデータの整合性を検証するためのContentTrustの使用。
このテストセクションでは、基本的な画像強化手順を思い出させる警告も表示されます。信頼できるベースイメージを使用し、新しいセキュリティパッチを適用し、不要なパッケージのインストールを回避します。これらの対策は、内の脆弱性を排除するのに役立ちます コンテナ。
Container Runtimeテストは、実行中のコンテナーを検査します。このセクションには、SELinuxとAppArmorの可用性から、適切なファイルシステムマウントとネットワークオプションの使用に至るまで、30を超えるテストが含まれています。
特権コンテナを使用するか、Dockerソケットをコンテナにマウントすると、ポイントが削除されます。コンテナは、追加の特権を取得したり、ホストシステムに干渉したりできないようにする必要があります。
ベンチは、内部で実行されているSSHサーバーも探します コンテナ。コンテナへの直接アクセスは避ける必要があるため、これはお勧めできません。 docker exec
を使用することをお勧めします ホストからコンテナとやり取りします。
追加のテストでは、CPUとメモリの制限の使用を調べます。無制限のコンテナは過剰なリソースを消費し、最終的にホストのメモリ不足状態を引き起こす可能性があります。ネットワーキングチェックは、未使用のポートと、特権ポートをコンテナにマップする要求にフラグを立てます。
Docker Benchには、DockerSwarmユーザー向けの追加セクションが含まれています。正しくローテーションされていないセキュリティで保護されていないシークレットと証明書にフラグを立てることに焦点を当てています。また、暗号化されたオーバーレイネットワークの使用など、正しいネットワーク構成も必要です。
スウォームモードが有効になっているが実際には使用されていない場合、スウォームセクションは警告を発します。 Swarmを使用する予定がない場合は、docker swarm leave --force
を実行してオフにします。 。
ほとんどのDockerホストは、それらを強化するための積極的な手順を実行していない場合、いくつかの警告を表示します。最も一般的なDockerベンチレポートのいくつかに対処するために実行できるいくつかの対策を次に示します。
Dockerファイルの監査を有効にする
Dockerは、主要なDockerディレクトリでシステムレベルの監査を使用することをお勧めします。監査は、監視対象のファイルとディレクトリに影響を与えるすべての操作をログに記録します。これにより、破壊的な可能性のある変更を追跡できます。
auditd
があることを確認してください インストールされています。 /etc/audit/audit.rules
を編集します ファイルの最後に次の行を追加します。
-w /etc/default/docker -p wa -w /etc/docker -p wa -w /etc/docker/daemon.json -p wa -w /lib/systemd/system/docker.service -p wa -w /lib/systemd/system/docker.socket -p wa -w /usr/bin/docker -p wa -w /usr/bin/docker-containerd -p wa -w /usr/bin/docker-runc -p wa -w /var/lib/docker -p wa
-p wa
命令とは、auditd
を意味します ファイルに影響を与える書き込みと属性の変更をログに記録します。 Docker Benchの出力で、追加のディレクトリに監査を使用することが示唆されている場合は、それらもリストに追加します。 Dockerのディレクトリは時間の経過とともに変更される可能性があります。
auditd
を再起動する必要があります 変更を適用するには:
sudo systemctl restart auditd
Docker Benchは通常、デーモン構成の問題を検出します。以下を/etc/docker/daemon.json
に追加します いくつかのデーモン警告を静めます。
{
"icc": false,
"live-restore": true,
"no-new-privileges": true,
"userland-proxy": false,
"userns-remap": "default"
}
- icc: これにより、コンテナがデフォルトの
bridge
を介して相互に通信するのを防ぎます。 通信網。コンテナは、--link
を使用して明示的にリンクされている場合にのみ相互に到達します 。 - ライブ復元: これを設定すると、デーモンが停止した場合でもコンテナを実行し続けることができます。これは、ダウンタイムを最小限に抑えたい実稼働環境で推奨されます。
- 新しい特権はありません: これにより、コンテナが
setuid
などのコマンドを使用して特権を昇格するのを防ぎます。 およびsetgid
。 - userland-proxy: これを無効にすると、
iptables
ホストポートトラフィックをコンテナにルーティングするために使用されます。これがないと、Dockerのユーザーランドプロキシプロセスが使用され、デーモンの攻撃対象領域が増加します。 - userns-remap: これにより、ユーザーの名前名を使用できるようになるため、
root
コンテナ内のは、特権の低いホストユーザーにマップされます。これにより、侵害されたコンテナがroot
を実行できるリスクが軽減されます。 ホスト上のコマンド。default
を使用する この目的のために専用のユーザーアカウントを設定するようにDockerに指示します。
関連: DockerコンテナでCronを使用する方法
Docker Benchは、出力を調整するために使用できるいくつかのフラグをサポートしています。
- -b: 色を無効にします。完全なANSI出力をサポートしていないCI環境でスクリプトを実行している場合に便利です。
- -p: 提案された修復手段を含めないでください。警告に焦点を合わせ、出力のノイズを減らしたい場合に役立ちます。
- -l report.txt: 出力を
report.txt
に書き込みます ターミナルの代わりに。 - -c check_5.1、check_5.2: チェック5.1および5.2のみを実行します。テストリストはGitHubで入手できます。
- -e check_5.1、check_5.2: チェック5.1および5.2を除外します。
フラグを組み合わせて、必要なレポートを作成できます。チェックのセクション全体が当てはまらない場合は、一連のフラグを適用してDocker Benchをすばやく実行できるように、シェルエイリアスを作成することを検討してください。
Docker Bench for Securityスクリプトを使用すると、Dockerホストのセキュリティの弱点を見つけて解決するのに役立ちます。発生する警告に対処することで、ホストを強化し、セキュリティ体制を改善することができます。
DockerBenchは徹底的なテストではないことを忘れないでください。 Dockerのセキュリティを維持するには、他にも見逃してはならない側面があります。
侵害されたコンテナは、強力なホストレベルのセキュリティがある場合でも、攻撃者にシステムへの足掛かりを与える可能性があります。 TrivyやClairなどのアクティブなコンテナ脆弱性スキャナーと一緒にDockerBenchを使用することで、このリスクを軽減できます。これらは、内の問題を特定するのに役立ちます 悪用される可能性のある古い依存関係などのコンテナ。
常に良いスコアが目標ですが、DockerBenchは本番ワークロードを対象としていることにも注意してください。すべてのチェックが開発者のローカルDockerインストールに関連しているわけではありません。スクリプトを実行し、警告を読み、環境に適用される警告を評価します。