Dependency-Track - Foglio di aiuto per analisi SBOM continua
Dependency-Track (un progetto di punta OWASP) è una piattaforma per la gestione continua dei rischi della catena di approvvigionamento software. L’idea distintiva: invece di scansionare le tue dipendenze una volta al momento della compilazione, carichi un SBOM CycloneDX per progetto e la piattaforma rivaluta continuamente quei componenti mentre vengono divulgati nuove vulnerabilità. Quando esce una CVE, sai immediatamente quali delle tue applicazioni contengono il componente interessato — senza ricompilare o riscansionare nulla.
Distribuzione
| Metodo | Comando |
|---|
| Docker Compose | curl -LO https://dependencytrack.org/docker-compose.yml && docker compose up -d |
| Container (API) | docker run -p 8081:8080 dependencytrack/apiserver |
| Frontend | Container dependencytrack/frontend (UI predefinita su 8080) |
| Kubernetes | Helm chart disponibile |
| Requisiti | ~4GB+ RAM; PostgreSQL per la produzione |
Concetti principali
| Termine | Significato |
|---|
| Project | Un’applicazione/servizio che tracci |
| Component | Una dipendenza all’interno di un progetto |
| SBOM | Distinta di materiali CycloneDX che carichi |
| Vulnerability | Una CVE/avviso che interessa un componente |
| Policy | Regole che portano il rischio (licenza, severità, età) |
| Portfolio | Tutti i progetti, aggregati |
Caricamento di un SBOM
Genera con Syft o strumenti cyclonedx-*, poi carica tramite API:
# Genera un SBOM CycloneDX
syft dir:. -o cyclonedx-json > bom.json
# Carica su Dependency-Track
curl -X POST "http://localhost:8081/api/v1/bom" \
-H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" \
-F "bom=@bom.json"
| Endpoint | Scopo |
|---|
POST /api/v1/bom | Carica un SBOM |
GET /api/v1/project | Elenca i progetti |
PUT /api/v1/project | Crea un progetto |
GET /api/v1/vulnerability/project/{uuid} | Vulnerabilità per un progetto |
GET /api/v1/metrics/project/{uuid}/current | Metriche di rischio attuali |
Fonti di intelligence sulle vulnerabilità
| Fonte | Fornisce |
|---|
| NVD | Dati CVE |
| GitHub Advisories | Avvisi specifici dell’ecosistema |
| OSV | Database delle vulnerabilità open-source |
| VulnDB | Commerciale (opzionale) |
| Internal | I tuoi avvisi |
La piattaforma rispecchia questi feed e riesamina ogni componente memorizzato su un programma.
Motore dei criteri
| Condizione della policy | Esempio |
|---|
| Severità | Fallire se una vulnerabilità CRITICAL |
| Licenza | Blocca GPL nei prodotti proprietari |
| Età del componente | Segnala dipendenze non mantenute per N anni |
| Coordinate | Vieta un pacchetto/versione specifico |
| CWE | Segnala classi di debolezza specifiche |
Le policy producono violazioni che compaiono insieme alle vulnerabilità, quindi il rischio di licenza e igiene sono tracciati nello stesso luogo.
Integrazione CI/CD
# In una pipeline: build → genera SBOM → carica → porta
syft dir:. -o cyclonedx-json > bom.json
curl -X POST "$DT_URL/api/v1/bom" -H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" -F "bom=@bom.json"
# Esegui il polling del risultato dell'analisi e fallisci su violazioni della policy
| Integrazione | Nota |
|---|
| Jenkins/GitHub Actions | Plugin/azioni ufficiali disponibili |
| Webhooks | Notifica Slack/Teams/Jira su nuovi risultati |
| VEX | Registra le decisioni di sfruttabilità (non interessato, ecc.) |
Triage e VEX
| Azione | Significato |
|---|
| Not Affected | Il percorso del codice vulnerabile non è raggiungibile |
| False Positive | Il rilevamento è sbagliato |
| Resolved | Corretto in questo progetto |
| Suppressed | Rischio accettato con giustificazione |
La registrazione di questi come VEX mantiene basso il rumore e documenta le decisioni per i revisori.
Dependency-Track vs Scanner point-in-time
| Aspetto | Dependency-Track | Grype/Trivy | Socket |
|---|
| Modello | Piattaforma SBOM continua | Scansione point-in-time | Rilevamento di malware comportamentale |
| Rivalutazione | Automatico su nuove CVE | Solo quando riesegui | Su modifiche della dipendenza |
| Vista del portfolio | Sì (tutti i progetti) | Per scansione | Per PR |
| Migliore per | Rischio della catena di approvvigionamento a livello aziendale | Scansione CI | Rilevamento di pacchetti dannosi |
Alimentalo con SBOM da Syft; abbinalo a Grype per la scansione al momento della compilazione e Socket per il rilevamento di pacchetti dannosi.
Risorse