Software Bill of Materials became one of the latest buzzword. A lot of people and companies talking about it like a magical thing, if you use it then all of your security problems will be solved, just like what happened with Blockchain!!.
Though a hand full of projects (or companies building those projects) focused on the actual tooling part. Things we can use and see some useful output than blogposts/presentations with fancy graphics.
In this post we will try to see how can we use these tools today (2023/09/20).
This tool can generate from various sources, starting from container images to Python projects, RPM/Debian dbs, Rust or Go projects.
Let us generate the SBOM for a Debian 12 VM.
$ syft /var/lib/dpkg -o spdx-json=server.spdx.json --source-name debian12 ✔ Indexed file system /var/lib/dpkg ✔ Cataloged packages [395 packages]
For for a Rust project:
$ syft /home/kdas/code/johnnycanencrypt/Cargo.lock -o spdx-json=jce.spdx.json ✔ Indexed file system /home/kdas/code/johnnycanencrypt ✔ Cataloged packages [203 packages]
We generated the SBOMs. Now this should solve the security issues, isn't?
I found the above in Matthew Martin's timeline.
This is where Grype comes handy, it is a vulnerability scanner for container images and filesystems and works with the SBOM(s) generated by syft.
$ grype jce.spdx.json ✔ Vulnerability DB [updated] ✔ Scanned for vulnerabilities [1 vulnerability matches] ├── by severity: 0 critical, 0 high, 1 medium, 0 low, 0 negligible └── by status: 1 fixed, 0 not-fixed, 0 ignored NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY time 0.1.45 0.2.23 rust-crate GHSA-wcg3-cvx6-7396 Medium
grype server.spdx.json ✔ Vulnerability DB [no update available] ✔ Scanned for vulnerabilities [178 vulnerability matches] ├── by severity: 6 critical, 136 high, 34 medium, 2 low, 0 negligible └── by status: 0 fixed, 178 not-fixed, 0 ignored NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY file 1:5.44-3 CVE-2007-1536 High git 1:2.39.2-1.1 CVE-2020-5260 High gnupg 2.2.40-1.1 CVE-2022-3515 Critical gnupg 2.2.40-1.1 CVE-2022-34903 Medium gnupg 2.2.40-1.1 CVE-2022-3219 Low openssl 3.0.9-1 CVE-2023-4807 High openssl 3.0.9-1 CVE-2023-3817 Medium openssl 3.0.9-1 CVE-2023-2975 Medium openssl 3.0.9-1 CVE-2023-1255 Medium perl 5.36.0-7 CVE-2023-31486 High perl 5.36.0-7 CVE-2023-31484 High vim 2:9.0.1378-2 CVE-2022-3520 Critical vim 2:9.0.1378-2 CVE-2022-0318 Critical vim 2:9.0.1378-2 CVE-2017-6350 Critical vim 2:9.0.1378-2 CVE-2017-6349 Critical vim 2:9.0.1378-2 CVE-2017-5953 Critical vim 2:9.0.1378-2 CVE-2023-4781 High vim 2:9.0.1378-2 CVE-2023-4752 High <snipped>
Now it is on your team members to decide how to react to information we gather from these tools. The tools themselves will not solve the problems at hand. You have to decide the update steps and if that is at all required or not.
Also please remember, there is and will be a lot of false positives (not in Grype output yet, but other tools in the SBOM ecosystem). The projects (I am talking about in general most of the tooling in this field) are trying hard to reduce these, but not possible always to remove every such edge case.