Slide 1

Slide 1 text

Dockerを始めて1週間の セキュリティエンジニア 2017/11/14(Tue) CyberAgent - AdtechStudio Security okazaki hajime

Slide 2

Slide 2 text

自己紹介 ● 氏名:岡崎 創(おかざき はじめ) ● 出身:埼玉県春日部市 (クレヨンしんちゃんの街) ● 職歴: ○ 3年くらい LAMP環境のフロントエンジニア ○ その後、3年くらい 上記のインフラエンジニア(サーバエンジニア) ○ その後、1年くらい  Webアプリケーションの脆弱性診断 ○ その後、サイバーエージェント アドテク本部に入社( 2015/6) ● 現在:アドテク本部セキュリティグループに所属

Slide 3

Slide 3 text

今日はコンテナ縛り?!

Slide 4

Slide 4 text

本日は Docker Security Beginner

Slide 5

Slide 5 text

Docker歴:1週間程度 ● 利用したDocker version ○ Docker version 17.09.0-ce ● Dockerの登場人物 ○ クライアント、デーモン、コンテナ、イメージ、レジストリ   ● とりあえず、docker run をしてみた ● Docker イメージの作成の仕方は、2つある? ○ dockerfileを「使う」か「使わないか」 ● 現在この程度、、、

Slide 6

Slide 6 text

docker architecture 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html Dockerアーキテクチャ

Slide 7

Slide 7 text

● クライアントとデーモン間 ○ セキュアな通信 ○ 接続制御 ● レジストリ ○ セキュアな通信 ○ 接続制御 ● イメージ ○ イメージの信頼性 ● コンテナ ○ コンテナの信頼性 ○ システムコールの制御 Dockerアーキテクチャ - セキュリティポイント

Slide 8

Slide 8 text

docker architecture - security point 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html Dockerアーキテクチャ - セキュリティポイント

Slide 9

Slide 9 text

● クライアントとデーモン間 ○ セキュアな通信 ○ 接続制御 ● レジストリ ○ セキュアな通信 ○ 接続制御 ● イメージ ○ イメージの信頼性 ● コンテナ ○ コンテナの信頼性 ○ システムコールの制御 クライアントとデーモン間

Slide 10

Slide 10 text

クライアントとデーモン間 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html

Slide 11

Slide 11 text

クライアントとデーモン間 ● TLSを利用して安全に接続しましょう ● また、上記の証明書はクライアント認証にも使えます #デーモン設定に追加 $ vim /usr/lib/systemd/system/docker.service [Service] # ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=ca.pem --tlscert=server.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 $ systemctl daemon-reload $ systemctl restart docker

Slide 12

Slide 12 text

レジストリ 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html

Slide 13

Slide 13 text

● クライアントとデーモン間 ○ セキュアな通信 ○ 接続制御 ● レジストリ ○ セキュアな通信 ○ 接続制御 ● イメージ ○ イメージの信頼性 ● コンテナ ○ コンテナの信頼性 ○ システムコールの制御 レジストリ

Slide 14

Slide 14 text

レジストリ ● こちらでも証明書により、通信の暗号化とクライアント認証が可能 *クライアント側 /etc/docker/certs.d/ <-- Certificate directory └── localhost:5000 <-- Hostname:port ├── client.cert <-- Client certificate ├── client.key <-- Client key └── ca.crt <-- Certificate authority that signed the registry certificate

Slide 15

Slide 15 text

イメージ 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html

Slide 16

Slide 16 text

● クライアントとデーモン間 ○ セキュアな通信 ○ 接続制御 ● レジストリ ○ セキュアな通信 ○ 接続制御 ● イメージ ○ イメージの信頼性 ● コンテナ ○ コンテナの信頼性 ○ システムコールの制御 イメージ

Slide 17

Slide 17 text

イメージ ● Enterprise edition advancedプランには「Docker Security Scanning」があります ○ Image security scanning and continuous vulnerability scanning ● Docker Hub内のOfficialイメージはDocker Security Scanningによってセキュリティス キャンが行われています

Slide 18

Slide 18 text

Docker Security Scanning CVE(Common Vulnerabilities and Exposures):脆弱性情報データベースと連動 参考: https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices

Slide 19

Slide 19 text

Docker Security Scanning 参考: https://docs.docker.com/docker-cloud/builds/image-scan/

Slide 20

Slide 20 text

ちなみに価格は? 参考: https://www.docker.com/pricing

Slide 21

Slide 21 text

コンテナ 参考: http://docs.docker.jp/engine/introduction/understanding-docker.html

Slide 22

Slide 22 text

● クライアントとデーモン間 ○ セキュアな通信 ○ 接続制御 ● レジストリ ○ セキュアな通信 ○ 接続制御 ● イメージ ○ イメージの信頼性 ● コンテナ ○ コンテナの信頼性 ○ システムコールの制御 コンテナ

Slide 23

Slide 23 text

コンテナ ● Docker Bench for Security(無料) ○ コンテナに対するセキュリティチェックが可能 #以下のコマンドで構築可能 $ sudo docker run -it --net host --pid host --cap-add audit_control \ -v /var/lib:/var/lib \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/lib/systemd:/usr/lib/systemd \ -v /etc:/etc --label docker-bench-security \ diogomonica/docker-bench-security 参考: https://github.com/docker/docker-bench-security

Slide 24

Slide 24 text

無料!?

Slide 25

Slide 25 text

Docker Bench for Security *チェック項目 [INFO] 1 - Host Configuration [INFO] 2 - Docker Daemon Configuration [INFO] 3 - Docker Daemon Configuration Files [INFO] 4 - Container Images and Build Files [INFO] 5 - Container Runtime [INFO] 6 - Docker Security Operations *結果 [INFO] 4 - Container Images and Build Files [WARN] 4.1 - Create a user for the container [WARN] * Running as root: vibrant_bassi [WARN] * Running as root: mysql [WARN] * Running as root: php ー> コンテナがrootユーザで動作しているため、警告!

Slide 26

Slide 26 text

コンテナ --security-opt ● docker run時のオプション「--security-opt」で ○ SELinuxやAppArmorなどのLinuxのアクセス制御を実現できる ○ dockerのプロセスを指定した SELinuxのラベルやAppArmorのDomainを用いて動かせる ○ AppArmorはMAC(Mandatory Access Control - 強制アクセス制御)を実現するためのミドルウェア ■ AppArmorはプログラム単位でファイル・プロセスごとにセキュリティプロファイルを適用できる ○ プロファイルでは: ■ どのファイルにどのようにアクセス可・不可 ■ ネットワークやSocketなどへのアクセス可・不可 ● seccomp(secure computing mode) ○ コンテナ上で利用可能なシステムコールを制御可能 参考:  https://docs.docker.com/engine/security/apparmor/  https://oss.sios.com/security/docker-security-20160223

Slide 27

Slide 27 text

コンテナ $ grep SECCOMP /boot/config-$(uname -r) CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_SECCOMP=y *通常 $ docker container run --rm -it --security-opt seccomp=default.json alpine sh / # chmod 777 / -v mode of '/' changed to 0777 (rwxrwxrwx) *chmod禁止パターン $ docker container run --rm -it --security-opt seccomp=default-no-chmod.json alpine sh / # chmod 777 / -v chmod: /: Operation not permitted 参考: https://github.com/docker/labs/tree/master/security/seccomp

Slide 28

Slide 28 text

このあたりは、よくわからない 今後の課題

Slide 29

Slide 29 text

Understanding Docker Security and Best Practices 参考:  https://blog.docker.com/2015/05/understanding-docker-security-and- best-practices/ DOCKER SECURITY blog https://www.docker.com/docker-security

Slide 30

Slide 30 text

ご清聴 ありがとうございました