Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

コンテナイメージの脆弱性スキャンについて

Docker Meetup Kansai #4 (19.08) Talk資料
コンテナイメージの脆弱性スキャンツール Trivy の紹介

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

コンテナイメージの脆弱性スキャンについて

  1. 1. コンテナイメージの脆弱性スキャンについて Docker Meetup Kansai #4 (19.08) やっさん @yassan168
  2. 2. 前回は Portus について話しました CVE データベース 脆弱性情報を同期 Portus (Web UI) Nginx (Proxy) PostgreSQL Portus (Background) Web UI Registry Service User/Team/Namespace /Image一覧/etcの更新 Image一覧の同期 脆弱性スキャン 脆弱性 情報の取得
  3. 3. 今回は 脆弱性のスキャンについて CVE データベース 脆弱性情報を同期 Portus (Web UI) Nginx (Proxy) PostgreSQL Portus (Background) Web UI Registry Service User/Team/Namespace /Image一覧/etcの更新 Image一覧の同期 脆弱性スキャン 脆弱性 情報の取得 この辺の話
  4. 4. コンテナイメージの脆弱性スキャン コンテナイメージの脆弱性スキャンツールといえば、、 • Docker Bench for Security • Docker社公式のベストプラクティスのチェックツール • クラウドのコンテナレジストリでのセキュリティスキャン • Docker Trusted Registry(DTR)、Quay、GCR • Clair • Anchore Engine • Microscanner
  5. 5. 個人的な脆弱性スキャンのイメージ 1. 導入がめんどくさい a. RDB用意して、LB用意して、、、 b. 簡単なやつはお高い。そして、だいたいクラウド。 2. 実行に時間がかかる だるいょ
  6. 6. そこで現れた救世主 https://github.com/aquasecurity/trivy golang製のCLIツール。 READMEが充実していてとてもありがたい。 使うがよい〜
  7. 7. Trivy もともとは、日本人が個人的に開発していたものが、 Aquaの人に買われて現在は、 AquaのOSS(AGPLv3)になっています。 趣味で作ったソフトウェアが海外企業に買われるまでの話 - knqyf263's blog
  8. 8. 特徴 1. 幅広い脆弱性の検知 • OSパッケージだけでなく、アプリケーションの依存ライブラリにも対応 • Red Hat Universal Base Imageにも対応 2. 簡単 • イメージ名指定だけでOK 3. 導入が容易 • DBなどの準備が一切不要 • OSのパッケージャ または バイナリの配置 だけですぐに利用可能 4. 精度が高い • 特に AlpineとRHEL/CentOSの検知精度が高い (参考: ここ) 5. DevSecOps • 簡単に使えるのでCI/CDに組み込みやすい
  9. 9. 導入方法 RHEL/CentOS、Debian/Ubuntu、Arch、Homebrewは、パッケージイン ストールが可能。 golang製なので、GitHubからバイナリを取得してつかうのもあり。 # Ubuntu 18の場合 $ sudo apt-get install apt-transport-https gnupg $ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - $ echo deb https://aquasecurity.github.io/trivy-repo/deb bionic main | sudo tee -a /etc/apt/sources.list.d/trivy.list $ sudo apt-get update $ sudo apt-get install trivy
  10. 10. 他のScannerとの比較 ※https://github.com/aquasecurity/trivy#overview Scanner OS Packages Application Dependencies Easy to use Accuracy Suitable for CI Trivy ◯ ◯ ◯ ◎ ◯ Clair ◯ × △ ◯ △ Anchore Engine ◯ △ △ ◯ △ Quay ◯ × ◯ ◯ × MicroScanner ◯ × ◯ ◯ ◯ Docker Hub ◯ × ◯ × × GCR ◯ × ◯ ◯ ×
  11. 11. チェック対象 スキャンする対象は大きく2つ。 1. OSパッケージ • Dockerfileに記載したパッケージ(apt、yumとか) 2. アプリケーションの依存ライブラリ • Gemfile.lock などのファイル名が存在すればそれをチェック ※現状はファイル名は固定
  12. 12. 対応するOSパッケージ 以下に対応。ただし、make installしたようなものは未対応。 OS バージョン パッケージ 未修正の脆弱 性検知 Alpine Linux 2.2 - 2.7, 3.0 - 3.10 apk NO Red Hat Universal Base Image 7, 8 yum/rpm YES Red Hat Enterprise Linux 6, 7, 8 yum/rpm YES CentOS 6, 7 yum/rpm YES Debian GNU/Linux wheezy, jessie, stretch, buster apt/apt-get/dpkg YES Ubuntu 12.04, 14.04, 16.04, 18.04, 18.10, 19.04 apt/apt-get/dpkg YES
  13. 13. OSパッケージの脆弱性情報はどこから? From where does trivy fetch CVE info? · Issue #105 · aquasecurity/trivy で回答している通り、自前のライブラリvuln-list-update を使ったりして取得。 毎日更新しているとの事。 Source URL Alpine Linux Bug tracker https://bugs.alpinelinux.org/projects/alpine/issues Security Bug Tracker https://security-tracker.debian.org/tracker/ National Vulnerability Database https://nvd.nist.gov/ OVAL https://www.debian.org/security/oval/ Security Data https://www.redhat.com/security/data/metrics/ Ubuntu CVE Tracker https://people.canonical.com/~ubuntu-security/cve/
  14. 14. 対応するアプリケーションの依存ライブラリ 決め打ちで以下のファイル名で検索してチェック • Gemfile.lock • Pipfile.lock • poetry.lock データソースは、以下の通り。どうやってるかは ここ 参照。 PHP:FriendsOfPHP/security-advisories Python:pyupio/safety-db Ruby:rubysec/ruby-advisory-db Node.js:nodejs/security-wg Rust:RustSec/advisory-db • package-lock.json • yarn.lock • Cargo.lock
  15. 15. どうやって使うか? とっても簡単。 $ trivy [イメージ名] 例: $ trivy yassan/test-trivy:0.1 ただし、初回実行時は脆弱性情報の取得に時間がかかります。 2回目以降は差分となるので速くなります(スキップして別途取得も可能) cf. コマンドの利用例:https://github.com/aquasecurity/trivy#examples
  16. 16. コマンドの詳細 USAGE: trivy [options] image_name OPTIONS: --format value, -f value format (table, json) (default: "table") --input value, -i value input file path instead of image name --severity value, -s value 重大度の指定 (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") --output value, -o value output file name --exit-code value 見つけたときのExit code指定 (default: 0) --skip-update skip db update --only-update value update db only specified distribution (comma separated) --reset remove all caches and database --clear-cache, -c clear image caches --quiet, -q suppress progress bar --ignore-unfixed display only fixed vulnerabilities --refresh refresh DB (usually used after version update of trivy) --auto-refresh refresh DB automatically when updating version of trivy --debug, -d debug mode --vuln-type value チェックするタイプ (default: "os,library") --cache-dir value cache directory (default: "/home/yassan/.cache/trivy") --help, -h show help --version, -v print the version
  17. 17. デモします
  18. 18. https://github.com/aquasecurity/trivy#continuous-integration-ci CIにどうやって組み込むん? jobs: build: docker: - image: docker:18.09-git steps: - checkout - setup_remote_docker - restore_cache: key: vulnerability-db - run: name: Build image command: docker build -t trivy-ci-test:${CIRCLE_SHA1} . - run: name: Install trivy command: | apk add --update curl VERSION=$( curl --silent "https://api.github.com/repos/aquasecurity/trivy/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/' ) wget https://github.com/aquasecurity/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz tar zxvf trivy_${VERSION}_Linux-64bit.tar.gz mv trivy /usr/local/bin - run: name: Scan the local image with trivy command: trivy --exit-code 0 --quiet --auto-refresh trivy-ci-test:${CIRCLE_SHA1} - save_cache: key: vulnerability-db paths: - $HOME/.cache/trivy  ; (略)
  19. 19. (再掲)特徴 1. 幅広い脆弱性の検知 • OSパッケージだけでなく、アプリケーションの依存ライブラリにも対応 • Red Hat Universal Base Imageにも対応 2. 簡単 • イメージ名指定だけでOK 3. 導入が容易 • DBなどの準備が一切不要 • OSのパッケージャ または バイナリの配置 だけですぐに利用可能 4. 精度が高い • 特に AlpineとRHEL/CentOSの検知精度が高い (参考: ここ) 5. DevSecOps • 簡単に使えるのでCI/CDに組み込みやすい
  20. 20. 後は試すだけ!
  21. 21. おまけ
  22. 22. 補足 • aquasecurity/trivy: A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI • aquasecurity/vuln-list-update • 趣味で作ったソフトウェアが海外企業に買われるまでの話 - knqyf263's blog • CIで使えるコンテナの脆弱性スキャナ - Qiita • ダ鳥獣戯画 – 鳥獣戯画ベクター素材化サイト

×