とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

Docker Bench for Securityを使ってみる

Dockerといえば、Kubernetes 1.24リリースにあたり、DockerとKubernetesの橋渡しをしていたdockershimのサポートがKubernetesから無くなったことに伴い、従来のやり方でKubernetesでDockerランタイムが利用できなくなったことが記憶に新しいですが、コンテナイメージを作るのにDockerはまだまだ使われると思いますし、Kubernetesまで必要ないレベルの利用にDockerやDocker Composeは開発の現場でも使われると思います。

最近はDocker Desktopへの開発のためのツールや機能追加が盛んですから、まだまだDockerは使われるでしょう。 そのため、Dockerを便利かつ安全に使い続けるべく、ツールを使ったセキュリティチェックが必要になってきます。

今回はDocker Bench for Securityを使ってみたいと思います。 前回のAqua securityのdocker-benchと同じようなツールになっています。

devops-blog.virtualtech.jp

インストール前の事前準備

Dockerのセキュリティチェックツールなので、当然ながらDockerが必要です。 今回もUbuntuベースで試しますので、次に従ってUbuntuにDockerをセットアップしてください。

docs.docker.com

なお、今回の内容はDocker version 20.10.17, build 100c701で確認しています。

Docker Bench for Securityのインストール

Docker Bench for Securityのインストール方法は2種類あって、ソースコードをクローンしてシェルスクリプトで実行する方法と、コンテナで実行する方法があります。コンテナで実行する方法は一見簡単ですが、イメージが古いために自分でメンテナンスした上で利用することが推奨されています。

github.com

ということで、今回は前者の方法でDocker Bench for Securityを動かしてみます。

動かすには、Dockerがインストールされたホスト上で次に従って実行するだけです。

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

# --------------------------------------------------------------------------------------------
# Docker Bench for Security v1.3.6
#
# Docker, Inc. (c) 2015-2022
#
# Checks for dozens of common best-practices around deploying Docker containers in production.
# Based on the CIS Docker Benchmark 1.4.0.
# --------------------------------------------------------------------------------------------

Initializing 2022-06-22T06:21:26+00:00


Section A - Check results

[INFO] 1 - Host Configuration
[INFO] 1.1 - Linux Hosts Specific Configuration
[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated)
[INFO] 1.1.2 - Ensure only trusted users are allowed to control Docker daemon (Automated)
[INFO]       * Users: 
[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated)
[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated)
[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated)
[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated)
[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated)
...

Docker Bench for SecurityはAqua securityと異なり、デフォルトではチェック項目の問題の可否とその結果をもとに算出したスコアの出力のみ行います。 対応方法は-pオプションを使うと出力結果に対処方法を加えることができますが、おそらく単純に-pオプションを指定するより、出力する内容を絞った方が見通しが良くなると思います。-cオプションで項目を絞り込めますので、-pオプションと組み合わせて実行してみます。

$ sudo sh docker-bench-security.sh -c check_1_1_3 -p

# --------------------------------------------------------------------------------------------
# Docker Bench for Security v1.3.6
#
# Docker, Inc. (c) 2015-2022
#
# Checks for dozens of common best-practices around deploying Docker containers in production.
# Based on the CIS Docker Benchmark 1.4.0.
# --------------------------------------------------------------------------------------------

Initializing 2022-06-22T06:24:01+00:00


Section A - Check results
[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated)


Section B - Remediation measures

[INFO] 1.1.3 - Install auditd. Add -w /usr/bin/dockerd -k docker to the /etc/audit/rules.d/audit.rules file. Then restart the audit daemon using command service auditd restart. Remediation Impact: Audit can generate large log files. So you need to make sure that they are rotated and archived periodically. Create a separate partition for audit logs to avoid filling up other critical partitions.


Section C - Score

[INFO] Checks: 1
[INFO] Score: -1

あとは前回と同じように、対処方法に従って設定していくだけです。まずはauditdをインストールし、/etc/audit/rules.d/audit.rulesに追記せよと書かれている内容を記述していきます。ファイル編集後はauditdサービスの再起動を行います。

次のように実行します。

$ sudo apt install auditd
$ sudo sh -c "echo '-w /usr/bin/dockerd -k docker' >> /etc/audit/rules.d/audit.rules"
$ sudo systemctl restart auditd

その上で、再度チェックを実行します。

$ sudo sh docker-bench-security.sh -c check_1_1_3 -p
# --------------------------------------------------------------------------------------------
# Docker Bench for Security v1.3.6
#
# Docker, Inc. (c) 2015-2022
#
# Checks for dozens of common best-practices around deploying Docker containers in production.
# Based on the CIS Docker Benchmark 1.4.0.
# --------------------------------------------------------------------------------------------

Initializing 2022-06-22T06:42:15+00:00


Section A - Check results
[PASS] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated)

Section C - Score

[INFO] Checks: 1
[INFO] Score: 1

一つ目の問題を解消できました。スコアも-1から1になりました。あとはこれを繰り返して少しでもセキュアなDocker環境になるようにしていきましょう。

Section A - Check results

✅[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated)
✅[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated)
✅[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated)
✅[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated)
✅[WARN] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated)
✅[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated)
✅[WARN] 1.1.12 - 1.1.12 Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated)
✅[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated)
✅[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated)
✅[WARN] 1.1.16 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v1 (Automated)
✅[WARN] 1.1.17 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v2 (Automated)
✅[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
[WARN] 2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored)
[WARN] 2.9 - Enable user namespace support (Scored)
[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored)
[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored)
[WARN] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored)
[WARN] 2.15 - Ensure live restore is enabled (Scored)
[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored)
✅[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated)

1.1.4から1.1.18と4.5までの対応を実施した結果がこちらです。まだまだセキュリティスコアは低い状態です。

$ sudo sh docker-bench-security.sh 
...
Section C - Score

[INFO] Checks: 86
[INFO] Score: 28

出力される項目はDockerのセキュリティを高める方法ではありますが、このツールで推奨される項目の中には注意して設定する必要があるものや互換性の問題、安定性の問題が発生する可能性があるものがあるため、内容を理解して設定すべきと思います。

例えば2.9の推奨の「Enable user namespace support」は、つぎで説明する機能を使うことを目標としています。しかしこの機能を利用するには事前準備が必要な面や制限事項がある面から、注意が必要であると思います。

https://docs.docker.com/engine/security/userns-remap/

できる範囲で設定変更を行い、少しでもDockerのセキュリティを高められるようにしたいものです。