Qu'est-ce que les Défaillances de Journalisation ?
Les Insufficient Logging & Monitoring Failures concernent l'absence ou l'inefficacité des mécanismes de journalisation et de surveillance. Sans logs appropriés, il est impossible de détecter, investiguer ou répondre aux incidents de sécurité.
Cette faille permet aux attaquants d'agir sans être détectés pendant de longues périodes.
Exemples Courants de Failles
- Absence de logs sur les événements critiques : Échecs de connexion, violations d'accès.
- Logs non centralisés : Impossible de corréler les événements entre plusieurs serveurs.
- Données sensibles dans les logs : Mots de passe, tokens, ou données personnelles exposés.
- Pas d'alertes automatisées : Les incidents ne sont pas signalés en temps réel.
- Logs facilement modifiables : Un attaquant peut effacer ses traces.
Comment se protéger ?
Implémentez une stratégie de logging robuste :
- Journaliser les événements de sécurité : Authentification, autorisation, validation des données.
- Format structuré : Utilisez JSON pour faciliter l'analyse automatique.
- Centralisation : Envoyez les logs vers un SIEM ou un service dédié.
- Alertes en temps réel : Configurez des seuils pour les activités suspectes.
- Protection des logs : Stockez les logs dans un emplacement en écriture seule (WORM).
[!IMPORTANT] Ne jamais logger de données sensibles : mots de passe, tokens de session, numéros de carte bancaire, ou données de santé.
// MAUVAISE PRATIQUE : Logger des données sensibles
app.post('/login', (req, res) => {
const { username, password } = req.body;
console.log(`Login attempt: ${username}, password: ${password}`); // ⚠️ DANGER
// ...
});
// BONNE PRATIQUE : Logger sans données sensibles
const winston = require('winston');
const logger = winston.createLogger({
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'security.log' })
]
});
app.post('/login', (req, res) => {
const { username } = req.body;
logger.warn('Tentative de connexion', {
username,
ip: req.ip,
timestamp: new Date().toISOString(),
userAgent: req.get('User-Agent')
});
// ...
});Événements à Journaliser
| Événement | Niveau | Action |
|---|---|---|
| Échec de connexion | Warning | Alerter après N échecs |
| Violation d'accès | Error | Alerter immédiatement |
| Modification de données | Info | Audit trail |
| Changement de privilèges | Warning | Vérification requise |
| Erreurs de validation | Info | Détection d'attaques |