InfraGuard

Jeux de règles de détection

Un catalogue en lecture seule qui normalise chaque règle de détection observée par InfraGuard en 44 jeux de règles répartis sur 11 catégories, affichant les compteurs de déclenchement en direct et, au clic, les événements récents correspondant à chaque jeu de règles.

Vue d’ensemble — à quoi sert cet écran

Jeux de règles de détection (/security/rulesets) est la bibliothèque canonique qui normalise chaque règle de détection observée et évaluée par InfraGuard en 44 jeux de règles répartis sur 11 catégories. L’écran fait trois choses au même endroit :

  1. Panorama — dispose les cartes de jeux de règles dans des sections par catégorie et affiche, pour la fenêtre temporelle sélectionnée (1h/6h/24h), le nombre réel d’événements et l’horodatage de dernière observation de chaque jeu de règles.
  2. Explication — décrit chaque jeu de règles en trois étapes (ce qu’il détecte · pourquoi il se déclenche · pire scénario).
  3. Rejeu — un clic sur une carte ouvre une fenêtre modale contenant les événements récents réellement mis en correspondance par ce jeu de règles, dans un tableau propre au moteur.

La clé de la conception est la séparation entre la structure de classification et le texte explicatif. La structure (catégories, clés de jeux de règles, règles de correspondance par moteur) réside dans la SOT statique et indépendante de la locale App\Support\SecurityRulebook (compatible avec la mise en cache), tandis que le texte explicatif (nom, signification, indices, risque) réside dans resources/lang/{ko,en}/secrules.php. Le frontend fusionne les deux par key+category pour le rendu.

Cet écran est strictement en lecture seule. Il n’active, ne désactive, ne modifie ni ne supprime aucun jeu de règles. C’est un catalogue de référence qui répond à la question « qu’observe-t-on dans cette organisation en ce moment, et qu’est-ce que cela signifie ? ». L’endroit qui modifie réellement les constantes de détection (seuils/fenêtres) est Règles et seuils (Administration ▸ Règles).

Les 44 jeux de règles sont câblés à de la télémétrie réelle

Les jeux de règles ne sont pas des règles abstraites : chacun est lié à une table de collecte réelle par une règle de correspondance (match). Toutes les sources se trouvent sur la connexion legacy_glory (la base de données héritée alimentée par la flotte de collecteurs).

Moteur Règle de correspondance Table source Jeux de règles
Suricata IDS sig : correspondance de sous-chaîne en minuscules avec un tableau de fragments de signature suricata_alert_ct 33
Web (nginx) classifyWeb : classification par priorité et disjointe des requêtes is_suspicious selon url/ua/status nginx_meta_ct 8
Kitsune ML source=kitsune : IP anormales selon l’auto-encodeur kitsune_detail_log 1
Heuristique (srct) source=srct : exécutions heuristiques de scan/débit srct_process_log 1
Empreinte JA3 source=ja3 : variété JA3 (rotation) par IP source suricata_tls_ct 1

Quand l’utiliser

Disposition

Indicateurs du haut

KPI Libellé Signification
total Jeux de règles Nombre total de jeux de règles du catalogue (toujours 44)
active Jeux de règles observés Jeux de règles ayant déclenché au moins un événement dans la fenêtre (firing)
events Événements dans la fenêtre Somme des compteurs d’événements de tous les jeux de règles
cats Catégories Nombre de catégories (11)

En interne, il calcule aussi des sommes par moteur (totaux d’événements kitsune et suricata) afin que les chiffres restent cohérents avec l’étape « jeux de règles » de l’entonnoir de défense de Sécurité.

Contrôles

Sections par catégorie et cartes de jeux de règles

Les 11 catégories forment des sections dans l’ordre d’affichage, et à l’intérieur de chaque section les jeux de règles sont disposés dans une grille de cartes minmax(600). Chaque carte affiche le nom du jeu de règles, une icône MDI, un badge de sévérité (crit/warn/info), le nombre d’événements dans la fenêtre, l’horodatage de dernière observation et [Open]. Sans événement, elle affiche « calme / rien d’observé dans la fenêtre ».

# Clé de catégorie Libellé Moteur Jeux de règles
1 tcp_stream Intégrité du flux TCP Suricata 10
2 packet_decode Décodage de paquets Suricata 4
3 protocol_anomaly Anomalie de protocole Suricata 5
4 http_anomaly Conformité HTTP Suricata 5
5 tls_anomaly Anomalie TLS Suricata 5
6 dns_anomaly Anomalie DNS Suricata 1
7 mail_anomaly Anomalie de messagerie (SMTP) Suricata 3
8 web_attack Motifs d’attaque web nginx 8
9 ml_anomaly Détection d’anomalies par ML Kitsune 1
10 heuristic_scan Scan heuristique srct 1
11 tls_fingerprint Empreinte JA3 JA3 1

Comment l’utiliser

1) Choisissez une fenêtre → lisez le paysage

Choisissez d’abord la fenêtre qui vous intéresse (1h/6h/24h). Utilisez active (jeux de règles observés) et le compteur d’événements de chaque carte pour voir ce qui se déclenche actuellement. Notez que le badge de sévérité est une sévérité implicite : la plupart des événements du moteur Suricata sont de sev3 (informatifs), mais leur implication diffère (bruit / scan / exploitation). Le badge du jeu de règles reflète ce ton d’implication, et non le sev brut.

2) Cliquez sur une carte → fenêtre modale des événements récents

Un clic sur une carte appelle /security/rulesets/events?key=<rulesetKey>&range=<window> et ouvre une fenêtre modale contenant :

Colonnes du tableau d’événements propre au moteur :

Moteur Colonnes
Suricata heure · src · dst · port · proto · signature · sev
nginx heure · src · hôte · méthode · URL (rawurldecode, 180 caractères) · statut
Kitsune heure · IP · score d’anomalie · sessions · bloquée
srct heure · scannées · bloquées · note
JA3 heure · IP · variété JA3 · connexions TLS · variété SNI

3) Priorité de classification des attaques web (disjointe)

Les 8 jeux de règles web (nginx) sont mutuellement disjoints. Une requête is_suspicious=1 est parcourue dans l’ordre de définition du catalogue et attribuée à exactement un jeu de règles, le premier qui correspond ; si aucune ne correspond, elle retombe sur le fourre-tout (web_suspicious_other). Ainsi, une même requête n’est jamais comptée deux fois entre deux jeux de règles web.

Priorité Clé du jeu de règles Indice de correspondance (url/ua) Sévérité
1 web_secret_scan .env .git wp-config id_rsa .aws credentials backup.sql .bak warn
2 web_path_traversal ../ ..%2f %2e%2e etc/passwd boot.ini proc/self crit
3 web_sqli union select information_schema sleep( or 1=1 %27or crit
4 web_xss <script onerror= javascript: document.cookie warn
5 web_rce_probe /bin/sh exec( system( jndi: ${ phpunit crit
6 web_admin_brute wp-login xmlrpc.php phpmyadmin /admin/login warn
7 web_bad_bot UA : sqlmap nikto masscan nuclei python-requests curl/ warn
8 web_suspicious_other (fourre-tout — requêtes suspectes ne correspondant à aucune des précédentes) info

Pour des raisons de performance, la classification web agrège sur un échantillon des 6,000 lignes les plus récentes (plafond du dépôt : 8,000). Lors de scans intenses, les événements hors échantillon peuvent ne pas être reflétés — lisez les chiffres comme une distribution/tendance, non comme des compteurs absolus.

4) Ce qu’implique la correspondance par sous-chaîne de Suricata

Les jeux de règles Suricata se déclenchent sur une correspondance de sous-chaîne en minuscules de la chaîne de signature. Par exemple, stream_invalid_ts additionne tous les événements dont la signature contient invalid timestamp. Un seul jeu de règles peut regrouper plusieurs signatures réelles (visibles sous forme de puces « signatures correspondantes » dans la fenêtre modale), et les mots-clés sig de jeux de règles différents sont conçus pour ne pas se chevaucher.

5) Exemple mesuré (à titre de référence)

Un instantané illustratif sur 24h : 37 jeux de règles sur 44 se déclenchent, stream_invalid_ts 10,243, web_secret_scan 3,304 (majoritairement des 404 de la famille .env), srct_heuristic 126,252, ja3_rotation 300 (variété 307/307). Les valeurs varient selon l’organisation et la période.

Sources de données

Toutes les sources sont la connexion legacy_glory (lecture seule), atteinte uniquement via config('database.connections.legacy_glory') — aucun identifiant codé en dur.

Famille de jeux de règles Table Méthodes du dépôt (extrait)
Suricata (33) suricata_alert_ct signatureHistogram() · recentAlertsBySignatures() · distinctIpsBySignatures()
Web (8) nginx_meta_ct (is_suspicious=1) suspiciousRows($since, 6000)
Kitsune ML (1) kitsune_detail_log kitsuneCount() · kitsuneRecentInWindow()
Heuristique (1) srct_process_log srctBlockedSum() · srctRunsInWindow()
JA3 (1) suricata_tls_ct topJa3Ips($since, N, excludePrefixes)

Performance et mise en cache

Accès

Convention de niveaux : demo=1 · staff=5 · admin=10. Certains espaces sont en outre protégés par le middleware infr.level:N. Voir Niveaux RBAC pour le barème complet.

Dépannage et FAQ

Toutes les cartes affichent « calme »

Soit il n’y a aucun événement correspondant dans la fenêtre sélectionnée (24h par défaut), soit la connexion legacy_glory est injoignable. Le service absorbe proprement les erreurs de source et affiche des compteurs vides (0) — les cartes ne disparaissent pas. Élargissez la fenêtre ou vérifiez la connexion.

Les compteurs des jeux de règles web diffèrent de [Menaces] / [Détections]

La classification web est un agrégat de distribution sur un échantillon des 6,000 lignes les plus récentes (et non un compteur absolu). Elle est aussi disjointe : une requête est donc attribuée à exactement un jeu de règles. La source d’événements faisant autorité suit la requête propre à chaque écran.

Une signature précise n’est capturée par aucun jeu de règles

La correspondance Suricata se fait par sous-chaîne de mot-clé. Les signatures nouvelles ou personnalisées que le catalogue ne couvre pas ne sont additionnées dans le compteur d’aucun jeu de règles. Pour les classer et les expliquer, ajoutez le mot-clé de la signature au tableau sig de SecurityRulebook — c’est une modification de code, pas un réglage à l’exécution.

Les contrevenants JA3 sont à 0 alors que le trafic TLS est important

Le jeu de règles JA3 ne compte comme contrevenantes que les IP source ayant ja3_variety >= 2 (rotation d’empreinte). Sans rotation, une source est considérée comme normale et n’est pas comptée. Les IP du réseau propre sont également exclues.

Une IP affiche un badge internal dans la fenêtre modale des événements

Il s’agit d’une IP de réseau interne enregistrée, déterminée par SecurityScope::internalMatchers(). Cela évite de prendre pour des attaquants nos propres serveurs — que la directionnalité de Suricata peut étiqueter comme « source » — et masque le bouton de réputation. La définition du réseau interne se gère sous internal_networks dans Politique d’exploitation.

Voir aussi

탐지 룰셋 카탈로그
탐지 룰셋 카탈로그