IBM TechXchange AIOps Group Japan

AIOps Group Japan

当ユーザーグループは、AIOps製品(Instana, Turbonomic, Cloud Pak for Watson AIOps, IBM SevOne NPM, Flexera One with IBM Observability, IBM Workload Scheduler等)

 View Only

SBOMを作成するsyftを試し、脆弱性の有無をgrypeで確認してみました

By Tsuyoshi Sano posted Mon September 30, 2024 03:05 AM

  

最近何かと話題のSBOMですが、日頃扱っているOSやアプリもまた、SBOMを作成するとそこに記載されることになります。

一体どのように記載されるのでしょうか?導入から試してみました。

なお、SBOMの利用背景については、経済産業省の資料を参照するのが良いと思われます。

(参照先:https://www.meti.go.jp/press/2023/07/20230728004/20230728004.html)

SBOM自体はテキストファイルです。SBOMスキャニングソフトで作成することができます。

今回は、OSSのSyftをLinuxへ導入し、コンテナイメージのSBOMを作成したいと思います。

スキャニングに使うソフトウエアによりますが、ローカルのコンテナイメージだけでなく、レジストリにあるもの、OVAファイルなどいろいろなファイル・形態をスキャンできるようです。

SBOMには形式があります。CycloneDX、SPDX、SWIDタグの3種類です。

IBM ConcertではCycloneDX形式が取り込み可能なので、CycloneDX形式の出力を確認します。

Syftはgithub上で管理されています。(URL:https://github.com/anchore/syft)

各種OSに対応し、さまざまな導入方法が用意されています。

今回はLinuxのディストリビューションの1つのUbuntu22.04に導入します。

インストールは以下のコマンドを投入します。

/usr/local/binに配置することから、作業はルート権限が必要です。

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

数分で完了します。導入作業が完了したか確認するためバージョンを確認してみましょう。

# syft version
Application: syft
Version:    1.13.0
BuildDate:  2024-09-24T13:28:58Z
GitCommit:  01de99b25304ec95197c00b21d698f127b31a887
GitDescription: v1.13.0
Platform:   linux/amd64
GoVersion:  go1.22.7
Compiler:   gc

上記では、コマンドはエラーなく実行され、バージョンは1.13.0と表示されています。正常に導入ができました。

それでは確認したいところですが、検査対象のコンテナイメージが欲しいところです。

古いOSイメージをダウンロードして試します。

# docker pull ubuntu:18.04

18.04: Pulling from library/ubuntu
Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Status: Image is up to date for ubuntu:18.04
docker.io/library/ubuntu:18.04

イメージの確認をします。

# docker image ls
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
test_c1                 latest    3ac657ab9c41   3 hours ago     1.59GB
example                 latest    f334ab72bb96   4 weeks ago     78.1MB
ubuntu                  18.04     f9a80a55f492   16 months ago   63.2MB  <ーこれ

無事取り寄せたので、早速スキャンしてみます。コマンドの実行により結果が画面に表示されるためファイルにリダイレクトします。

# syft ubuntu:18.04 -o cyclonedx-json | jq . > sbom-ubuntu1804.json
 ✔ Loaded image                                                                                                                         ubuntu:18.04
 ✔ Parsed image                                                              sha256:f9a80a55f492e823bf5d51f1bd5f87ea3eed1cb31788686aa99a2fb61a27af6a
 ✔ Cataloged contents                                                               184daa6f5f3284ec38c2de7eb29b6bd52b62c1cfb8abfd650f4961e183aab6cb
   ├── ✔ Packages                        [89 packages]  
   ├── ✔ File digests                    [1,903 files]  
   ├── ✔ File metadata                   [1,903 locations]  
   └── ✔ Executables                     [723 executables]  

上記のように表示されると実行は終了です。

パッケージは89個、ファイルは1,903個あると示しています。無事にスキャンができたようです。

オプションは-oが表示形式の指定となります。

jqはオプションでありませんが、今回、人間に見やすい表示にパースすべくパイプしています。

では保存したsbom-ubuntu1804.jsonを確認してみます(まずは先頭から)

------------

{
  "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "serialNumber": "urn:uuid:f19ee265-3f35-481c-be8b-6ba083232a46",
  "version": 1,
  "metadata": {
    "timestamp": "2024-09-30T13:17:02+09:00",
    "tools": {
      "components": [
        {
          "type": "application",
          "author": "anchore",
          "name": "syft",
          "version": "1.13.0"
        }
      ]
    },
    "component": {
      "bom-ref": "4615e4019267979e",
      "type": "container",
      "name": "ubuntu",
      "version": "18.04"
    },
    "properties": [
      {
        "name": "syft:image:labels:org.opencontainers.image.ref.name",
        "value": "ubuntu"
      },
      {
        "name": "syft:image:labels:org.opencontainers.image.version",
        "value": "18.04"

(以下略)

------------

gcc部分をみてみます。

先頭の行番号はvi上で設定たものでSBOM形式には入りません。

バージョンやライセンスの情報が記載されています。

これにてSBOMの作成は終了となります。

他にもスキャンツールはいろいろありますので試して理解を深めていただければと思います。

さて、SBOMが作成され、モジュールの一覧が洗い出されました。すると次に気になることがありませんか?

どの程度、脆弱性を有しているか確認しておこうと思いますね。

syftを提供しているところがgrypeというOSSを提供しています。

grypeもまたgithub上で管理されています。(URL:https://github.com/anchore/grype)

syft同様に各種OSに対応し、さまざまな導入方法が用意されています。

今回もLinuxのディストリビューションの1つのUbuntu22.04に導入します。

インストールは以下のコマンドを投入します。

/usr/local/binに配置することから、作業はルート権限が必要です。

インストール作業:
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

数分で完了します。導入作業が正常に完了したか確認するためバージョンを確認してみましょう。

# grype version
Application:         grype
Version:             0.81.0
BuildDate:           2024-09-25T16:57:40Z
GitCommit:           641982ff47fcb8d56b9555e5f0dad23afa7bc690
GitDescription:      v0.81.0
Platform:            linux/amd64
GoVersion:           go1.23.1
Compiler:            gc
Syft Version:        v1.13.0
Supported DB Schema: 5

コマンドも実行でき、バージョン情報も表示されていることから正常にインストールは完了したとします。

次にDBをダウンロードします。脆弱性情報の数は多いのでデータベースが必要です。

grype DBのダウンロードコマンドは以下の通りとなります。
# grype db list

Built:    2024-09-29 01:31:46 +0000 UTC
URL:      https://grype.anchore.io/databases/vuldnerability-db_v5_2024-09-29T01:31:46Z_1727583622.tar.gz
Checksum: sha256:f0e806e34054183df0905703bc9544084f36db7a81a9698bdfc7bf7dcc11bdfa
 
Built:    2024-09-28 01:32:22 +0000 UTC
URL:      https://grype.anchore.io/databases/vulnerability-db_v5_2024-09-28T01:32:22Z_1727497250.tar.gz
Checksum: sha256:fcf9552fe9673132beba32d94e7984d4ab19a2c27a6206567104f1212984c303
 
Built:    2024-09-27 01:31:56 +0000 UTC
URL:      https://grype.anchore.io/databases/vulnerability-db_v5_2024-09-27T01:31:56Z_1727410820.tar.gz
Checksum: sha256:7cbf8a171c3ecddce6b5ccc990760bd916d3b5034e558e210a49ca20fb1b1114
 
Built:    2024-09-26 01:32:09 +0000 UTC
URL:      https://grype.anchore.io/databases/vulnerability-db_v5_2024-09-26T01:32:09Z_1727324424.tar.gz
Checksum: sha256:19fdfca30765e4b472860d800070744f477f9976eb17c72d4082e39a7070c2c1
 
4 databases available for schema 5

4つのデータベースが利用可能で、当日を含め4日分あることがわかります。

導入にあたりまずDBファイルをダウンロード、次にgrypeのDBに読み込ませます。

ファイルサイズは200MB弱のようです。

今回は導入テストということもあり最新のものを使用します。

 # wget https://grype.anchore.io/databases/vulnerability-db_v5_2024-09-29T01:31:46Z_1727583622.tar.gz

2024-09-30 14:37:21 (91.5 MB/s) - ‘vulnerability-db_v5_2024-09-29T01:31:46Z_1727583622.tar.gz’ saved [189867986/189867986]

# grpye db import  ./ vulnerability-db_v5_2024-09-29T01:31:46Z_1727583622.tar.gz

終了するまで数分かかる場合があります。

SBOMからの脆弱性スキャンの実行

syftで作成したSBOMを使用します。

古いOSとはいえ、どれだけ脆弱性があるのでしょうか?


# grype sbom:./sbom-ubuntu1804.json -o table=sbom-ubuntu1804-20240930.txt
 ✔ Vulnerability DB                [no update available]  
 ✔ Scanned for vulnerabilities     [130 vulnerability matches]  
   ├── by severity: 0 critical, 2 high, 68 medium, 51 low, 9 negligible
   └── by status:   0 fixed, 130 not-fixed, 0 ignored 

作業完了し、メッセージからクリティカルはゼロ、高程度が2個、中程度が68個云々と言った結果になりました。

作成された結果を見てみます。


# less sbom-ubuntu1804-20240930.txt
NAME                          INSTALLED                     FIXED-IN     TYPE  VULNERABILITY     SEVERITY   
apt                           2.6.1                                      deb   CVE-2011-3374     Negligible  
binutils                      2.40-2                                     deb   CVE-2023-1972     Negligible  
binutils                      2.40-2                                     deb   CVE-2021-32256    Negligible  
binutils                      2.40-2                                     deb   CVE-2018-9996     Negligible 


(略)


imagemagick-6.q16             8:6.9.11.60+dfsg-1.6+deb12u2               deb   CVE-2005-0406     Negligible  
krb5-multidev                 1.20.1-2+deb12u2              (won't fix)  deb   CVE-2024-26461    High        
krb5-multidev                 1.20.1-2+deb12u2                           deb   CVE-2018-5709     Negligible  
krb5-multidev                 1.20.1-2+deb12u2              (won't fix)  deb   CVE-2024-26462    Unknown     
krb5-multidev                 1.20.1-2+deb12u2              (won't fix)  deb   CVE-2024-26458    Unknown     
libaom3                       3.6.0-1+deb12u1               (won't fix)  deb   CVE-2023-6879     Critical    
libaom3                       3.6.0-1+deb12u1               (won't fix)  deb   CVE-2023-39616    High        
libapr1                       1.7.2-3                       (won't fix)  deb   CVE-2023-49582    Medium      
libapt-pkg6.0                 2.6.1                                      deb   CVE-2011-3374     Negligible  
libasan8                      12.2.0-14                     (won't fix)  deb   CVE-2023-4039     Medium      
libasan8                      12.2.0-14                                  deb   CVE-2022-27943    Negligible 


(略)
 

このような形でチェックすることができます。

SBOMを作成できれば、簡単に脆弱性が洗い出せるとは良い時代になったものです。

アップロードされたSBOMを使い、SBOMを管理し脆弱性やコンプライアンスの管理をすることができるのも弊社製品IBM Concertの1つの機能となります。

参考になりましたでしょうか?

そういえば、syftとgrypeにはマスコットキャラクターがあるんですね。

0 comments
20 views

Permalink