Pablo Zavala · Évaluation de sécurité IA · Ingénierie de recherche

Détection d'anomalies en cybersécurité

Un projet d'analytique de sécurité de Carnegie Mellon qui ajuste une Isolation Forest sur du trafic noyau Linux exclusivement bénin issu du jeu de données honeypot BETH, puis l'évalue sous un seuil gelé. Sur un holdout de 18 000 événements à une prévalence d'attaque simulée de 1 %, le détecteur capte 90 % des intrusions (162 sur 180) avec un taux de faux positifs de 1,94 %, pour un ROC AUC de 0,9714. L'entrée audite elle-même son chiffre phare : la précision s'établit à 0,3189, si bien qu'environ une alerte sur trois signale une attaque réelle, et trois caractéristiques dominantes livrent à un attaquant un mode d'emploi de l'usurpation, ce qui cantonne le détecteur à une seule couche d'une défense en profondeur.

Précision de l'affirmation

Ce que les preuves démontrent
Holdout à seuil gelé : rappel de 0,9000 (162 attaques sur 180 ; IC à 95 % de 0,85 à 0,94) pour un FPR de 0,0194, ROC AUC 0,9714, à partir d'une Isolation Forest ajustée sur du trafic exclusivement bénin
Frontière des capacités et des preuves
La précision au seuil retenu est de 0,3189 à une prévalence simulée de 1 %, la classe malveillante ne comporte qu'une seule campagne de préparation de botnet sur un unique hôte honeypot, et trois caractéristiques dominantes rendent le détecteur vulnérable à l'usurpation.

Dépôt public reproductible et notebook exécuté

Rôle: Auteur unique : ingénierie des caractéristiques, analyse de séparabilité, ajustement du détecteur sur trafic exclusivement bénin, gouvernance du seuil, analyse des erreurs, et le kit de reproduction public.

Carte d'évaluation

Performance de détection

Échantillon
Holdout de 18 000 événements à une prévalence simulée de 1 %, seuil gelé après la validation
Correcteur
Rappel, FPR, précision, ROC AUC et PR AUC, avec des IC à 95 % par bootstrap sur 400 rééchantillonnages du holdout
Résultat
Rappel de 0,9000 (162 attaques sur 180 ; IC de 0,85 à 0,94) pour un FPR de 0,0194 (346 événements bénins sur 17 820) ; ROC AUC 0,9714 ; PR AUC 0,2972 ; précision 0,3189 (IC de 0,28 à 0,36) ; budget d'alertes de 2 822 pour 100k événements.
Périmètre de vérification
Une seule campagne d'attaque et un seul environnement honeypot ; les métriques évaluent ce jeu de données plutôt que du trafic de production.

Analyse des erreurs

Échantillon
Les 346 faux positifs que le seuil gelé signale sur le holdout
Correcteur
Taxonomie des processus et des événements sur le trafic bénin signalé
Résultat
Les processus systemd portent 86 % du volume de faux positifs, et l'énumération de répertoires getdents64 se déclenche 37 fois plus fréquemment que sa base bénigne, si bien qu'une alerte sur getdents64 provenant de systemd mérite une règle d'examen accéléré avant de solliciter un humain.
Périmètre de vérification
Les recommandations de triage découlent de la base bénigne d'un seul environnement.

Niveau de preuve

Échantillon
Dépôt public : notebook exécuté avec sorties intégrées, neuf figures versionnées, dépendances épinglées, et un script de reconstruction des données
Correcteur
Réexécution à RANDOM_STATE=42 et vérifications de décomptes dans le script de reconstruction
Résultat
La réexécution a reproduit exactement chaque métrique phare, avec 14 cellules de code sur 15 identiques octet pour octet (un seul diff cosmétique d'étiquette dtype pandas) ; le script de reconstruction vérifie les trois décomptes de lignes déterminants ; la licence MIT couvre le code et le jeu de données porte la licence CC0 1,0.
Périmètre de vérification
Le sous-ensemble de 95 Mo reste hors du contrôle de version, si bien qu'une reconstruction complète nécessite un compte Kaggle ; un échantillon stratifié de 500 lignes est fourni pour l'inspection du schéma.

Affiliation

Échantillon
Travail de cours à Carnegie Mellon University, automne 2024, révisé en février 2025
Correcteur
Attribution dans le README du dépôt
Résultat
Travail de cours individuel en analytique de sécurité, élevé au rang de dépôt public reproductible.
Périmètre de vérification
Les supports de cours, les consignes et le contexte de notation restent privés.

Mise à jour de la page

Échantillon
Juillet 2026
Correcteur
Registre de contenu du site
Résultat
Entrée rédigée le 10 juillet 2026 à partir du dépôt public : son README, sa documentation des données et les sorties du notebook exécuté.
Périmètre de vérification
Les chiffres citent le notebook exécuté versionné et sa réexécution documentée, plutôt qu'une relance sur du trafic récent.
Axes d'évaluation avec échantillon, correcteur, résultat et périmètre de vérification.
AxeÉchantillonCorrecteurRésultatPérimètre de vérification
Performance de détectionHoldout de 18 000 événements à une prévalence simulée de 1 %, seuil gelé après la validationRappel, FPR, précision, ROC AUC et PR AUC, avec des IC à 95 % par bootstrap sur 400 rééchantillonnages du holdoutRappel de 0,9000 (162 attaques sur 180 ; IC de 0,85 à 0,94) pour un FPR de 0,0194 (346 événements bénins sur 17 820) ; ROC AUC 0,9714 ; PR AUC 0,2972 ; précision 0,3189 (IC de 0,28 à 0,36) ; budget d'alertes de 2 822 pour 100k événements.Une seule campagne d'attaque et un seul environnement honeypot ; les métriques évaluent ce jeu de données plutôt que du trafic de production.
Analyse des erreursLes 346 faux positifs que le seuil gelé signale sur le holdoutTaxonomie des processus et des événements sur le trafic bénin signaléLes processus systemd portent 86 % du volume de faux positifs, et l'énumération de répertoires getdents64 se déclenche 37 fois plus fréquemment que sa base bénigne, si bien qu'une alerte sur getdents64 provenant de systemd mérite une règle d'examen accéléré avant de solliciter un humain.Les recommandations de triage découlent de la base bénigne d'un seul environnement.
Niveau de preuveDépôt public : notebook exécuté avec sorties intégrées, neuf figures versionnées, dépendances épinglées, et un script de reconstruction des donnéesRéexécution à RANDOM_STATE=42 et vérifications de décomptes dans le script de reconstructionLa réexécution a reproduit exactement chaque métrique phare, avec 14 cellules de code sur 15 identiques octet pour octet (un seul diff cosmétique d'étiquette dtype pandas) ; le script de reconstruction vérifie les trois décomptes de lignes déterminants ; la licence MIT couvre le code et le jeu de données porte la licence CC0 1,0.Le sous-ensemble de 95 Mo reste hors du contrôle de version, si bien qu'une reconstruction complète nécessite un compte Kaggle ; un échantillon stratifié de 500 lignes est fourni pour l'inspection du schéma.
AffiliationTravail de cours à Carnegie Mellon University, automne 2024, révisé en février 2025Attribution dans le README du dépôtTravail de cours individuel en analytique de sécurité, élevé au rang de dépôt public reproductible.Les supports de cours, les consignes et le contexte de notation restent privés.
Mise à jour de la pageJuillet 2026Registre de contenu du siteEntrée rédigée le 10 juillet 2026 à partir du dépôt public : son README, sa documentation des données et les sorties du notebook exécuté.Les chiffres citent le notebook exécuté versionné et sa réexécution documentée, plutôt qu'une relance sur du trafic récent.

Comment inspecter ce travail

Gouvernance du seuil

Chaque chiffre phare provient d'un seul protocole d'évaluation : un échantillon de 60 000 événements à une prévalence d'attaque simulée de 1 % se répartit selon un ratio de 52,5/17,5/30 entre ajustement, validation et holdout, stratifié sur l'étiquette, et le seuil d'alerte (0,6892, l'optimum F2 sur la courbe précision-rappel de validation) se gèle avant que le holdout de 18 000 événements ne soit évalué. Le rappel et le taux de faux positifs rapportés mesurent donc une règle de décision gouvernée plutôt qu'une courbe explorée après coup.

Ce que les étiquettes touchent

L'appel fit() de la forêt ne reçoit que des caractéristiques, et son réservoir d'entraînement de 31 185 événements ne contient aucune ligne d'attaque. Les étiquettes n'interviennent qu'à exactement trois points : la restriction de la partition d'ajustement au trafic bénin, le choix du seuil de validation, et l'évaluation du holdout gelé, la forme standard d'un déploiement de détection de nouveauté.

Vérification pour le lecteur

Le dépôt se réexécute de bout en bout : le script de reconstruction des données vérifie les trois décomptes de lignes déterminants, les dépendances restent épinglées, et une réexécution à RANDOM_STATE=42 a reproduit exactement chaque métrique phare ; 14 cellules de code sur 15 sont identiques octet pour octet à l'original, le reste du diff se limitant à une étiquette dtype pandas purement cosmétique.

Étude de cas

Problème

La télémétrie de sécurité au niveau du noyau arrive plus vite que quiconque ne peut l'étiqueter, si bien qu'un détecteur déployable doit apprendre uniquement à partir du comportement bénin et malgré tout détecter des attaques qu'il n'a jamais vues ; l'évaluation doit en outre maintenir l'honnêteté du chiffre phare à des taux d'attaque réalistes.

Contexte

Le sous-ensemble comprend 347 399 événements de processus noyau avec 16 champs répartis sur 5 hôtes honeypot, tirés du corpus BETH de 8 004 918 événements (Highnam et al. 2021) : la partition de validation entièrement étiquetée plus les 158 432 événements confirmés malveillants d'un hôte attaqué, ce qui enrichit le taux de malveillance à 45,6 % pour l'analyse exploratoire. Les deux étiquettes proviennent d'une annotation manuelle par les auteurs du jeu de données, et les modèles de détection rééchantillonnent vers une prévalence réaliste de 1 %.

Méthode

Seize champs bruts se condensent en 7 caractéristiques élaborées suivant les indications de l'article BETH, une projection UMAP confirme que l'espace élaboré sépare les classes avant l'entraînement de tout modèle, et une Isolation Forest à 300 arbres s'ajuste sur 31 185 événements exclusivement bénins. Un échantillon de 60 000 événements à une prévalence simulée de 1 % se répartit selon un ratio de 52,5/17,5/30 entre ajustement, validation et holdout ; le seuil d'alerte maximise le F2 sur la validation et se gèle avant l'évaluation du holdout, avec des IC bootstrap sur 400 rééchantillonnages.

Résultat

Le seuil gelé capte 162 des 180 attaques du holdout (rappel 0,9000 ; IC à 95 % de 0,85 à 0,94) tout en signalant 346 des 17 820 événements bénins (FPR 0,0194), avec un ROC AUC de 0,9714, un PR AUC de 0,2972, et un budget d'alertes de 2 822 pour 100k événements. La précision s'établit à 0,3189 : à une prévalence de 1 %, environ une alerte sur trois signale une attaque réelle, le prix délibéré consistant à privilégier le rappel au détriment de la précision.

Périmètre de vérification

La classe malveillante ne comporte qu'une seule campagne de préparation de botnet sur un seul hôte, tout le trafic provient d'un seul environnement honeypot, et le sous-ensemble enrichit la malveillance à 45,6 % alors que seule la prévalence rééchantillonnée de 1 % reflète la production ; la démonstration précoce intra-échantillon du notebook (rappel de 1,0 à une précision de 0,034, à la frontière de décision par défaut) illustre uniquement le comportement du score et reste en dehors du chiffre phare.

Preuve

Le dépôt public comprend le notebook exécuté avec ses sorties intégrées, neuf figures versionnées, des dépendances épinglées, un script de reconstruction des données qui vérifie les décomptes de lignes déterminants, et une réexécution documentée à RANDOM_STATE=42 qui a reproduit exactement chaque métrique phare.

Résultats clés

  • Rappel de 0,9000 (162 attaques sur 180 ; IC à 95 % de 0,85 à 0,94) à un taux de faux positifs de 1,94 % sur le holdout à seuil gelé, avec un ROC AUC de 0,9714
  • L'Isolation Forest s'ajuste sur 31 185 événements exclusivement bénins, et les étiquettes n'interviennent qu'à exactement trois points : le filtre d'ajustement bénin, le choix du seuil de validation, et l'évaluation du holdout
  • Précision de 0,3189 sur le holdout à seuil gelé à une prévalence simulée de 1 % et un budget d'alertes de 2 822 pour 100k événements : environ une alerte sur trois signale une attaque réelle, énoncé sur la page
  • La taxonomie des erreurs transforme les faux positifs en recommandations de triage : systemd porte 86 % du volume et getdents64 se déclenche 37 fois plus fréquemment que sa base bénigne
  • Une réexécution à RANDOM_STATE=42 a reproduit exactement chaque métrique phare, avec 14 cellules de code sur 15 identiques octet pour octet à l'original

Méthodes

  • Isolation Forest
  • UMAP
  • Gouvernance du seuil
  • Intervalles de confiance bootstrap
  • Détection d'anomalies non supervisée