250 lines
6 KiB
Markdown
250 lines
6 KiB
Markdown
# 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 <package>
|
|
```
|
|
3. Mettre à jour la dépendance :
|
|
```bash
|
|
go get -u <package>@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)
|