Aller au contenu principal

Shift Left Security


1 - Le concept Shift Left

1.1 Définition

Shift Left = Déplacer les activités de sécurité vers le début du cycle de développement.

1.2 Avantages

AvantageImpact
Coût réduit100x moins cher qu'en production
Délai raccourciPas de retours en fin de cycle
Qualité amélioréeMoins de dette technique
CultureDéveloppeurs sensibilisés

2 - Threat Modeling

2.1 Méthodologie STRIDE

2.2 Process de Threat Modeling

threat_modeling_steps:
1_decompose:
- Identifier les composants
- Définir les trust boundaries
- Mapper les flux de données

2_identify_threats:
- Appliquer STRIDE à chaque composant
- Documenter les scénarios d'attaque
- Évaluer la probabilité

3_mitigate:
- Définir les contrôles
- Prioriser par risque
- Assigner aux équipes

4_validate:
- Vérifier l'implémentation
- Tests de sécurité
- Review périodique

2.3 Exemple de Threat Model

# threat-model.yaml
application: E-Commerce API
version: 1.0
date: 2024-01-15

components:
- name: API Gateway
type: entry_point
threats:
- type: Spoofing
description: "Attaquant usurpe l'identité d'un user"
mitigation: "OAuth2 + MFA"
status: mitigated
- type: DoS
description: "Flood de requêtes"
mitigation: "Rate limiting + WAF"
status: mitigated

- name: Database
type: data_store
threats:
- type: Information Disclosure
description: "Accès non autorisé aux données"
mitigation: "Encryption at rest + RBAC"
status: mitigated
- type: Tampering
description: "Modification des données"
mitigation: "Audit logs + Integrity checks"
status: in_progress

trust_boundaries:
- name: Internet to DMZ
controls: [WAF, IDS, TLS]
- name: DMZ to Internal
controls: [Firewall, mTLS]

3 - Security Requirements

3.1 User Stories sécurisées

# Template User Story avec Sécurité

**En tant que** [rôle]
**Je veux** [action]
**Afin de** [bénéfice]

## Critères d'acceptation
- [ ] Critère fonctionnel 1
- [ ] Critère fonctionnel 2

## Critères de sécurité
- [ ] Authentification requise
- [ ] Autorisation vérifiée (RBAC)
- [ ] Input validé et sanitized
- [ ] Données sensibles chiffrées
- [ ] Audit log généré

3.2 Security Requirements Checklist

# OWASP ASVS basé
authentication:
- Multi-factor authentication support
- Secure password storage (bcrypt/argon2)
- Session management secure
- Account lockout after failures

authorization:
- Role-based access control
- Principle of least privilege
- API authorization on all endpoints
- Resource-level permissions

data_protection:
- Encryption at rest (AES-256)
- Encryption in transit (TLS 1.3)
- PII handling compliant
- Secure key management

input_validation:
- Input validation on all inputs
- Output encoding
- SQL injection prevention
- XSS prevention

logging:
- Security events logged
- No sensitive data in logs
- Log integrity protected
- Centralized logging

4 - Secure Coding Guidelines

4.1 Top 10 règles

RègleDescription
1. Input ValidationValider toutes les entrées
2. Output EncodingEncoder les sorties (XSS)
3. Parameterized QueriesPrévenir SQL injection
4. AuthenticationAuthentification robuste
5. Access ControlContrôle d'accès strict
6. CryptographyCrypto moderne et correcte
7. Error HandlingPas d'info sensible dans les erreurs
8. LoggingLogger les événements sécurité
9. Data ProtectionProtéger les données sensibles
10. HTTP SecurityHeaders sécurité HTTP

4.2 Exemples de code sécurisé

# ❌ MAUVAIS - SQL Injection
query = f"SELECT * FROM users WHERE id = {user_id}"

# ✅ BON - Parameterized Query
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_id,))
// ❌ MAUVAIS - XSS
element.innerHTML = userInput;

// ✅ BON - Encoding
element.textContent = userInput;
# ❌ MAUVAIS - Hardcoded secret
api_key = "sk-12345secret"

# ✅ BON - Environment variable
api_key = os.environ.get("API_KEY")

5 - Code Review sécurité

5.1 Checklist de review

## Security Code Review Checklist

### Authentication & Authorization
- [ ] Authentification requise pour les endpoints sensibles
- [ ] Autorisation vérifiée côté serveur
- [ ] Session management sécurisé

### Input/Output
- [ ] Toutes les entrées validées
- [ ] Sorties encodées correctement
- [ ] File uploads sécurisés

### Data
- [ ] Données sensibles chiffrées
- [ ] Pas de secrets hardcodés
- [ ] PII gérées correctement

### Error Handling
- [ ] Erreurs ne révèlent pas d'info sensible
- [ ] Exceptions gérées proprement

### Logging
- [ ] Events sécurité loggés
- [ ] Pas de données sensibles dans les logs

5.2 Automatisation avec Semgrep

# .semgrep.yml
rules:
- id: hardcoded-password
patterns:
- pattern: password = "..."
message: "Hardcoded password detected"
severity: ERROR

- id: sql-injection
patterns:
- pattern: |
$QUERY = f"... {$VAR} ..."
$CURSOR.execute($QUERY)
message: "Potential SQL injection"
severity: ERROR

- id: insecure-hash
patterns:
- pattern: hashlib.md5(...)
- pattern: hashlib.sha1(...)
message: "Use SHA-256 or better"
severity: WARNING

6 - Pre-commit Hooks

6.1 Configuration

# .pre-commit-config.yaml
repos:
# Secrets detection
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks

# Security linting
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ['-r', 'src/', '-ll']

# Semgrep
- repo: https://github.com/returntocorp/semgrep
rev: v1.50.0
hooks:
- id: semgrep
args: ['--config', 'auto', '--error']

6.2 Installation

# Installer pre-commit
pip install pre-commit

# Installer les hooks
pre-commit install

# Exécuter manuellement
pre-commit run --all-files

7 - IDE Security Plugins

7.1 Extensions recommandées

IDEExtensionFonction
VS CodeSnykSCA + SAST
VS CodeGitLens + GitLeaksSecrets
VS CodeSonarLintSAST
IntelliJSnykSCA + SAST
IntelliJSonarLintSAST

7.2 Configuration VS Code

// settings.json
{
"sonarlint.rules": {
"typescript:S2068": {
"level": "on" // Hardcoded credentials
},
"typescript:S5542": {
"level": "on" // Encryption mode
}
},
"snyk.features.openSourceSecurity": true,
"snyk.features.codeSecurity": true
}

Résumé

Dans ce chapitre, nous avons appris :

  • Le concept Shift Left
  • Le Threat Modeling avec STRIDE
  • Les Security Requirements
  • Les Secure Coding Guidelines
  • La Code Review sécurité
  • Les Pre-commit Hooks
  • Les IDE Security Plugins

Prochaine étape

Dans le prochain chapitre, nous verrons SAST et DAST.

→ Chapitre suivant : SAST et DAST


← Retour à la table des matières