Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
features:
- |
Added ``wazuh-scan-images.sh``, a script to scan container images for
vulnerabilities. In a future release, this script can be integrated into
Wazuh for continuous scanning.
50 changes: 50 additions & 0 deletions tools/wazuh-scan-images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

# SBOM directory path
SBOM_DIR="/opt/kayobe/stackhpc/sboms"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The SBOM directory path is hardcoded. This reduces the script's flexibility. It's better to allow this to be configured via an environment variable, with the current path as a default.

Suggested change
SBOM_DIR="/opt/kayobe/stackhpc/sboms"
SBOM_DIR="${SBOM_DIR:-/opt/kayobe/stackhpc/sboms}"


# Ensure the SBOM directory exists
mkdir -p "$SBOM_DIR"

# Ensure the custom output template exists
if [[ ! -f "$SBOM_DIR/trivy-custom.tmpl" ]]; then
cat <<'EOL' > "$SBOM_DIR/trivy-custom.tmpl"
{{- range $ri, $r := . -}}
{{- range $vi, $v := .Vulnerabilities -}}
"{{ $v.PkgName }}","{{$v.InstalledVersion }}","{{ $v.VulnerabilityID }}","{{$v.Severity }}","{{$v.Title }}"
{{- end -}}
{{- end -}}
EOL
fi

echo "Package","Version Installed","Vulnerability ID","Severity","Title"

# Loop through each container image and process its SBOM
docker image ls --format "{{.Repository}}:{{.Tag}}:{{.Image ID}}" | sort | uniq | while read -r image; do
# Split image ID
image_id=$(echo "$image" | awk -F: '{print $NF}')

# Generate SBOM filename
sbom_file="$SBOM_DIR/$(echo "$image" | tr '/:' '_').sbom"

# Generate SBOM if missing
if [[ ! -f "$sbom_file" ]]; then
echo "Generating SBOM for $image"
if ! trivy image --quiet --format spdx-json --output "$sbom_file" "$image_id"; then
echo "Failed to generate SBOM for $image. Skipping."
continue
fi
fi

echo "Scanning SBOM: $sbom_file"
# Scan SBOM and prepend image info to each output line
trivy sbom \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to use cosign to add in-toto attestations during our build creation process, so we can store the signed sbom in the OCI repository in the standard way?
https://trivy.dev/docs/latest/supply-chain/attestation/sbom/#sbom-attestation

It suggests in the docs you can then verify that with trivy to understand if there are CVEs:
https://trivy.dev/docs/latest/supply-chain/attestation/sbom/#scanning

Unsure if that works with Wazah scanning though.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's been in the infra backlog for a little while. The plan would be to integrate it at build time. There might be a way to pull that straight to Wazuh, but I've not investigated that

--scanners vuln \
--severity CRITICAL,HIGH \
--ignore-unfixed \
--quiet \
--format template \
--template "@$SBOM_DIR/trivy-custom.tmpl" \
"$sbom_file" | \
awk -v img="$image" '{print "Trivy:\"" img "\"," $0}'
done
Loading