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.

CVE情報調査 docker編

Last updated at Posted at 2023-04-23

Dockerコンテナの脆弱性管理

さて今度はDocker。

ぐぐるとvulsでコンテナを検索する方法というのもヒットするのですが、現状docを見ると、「廃止したので、trivy別途使ってね」とあります。
https://vuls.io/docs/ja/tutorial-scan-docker-image.html

後日、訂正。
https://vuls.io/docs/ja/usage-scan.html

Vulsは「コンテナ」をスキャンすることはできるみたいです。
上記の記載は、Vulsはコンテナの雛形になる「イメージ」のスキャンはしない、という意味でしょうか。
(結果をtrivyから取り込む機能はあるようですが)

逆に、trivyはイメージのスキャンはできるけど、コンテナのスキャンはしない、と。

なるほど。。
用途によってコンテナとイメージとどっちがアクセスしやすいかや、コンテナとイメージで差分が出る運用をしているかでどちらを使うか目利きですね。

とりあえずこの記事ではTrivyしか選択肢がないと思ってまとめていたので、そのまままとめます。

Trivyを使ってみる

https://github.com/aquasecurity/trivy
基本上記の公式サイトのinstall手順通りに実施で、ハマったりはしませんでした。

まずは一回実行してみる

コンテナで導入する方法をとりましたが、今回
こんな感じに出力されます。

$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy image --scanners=vuln ubuntu
2023-04-22T10:46:06.017Z        INFO     Vulnerability scanning is enabled
2023-04-22T10:46:06.913Z        INFO     Detected OS: ubuntu
2023-04-22T10:46:06.913Z        INFO     Detecting Ubuntu vulnerabilities...
2023-04-22T10:46:06.917Z        INFO     Number of language-specific files: 0

ubuntu (ubuntu 22.04)
=====================
Total: 19 (UNKNOWN: 0, LOW: 19, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

┌──────────────┬────────────────┬──────────┬──────────────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐
│   Library    │ Vulnerability  │ Severity │    Installed Version     │ Fixed Version │                            Title                            │
├──────────────┼────────────────┼──────────┼──────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ bash         │ CVE-2022-3715  │ LOW      │ 5.1-6ubuntu1             │               │ bash: a heap-buffer-overflow in valid_parameter_transform   │
│              │                │          │                          │               │ https://avd.aquasec.com/nvd/cve-2022-3715                   │
├──────────────┼────────────────┤          ├──────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ coreutils    │ CVE-2016-2781  │          │ 8.32-4.1ubuntu1          │               │ coreutils: Non-privileged session can escape to the parent  │
│              │                │          │                          │               │ session in chroot                                           │
│              │                │          │                          │               │ https://avd.aquasec.com/nvd/cve-2016-2781                   │
├──────────────┼────────────────┤          ├──────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ gpgv         │ CVE-2022-3219  │          │ 2.2.27-3ubuntu2.1        │               │ gnupg: denial of service issue (resource consumption) using │
│              │                │          │                          │               │ compressed packets                                          │
│              │                │          │                          │               │ https://avd.aquasec.com/nvd/cve-2022-3219                   │
├──────────────┼────────────────┤          ├──────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤

きれいに出してくれるんですけど、逆にスクリプトとかでは食えない形式ですね。。
出力フォーマット選べないか、見てみます。
公式サイトやgitより、-hしてしまうほうがわかりやすかったです。

$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy image -h
...
  -f, --format string          format (table, json, template, sarif, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
...

みっけ。

$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy image --scanners=vuln --format json ubuntu 

出力は省略します。
後でvulsの結果と一緒に、CVEベースでソートするスクリプト作っておくことにしましょう。

使ってみての所感

特に問題なく、今回の用途ではコンテナ分はtrivyで調査するようにしようと思います。

一応、備忘をいくつか。

コンテナの「イメージ」を調査するツールである。

調査するのはコンテナ「イメージ」であり、実施祭に動いているコンテナを見るわけではない点は、一応注意でしょうか。
運用フェイズに入っていればコンテナの構成=イメージの構成でまず問題ないとは思うのですが、もしコンテナ生成後に追加でパッケージを入れる、という使い方をする場合は、要注意。

OSの標準パッケージで導入している分以外のパッケージの脆弱性は見てくれない

これはVulsと一緒ですね。
コンテナでソフトを使う場合、ソフトのメインの部分は都度コンパイルしていたりと、OSの標準レポジトリ配布のパッケージを使うことはまずありませんので、メインのソフトはCPEを調べておいて、一括でVulsで検索でしょうか。
有償版のdocにはtrivyをVuls側から駆動するというような記載も見かけましたが、深堀はしてません。

CVE情報はどのように更新している?

CVE情報をどの時点でダウンロードしているのかが調べきれてません。
うっかり古いDBをそのまま使っていて、脆弱性を見落として、となるとなんともです。
今回はワンショットで調査してそれっきりになる予定ですが、長期的に使うなら、更新方法をきちんと整理しておかないといけないですね。。

ゴミコンテナがたくさん残る、、

docker型で実行する場合、実行時に-rmをつけないと、実行済みのゴミコンテナが大量に出来上がります。。
rmつけ忘れたら、以下で定期的にお掃除ですね。。

$ docker ps -a -f ancestor=aquasec/trivy --format "{{.ID}}" | xargs docker rm

まとめ

dockerコンテナの脆弱性調査はtrivyで行こうと思います。

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?