ライブラリのバージョンを一覧表示する syft で遊んでみた。

こんにちは k-jun です。今回は 自動で Software Bill of Materials (SBOM) を出力してくれるツール syft を試して見ます。

https://github.com/anchore/syft

自動で package を探索し、関連するライブラリなどを一覧で出力してくれるようです。再現環境を用意する際にもバージョンを簡単に合わせることができて便利そうです。

Setup

$ brew tap anchore/syft
$ brew install syft

Run

内容すらも忘れた適当な TODO アプリに対して syft を適用してみます。

$ syft todo-app
 ✔ Loaded image
 ✔ Parsed image
 ✔ Cataloged packages      [91 packages]
NAME                    VERSION                 TYPE
adduser                 3.118                   deb
apt                     1.8.2.1                 deb
base-files              10.3+deb10u4            deb
base-passwd             3.5.46                  deb
bash                    5.0-4                   deb
bsdutils                1:2.33.1-0.1            deb
coreutils               8.30-3                  deb
dash                    0.5.10.2-5              deb
debconf                 1.5.71                  deb
debian-archive-keyring  2019.1                  deb
debianutils             4.8.6.1                 deb
diffutils               1:3.7-3                 deb
dpkg                    1.19.7                  deb
e2fsprogs               1.44.5-1+deb10u3        deb
fdisk                   2.33.1-0.1              deb
findutils               4.6.0+git+20190209-2    deb
gcc-8-base              8.3.0-6                 deb
gpgv                    2.2.12-1+deb10u1        deb
grep                    3.3-1                   deb
gzip                    1.9-3                   deb
hostname                3.21                    deb
init-system-helpers     1.56+nmu1               deb
iproute2                4.20.0-2                deb
iputils-ping            3:20180629-2+deb10u1    deb
libacl1                 2.2.53-4                deb
libapt-pkg5.0           1.8.2.1                 deb
libattr1                1:2.4.48-4              deb
libaudit-common         1:2.8.4-3               deb
libaudit1               1:2.8.4-3               deb
libblkid1               2.33.1-0.1              deb
libbz2-1.0              1.0.6-9.2~deb10u1       deb
libc-bin                2.28-10                 deb
libc6                   2.28-10                 deb
libcap-ng0              0.7.9-2                 deb
libcap2                 1:2.25-2                deb
libcap2-bin             1:2.25-2                deb
libcom-err2             1.44.5-1+deb10u3        deb
libdb5.3                5.3.28+dfsg1-0.5        deb
libdebconfclient0       0.249                   deb
libelf1                 0.176-1.1               deb
libext2fs2              1.44.5-1+deb10u3        deb
libfdisk1               2.33.1-0.1              deb
libffi6                 3.2.1-9                 deb
libgcc1                 1:8.3.0-6               deb
libgcrypt20             1.8.4-5                 deb
libgmp10                2:6.1.2+dfsg-4          deb
libgnutls30             3.6.7-4+deb10u4         deb
libgpg-error0           1.35-1                  deb
libhogweed4             3.4.1-1                 deb
libidn2-0               2.0.5-1+deb10u1         deb
liblz4-1                1.8.3-1                 deb
liblzma5                5.2.4-1                 deb
libmnl0                 1.0.4-2                 deb
libmount1               2.33.1-0.1              deb
libncursesw6            6.1+20181013-2+deb10u2  deb
libnettle6              3.4.1-1                 deb
libp11-kit0             0.23.15-2               deb
libpam-modules          1.3.1-5                 deb
libpam-modules-bin      1.3.1-5                 deb
libpam-runtime          1.3.1-5                 deb
libpam0g                1.3.1-5                 deb
libpcre3                2:8.39-12               deb
libseccomp2             2.3.3-4                 deb
libselinux1             2.8-1+b1                deb
libsemanage-common      2.8-2                   deb
libsemanage1            2.8-2                   deb
libsepol1               2.8-1                   deb
libsmartcols1           2.33.1-0.1              deb
libss2                  1.44.5-1+deb10u3        deb
libstdc++6              8.3.0-6                 deb
libsystemd0             241-7~deb10u4           deb
libtasn1-6              4.13-3                  deb
libtinfo6               6.1+20181013-2+deb10u2  deb
libudev1                241-7~deb10u4           deb
libunistring2           0.9.10-1                deb
libuuid1                2.33.1-0.1              deb
libxtables12            1.8.2-4                 deb
libzstd1                1.3.8+dfsg-3            deb
login                   1:4.5-1.1               deb
mawk                    1.3.3-17+b3             deb
mount                   2.33.1-0.1              deb
ncurses-base            6.1+20181013-2+deb10u2  deb
ncurses-bin             6.1+20181013-2+deb10u2  deb
passwd                  1:4.5-1.1               deb
perl-base               5.28.1-6                deb
sed                     4.7-1                   deb
sysvinit-utils          2.93-8                  deb
tar                     1.30+dfsg-6             deb
tzdata                  2020a-0+deb10u1         deb
util-linux              2.33.1-0.1              deb
zlib1g                  1:1.2.11.dfsg-1         deb

こんな感じで出力されるんですね。結構良さそう。json フォーマットなど他のフォーマットにも対応している様子。

$ syft todo-app -o json | head
 ✔ Loaded image
 ✔ Parsed image
 ✔ Cataloged packages      [91 packages]
{
 "artifacts": [
  {
   "id": "c78f941fc6ded0fe",
   "name": "adduser",
   "version": "3.118",
   "type": "deb",
   "foundBy": "dpkgdb-cataloger",
   "locations": [
    {

行えることはシンプルですが、使い所もありそうで結構面白そうですね。それでは今回はこのへんで。