Introduction
Le détecteur de l’équipe signale chaque POST vers collector.example.test/collect. Certains sont des démonstrations publiques autorisées. Votre tâche consiste à cibler les documents internes tout en conservant ces échanges permis.
Cet environnement indépendant contient broad.rules, le détecteur précédent, et des captures synthétiques TCP/HTTP complètes. Utilisez l’onglet Analyst pour les commandes et sélectionnez l’onglet Traffic Reference pour consulter les requêtes enregistrées ; la page s’ouvre directement. Les mêmes exemples figurent dans traffic/requests.txt. Aucun fichier de la VM précédente n’est nécessaire. L’analyse du corps concerne cette capture HTTP en clair, pas le HTTPS chiffré.
Trouver le contexte du document sensible
Dans cette étape, découvrez pourquoi un indice du corps est utile, mais insuffisant seul. classification=internal est un champ métier synthétique décrivant la catégorie de traitement du document, pas un marqueur d’achèvement.
Sélectionnez l’onglet Analyst dans l’interface du laboratoire pour commencer cette étape.
Passez à l’onglet Traffic Reference pour comparer les corps des requêtes, puis revenez à l’onglet Analyst. Lisez la référence et rejouez le détecteur fourni. Les options restent identiques : règles exclusives avec -S, PCAP d’entrée avec -r, dossier de sortie avec -l.

Passez à l’onglet Analyst avant d’exécuter la commande suivante.
cat traffic/requests.txt
mkdir -p broad-output
suricata --runmode single -c suricata.yaml -S broad.rules -r traffic/core.pcap -l broad-output --init-errors-fatal
python3 /opt/c09/read-alerts.py broad-output/eve.json
Attendez quatre alertes, dont deux documents publics. classification=public indique un contenu adapté à une démonstration publique sur cette route. La politique combine méthode, destination, route et classification interne.
Essayez un détecteur du corps seul pour découvrir le nouveau tampon. http.request_body fait examiner par le content suivant le corps reconstitué, même si ses octets traversent plusieurs paquets TCP. Le moteur effectue ce réassemblage ; une recherche de texte paquet par paquet n’est pas équivalente. Nous n’ajoutons pas de bornes de tampon entier, car la classification est un champ d’un corps plus long.
Utilisez la saisie littérale multiligne comme précédemment : > remplace le fichier et le RULE final doit être seul sur sa ligne.
cat > body.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.request_body; content:"classification=internal"; sid:1000001; rev:1;)
RULE
mkdir -p body-output
suricata --runmode single -c suricata.yaml -S body.rules -r traffic/core.pcap -l body-output --init-errors-fatal
python3 /opt/c09/read-alerts.py body-output/eve.json
Attendez Alerts: 9. Les documents internes envoyés aux destinations approuvées alertent aussi, ainsi que PUT et les autres routes du collecteur. Rechercher un mot sensible n’importe où est donc trop large. Gardez ce résultat comme expérience, pas comme détecteur final.
python3 /opt/c09/check.py body.rules body
Les deux corpus doivent correspondre à neuf échanges contenant ce corps. Une erreur de syntaxe se corrige en réécrivant le bloc et en réessayant dans un nouveau dossier, pour éviter la confusion due aux événements ajoutés.
Combiner les conditions et tester l’équilibre
Dans cette étape, combinez les quatre champs HTTP appris. Gardez POST, l’hôte exact et la route exacte du collecteur ; ajoutez la classification interne.
Sélectionnez l’onglet Analyst dans l’interface du laboratoire pour commencer cette étape.
Créez local.rules, votre livrable final. Les conditions des différents tampons se combinent par AND : la transaction doit toutes les satisfaire. sid:1000001 reste un identifiant local unique ; une règle active suffit.
Passez à l’onglet Analyst avant d’exécuter la commande suivante.
cat > local.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.method; content:"POST"; startswith; endswith; http.host; content:"collector.example.test"; startswith; endswith; http.uri; content:"/collect"; startswith; endswith; http.request_body; content:"classification=internal"; sid:1000001; rev:1;)
RULE
Avant la relecture, testez la syntaxe avec -T. Le dossier et -l donnent aussi une sortie accessible en écriture à ce test. Configuration et règles sont chargées sans lire de paquets. Une syntaxe valide ne prouve pas la qualité de détection.
mkdir -p syntax-output
suricata -T -c suricata.yaml -S local.rules -l syntax-output --init-errors-fatal
mkdir -p final-output
suricata --runmode single -c suricata.yaml -S local.rules -r traffic/core.pcap -l final-output --init-errors-fatal
python3 /opt/c09/read-alerts.py final-output/eve.json
Attendez Alerts: 2, pour 41002 et 41007. Un document interne part dans chaque cas par POST vers la route non approuvée. Démonstrations publiques, envois approuvés, contrôles de santé, autres méthodes et routes restent silencieux. Les alertes indiquent encore action: allowed : l’alerte hors ligne observe le trafic sans empêcher l’envoi.
Exécutez le vérificateur de régression équilibré. Une régression reteste les correspondances requises et interdites après modification. Il relit dans une sortie neuve le corpus affiché et un autre aux noms et ports différents. Il teste la règle, pas l’ancien nombre d’événements.
python3 /opt/c09/check.py local.rules final
Les deux lignes doivent annoncer deux échanges attendus et des comparaisons silencieuses. Répétez : résultats et capture doivent rester identiques. Une alerte manquante suggère une condition trop précise ou le mauvais tampon ; une alerte imprévue une condition absente ou trop large. Réécrivez local.rules et réessayez. Ne désactivez pas le moteur et ne supprimez pas les comparaisons légitimes.
Ce détecteur vérifie une politique limitée, pas toutes les pertes de données. Corps volumineux, chiffrement, encodages et autres protocoles exigent une conception et des tests distincts. Le défi change les faits de politique avec les mêmes quatre tampons.
Résumé
Vous avez comparé un détecteur limité à la route avec un essai limité au corps, puis combiné les quatre champs HTTP. Vous avez testé votre règle sur des corpus équilibrés dans des dossiers neufs et explicité les limites de visibilité.



