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. Dockerセキュリティ対策の現状と
    対策ツールの仕組み & 使い方
    Dockle / Trivyの原理と使い方 @ 2019.06.17 Vuls祭り #5

    View Slide

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

    View Slide

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

    View Slide

  4. コンテナ使ってますか?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. そこで Dockle と Trivy!!

    View Slide

  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


    View Slide

  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

    View Slide

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

    View Slide

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


    View Slide

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

    再ビルドして脆弱性をなくそう
    - ✅
    Content Trustを有効にしよう ✅ -
    HEALTHCHECKをつかおう ✅ -
    単独でupdateを利用しない ✅ -
    setuid/setgidは使わない ✅ -
    ADDの代わりにCOPYを使おう ✅ -
    秘密情報をDockerfileに入れない ✅ -
    安全なソースからパッケージを入れよう -

    View Slide

  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 -

    View Slide

  20. どうやって動いてるのか

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. 実践

    View Slide

  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分程度かかります。
    うちの犬

    View Slide

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

    View Slide

  29. Vulsでも試せる

    View Slide

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

    View Slide

  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"
    ]

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide