# Vulnerability Scanning Ce document décrit comment scanner les vulnérabilités dans le projet Veza Backend API. ## 🔒 Scan des Dépendances Go ### Installation de govulncheck ```bash go install golang.org/x/vuln/cmd/govulncheck@latest ``` Ou via le Makefile : ```bash make install-tools ``` ### Exécution locale #### Scan complet ```bash govulncheck ./... ``` #### Scan avec rapport détaillé ```bash govulncheck -json ./... > vulncheck-report.json govulncheck ./... > vulncheck-report.txt ``` #### Via Makefile ```bash make security ``` Cette commande exécute : - `gosec` pour l'analyse statique de sécurité - `govulncheck` pour les vulnérabilités des dépendances ### Interprétation des résultats - **CRITICAL** : Vulnérabilité critique nécessitant une action immédiate - **HIGH** : Vulnérabilité élevée nécessitant une attention prioritaire - **MEDIUM** : Vulnérabilité moyenne à traiter - **LOW** : Vulnérabilité faible, peut être traitée plus tard ### Correction des vulnérabilités 1. Identifier la dépendance vulnérable dans le rapport 2. Vérifier si une version corrigée existe : ```bash go list -m -u ``` 3. Mettre à jour la dépendance : ```bash go get -u @latest go mod tidy ``` 4. Re-scanner pour vérifier : ```bash govulncheck ./... ``` --- ## 🐳 Scan des Images Docker ### Installation de Trivy #### Via Homebrew (macOS) ```bash brew install trivy ``` #### Via Docker ```bash docker pull aquasec/trivy:latest ``` #### Via script d'installation ```bash # Linux wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy ``` ### Exécution locale #### Construire l'image Docker ```bash make docker-build # ou docker build -t veza-backend-api:scan . ``` #### Scanner l'image ```bash # Scan avec sortie table trivy image veza-backend-api:scan # Scan avec sortie JSON trivy image -f json -o trivy-report.json veza-backend-api:scan # Scan uniquement CRITICAL et HIGH trivy image --severity CRITICAL,HIGH veza-backend-api:scan # Scan avec ignore des vulnérabilités non corrigées trivy image --ignore-unfixed veza-backend-api:scan ``` #### Via Docker (si Trivy n'est pas installé localement) ```bash docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy:latest image veza-backend-api:scan ``` ### Scan d'un fichier Dockerfile ```bash trivy fs --security-checks vuln . ``` --- ## 🔄 CI/CD ### GitHub Actions Le workflow `.github/workflows/vulnerability-scan.yml` exécute automatiquement : 1. **Scan Go (govulncheck)** : - Sur chaque push/PR vers `main` ou `develop` - Tous les lundis à 2h UTC (schedule) - Bloque le merge si HIGH/CRITICAL trouvées 2. **Scan Docker (Trivy)** : - Sur chaque push/PR (mode gate) - Sur schedule (mode report only) - Upload des résultats dans GitHub Security ### Déclenchement manuel ```bash # Via GitHub CLI gh workflow run vulnerability-scan.yml # Via l'interface GitHub # Actions > Vulnerability Scan > Run workflow ``` --- ## 📊 Exemples de Rapports ### Rapport govulncheck ``` Vulnerability #1: GO-2024-XXXX Package: github.com/example/package Version: v1.2.3 Fixed in: v1.2.5 Severity: HIGH Description: Description of the vulnerability Call stacks: - main.go:42: functionCall() ``` ### Rapport Trivy ``` veza-backend-api:scan (alpine 3.18.0) Total: 15 (CRITICAL: 2, HIGH: 5, MEDIUM: 6, LOW: 2) ┌─────────────────────┬────────────────┬──────────┬─────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ ├─────────────────────┼────────────────┼──────────┼─────────────────────┤ │ openssl │ CVE-2024-XXXX │ CRITICAL │ 3.1.0-r0 │ │ libcrypto │ CVE-2024-YYYY │ HIGH │ 3.1.0-r0 │ └─────────────────────┴────────────────┴──────────┴─────────────────────┘ ``` --- ## 🛠️ Intégration dans le Makefile Le Makefile inclut déjà une cible `security` : ```bash make security ``` Cette commande exécute : - `gosec` : Analyse statique de sécurité - `govulncheck` : Scan des vulnérabilités Go Pour ajouter le scan Docker : ```bash # Ajouter dans le Makefile docker-scan: docker-build @echo "$(GREEN)🔒 Scan de l'image Docker...$(NC)" @trivy image $(DOCKER_IMAGE):$(DOCKER_TAG) ``` --- ## ⚠️ Mode "Report Only" Par défaut, le workflow CI bloque les PRs si des vulnérabilités HIGH/CRITICAL sont trouvées. Pour activer le mode "report only" (ne bloque pas), modifier le workflow : ```yaml - name: Check for HIGH/CRITICAL vulnerabilities run: | # ... scan ... exit 0 # Ne pas bloquer, juste reporter ``` --- ## 📝 Bonnes Pratiques 1. **Scanner régulièrement** : Exécuter les scans au moins une fois par semaine 2. **Mettre à jour les dépendances** : Maintenir les dépendances à jour 3. **Réviser les rapports** : Analyser les vulnérabilités et prioriser les corrections 4. **Documenter les exceptions** : Si une vulnérabilité ne peut pas être corrigée immédiatement, documenter pourquoi 5. **Automatiser** : Utiliser les workflows CI pour automatiser les scans --- ## 🔗 Ressources - [govulncheck Documentation](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck) - [Trivy Documentation](https://aquasecurity.github.io/trivy/) - [Go Vulnerability Database](https://pkg.go.dev/vuln/) - [GitHub Security Advisories](https://github.com/advisories)