今回はコンテナイメージの脆弱性を確認してくれるtrivy編となります。
実際にインストールをしてみましょう。
まずはtrivy をyum でインストールするための作業です。
1.使ってるOSのバージョンを変数に入れます。
# RELEASE_VERSION=$(grep -Po '(?<=VERSION_ID=")[0-9]' /etc/os-release)
2.1.の値を使ってyumのレポジトリを追加します。
# cat << EOF | sudo tee -a /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$RELEASE_VERSION/\$basearch/
gpgcheck=0
enabled=1
EOF
[trivy]
name=Trivy repository
baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$RELEASE_VERSION/\$basearch/
gpgcheck=0
enabled=1
EOF
3.一旦全体のUpdateをおこないます。
# sudo yum -y update
# sudo yum -y update
4.trivyをインストールします。
# sudo yum -y install trivy
# sudo yum -y install trivy
これでインストールできたようです。
コマンドを打ってみましょう・・・のまえに、スキャンするイメージが必要なので適用にCentos7でもイメージを引っ張っておきましょう。
# docker pull centos:centos7
それでは、trivyによるコンテナイメージのスキャンを実施です。
# trivy i centos:centos7
実行結果がかなり長く全部乗せられませんので見づらいかもしれないですがスクショを・・・
思ってたよりは全然きれいにテーブル表示形式で出力が見れました。
一番左が対象となるもので、そこからCVEの何に該当しているか、脆弱性の深刻さ、インストールされているバージョン、問題が解決しているバージョン、一番右はCVEのタイトルですかね。
で、これってどうやって対処するんでしょうと思ったあなた。
私も当然思いました。
仮になんですが、このイメージから展開したコンテナにログインしてyum update でもすればいいんでしょうか?(権限的にできる?
ま、とりあえずやってみましょ。
コンテナを起動します。
# docker run -d -i -t centos:centos7 /bin/bash
コンテナにログインするため、CONTAINER IDを確認します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c70ec6e46e2 centos:centos7 "/bin/bash" 6 minutes ago Up 6 minutes eager_mclean
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c70ec6e46e2 centos:centos7 "/bin/bash" 6 minutes ago Up 6 minutes eager_mclean
コンテナにログインしてyum update を実行します。
# docker exec -i -t 8c70ec6e46e2 /bin/bash
# yum update -y
先ほど「HIGH」で表示されていた「bind-license」もUpdateされていることが確認できました。
# cat /var/log/yum.log | grep bind
Nov 13 01:55:50 Erased: 32:bind-utils-9.11.4-26.P2.el7.x86_64
Nov 13 01:55:51 Erased: 32:bind-libs-9.11.4-26.P2.el7.x86_64
Nov 13 01:55:51 Erased: 32:bind-libs-lite-9.11.4-26.P2.el7.x86_64
Jun 09 01:36:23 Updated: 32:bind-license-9.11.4-26.P2.el7_9.9.noarch
# cat /var/log/yum.log | grep bind
Nov 13 01:55:50 Erased: 32:bind-utils-9.11.4-26.P2.el7.x86_64
Nov 13 01:55:51 Erased: 32:bind-libs-9.11.4-26.P2.el7.x86_64
Nov 13 01:55:51 Erased: 32:bind-libs-lite-9.11.4-26.P2.el7.x86_64
Jun 09 01:36:23 Updated: 32:bind-license-9.11.4-26.P2.el7_9.9.noarch
yum update -y できたので、一旦exit でコンテナから抜けます。
この状態でイメージスキャンをしても、変更が保存されていないイメージしかいないため結果は変わりません。
そのため、docker commit で更新したコンテナから新しくイメージを「centos:update」として作成します。
# docker commit 8c70ec6e46e2 centos:update
sha256:6bc0f6964c196dc38a3b00bcf79a9b586306253808b08e8e26b16c80290831fc
# docker commit 8c70ec6e46e2 centos:update
sha256:6bc0f6964c196dc38a3b00bcf79a9b586306253808b08e8e26b16c80290831fc
作成されたものを確認してみると、SIZEが増えているのでちゃんとyum update の内容が反映されてそうですね。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos update 6bc0f6964c19 About a minute ago 510MB
centos centos7 eeb6ee3f44bd 8 months ago 204MB
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos update 6bc0f6964c19 About a minute ago 510MB
centos centos7 eeb6ee3f44bd 8 months ago 204MB
では改めて作成したイメージをスキャンしてみましょう。
# trivy i centos:update
# trivy i centos:update
Fixed Version があったものが全部表示されなくなったようですね。
アップデートで解消できる問題については、trivyで発見と対応後の状態を確認できることは確認できました。
ちょっと長くなってしまったので、dockleは次回に回したいと思います。