Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

More from YASUKAZU NAGATOMI

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  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 • ダ鳥獣戯画 – 鳥獣戯画ベクター素材化サイト

×