Dockerセキュリティ対策の現状と対策ツールの仕組み&使い方

 Dockerセキュリティ対策の現状と対策ツールの仕組み&使い方

Vuls祭り #5で話した内容です。
コンテナのセキュリティ対策であるTrivy, Dockle, Vulsのすべてに深く関わっている人間として話しました。

各ツールでの役割
- Vuls : コンテナスキャナ機能の実装/Trivyからライブラリスキャン機能をインポート etc
- Dockle : Author
- Trivy : 初期から深く関わっているコミッタ

5bc984d78def65048378c439d77c379f?s=128

Tomoya Amachi

June 17, 2019
Tweet

Transcript

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

    #5
  2. 自己紹介 名前 : Tomoya AMACHI/天地知也 - Dockle作成者 - Vuls /

    Trivyコミッタ 所属 : Goodwith LLC., - Future Vulsのフロント/バックエンド etc よく使う言語 - JavaScript / Go / Python / PHP SNSなど - https://github.com/tomoyamachi - https://twitter.com/tomoyamachi
  3. 今回話したいこと • Docker運用でチェックしたい大項目 • TrivyとDockleを使おう • TrivyとDockleで何がチェックできるか • TrivyとDockleがどう動いているか •

    実践講座(3分程度) • Vulsでもイメージスキャン! ※ 今回の資料の「コンテナ」とは Dockerコンテナのことを指します 今回はコンテナイメージのセキュリティがメインです
  4. コンテナ使ってますか?

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

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

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

  8. 何を判断指標にするか?

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

    • Container Images and Build Files • Container Runtime
  10. Docker Bench for Security https://github.com/docker/docker-bench-security CISのベンチマークを一通りチェックできる。 ただし • シェルスクリプトで実装 •

    依存パッケージが多数 • 未実装の項目も多い
  11. そもそもBuildと実行環境が別 ECS, GKEなどクラウド環境で実行することのほうが多い

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

  13. そこで Dockle と Trivy!!

  14. 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

  15. 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
  16. Dockle/Trivyでチェックできること

  17. 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の項目

  18. Dockle Trivy コンテナ用のユーザを作ろう ✅ - 信頼できるイメージをベースにしよう - 不要なパッケージは入れない - -

    脆弱性のあるパッケージを見つけたら、
 再ビルドして脆弱性をなくそう - ✅ Content Trustを有効にしよう ✅ - HEALTHCHECKをつかおう ✅ - 単独でupdateを利用しない ✅ - setuid/setgidは使わない ✅ - ADDの代わりにCOPYを使おう ✅ - 秘密情報をDockerfileに入れない ✅ - 安全なソースからパッケージを入れよう -
  19. 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 -
  20. どうやって動いてるのか

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

  22. コンテナイメージの説明 ① 以下のファイルをtarで圧縮したもの • イメージの概要をまとめたファイル ◦ 実行されたコマンド ◦ コンテナ起動時の設定など •

    レイヤごとの情報が入ったフォルダ群 ◦ 次ページで説明 https://www.slideshare.net/cr0hn/rootedcon-2017-docker- might-not-be-your-friend-trojanizing-docker-images
  23. コンテナイメージの説明 ② レイヤごとの情報 • レイヤのメタデータ • フォルダ構造 https://www.slideshare.net/cr0hn/rootedcon-2017-d ocker-might-not-be-your-friend-trojanizing-docker-im ages

  24. Dockle/Trivyでやっていること 1. Dockerイメージをtarファイルとして見る 2. tarファイルを解凍 3. tarファイルの中で、レイヤの順番を整理 4. 最終的にイメージで利用される指定のファイルを取り出す ◦

    もちろんリンクやディレクトリも可能 5. ファイルをパースして解析 ◦ OS/OSバージョン, インストールパッケージ ◦ ライブラリのロックファイル ◦ /etc/shadow情報 ...etc...
  25. だからイメージの解析だけで色々わかる なぜなら...

  26. 実践

  27. $ 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分程度かかります。 うちの犬
  28. まずは手元のイメージをチェック HostやDocker Daemon, ContainerRuntimeのセキュリティ話はまた別の機会に

  29. Vulsでも試せる

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

  31. イメージ以外のサーバにあるライブラリにも対応 以下の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" ]
  32. スター & 応援をお願いします!!

  33. ありがとうございました

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