Learning Notes #66 β What is SBOM ? Software Bill of Materials
Yesterday, i came to know about SBOM, from my friend Prasanth Baskar. Letβs say youβre building a website.
You decide to use a popular open-source tool to handle user logins. Hereβs the catch,
- That library uses another library to store data.
- That tool depends on another library to handle passwords.
Now, if one of those libraries has a bug or security issue, how do you even know itβs there? In this blog, i will jot down my understanding on SBOM with Trivy.
What is SBOM ?
A Software Bill of Materials (SBOM) is a list of everything that makes up a piece of software.
Think of it as,
- A shopping list for all the tools, libraries, and pieces used to build the software.
- A recipe card showing whatβs inside and how itβs structured.
For software, this means,
- Components: These are the βingredients,β such as open-source libraries, frameworks, and tools.
- Versions: Just like you might want to know if the cake uses almond flour or regular flour, knowing the version of a software component matters.
- Licenses: Did the baker follow the rules for the ingredients they used? Software components also come with licenses that dictate how they can be used.
So How come its Important ?
1. Understanding What Youβre Using
When you download or use software, especially something complex, you often donβt know whatβs inside. An SBOM helps you understand what components are being used are they secure? Are they trustworthy?
2. Finding Problems Faster
If someone discovers that a specific ingredient is badβlike flour with bacteria in itβyouβd want to know if thatβs in your cake. Similarly, if a software library has a security issue, an SBOM helps you figure out if your software is affected and needs fixing.
For example,
When the Log4j vulnerability made headlines, companies that had SBOMs could quickly identify whether they used Log4j and take action.
3. Building Trust
Imagine buying food without a label or list of ingredients.
Youβd feel doubtful, right ? Similarly, an SBOM builds trust by showing users exactly whatβs in the software theyβre using.
4. Avoiding Legal Trouble
Some software components come with specific rules or licenses about how they can be used. An SBOM ensures these rules are followed, avoiding potential legal headaches.
How to Create an SBOM?
For many developers, creating an SBOM manually would be impossible because modern software can have hundreds (or even thousands!) of components.
Thankfully, there are tools that automatically create SBOMs. Examples include,
- Trivy: A lightweight tool to generate SBOMs and find vulnerabilities.
- CycloneDX: A popular SBOM format supported by many tools https://cyclonedx.org/
- SPDX: Another format designed to make sharing SBOMs easier https://spdx.dev/
These tools can scan your software and automatically list out every component, its version, and its dependencies.
We will see example on generating a SBOM file for nginx using trivy.
How Trivy Works ?
On running trivy scan,
1. It downloads Trivy DB including vulnerability information.
2. Pull Missing layers in cache.
3. Analyze layers and stores information in cache.
4. Detect security issues and write to SBOM file.
Note: a CVE refers to a Common Vulnerabilities and Exposures identifier. A CVE is a unique code used to catalog and track publicly known security vulnerabilities and exposures in software or systems.
How to Generate SBOMs with Trivy
Step 1: Install Trivy in Ubuntu
sudo apt-get install wget gnupg wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy
More on Installation: https://github.com/aquasecurity/trivy/blob/main/docs/getting-started/installation.md
Step 2: Generate an SBOM
Trivy allows you to create SBOMs in formats like CycloneDX or SPDX.
trivy image --format cyclonedx --output sbom.json nginx:latest
It generates the SBOM file.
It can be incorporated into Github CI/CD.