779 lines
69 KiB
Markdown
779 lines
69 KiB
Markdown
# SBOM Analyzer Inventory
|
|
|
|
## Overview
|
|
|
|
This document provides a complete inventory of all analyzers used in StellaOps SBOM generation. The Scanner module employs 20+ specialized analyzers organized into four categories: Language, OS/Distribution, Surface, and Capability analyzers.
|
|
|
|
---
|
|
|
|
## Analyzer Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ SCANNER ANALYZER ARCHITECTURE │
|
|
└─────────────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
┌─────────────────────┐
|
|
│ Container Image │
|
|
│ (OCI/tar/dir) │
|
|
└──────────┬──────────┘
|
|
│
|
|
┌──────────▼──────────┐
|
|
│ Layer Extractor │
|
|
│ (FS reconstruction)│
|
|
└──────────┬──────────┘
|
|
│
|
|
┌──────────────────────────────┼──────────────────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
|
|
│ LANGUAGE ANALYZERS │ │ OS ANALYZERS │ │ SURFACE ANALYZERS │
|
|
│ (11) │ │ (9) │ │ (4) │
|
|
├─────────────────────┤ ├─────────────────────┤ ├─────────────────────┤
|
|
│ • DotNetAnalyzer │ │ • APKAnalyzer │ │ • FSAnalyzer │
|
|
│ • JavaAnalyzer │ │ • DPKGAnalyzer │ │ • EnvAnalyzer │
|
|
│ • NodeAnalyzer │ │ • RPMAnalyzer │ │ • SecretsAnalyzer │
|
|
│ • PythonAnalyzer │ │ • HomebrewAnalyzer │ │ • ValidationAnalyzer│
|
|
│ • GoAnalyzer │ │ • PkgutilAnalyzer │ └─────────────────────┘
|
|
│ • RustAnalyzer │ │ • MacOsBundleAnalyzer
|
|
│ • PhpAnalyzer │ │ • ChocolateyAnalyzer│ ┌─────────────────────┐
|
|
│ • RubyAnalyzer │ │ • MSIAnalyzer │ │CAPABILITY ANALYZERS │
|
|
│ • DenoAnalyzer │ │ • WinSxSAnalyzer │ │ (1) │
|
|
│ • BunAnalyzer │ └─────────────────────┘ ├─────────────────────┤
|
|
│ • NativeAnalyzer │ │ • CapabilityDetector│
|
|
└─────────────────────┘ └─────────────────────┘
|
|
│ │ │
|
|
└──────────────────────────────┼──────────────────────────────┘
|
|
│
|
|
┌──────────▼──────────┐
|
|
│ SBOM Composer │
|
|
│ (Dedup + Merge) │
|
|
└──────────┬──────────┘
|
|
│
|
|
┌────────────────────┼────────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ CycloneDX │ │ SPDX │ │ CBOM │
|
|
│ 1.4-1.6 │ │ 2.3 / 3.0.1 │ │ (Cryptographic) │
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Language Analyzers (11)
|
|
|
|
### 1. DotNetAnalyzer
|
|
|
|
**Ecosystem:** .NET / NuGet
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ DotNetAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ *.csproj, *.fsproj, *.vbproj │ SDK-style project files │ │
|
|
│ │ *.props, *.targets │ MSBuild imports │ │
|
|
│ │ packages.config │ Legacy package references │ │
|
|
│ │ *.deps.json │ Runtime dependency manifest │ │
|
|
│ │ *.nuspec │ NuGet package manifest │ │
|
|
│ │ paket.lock, paket.dependencies │ Paket package manager │ │
|
|
│ │ global.json │ SDK version pinning │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse SDK-style <PackageReference> elements │
|
|
│ 2. Parse legacy packages.config XML │
|
|
│ 3. Parse *.deps.json for runtime dependencies │
|
|
│ 4. Resolve transitive dependencies from asset files │
|
|
│ 5. Extract framework targeting (net8.0, net10.0, etc.) │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:nuget/Newtonsoft.Json@13.0.1 │
|
|
│ pkg:nuget/Microsoft.Extensions.Logging@10.0.0?framework=net10.0 │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Framework-specific dependencies │
|
|
│ • Native/runtime dependencies (rid-specific) │
|
|
│ • Source-linked packages │
|
|
│ • Central Package Management (Directory.Packages.props) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 2. JavaAnalyzer
|
|
|
|
**Ecosystem:** Maven / Gradle / Ivy
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ JavaAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ pom.xml │ Maven POM (project model) │ │
|
|
│ │ build.gradle, build.gradle.kts │ Gradle build files │ │
|
|
│ │ settings.gradle(.kts) │ Gradle settings │ │
|
|
│ │ gradle.lockfile │ Gradle dependency lock │ │
|
|
│ │ ivy.xml │ Apache Ivy descriptor │ │
|
|
│ │ *.jar!/META-INF/MANIFEST.MF │ JAR manifest │ │
|
|
│ │ *.jar!/META-INF/maven/**/pom.xml│ Embedded POM │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse Maven effective POM (resolve parent, properties) │
|
|
│ 2. Parse Gradle dependency configurations │
|
|
│ 3. Inspect JAR manifests for version info │
|
|
│ 4. Detect shaded/relocated classes │
|
|
│ 5. Extract BOM (Bill of Materials) imports │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:maven/org.apache.logging.log4j/log4j-core@2.17.1 │
|
|
│ pkg:maven/com.google.guava/guava@31.1-jre?type=jar │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Shaded JARs (relocated packages) │
|
|
│ • Classifiers (sources, javadoc, tests) │
|
|
│ • Optional/provided scope dependencies │
|
|
│ • Version ranges resolution │
|
|
│ • Multi-module projects │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 3. NodeAnalyzer
|
|
|
|
**Ecosystem:** npm / Yarn / pnpm
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ NodeAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ package.json │ Package manifest │ │
|
|
│ │ package-lock.json │ npm lockfile (v2/v3) │ │
|
|
│ │ npm-shrinkwrap.json │ npm shrinkwrap │ │
|
|
│ │ yarn.lock │ Yarn Classic lockfile │ │
|
|
│ │ .yarnrc.yml + yarn.lock │ Yarn Berry lockfile │ │
|
|
│ │ pnpm-lock.yaml │ pnpm lockfile │ │
|
|
│ │ node_modules/**/package.json │ Installed packages │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse lockfile for exact resolved versions │
|
|
│ 2. Parse package.json for declared dependencies │
|
|
│ 3. Walk node_modules for installed packages │
|
|
│ 4. Detect workspace configurations (monorepos) │
|
|
│ 5. Identify bundled dependencies │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:npm/lodash@4.17.21 │
|
|
│ pkg:npm/%40babel/core@7.20.0 (scoped) │
|
|
│ pkg:npm/express@4.18.2?resolved=https://registry.npmjs.org/... │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Scoped packages (@org/package) │
|
|
│ • Peer dependencies │
|
|
│ • Optional dependencies │
|
|
│ • Workspace/monorepo packages │
|
|
│ • Aliased packages │
|
|
│ • Git dependencies (git+https://...) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 4. PythonAnalyzer
|
|
|
|
**Ecosystem:** PyPI / pip / Poetry / Pipenv
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ PythonAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ requirements.txt │ pip requirements │ │
|
|
│ │ requirements-*.txt │ Environment-specific reqs │ │
|
|
│ │ setup.py │ Setuptools config (legacy) │ │
|
|
│ │ setup.cfg │ Declarative setuptools │ │
|
|
│ │ pyproject.toml │ PEP 517/518/621 config │ │
|
|
│ │ Pipfile, Pipfile.lock │ Pipenv files │ │
|
|
│ │ poetry.lock │ Poetry lockfile │ │
|
|
│ │ *.egg-info/PKG-INFO │ Installed egg metadata │ │
|
|
│ │ *.dist-info/METADATA │ Installed wheel metadata │ │
|
|
│ │ site-packages/* │ Installed packages │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse lockfiles for pinned versions │
|
|
│ 2. Parse pyproject.toml [project.dependencies] │
|
|
│ 3. Parse requirements.txt with constraint handling │
|
|
│ 4. Walk site-packages for METADATA files │
|
|
│ 5. Detect extras and environment markers │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:pypi/requests@2.28.1 │
|
|
│ pkg:pypi/django@4.1.5?extras=argon2 │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Environment markers (platform, python_version) │
|
|
│ • Extras ([package[extra1,extra2]]) │
|
|
│ • Editable installs (-e .) │
|
|
│ • Version constraints (>=1.0,<2.0) │
|
|
│ • Hash checking mode │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 5. GoAnalyzer
|
|
|
|
**Ecosystem:** Go Modules
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ GoAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ go.mod │ Module definition │ │
|
|
│ │ go.sum │ Dependency checksums │ │
|
|
│ │ vendor/modules.txt │ Vendored dependencies │ │
|
|
│ │ Binary: __go_buildinfo │ Embedded build info (Go 1.18+) │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse go.mod require directives │
|
|
│ 2. Parse go.sum for integrity verification │
|
|
│ 3. Detect replace directives (local replacements) │
|
|
│ 4. Extract build info from compiled binaries │
|
|
│ 5. Handle pseudo-versions (v0.0.0-yyyymmddhhmmss-hash) │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:golang/github.com/gin-gonic/gin@v1.8.1 │
|
|
│ pkg:golang/golang.org/x/crypto@v0.0.0-20220722-abcdef │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Replace directives (local, version) │
|
|
│ • Retract versions │
|
|
│ • Pseudo-versions from git │
|
|
│ • +incompatible suffix │
|
|
│ • Minimal version selection (MVS) │
|
|
│ • Binary build info extraction (no source needed) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 6. RustAnalyzer
|
|
|
|
**Ecosystem:** Cargo / crates.io
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ RustAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ Cargo.toml │ Package manifest │ │
|
|
│ │ Cargo.lock │ Dependency lockfile │ │
|
|
│ │ Binary: .comment section │ rustc version (ELF) │ │
|
|
│ │ Binary: .rdata │ rustc version (PE) │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse Cargo.lock [[package]] entries │
|
|
│ 2. Parse Cargo.toml [dependencies] │
|
|
│ 3. Handle workspace members │
|
|
│ 4. Detect target-specific dependencies │
|
|
│ 5. Extract feature flags │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:cargo/serde@1.0.152 │
|
|
│ pkg:cargo/tokio@1.25.0?features=full │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Feature flags │
|
|
│ • Target-specific dependencies [target.'cfg(...)'.dependencies] │
|
|
│ • Build dependencies [build-dependencies] │
|
|
│ • Dev dependencies [dev-dependencies] │
|
|
│ • Workspace inheritance │
|
|
│ • Path/git dependencies │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 7. PhpAnalyzer
|
|
|
|
**Ecosystem:** Composer / Packagist
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ PhpAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ composer.json │ Package definition │ │
|
|
│ │ composer.lock │ Dependency lockfile │ │
|
|
│ │ vendor/composer/installed.json│ Installed packages │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:composer/laravel/framework@9.48.0 │
|
|
│ pkg:composer/symfony/http-foundation@6.2.0 │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • PHP version constraints │
|
|
│ • Extension requirements (ext-*) │
|
|
│ • Platform packages (php, lib-*) │
|
|
│ • Stability flags (dev, alpha, beta, RC) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 8. RubyAnalyzer
|
|
|
|
**Ecosystem:** RubyGems / Bundler
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ RubyAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ Gemfile │ Bundler dependencies │ │
|
|
│ │ Gemfile.lock │ Bundler lockfile │ │
|
|
│ │ *.gemspec │ Gem specification │ │
|
|
│ │ gems.rb / gems.locked │ Alternative Bundler format │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:gem/rails@7.0.4 │
|
|
│ pkg:gem/nokogiri@1.14.0?platform=ruby │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Platform-specific gems │
|
|
│ • Git/path sources │
|
|
│ • Groups (development, test, production) │
|
|
│ • Ruby version constraints │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 9. DenoAnalyzer
|
|
|
|
**Ecosystem:** Deno / deno.land
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ DenoAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ deno.json / deno.jsonc │ Deno configuration │ │
|
|
│ │ deno.lock │ Deno lockfile │ │
|
|
│ │ import_map.json │ Import map │ │
|
|
│ │ deps.ts │ Dependency re-exports │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:deno/std@0.177.0 │
|
|
│ pkg:deno/oak@v11.1.0 │
|
|
│ pkg:npm/lodash@4.17.21 (via npm: specifier) │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • URL imports (https://deno.land/...) │
|
|
│ • npm: specifiers (Deno 1.28+) │
|
|
│ • Import maps for aliasing │
|
|
│ • JSR registry packages │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 10. BunAnalyzer
|
|
|
|
**Ecosystem:** Bun / npm
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ BunAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ package.json │ Package manifest │ │
|
|
│ │ bun.lockb │ Bun binary lockfile │ │
|
|
│ │ bunfig.toml │ Bun configuration │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ PURL Format: │
|
|
│ pkg:npm/hono@3.11.0 │
|
|
│ pkg:npm/elysia@0.7.0 │
|
|
│ │
|
|
│ Special Handling: │
|
|
│ • Binary lockfile parsing (bun.lockb) │
|
|
│ • Workspace support │
|
|
│ • Bun-specific packages │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 11. NativeAnalyzer
|
|
|
|
**Ecosystem:** Binary executables (ELF/PE/Mach-O)
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ NativeAnalyzer │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ File Patterns: │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ ELF binaries (no extension) │ Linux executables/libraries │ │
|
|
│ │ *.so, *.so.* │ Linux shared libraries │ │
|
|
│ │ *.exe, *.dll │ Windows binaries │ │
|
|
│ │ *.dylib, Mach-O binaries │ macOS binaries │ │
|
|
│ │ *.a, *.lib │ Static libraries │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Extraction Logic: │
|
|
│ 1. Parse ELF/PE/Mach-O headers │
|
|
│ 2. Extract Build-ID / CodeView GUID / UUID │
|
|
│ 3. Parse dynamic linking sections │
|
|
│ 4. Extract symbol tables (.dynsym, .symtab) │
|
|
│ 5. Parse debug info (DWARF) if present │
|
|
│ │
|
|
│ Output: │
|
|
│ pkg:generic/libssl.so.1.1?build-id=abc123... │
|
|
│ pkg:generic/app?build-id=sha256:... │
|
|
│ │
|
|
│ Extracted Metadata: │
|
|
│ • Linked libraries (DT_NEEDED, imports) │
|
|
│ • Exported symbols │
|
|
│ • Architecture (x86_64, arm64, etc.) │
|
|
│ • Compiler identification │
|
|
│ • Build-time options (PIE, RELRO, stack canary) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## OS/Distribution Analyzers (9)
|
|
|
|
### Linux Distributions
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ LINUX PACKAGE ANALYZERS │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ APKAnalyzer (Alpine) │ │
|
|
│ │ │ │
|
|
│ │ Database: /lib/apk/db/installed │ │
|
|
│ │ │ │
|
|
│ │ Version Format: 1.2.3-r4 │ │
|
|
│ │ • 1.2.3 = upstream version │ │
|
|
│ │ • r4 = Alpine revision │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:apk/alpine/openssl@1.1.1q-r0?distro=alpine-3.16 │ │
|
|
│ │ │ │
|
|
│ │ Special: Virtual packages, multi-arch support │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ DPKGAnalyzer (Debian/Ubuntu) │ │
|
|
│ │ │ │
|
|
│ │ Database: /var/lib/dpkg/status │ │
|
|
│ │ │ │
|
|
│ │ Version Format: [epoch:]upstream-debian │ │
|
|
│ │ • epoch = optional numeric prefix (1:) │ │
|
|
│ │ • upstream = original version │ │
|
|
│ │ • debian = distro-specific revision │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:deb/debian/openssl@1.1.1n-0+deb11u3?distro=bullseye │ │
|
|
│ │ │ │
|
|
│ │ Special: Source packages, virtual packages, multi-arch │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ RPMAnalyzer (RHEL/Fedora/SUSE) │ │
|
|
│ │ │ │
|
|
│ │ Database: /var/lib/rpm/Packages (BerkeleyDB) │ │
|
|
│ │ /var/lib/rpm/rpmdb.sqlite (SQLite, newer) │ │
|
|
│ │ │ │
|
|
│ │ Version Format: NEVRA (Name-Epoch:Version-Release.Arch) │ │
|
|
│ │ • Epoch = numeric prefix (usually 0 or omitted) │ │
|
|
│ │ • Version = upstream version │ │
|
|
│ │ • Release = distro release + dist tag │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:rpm/redhat/openssl@1.1.1k-7.el8_6?arch=x86_64 │ │
|
|
│ │ │ │
|
|
│ │ Special: Epoch handling, dist tags, modular packages │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### macOS Analyzers
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ macOS PACKAGE ANALYZERS │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ HomebrewAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Locations: │ │
|
|
│ │ • /usr/local/Cellar/ (Intel) │ │
|
|
│ │ • /opt/homebrew/Cellar/ (Apple Silicon) │ │
|
|
│ │ │ │
|
|
│ │ Detection: INSTALL_RECEIPT.json in formula directories │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:brew/openssl@1.1.1q │ │
|
|
│ │ pkg:brew/homebrew/cask/docker@4.15.0 (casks) │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ PkgutilAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Command: pkgutil --pkgs │ │
|
|
│ │ Database: /var/db/receipts/ │ │
|
|
│ │ │ │
|
|
│ │ Detects: System packages, installer packages (.pkg) │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:macos/com.apple.pkg.CLTools_Executables@14.0.0 │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ MacOsBundleAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ File: *.app/Contents/Info.plist │ │
|
|
│ │ │ │
|
|
│ │ Extracts: │ │
|
|
│ │ • CFBundleIdentifier │ │
|
|
│ │ • CFBundleShortVersionString │ │
|
|
│ │ • CFBundleVersion │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:swift/com.apple.Safari@16.2 │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Windows Analyzers
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ WINDOWS PACKAGE ANALYZERS │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ ChocolateyAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Location: C:\ProgramData\chocolatey\lib\ │ │
|
|
│ │ │ │
|
|
│ │ Detection: .nupkg files, .nuspec metadata │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:choco/7zip@22.01 │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ MSIAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Registry: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ │ │
|
|
│ │ Uninstall\ │ │
|
|
│ │ │ │
|
|
│ │ Detection: DisplayName, DisplayVersion, Publisher │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:msi/Microsoft Visual C++ 2019@14.29.30139 │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ WinSxSAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Location: C:\Windows\WinSxS\Manifests\ │ │
|
|
│ │ │ │
|
|
│ │ Detection: Side-by-side assembly manifests │ │
|
|
│ │ │ │
|
|
│ │ Extracts: System assemblies, .NET Framework components │ │
|
|
│ │ │ │
|
|
│ │ PURL: pkg:winsxs/Microsoft.VC90.CRT@9.0.30729.1 │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Surface Analyzers (4)
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ SURFACE ANALYZERS │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ FileSystemAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Detects: │ │
|
|
│ │ • SUID/SGID binaries │ │
|
|
│ │ • World-writable files/directories │ │
|
|
│ │ • Capability-enhanced binaries (getcap) │ │
|
|
│ │ • Symlink targets │ │
|
|
│ │ • File permissions and ownership │ │
|
|
│ │ │ │
|
|
│ │ Output: property:fs/suid-binary, property:fs/world-writable │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ EnvironmentAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Sources: │ │
|
|
│ │ • /etc/environment │ │
|
|
│ │ • Shell profiles (.bashrc, .profile, .zshrc) │ │
|
|
│ │ • Container ENV instructions (from image config) │ │
|
|
│ │ │ │
|
|
│ │ Detects: │ │
|
|
│ │ • PATH entries │ │
|
|
│ │ • LD_LIBRARY_PATH / LD_PRELOAD │ │
|
|
│ │ • User context │ │
|
|
│ │ • Locale settings │ │
|
|
│ │ │ │
|
|
│ │ Output: property:env/PATH, property:env/LD_PRELOAD │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ SecretsAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Detection Patterns: │ │
|
|
│ │ • API keys (AWS, GCP, Azure, GitHub, etc.) │ │
|
|
│ │ • Private keys (RSA, ECDSA, Ed25519) │ │
|
|
│ │ • Passwords in config files │ │
|
|
│ │ • Connection strings │ │
|
|
│ │ • JWT tokens │ │
|
|
│ │ • OAuth secrets │ │
|
|
│ │ │ │
|
|
│ │ Output: finding:secret/aws-access-key, finding:secret/private-key│ │
|
|
│ │ │ │
|
|
│ │ Note: Findings are security alerts, not SBOM components │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ ValidationAnalyzer │ │
|
|
│ │ │ │
|
|
│ │ Validates: │ │
|
|
│ │ • SBOM completeness (all files accounted for) │ │
|
|
│ │ • Hash verification (checksums match) │ │
|
|
│ │ • Signature verification (if signed) │ │
|
|
│ │ • Format compliance (CycloneDX/SPDX schema) │ │
|
|
│ │ │ │
|
|
│ │ Output: validation:sbom/complete, validation:sbom/verified │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Capability Analyzer
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ CAPABILITY DETECTOR │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ The CapabilityDetector analyzes code patterns to identify runtime │
|
|
│ capabilities that affect security posture and reachability analysis. │
|
|
│ │
|
|
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
│ │ DETECTED CAPABILITIES │ │
|
|
│ │ │ │
|
|
│ │ ┌─────────────────┬────────────────────────────────────────┐ │ │
|
|
│ │ │ Capability │ Detection Patterns │ │ │
|
|
│ │ ├─────────────────┼────────────────────────────────────────┤ │ │
|
|
│ │ │ Exec │ Process.Start, exec, spawn, fork │ │ │
|
|
│ │ │ Network │ Socket, HttpClient, fetch, axios │ │ │
|
|
│ │ │ Filesystem │ File.*, fs.*, open, read, write │ │ │
|
|
│ │ │ Crypto │ Cipher, Hash, Sign, Verify │ │ │
|
|
│ │ │ Database │ SqlConnection, MongoClient, Redis │ │ │
|
|
│ │ │ DynamicCode │ eval, exec, compile, CodeDom │ │ │
|
|
│ │ │ Reflection │ Type.GetMethod, Assembly.Load │ │ │
|
|
│ │ │ NativeInterop │ DllImport, P/Invoke, FFI │ │ │
|
|
│ │ │ Serialization │ JSON.parse, pickle, Marshal │ │ │
|
|
│ │ │ MemoryUnsafe │ unsafe, pointer, IntPtr │ │ │
|
|
│ │ └─────────────────┴────────────────────────────────────────┘ │ │
|
|
│ │ │ │
|
|
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Usage in Policy: │
|
|
│ • Exec capability + CVE in child process → higher risk │
|
|
│ • Network capability + CVE in HTTP library → exploitable remotely │
|
|
│ • DynamicCode capability → increased attack surface │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Analyzer Pipeline Summary
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ COMPLETE ANALYZER INVENTORY │
|
|
├───────────────────┬────────────────────┬───────────────────────┬────────────────────┤
|
|
│ Category │ Analyzer │ Files/Sources │ PURL Type │
|
|
├───────────────────┼────────────────────┼───────────────────────┼────────────────────┤
|
|
│ Language (11) │ DotNetAnalyzer │ *.csproj, *.deps.json │ pkg:nuget │
|
|
│ │ JavaAnalyzer │ pom.xml, *.jar │ pkg:maven │
|
|
│ │ NodeAnalyzer │ package.json, *.lock │ pkg:npm │
|
|
│ │ PythonAnalyzer │ requirements.txt │ pkg:pypi │
|
|
│ │ GoAnalyzer │ go.mod, go.sum │ pkg:golang │
|
|
│ │ RustAnalyzer │ Cargo.toml, *.lock │ pkg:cargo │
|
|
│ │ PhpAnalyzer │ composer.json │ pkg:composer │
|
|
│ │ RubyAnalyzer │ Gemfile, *.gemspec │ pkg:gem │
|
|
│ │ DenoAnalyzer │ deno.json, deno.lock │ pkg:deno │
|
|
│ │ BunAnalyzer │ bun.lockb │ pkg:npm │
|
|
│ │ NativeAnalyzer │ ELF/PE/Mach-O │ pkg:generic │
|
|
├───────────────────┼────────────────────┼───────────────────────┼────────────────────┤
|
|
│ OS/Distro (9) │ APKAnalyzer │ /lib/apk/db/installed │ pkg:apk │
|
|
│ │ DPKGAnalyzer │ /var/lib/dpkg/status │ pkg:deb │
|
|
│ │ RPMAnalyzer │ /var/lib/rpm/ │ pkg:rpm │
|
|
│ │ HomebrewAnalyzer │ /opt/homebrew/Cellar │ pkg:brew │
|
|
│ │ PkgutilAnalyzer │ pkgutil --pkgs │ pkg:macos │
|
|
│ │ MacOsBundleAnalyzer│ *.app/Info.plist │ pkg:swift │
|
|
│ │ ChocolateyAnalyzer │ chocolatey/lib/ │ pkg:choco │
|
|
│ │ MSIAnalyzer │ Registry │ pkg:msi │
|
|
│ │ WinSxSAnalyzer │ WinSxS/Manifests/ │ pkg:winsxs │
|
|
├───────────────────┼────────────────────┼───────────────────────┼────────────────────┤
|
|
│ Surface (4) │ FileSystemAnalyzer │ File permissions │ property:fs │
|
|
│ │ EnvironmentAnalyzer│ ENV, .profile │ property:env │
|
|
│ │ SecretsAnalyzer │ Pattern matching │ finding:secret │
|
|
│ │ ValidationAnalyzer │ SBOM validation │ validation:sbom │
|
|
├───────────────────┼────────────────────┼───────────────────────┼────────────────────┤
|
|
│ Capability (1) │ CapabilityDetector │ Code patterns │ capability:* │
|
|
└───────────────────┴────────────────────┴───────────────────────┴────────────────────┘
|
|
|
|
Total: 25 Analyzers
|
|
```
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [Policy Engine Data Pipeline](policy-engine-data-pipeline.md) - How analyzers feed policy decisions
|
|
- [Scanner Architecture](../../modules/scanner/architecture.md) - Scanner module dossier
|
|
- [SBOM Generation Flow](../../flows/03-sbom-generation-flow.md) - End-to-end SBOM flow
|
|
- [Data Schemas](../../11_DATA_SCHEMAS.md) - SBOM format specifications
|