Logs de sécurité
Sentinel enregistre tous les événements de sécurité pour vous aider à surveiller les menaces contre votre boutique.
Emplacement des logs
Les logs sont stockés dans : /var/logs/sentinel-YYYY-MM-DD.log
Exemple : /var/logs/sentinel-2025-12-17.log
Types de logs
Sentinel génère plusieurs types de logs selon les événements détectés.
1. Détection d'attaque (Signature URI)
Lorsqu'une signature malveillante est détectée dans une requête :
[2025-12-17 14:35:22] [WARNING] ATTACK DETECTED - Pattern: (.*)select(.*)sleep(.*)
{
"ip": "192.168.1.100",
"uri": "/index.php?id=1 AND SELECT SLEEP(5)",
"method": "GET",
"signature_pattern": "(.*)select(.*)sleep(.*)",
"signature_target": "/modules/vulnerable/",
"request_body_sample": "SELECT SLEEP(5)",
"get_params": {"id": "1 AND SELECT SLEEP(5)"},
"post_params": {},
"user_agent": "Mozilla/5.0...",
"timestamp": "2025-12-17 14:35:22"
}
2. Échecs de connexion
Tentatives de connexion échouées au back-office :
[2025-12-17 10:15:30] [WARNING] FAILED LOGIN ATTEMPT - Email: admin@test.com
{
"ip": "192.168.1.50",
"uri": "/admin/index.php?controller=AdminLogin",
"method": "POST",
"user_agent": "Mozilla/5.0...",
"timestamp": "2025-12-17 10:15:30"
}
3. Requêtes POST
Toutes les requêtes POST sont enregistrées avec leur payload :
[2025-12-17 11:20:15] [INFO] POST REQUEST
{
"ip": "192.168.1.75",
"uri": "/admin/index.php?controller=AdminProducts",
"method": "POST",
"user_agent": "Mozilla/5.0...",
"timestamp": "2025-12-17 11:20:15",
"post_data": {
"name": "Nouveau produit",
"price": "19.99"
},
"raw_body": "name=Nouveau+produit&price=19.99"
}
4. Requêtes PUT/PATCH/DELETE
Requêtes de modification/suppression via API :
[2025-12-17 12:30:45] [INFO] PUT REQUEST
{
"ip": "192.168.1.80",
"uri": "/api/products/123",
"method": "PUT",
"user_agent": "APIClient/1.0",
"timestamp": "2025-12-17 12:30:45",
"raw_body": "{\"price\": \"24.99\"}"
}
5. Contrôle non effectué
Lorsqu'une signature n'a pas pu être évaluée sur une requête du back-office émise par un employé connecté. Le moteur de correspondance a épuisé ses ressources — un formulaire volumineux peut consommer tout le budget de backtracking d'une signature gourmande — et le contrôle n'a donc abouti à aucune conclusion. La requête est laissée passer et l'événement est enregistré avec sa raison :
[2025-12-17 15:02:41] [WARNING] SIGNATURE CHECK SKIPPED - Pattern: (.*)=(.*)x_(.*)x$ - PREG_BACKTRACK_LIMIT_ERROR: the pattern could not be evaluated on this request, trusted back-office session, request not blocked
{
"ip": "192.168.1.10",
"uri": "/admin-dev/index.php?controller=AdminCustomers",
"method": "POST",
"engine_failure": "PREG_BACKTRACK_LIMIT_ERROR",
"inspected_length": 26043,
"attack_pattern": "(.*)=(.*)x_(.*)x$",
"user_agent": "Mozilla/5.0...",
"timestamp": "2025-12-17 15:02:41"
}
Hors session employé authentifiée, le même abandon du moteur bloque la requête. Une signature qui correspond réellement bloque toujours, session employé ou non.
6. Auto Prepend File
Accès directs aux fichiers PHP (voir Protection Auto Prepend) :
[2025-12-17 13:45:10] [INFO] AUTO PREPEND FILE
{
"ip": "192.168.1.90",
"uri": "/modules/oldmodule/upload.php",
"method": "POST",
"user_agent": "curl/7.68.0",
"timestamp": "2025-12-17 13:45:10",
"source": "auto_prepend",
"post_data": {"action": "upload"},
"files": {
"file": {
"name": "shell.php",
"size": 1234,
"type": "application/x-php"
}
}
}
7. Deux facteurs : suspicion de clonage de passkey
Lorsqu'un employé se connecte avec une passkey et que le compteur de signature de l'authentificateur n'augmente pas strictement par rapport à la valeur enregistrée lors de la dernière utilisation réussie. Les authentificateurs conformes incrémentent ce compteur à chaque assertion : une valeur qui stagne ou régresse signale que la credential pourrait avoir été clonée — soit l'authentificateur légitime et une copie signent tous les deux, soit une assertion capturée est rejouée :
[2025-12-17 16:20:03] [WARNING] TWO-FACTOR CLONE SUSPECTED
{
"id_employee": 3,
"credential": "a1b2c3d4",
"stored": 42,
"received": 42,
"timestamp": "2025-12-17 16:20:03"
}
L'assertion est refusée et l'échec est compté comme n'importe quel autre échec de défi, mais la credential elle-même n'est pas révoquée automatiquement — la supprimer sur ce seul signal permettrait à un attaquant qui a simplement rejoué une assertion capturée de priver l'employé légitime de sa passkey. C'est un avertissement à traiter, pas une sanction automatique : quand cet événement apparaît, le marchand doit considérer la passkey comme potentiellement compromise et faire retirer puis réenregistrer la credential par l'employé depuis Mes méthodes, accessible depuis son profil employé.
Rotation des logs
- Fréquence : Quotidienne (nouveau fichier chaque jour)
- Rétention : 7 jours (fichiers plus anciens automatiquement supprimés)
- Nomenclature :
sentinel-YYYY-MM-DD.log
Visualiser les logs
Via le Back-Office
Pour visualiser les logs de sécurité depuis le back-office :
- Connectez-vous à votre back-office PrestaShop
- Allez dans Modules > Sentinel > Security Logs
- Utilisez les filtres pour rechercher par date, IP, type, sévérité ou statut de blocage
Le tableau des logs comporte une colonne Statut qui indique explicitement si chaque événement a été bloqué :
- Bloqué : la requête a été stoppée par Sentinel (HTTP 403). Les attaques détectées sont toujours bloquées.
- Non bloqué : l'événement a uniquement été enregistré (par exemple les échecs de connexion, les requêtes POST/PUT/PATCH/DELETE journalisées ou un événement Contrôle non effectué), la requête a été autorisée à poursuivre.
Le même statut est affiché dans la fenêtre de détails de l'événement.
Événements écrits mais non listés
La liste du back-office s'en tient aux événements qui appellent une décision. Douze types d'événements de double authentification sont enregistrés en base exactement comme les autres, mais ne sont pas affichés dans le tableau, ne sont pas proposés par le filtre de type, ne sont pas comptés dans les chiffres du tableau de bord, et ne sont pas servis par la fenêtre de détails :
2fa_enrolled, 2fa_method_removed, 2fa_challenge_success,
2fa_recovery_generated, 2fa_trusted_device_added,
2fa_trusted_device_revoked, 2fa_policy_started, 2fa_policy_reminder,
2fa_policy_due, 2fa_policy_alert, 2fa_policy_exempted,
2fa_policy_waiver_lifted.
Rien n'a changé à ce qui est écrit : ces événements sont enregistrés avec le même détail qu'avant, ils sont conservés pendant la même durée de rétention, et la ligne de commande les lit tous.
php bin/console sentinel:logs --type=2fa_enrolled
php bin/console sentinel:logs --type=2fa_policy_due
Vider le journal depuis le back-office suit la même règle : l'opération efface les événements que la liste affiche et laisse ces douze types en base. Il en va de même pour la suppression d'un événement isolé : un événement que la liste n'affiche pas n'est pas supprimé, et n'est pas non plus servi, même lorsque son identifiant est connu.
Les événements de double authentification qui restent dans la liste sont ceux
sur lesquels on agit ou avec lesquels on enquête : 2fa_challenge_failed,
2fa_clone_suspected, 2fa_incident, 2fa_recovery_used,
2fa_trusted_device_used, 2fa_enrolment_forced et 2fa_sessions_revoked.
Via la commande Sentinel
Sentinel fournit une commande dédiée pour visualiser et gérer les logs :
Voir les logs récents :
php bin/console sentinel:logs
Filtrer par type :
php bin/console sentinel:logs --type=attack
php bin/console sentinel:logs --type=detection_skipped
php bin/console sentinel:logs --type=login_failed
php bin/console sentinel:logs --type=post_request
Filtrer par sévérité :
php bin/console sentinel:logs --severity=warning
php bin/console sentinel:logs --severity=critical
Filtrer par adresse IP :
php bin/console sentinel:logs --ip=192.168.1.100
Filtrer par plage de dates :
php bin/console sentinel:logs --from="2025-01-01" --to="2025-01-31"
Limiter les résultats :
php bin/console sentinel:logs --limit=50
Sortie en JSON :
php bin/console sentinel:logs --json
Supprimer tous les logs :
php bin/console sentinel:logs --clear
Via ligne de commande système
Voir les événements du jour :
tail -f /var/logs/sentinel-$(date +%Y-%m-%d).log
Compter les attaques :
grep "ATTACK DETECTED" /var/logs/sentinel-*.log | wc -l
Trouver les attaques d'une IP spécifique :
grep "192.168.1.100" /var/logs/sentinel-*.log
Patterns d'attaque les plus courants :
grep "ATTACK DETECTED" /var/logs/sentinel-*.log | \
grep -oP 'Pattern: [^"]*' | \
sort | uniq -c | sort -rn | head -10
Voir tous les échecs de connexion :
grep "FAILED LOGIN ATTEMPT" /var/logs/sentinel-*.log
Voir les accès Auto Prepend File :
grep "AUTO PREPEND FILE" /var/logs/sentinel-*.log
Voir toutes les requêtes POST du jour :
grep "POST REQUEST" /var/logs/sentinel-$(date +%Y-%m-%d).log
Protection des données sensibles
Sentinel masque automatiquement les informations sensibles dans les logs :
Champs protégés :
Mots de passe :
password,passwd,pwd,motdepasse,motpasse,passrepeat_password,password_confirmation,new_password,old_password
Tokens et authentification :
secret,token,api_key,apikey,access_token,refresh_tokenbearer,auth,authorization,oauth,jwt,session
Clés privées :
private_key,priv_key,ssh_key,key,pem,certificate
Informations bancaires :
credit_card,card_number,cvv,cvv2,cvc,iban,swift
Autres :
ssn,pin,cookie,encryption_key,salt,hash,signature
Exemple :
Requête : username=admin&password=secret123&api_key=abc123
Loggé : username=admin&password=********&api_key=********
Que faire avec les logs
Surveillance quotidienne
- Vérifier l'augmentation des attaques
- Identifier les IPs récurrentes attaquantes
- Repérer les patterns d'attaques
Quand des attaques sont détectées
- Identifier la menace : Quel pattern a été matché ?
- Vérifier l'IP : Est-ce un récidiviste ?
- Agir :
- Bloquer l'IP au niveau du serveur
- Signaler au fournisseur d'hébergement
- Surveiller les patterns similaires
Analyser les échecs de connexion
Si vous voyez de nombreux échecs de connexion :
- Vérifier si l'IP correspond à un administrateur légitime
- Si non, bloquer l'IP (attaque par force brute)
- Envisager l'activation d'un système 2FA
Surveiller les accès directs aux fichiers PHP
Les logs Auto Prepend File peuvent révéler :
- Des tentatives d'exploitation de modules vulnérables
- Des uploads de fichiers malveillants
- Des accès à des fichiers qui ne devraient pas être accessibles directement
Analyse forensique
En cas d'incident de sécurité, les logs Sentinel permettent de :
1. Reconstituer la chronologie
# Tous les événements d'une IP suspecte
grep "192.168.1.100" /var/logs/sentinel-*.log | sort
2. Identifier le point d'entrée
# Premier événement de l'attaquant
grep "192.168.1.100" /var/logs/sentinel-*.log | head -1
3. Voir tous les fichiers ciblés
# Tous les fichiers PHP accédés directement
grep "AUTO PREPEND FILE" /var/logs/sentinel-*.log | grep "192.168.1.100"
4. Analyser les payloads
Les logs contiennent les payloads complets des requêtes POST, permettant de comprendre exactement ce que l'attaquant a tenté.
Résolution des problèmes
Aucun log créé
Vérifiez les permissions :
chmod 755 /var/logs
ls -la /var/logs
Logs trop volumineux
Si les logs deviennent trop volumineux :
- Réduisez la période de rétention (modifiez
LOG_RETENTION_DAYSdansSecurityLogger.php) - Archivez les anciens logs
- Envisagez de filtrer certains types de logs (par exemple, désactiver le log de toutes les requêtes POST)
Logs manquants après rotation
Si les logs disparaissent après rotation, vérifiez :
- Les permissions du répertoire
/var/logs - Que le serveur web peut écrire dans ce répertoire
- Que Monolog est correctement installé (
composer install)
Voir aussi :