0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Trivyでコンテナイメージの脆弱性を調査

Last updated at Posted at 2022-05-26

概要

Trivyは、次の3種類のセキュリティ問題を検出が可能。

参考:https://aquasecurity.github.io/trivy/

  • 脆弱性
    • OSパッケージ(Alpine、Red Hat Universal Base Image、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、CBL-Mariner、Oracle Linux、Debian、Ubuntu、Amazon Linux、openSUSE Leap、SUSE Enterprise Linux、Photon OS、Distroless)
    • 言語固有のパッケージ(Bundler、Composer、Pipenv、Poetry、npm、yarn、Cargo、NuGet、Maven、Go)
  • 設定ミス
    • Kubernetes
    • Docker
    • terraform
    • CloudFormation
  • シークレットキー
    • AWSアクセスキー
    • GCPサービスアカウント
    • GitHubパーソナルアクセストークン

コンテナイメージの脆弱性スキャン手順

イメージ名を指定してスキャン

  • TrivyイメージをPull
docker pull aquasec/trivy
  • スキャン実行
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    -v [YOUR_CACHE_DIR]:/root/.cache/ aquasec/trivy image [YOUR_IMAGE_NAME]

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy image python:3.6-alpine

全てのイメージをスキャン

  • 検査対象のコンテナリストを環境変数に入れる

全てのコンテナを対象とする

LIST="`docker images --format '{{.Repository}}:{{.Tag}}' | sed -e 's/[\r\n]\+//g'`"
    
export CON_LIST="${LIST//$'\n'/ }"
    
printenv | grep CON_LIST

一部のコンテナを対象とする

LIST="`docker images --format '{{.Repository}}:{{.Tag}}' '<コンテナ名>/*' | sed -e 's/[\r\n]\+//g'`"

export CON_LIST="${LIST//$'\n'/ }"

printenv | grep CON_LIST
  • スキャン用スクリプト作成
vi scan.sh
#!/bin/sh
LENGTH=`echo $CON_LIST | tr ' ' '\n' | wc -l`
d=`date +%Y%m%d`
mkdir -p /app/trivy_result/${d}
if [ "$1" = "-j" -o "$1" = "--json" ]; then
  for i in `seq $LENGTH`
  do
    ELEMENT=`echo $CON_LIST | cut -d ' ' -f $i`
    trivy image --timeout 10m -f json $ELEMENT > app/trivy_result/${d}/${ELEMENT##*/}.json
  done
else
  for i in `seq $LENGTH`
  do
    ELEMENT=`echo $CON_LIST | cut -d ' ' -f $i`
    trivy image --timeout 10m $ELEMENT > app/trivy_result/${d}/${ELEMENT##*/}.txt
  done
fi
  • 実行権限の付与
chmod +x scan.sh
  • スキャン実行
    以下のコマンドを実行してスキャンを実行する。 結果は、コマンドを実行したディレクトリの./trivy_result/yyyymmddに出力される
docker run -v /var/run/docker.sock:/var/run/docker.sock  \  
  -v /tmp/Caches:/root/.cache/ \ # 脆弱性DB等キャッシュ保存先
  -v $PWD:/app \                 # scan.shをマウントする
  -e CON_LIST \                  # 検査対象のコンテナ一覧を環境変数として渡す
  --entrypoint "" \
  aquasec/trivy sh -c "app/scan.sh"

例 結果をTable形式で出力

docker run -v /var/run/docker.sock:/var/run/docker.sock  \
  -v /tmp/Caches:/root/.cache/ \
  -v $PWD:/app \
  -e CON_LIST \
  --entrypoint "" \
  aquasec/trivy sh -c "app/scan.sh"

例 結果をJson形式で出力

docker run -v /var/run/docker.sock:/var/run/docker.sock  \
  -v /tmp/Caches:/root/.cache/ \
  -v $PWD:/app \
  -e CON_LIST \
  --entrypoint "" \
  aquasec/trivy sh -c "app/scan.sh -j"

結果

python:3.6-alpineをスキャンした際の結果は以下の通り

python:3.6-alpine (alpine 3.15.0)
=================================
Total: 23 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 11, CRITICAL: 10)

┌──────────────┬────────────────┬──────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐
│   Library    │ Vulnerability  │ Severity │ Installed Version │ Fixed Version │                           Title                            │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ busybox      │ CVE-2022-28391 │ CRITICAL │ 1.34.1-r3         │ 1.34.1-r5     │ busybox: remote attackers may execute arbitrary code if    │
│              │                │          │                   │               │ netstat is used                                            │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-28391                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2022-22822 │ CRITICAL │ 2.4.1-r0          │ 2.4.3-r0      │ expat: Integer overflow in addBinding in xmlparse.c        │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22822                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-22823 │          │                   │               │ expat: Integer overflow in build_model in xmlparse.c       │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22823                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-22824 │          │                   │               │ expat: Integer overflow in defineAttribute in xmlparse.c   │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22824                 │
│              ├────────────────┤          │                   ├───────────────┼────────────────────────────────────────────────────────────┤
│              │ CVE-2022-23852 │          │                   │ 2.4.4-r0      │ expat: Integer overflow in function XML_GetBuffer          │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-23852                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-23990 │          │                   │               │ expat: integer overflow in the doProlog function           │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-23990                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2022-25235 │ CRITICAL │ 2.4.1-r0          │ 2.4.5-r0      │ expat: Malformed 2- and 3-byte UTF-8 sequences can lead to │
│              │                │          │                   │               │ arbitrary code...                                          │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-25235                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-25236 │          │                   │               │ expat: Namespace-separator characters in "xmlns[:prefix]"  │
│              │                │          │                   │               │ attribute values can lead to arbitrary code...             │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-25236                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2022-25315 │ CRITICAL │ 2.4.1-r0          │ 2.4.5-r0      │ expat: Integer overflow in storeRawNames()                 │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-25315                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2021-45960 │ HIGH     │ 2.4.1-r0          │ 2.4.3-r0      │ expat: Large number of prefixed XML attributes on a single │
│              │                │          │                   │               │ tag can...                                                 │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2021-45960                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2021-46143 │ HIGH     │ 2.4.1-r0          │ 2.4.3-r0      │ expat: Integer overflow in doProlog in xmlparse.c          │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2021-46143                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-22825 │          │                   │               │ expat: Integer overflow in lookup in xmlparse.c            │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22825                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-22826 │          │                   │               │ expat: Integer overflow in nextScaffoldPart in xmlparse.c  │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22826                 │
│              ├────────────────┤          │                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-22827 │          │                   │               │ expat: Integer overflow in storeAtts in xmlparse.c         │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-22827                 │
│              ├────────────────┤          │                   ├───────────────┼────────────────────────────────────────────────────────────┤
│              │ CVE-2022-25314 │          │                   │ 2.4.5-r0      │ expat: integer overflow in copyString()                    │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-25314                 │
│              ├────────────────┼──────────┤                   │               ├────────────────────────────────────────────────────────────┤
│              │ CVE-2022-25313 │ MEDIUM   │                   │               │ expat: stack exhaustion in doctype parsing                 │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-25313                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ krb5-libs    │ CVE-2021-37750 │ MEDIUM   │ 1.19.2-r4         │ 1.19.3-r0     │ krb5: NULL pointer dereference in process_tgs_req() in     │
│              │                │          │                   │               │ kdc/do_tgs_req.c via a FAST inner...                       │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2021-37750                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ libcrypto1.1 │ CVE-2022-0778  │ HIGH     │ 1.1.1l-r7         │ 1.1.1n-r0     │ openssl: Infinite loop in BN_mod_sqrt() reachable when     │
│              │                │          │                   │               │ parsing certificates                                       │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-0778                  │
├──────────────┤                │          ├───────────────────┼───────────────┤                                                            │
│ libretls     │                │          │ 3.3.4-r2          │ 3.3.4-r3      │                                                            │
│              │                │          │                   │               │                                                            │
│              │                │          │                   │               │                                                            │
├──────────────┤                │          ├───────────────────┼───────────────┤                                                            │
│ libssl1.1    │                │          │ 1.1.1l-r7         │ 1.1.1n-r0     │                                                            │
│              │                │          │                   │               │                                                            │
│              │                │          │                   │               │                                                            │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ ssl_client   │ CVE-2022-28391 │ CRITICAL │ 1.34.1-r3         │ 1.34.1-r5     │ busybox: remote attackers may execute arbitrary code if    │
│              │                │          │                   │               │ netstat is used                                            │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-28391                 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ xz-libs      │ CVE-2022-1271  │ HIGH     │ 5.2.5-r0          │ 5.2.5-r1      │ gzip: arbitrary-file-write vulnerability                   │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2022-1271                  │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ zlib         │ CVE-2018-25032 │ HIGH     │ 1.2.11-r3         │ 1.2.12-r0     │ zlib: A flaw found in zlib when compressing (not           │
│              │                │          │                   │               │ decompressing) certain inputs...                           │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2018-25032                 │
└──────────────┴────────────────┴──────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘

Python (python-pkg)
===================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?