Slide 1

Slide 1 text

Dockerセキュリティ対策の現状と 対策ツールの仕組み & 使い方 Dockle / Trivyの原理と使い方 @ 2019.06.17 Vuls祭り #5

Slide 2

Slide 2 text

自己紹介 名前 : Tomoya AMACHI/天地知也 - Dockle作成者 - Vuls / Trivyコミッタ 所属 : Goodwith LLC., - Future Vulsのフロント/バックエンド etc よく使う言語 - JavaScript / Go / Python / PHP SNSなど - https://github.com/tomoyamachi - https://twitter.com/tomoyamachi

Slide 3

Slide 3 text

今回話したいこと ● Docker運用でチェックしたい大項目 ● TrivyとDockleを使おう ● TrivyとDockleで何がチェックできるか ● TrivyとDockleがどう動いているか ● 実践講座(3分程度) ● Vulsでもイメージスキャン! ※ 今回の資料の「コンテナ」とは Dockerコンテナのことを指します 今回はコンテナイメージのセキュリティがメインです

Slide 4

Slide 4 text

コンテナ使ってますか?

Slide 5

Slide 5 text

IDC Japanによると半数がDockerに取り組み中 https://www.idcjapan.co.jp/Press/Current/20180614Apr.html

Slide 6

Slide 6 text

コンテナの脆弱性対策してますか?

Slide 7

Slide 7 text

60%の組織でインシデントが起こっている https://www.tripwire.com/state-of-security/devops/organizations-container-security-incident/

Slide 8

Slide 8 text

何を判断指標にするか?

Slide 9

Slide 9 text

CISがセキュリティのベンチマークを出している https://www.cisecurity.org/cis-benchmarks/ 大項目 ● Host Configuration ● Docker Daemon Configuration ● Container Images and Build Files ● Container Runtime

Slide 10

Slide 10 text

Docker Bench for Security https://github.com/docker/docker-bench-security CISのベンチマークを一通りチェックできる。 ただし ● シェルスクリプトで実装 ● 依存パッケージが多数 ● 未実装の項目も多い

Slide 11

Slide 11 text

そもそもBuildと実行環境が別 ECS, GKEなどクラウド環境で実行することのほうが多い

Slide 12

Slide 12 text

イメージだけ簡単にチェックしたい クラウドのマネージドサービスで運用する場合

Slide 13

Slide 13 text

そこで Dockle と Trivy!!

Slide 14

Slide 14 text

Dockle @tomoyamachi released : 6/12 ● イメージに含まれるセキュリティホールをチェック
 ○ CVE-2019-5021: Alpine Docker Image ‘null root password’ Vulnerability 
 ○ CVE-IDなどに限らない
 ● Dockerfile Lintではなく、イメージの解析なので、元イメージに含まれる脆弱性も気付ける
 ● 競合に比べ高い検知性能
 ● ベストプラクティスなコンテナづくりを支援
 ○ Best practices for writing Dockerfiles 
 ● 3分でできる!最高のDockerfileを書いたあとにやるべき1つのこと @Qiita


Slide 15

Slide 15 text

Trivy @knqyf263 released : 5/15 ● CVE-IDなどが付与される脆弱性を検知
 ● 競合に比べ高い検知性能
 ● Alpine/RHEL/CentOS/Ubuntu/Debian
 ● アプリケーションの依存ライブラリもチェック
 ○ Gemfile.lock ○ Pipfile.lock ○ poetry.lock ○ composer.lock ○ package-lock.json ○ yarn.lock ○ Cargo.lock ● CIで使えるコンテナの脆弱性スキャナ @Qiita

Slide 16

Slide 16 text

Dockle/Trivyでチェックできること

Slide 17

Slide 17 text

CISベンチマークのチェック項目(意訳) 1. コンテナ用のユーザをつくろう
 2. 信頼できるイメージをベースにしよう
 3. 不要なパッケージは入れない
 4. 脆弱性のあるパッケージを見つけたら、再ビルドして脆弱性をなくそう
 5. Content Trustを有効にしよう
 6. HEALTHCHECKをつかおう
 7. 単独でupdateを利用しない
 8. setuid/setgidは使わない
 9. ADDの代わりにCOPYを使おう
 10. 秘密情報をDockerfileに入れない
 11. 安全なパッケージだけ使おう
 ※ Container Images and Build Filesの項目


Slide 18

Slide 18 text

Dockle Trivy コンテナ用のユーザを作ろう ✅ - 信頼できるイメージをベースにしよう - 不要なパッケージは入れない - - 脆弱性のあるパッケージを見つけたら、
 再ビルドして脆弱性をなくそう - ✅ Content Trustを有効にしよう ✅ - HEALTHCHECKをつかおう ✅ - 単独でupdateを利用しない ✅ - setuid/setgidは使わない ✅ - ADDの代わりにCOPYを使おう ✅ - 秘密情報をDockerfileに入れない ✅ - 安全なソースからパッケージを入れよう -

Slide 19

Slide 19 text

Dockle Trivy Create a user for the container ✅ - Use trusted base images for containers - Do not install unnecessary packages in the container - - Scan and rebuild the images to include security patches - ✅ Enable Content trust for Docker ✅ - Add HEALTHCHECK instruction to the container image ✅ - Do not use update instructions alone in the Dockerfile ✅ - Remove setuid and setgid permissions in the images ✅ - Use COPY instead of ADD in Dockerfile ✅ - Do not store secrets in Dockerfiles ✅ - Install verified packages only -

Slide 20

Slide 20 text

どうやって動いてるのか

Slide 21

Slide 21 text

さいしょに すべてはファイルである Linux(UNIX-Likeなツール)は、すべてファイルで構成される ※ リンクやディレクトリなども、特殊なファイルである

Slide 22

Slide 22 text

コンテナイメージの説明 ① 以下のファイルをtarで圧縮したもの ● イメージの概要をまとめたファイル ○ 実行されたコマンド ○ コンテナ起動時の設定など ● レイヤごとの情報が入ったフォルダ群 ○ 次ページで説明 https://www.slideshare.net/cr0hn/rootedcon-2017-docker- might-not-be-your-friend-trojanizing-docker-images

Slide 23

Slide 23 text

コンテナイメージの説明 ② レイヤごとの情報 ● レイヤのメタデータ ● フォルダ構造 https://www.slideshare.net/cr0hn/rootedcon-2017-d ocker-might-not-be-your-friend-trojanizing-docker-im ages

Slide 24

Slide 24 text

Dockle/Trivyでやっていること 1. Dockerイメージをtarファイルとして見る 2. tarファイルを解凍 3. tarファイルの中で、レイヤの順番を整理 4. 最終的にイメージで利用される指定のファイルを取り出す ○ もちろんリンクやディレクトリも可能 5. ファイルをパースして解析 ○ OS/OSバージョン, インストールパッケージ ○ ライブラリのロックファイル ○ /etc/shadow情報 ...etc...

Slide 25

Slide 25 text

だからイメージの解析だけで色々わかる なぜなら...

Slide 26

Slide 26 text

実践

Slide 27

Slide 27 text

$ docker build -t vuls-festival:test . $ brew install goodwithtech/dockle/dockle $ brew install knqyf263/trivy/trivy $ dockle vuls-festival:test $ trivy vuls-festival:test 直接コマンドラインで実行 ※ Trivyはローカルに脆弱性データベースを 構築するので、初回は 10分程度かかります。 うちの犬

Slide 28

Slide 28 text

まずは手元のイメージをチェック HostやDocker Daemon, ContainerRuntimeのセキュリティ話はまた別の機会に

Slide 29

Slide 29 text

Vulsでも試せる

Slide 30

Slide 30 text

Vulsでもイメージの解析/ライブラリ検知に対応 ● Trivyの機能を取り込み (DockleはCVE-IDに紐付かないので未取り込み ) ● パッケージの脆弱性検知の部分は Vulsのものを利用

Slide 31

Slide 31 text

イメージ以外のサーバにあるライブラリにも対応 以下の2パターンが選べます。 1. findLockで自動で検知 (findを利用してるので時間がかかる) 2. lockfilesでファイル指定 [servers.abuntu] host = "xxx.xxx.xxx" port = "22" user = "tamachi" keyPath = "/Users/amachi/.ssh/id_dsa" findLock = true # auto detect lockfile lockfiles = [ "/home/tamachi/lockfiles/package-lock.json" "/home/tamachi/lockfiles/yarn.lock" ]

Slide 32

Slide 32 text

スター & 応援をお願いします!!

Slide 33

Slide 33 text

ありがとうございました

Slide 34

Slide 34 text

時間が余ったときの小ネタ ● 実はVuls/Trivy/Dockleのすべてで利用されているイメージの解析するライブラリがある ● https://github.com/knqyf263/fanal(フランス語で「灯台」) ● レポジトリの命名は神戸さん ○ 詳しくは休憩時間に聞いてください