
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