
Génération pratique de paquets adverses en black-box contre la classification du trafic chiffré, avec une surcharge minimale et une récupérabilité complète des paquets.
Article : PacketPatch: Practical Generation and Deployment of Adversarial Packets for Byte-Feature-Based Encrypted Traffic Classification Auteurs : Yuwei Xu, Yuanyuan Xu, Yunpeng Bai, Jiahui Chen, Kehui Song, Jie Cao, Qiao Xiang, Guang Cheng Affiliation : Southeast University, Purple Mountain Laboratories, Tiangong University, Queen's University, Xiamen University Statut : Accepté/En cours d'examen (Elsevier)
PacketPatch est un schéma pratique de génération de paquets réseau adverses contre les modèles de classification du trafic chiffré basée sur des caractéristiques d'octets (B-ETC), visant à protéger la vie privée des utilisateurs. Contrairement aux méthodes existantes qui reposent sur des hypothèses de boîte blanche irréalistes ou introduisent une surcharge excessive, PacketPatch fonctionne dans des conditions strictes de boîte noire tout en maintenant des performances en temps réel et l'utilisabilité des paquets.

Pad1 → arg min (perturbe au maximum les caractéristiques d'origine)Pad2 → arg max (génère des caractéristiques alignées avec l'en-tête aléatoire)PacketPatch/
├── README.md # Aperçu du projet (ce fichier)
├── LICENSE # Licence MIT
├── requirements.txt # Dépendances Python
├── bert_base_config.json # Configuration du modèle BERT (12 couches, 768 dims, 12 têtes)
│
├── packet_adv/ # ★ Code expérimental principal
│ ├── README.md # Guide d'utilisation des modules principaux
│ ├── adv_fine_tuning_cls.py # Étape 1 : Entraîner PatchGenerator (SpanBERT)
│ ├── generate.py # Étape 2 : Générer des paquets adverses
│ └── gen_onnx.py # Étape 3 (optionnelle) : Accélération ONNX/TensorRT
│
├── uer/ # Framework UER (Universal Encoder Representations)
│ ├── README.md # Documentation du framework
│ ├── encoders/ # Implémentations des encodeurs (Transformer, RNN, CNN)
│ ├── layers/ # Couches réseau (Embedding, Attention, FFN)
│ ├── targets/ # Objectifs d'entraînement (MLM, NSP, Span-MBM, etc.)
│ ├── models/ # Définition du modèle
│ ├── utils/ # Utilitaires (tokeniseurs, optimiseurs, chargement de données)
│ ├── model_builder.py # Construction du modèle
│ ├── model_loader.py # Chargement des poids pré-entraînés
│ ├── model_saver.py # Sauvegarde des points de contrôle du modèle
│ ├── trainer.py # Implémentation de la boucle d'entraînement
│ └── opts.py # Définitions des arguments CLI
│
├── dataset/ # Documentation des jeux de données
│ └── README.md # Descriptions des jeux de données, liens de téléchargement, prétraitement
│
├── image/ # Figures d'architecture et de résultats
│ └── README.md # Descriptions des figures
│
└── tools/ # Outils utilitaires
└── README.md # Descriptions et utilisations des outils
# Cloner ce dépôt
git clone https://github.com/your-org/PacketPatch.git
cd PacketPatch
# Installer les dépendances
pip install -r requirements.txt
Prérequis :
PacketPatch est construit sur ET-BERT. Téléchargez les éléments suivants depuis le dépôt ET-BERT :
pretrained_model.bin — Poids pré-entraînés d'ET-BERTencryptd_vocab.txt — Fichier de vocabulaire pour l'encodage par paires d'octetsJeux de données : Nous évaluons sur trois jeux de données publics. Voir dataset/README.md pour les liens de téléchargement et les instructions de prétraitement.
| Jeu de données | Classes | Scénario |
|---|---|---|
| ISCX-TOR | 16 | Trafic anonyme Tor |
| ISCX-VPN | 11 | Tunnels VPN chiffrés |
| USTC | 20 | Trafic malveillant + bénin |
cd packet_adv
# Modifier adv_fine_tuning_cls.py d'abord :
# - Mettre à jour les chemins des jeux de données (lignes 47-50)
# - Mettre à jour le chemin du modèle pré-entraîné (lignes 73-75)
# - Définir le bon num_classes (ligne 56)
# - Définir la bonne taille de l'ensemble d'entraînement (ligne 878)
python adv_fine_tuning_cls.py
Le point de contrôle entraîné sera sauvegardé dans le répertoire de journalisation spécifié (par exemple, span_2seg_cls_log/).
cd packet_adv
# Modifier generate.py d'abord :
# - Mettre à jour les chemins des données de test (lignes 42-44)
# - Mettre à jour --load_model_path vers votre point de contrôle entraîné (lignes 68-69)
# - Définir BWO (ratio de surcharge de bande passante, ligne 60, défaut 0.1)
# - Choisir la stratégie de génération via le paramètre 'fun' (ligne 50)
python generate.py
cd packet_adv
# Modifier gen_onnx.py d'abord :
# - Mettre à jour le chemin du point de contrôle du modèle (ligne 132)
# - Mettre à jour les chemins de sortie (lignes 145, 207)
# - Sélectionner le mode de précision : 'fp16' ou 'int8' (ligne 21)
python gen_onnx.py
| Paramètre | Fichier | Ligne | Description | Défaut |
|---|---|---|---|---|
BWO | generate.py | 60 | Ratio de surcharge de bande passante | 0.1 (10 %) |
fun | generate.py | 50 | Stratégie de génération | 'fun5' |
n_epochs | adv_fine_tuning_cls.py | 53 | Époques d'entraînement | 50 |
batch_size | adv_fine_tuning_cls.py | 54 | Taille de lot | 32 |
num_classes | adv_fine_tuning_cls.py | 56 | Nombre de classes de trafic | Dépend du jeu de données |
learning_rate | adv_fine_tuning_cls.py | 94-95 | Taux d'apprentissage | 2e-5 |
seq_length | adv_fine_tuning_cls.py | 92-93 | Longueur de séquence d'entrée | 256 |
fun)| Stratégie | Description |
|---|---|
fun1 | Segment unique, sélection argmin |
fun2 | Double segment, les deux en argmax |
fun3 | Double segment, répartition fixe 50/50, Pad1 argmin + Pad2 argmax |
fun4 | Double segment, répartition aléatoire, Pad1 argmin + Pad2 argmax |
fun5 (défaut) | Double segment avec en-tête factice aléatoire, Pad1 argmin + Pad2 argmax |
fun6 | Double segment avec en-tête factice, stratégie guidée par NSP |
random | Baseline aléatoire |
random_dummy_head | Baseline de remplacement d'en-tête aléatoire |
random_pad | Baseline de bourrage aléatoire |
Le PatchGenerator de PacketPatch est entraîné avec deux tâches auto-supervisées :
Détermine si deux paquets d'entrée appartiennent à la même catégorie de trafic. Cela dote le modèle de capacités d'extraction de caractéristiques discriminantes.
Perte : Entropie croisée binaire
Reconstruit des segments d'octets masqués consécutifs en utilisant le contexte bidirectionnel. Cela dote le modèle de capacités de génération de séquences d'octets conscientes du contexte.
Perte : Log-vraisemblance négative
Perte totale : Loss = Loss_SCP + Loss_Span-MBM

| Étape | Temps (ms/paquet) |
|---|---|
| Prétraitement du paquet | 0.054 |
| Génération de perturbation | 9.626 |
| Reconstruction du paquet | 0.398 |
| Total | 10.078 |
PacketPatch surpasse les méthodes de référence en boîte blanche suivantes dans des conditions strictes de boîte noire :

Si vous utilisez PacketPatch dans vos recherches, veuillez citer notre article :
@article{xu2025packetpatch,
title = {PacketPatch: Practical Generation and Deployment of Adversarial Packets for Byte-Feature-Based Encrypted Traffic Classification},
author = {Yuwei Xu and Yuanyuan Xu and Yunpeng Bai and Jiahui Chen and Kehui Song and Jie Cao and Qiao Xiang and Guang Cheng},
journal = {Elsevier},
year = {2025},
}
Ce projet est sous licence MIT — voir le fichier LICENSE pour plus de détails.
Pour toute question ou demande, veuillez contacter l'auteur correspondant ou ouvrir une issue sur GitHub.
Ce projet est construit sur le framework ET-BERT, qui fournit le modèle pré-entraîné et le framework d'entraînement UER (Universal Encoder Representations). Nous remercions les auteurs d'ET-BERT pour leurs précieuses contributions.