NOPE LinkedIn

Catégories:
IA

AnonyNER v3.11 : CTU-13 + KernelDriver — PROCESS_NAME et PROTOCOL rattrapés, PID en régression

AnonyNER v3.11 : CTU-13 + KernelDriver — PROCESS_NAME et PROTOCOL rattrapés, PID en régression image

Rubrique: IA Tag: Anonymisation Tag: NER Tag: spaCy Tag: Logs Tag: Cybersécurité Tag: Dataset Tag: Évaluation

Suite directe du bilan v3.1. L’évaluation par label avait identifié deux labels critiquement faibles : PROCESS_NAME (F1=61.8%) et PROTOCOL (F1=50%). Cause : pas assez de logs exposant ces entités dans le corpus d’entraînement. Ce cycle corrige ça en intégrant deux nouveaux datasets open source.


Nouveaux datasets

CTU-13 — Stratosphere IPS

Le dataset CTU-13 contient des captures réseau binetflow (CSV) avec des flows légitimes et malveillants étiquetés. Format :

SrcAddr,DstAddr,Proto,Sport,Dport,State,TotPkts,TotBytes,...,Label
147.32.84.59,62.107.124.67,tcp,25857,7726,CON,6,396,...,flow=Background

Un script de conversion (extract_ctu13_flows.py) transforme chaque ligne en log lisible :

flow: 147.32.84.59:25857 -> 62.107.124.67:7726 proto=TCP state=CON pkts=6 bytes=396

Ce format expose naturellement IP_ADDRESS, PORT_NUMBER, PROTOCOL — les trois labels sous-représentés dans les logs OPNsense/SSH/Apache du corpus v3.1.

2 000 lignes annotées, taux d’auto-accept ~96% (confiance LLM haute car le format est très structuré).

KernelDriver — Zenodo 1203289

Le dataset Dynamic Malware Analysis archive les appels système Windows capturés pendant l’exécution de 500 malwares (VirusShare) et de processus propres. Structure : une archive .7z de 415 Mo, un .txt par type de syscall par sample.

Format réel (découvert à l’ouverture de l’archive) :

Time=203783,Pid=812,MethodName=ZwCreateFile,ProcessName=\Device\HarddiskVolume1\WINDOWS\system32\winlogon.exe

Le script extract_kerneldriver.py parse ce format clé=valeur, normalise le chemin (\Device\HarddiskVolume1 supprimé), et génère :

syscall ZwCreateFile: process=winlogon.exe path=\WINDOWS\system32\winlogon.exe pid=812 sample=0

Syscalls retenus : ZwCreateFile, ZwOpenFile, ZwWriteFile, ZwConnectPort, ZwSetValueKey, ZwCreateKey, ZwCreateProcess, ZwCreateThread et variantes. Ce sont les appels les plus informatifs pour PROCESS_NAME et FILE_PATH.

2 000 lignes annotées, confiance ~0.97.


Corpus v3.11

Source Exemples
Corpus v3.10b (base) 16 315
CTU-13 flows 1 999
KernelDriver syscalls 1 994
Total 20 308

Split : 16 246 train / 4 062 dev (80/20).


Résultats globaux

F1 : 88.0%   Precision : 85.8%   Recall : 90.3%

vs v3.1 : F1 +1.54%, Recall +3.33%.

Le Recall passe au-dessus de 90% — c’est la métrique critique pour l’anonymisation (une entité manquée = une fuite). Early stopping au step 3 800 (epoch 4), convergence rapide dès l’epoch 1 grâce au fine-tuning depuis en_anonyner.


Évaluation par label — v3.11 vs v3.1

Label P v3.11 R v3.11 F1 v3.11 Δ F1
REGISTRY_KEY 99.4% 99.4% 99.4% -0.3
ACTION 100% 100% 100% +4.3
ASN 100% 100% 100% +14.3
UNIX_GROUP 100% 100% 100% nouveau
WIN_USER 97.4% 98.9% 98.1% +2.1
UNIX_USER 97.9% 95.8% 96.9% +0.1
DOMAIN 94.4% 96.9% 95.7% -1.0
CVE 95.8% 95.8% 95.8% +0.1
WIN_SID 90.0% 100% 94.7% +2.2
IP_SUBNET 100% 89.4% 94.4% +5.1
INTERFACE 98.1% 89.7% 93.7% +5.9
PROCESS_NAME 89.5% 96.5% 92.9% +31.1
WIN_HOST 78.8% 93.2% 85.4% +0.8
PROTOCOL 75.8% 98.2% 85.5% +35.5
VPN_USER 94.7% 85.7% 90.0% +4.3
FILE_PATH 88.3% 93.9% 91.0% +3.2
IP_ADDRESS 83.2% 92.3% 87.5% +0.3
SERVICE_ACCOUNT 86.4% 86.4% 86.4% -3.3
FIREWALL_RULE 80.6% 78.1% 79.4% +13.9
WIN_GROUP 100% 50.0% 66.7% nouveau
URL_URI 68.5% 86.7% 76.5% -0.2
PORT_NUMBER 81.2% 57.7% 67.5% +4.2
HOSTNAME 61.2% 52.5% 56.5% +1.4
MAC_ADDRESS 73.9% 68.0% 70.8% -19.8
PID 64.7% 47.8% 55.0% -20.9
COMMAND_LINE 58.3% 16.7% 25.9% -13.5
FILE_HASH 25.0% 33.3% 28.6% -28.5
SCHEDULED_TASK 0%
EVENT_ID 0%

Analyse

Ce qui a fonctionné

PROCESS_NAME passe de 61.8% à 92.9% : le dataset KernelDriver apporte exactement les exemples manquants — des noms de processus Windows dans leur contexte d’exécution. Le modèle v3.1 hésitait à classer les noms de processus courts (alg.exe, svchost.exe) ; il les reconnaît maintenant avec confiance.

PROTOCOL passe de 50% à 85.5% : les flows CTU-13 exposent proto=TCP, proto=UDP, proto=ICMP dans un contexte non ambigu. Le recall monte à 98.2% — le modèle ne manque presque plus aucun protocole.

FILE_PATH passe de 87.8% à 91% : les chemins Windows extraits des appels syscall (\WINDOWS\system32\...) diversifient le corpus au-delà des chemins Linux et Apache.

Les régressions — phénomène de dilution

Trois labels régressent significativement : PID (-20.9%), MAC_ADDRESS (-19.8%), FILE_HASH (-28.5%).

Cause probable : dilution. Le corpus v3.11 ajoute ~4 000 exemples où PID apparaît dans un contexte différent (valeurs à 3-4 chiffres dans des logs syscall, sans pid= contextuel fort). Le modèle généralise moins bien.

Pour MAC_ADDRESS et FILE_HASH : les nouveaux datasets n’en contiennent pas. Le ratio exemples-avec-MAC-ADDRESS / total baisse mécaniquement, et les exemples existants ne suffisent plus à ancrer la représentation.

Leçon : ajouter des données pour les labels faibles peut dégrader les labels forts si le ratio de représentation est perturbé. Un corpus équilibré requiert soit d’augmenter tous les labels proportionnellement, soit de contrôler le mélange au niveau des batchs.

Labels toujours à 0%

SCHEDULED_TASK, EVENT_ID : toujours sans exemples suffisants. Le corpus contient quelques exemples synthétiques, pas assez pour l’apprentissage. Ces labels nécessitent des logs Windows réels avec des planificateurs de tâches (schtasks.exe) et des Event IDs explicites (EventID 4688, EventID 7045).


Distance avec la production

Cibles production : F1 ≥ 90% global, Recall ≥ 93%, aucun label à F1 < 80%.

État v3.11 : F1=88%, Recall=90.3%. Environ 2 points sous la cible.

Labels encore sous 80% : PID (55%), COMMAND_LINE (25.9%), FILE_HASH (28.6%), HOSTNAME (56.5%), SCHEDULED_TASK (0%), EVENT_ID (0%).

Prochaines priorités :

  1. Restaurer PID et MAC_ADDRESS — les exemples existants semblent insuffisants face à la dilution. Stratégie : ré-extraire des logs SSH/auth.log qui contiennent des PIDs dans un contexte clair (sshd[1234]:), augmenter les exemples MAC dans des logs ARP/DHCP.

  2. COMMAND_LINE — nécessite des logs de processus avec lignes de commande complètes (Sysmon EventID 1, ps aux, bash history). Les logs actuels exposent peu de commandes complexes.

  3. EVENT_ID et SCHEDULED_TASK — cibler des logs Windows Scheduler et Security Event logs avec EventIDs explicites.

  4. Migration spaCy Transformers — tok2vec atteint son plafond naturel. Les gains marginaux deviennent difficiles à obtenir sans architecture plus profonde.


Datasets : CTU-13 Stratosphere IPS, Dynamic Malware Analysis — Zenodo 1203289. Scripts d’extraction disponibles dans Victor/training/scripts/.