Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

Tomoya Amachi

June 17, 2019
Tweet

More Decks by Tomoya Amachi

Other Decks in Technology

Transcript

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

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

    実践講座(3分程度) • Vulsでもイメージスキャン! ※ 今回の資料の「コンテナ」とは Dockerコンテナのことを指します 今回はコンテナイメージのセキュリティがメインです
  3. 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

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

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

    脆弱性のあるパッケージを見つけたら、
 再ビルドして脆弱性をなくそう - ✅ Content Trustを有効にしよう ✅ - HEALTHCHECKをつかおう ✅ - 単独でupdateを利用しない ✅ - setuid/setgidは使わない ✅ - ADDの代わりにCOPYを使おう ✅ - 秘密情報をDockerfileに入れない ✅ - 安全なソースからパッケージを入れよう -
  7. 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 -
  8. コンテナイメージの説明 ① 以下のファイルをtarで圧縮したもの • イメージの概要をまとめたファイル ◦ 実行されたコマンド ◦ コンテナ起動時の設定など •

    レイヤごとの情報が入ったフォルダ群 ◦ 次ページで説明 https://www.slideshare.net/cr0hn/rootedcon-2017-docker- might-not-be-your-friend-trojanizing-docker-images
  9. Dockle/Trivyでやっていること 1. Dockerイメージをtarファイルとして見る 2. tarファイルを解凍 3. tarファイルの中で、レイヤの順番を整理 4. 最終的にイメージで利用される指定のファイルを取り出す ◦

    もちろんリンクやディレクトリも可能 5. ファイルをパースして解析 ◦ OS/OSバージョン, インストールパッケージ ◦ ライブラリのロックファイル ◦ /etc/shadow情報 ...etc...
  10. $ 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分程度かかります。 うちの犬
  11. イメージ以外のサーバにあるライブラリにも対応 以下の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" ]