
Generazione pratica di pacchetti avversari black-box contro la classificazione del traffico crittografato con overhead minimo e piena recuperabilità dei pacchetti.
Articolo: PacketPatch: Practical Generation and Deployment of Adversarial Packets for Byte-Feature-Based Encrypted Traffic Classification Autori: Yuwei Xu, Yuanyuan Xu, Yunpeng Bai, Jiahui Chen, Kehui Song, Jie Cao, Qiao Xiang, Guang Cheng Affiliazioni: Southeast University, Purple Mountain Laboratories, Tiangong University, Queen's University, Xiamen University Stato: Accettato/In Revisione (Elsevier)
PacketPatch è uno schema pratico per generare pacchetti di rete avversariali contro modelli di Classificazione del Traffico Criptato Basata su Caratteristiche Byte (B-ETC), con l'obiettivo di proteggere la privacy dell'utente. A differenza dei metodi esistenti che si basano su presupposti white-box irrealistici o introducono un overhead eccessivo, PacketPatch opera in rigorose condizioni black-box mantenendo prestazioni in tempo reale e usabilità dei pacchetti.

Pad1 → arg min (disturba al massimo le caratteristiche originali)Pad2 → arg max (genera caratteristiche allineate con l'header casuale)PacketPatch/
├── README.md # Project overview (this file)
├── LICENSE # MIT License
├── requirements.txt # Python dependencies
├── bert_base_config.json # BERT model configuration (12 layers, 768-dim, 12 heads)
│
├── packet_adv/ # ★ Core experimental code
│ ├── README.md # Usage guide for core modules
│ ├── adv_fine_tuning_cls.py # Step 1: Train PatchGenerator (SpanBERT)
│ ├── generate.py # Step 2: Generate adversarial packets
│ └── gen_onnx.py # Step 3 (optional): ONNX/TensorRT acceleration
│
├── uer/ # UER (Universal Encoder Representations) framework
│ ├── README.md # Framework documentation
│ ├── encoders/ # Encoder implementations (Transformer, RNN, CNN)
│ ├── layers/ # Network layers (Embedding, Attention, FFN)
│ ├── targets/ # Training targets (MLM, NSP, Span-MBM, etc.)
│ ├── models/ # Model definition
│ ├── utils/ # Utilities (tokenizers, optimizers, data loading)
│ ├── model_builder.py # Model construction
│ ├── model_loader.py # Pretrained weight loading
│ ├── model_saver.py # Model checkpoint saving
│ ├── trainer.py # Training loop implementation
│ └── opts.py # CLI argument definitions
│
├── dataset/ # Dataset documentation
│ └── README.md # Dataset descriptions, download links, preprocessing
│
├── image/ # Architecture and result figures
│ └── README.md # Figure descriptions
│
└── tools/ # Utility tools
└── README.md # Tool descriptions and usage
# Clone this repository
git clone https://github.com/your-org/PacketPatch.git
cd PacketPatch
# Install dependencies
pip install -r requirements.txt
Requisiti:
PacketPatch è basato su ET-BERT. Scaricare quanto segue dal repository ET-BERT:
pretrained_model.bin — Pesi pre-addestrati di ET-BERTencryptd_vocab.txt — File del vocabolario per la codifica byte-pairDataset: Valutiamo su tre dataset pubblici. Consultare dataset/README.md per i link di download e le istruzioni di pre-elaborazione.
| Dataset | Classi | Scenario |
|---|---|---|
| ISCX-TOR | 16 | Traffico anonimo Tor |
| ISCX-VPN | 11 | Tunnel VPN criptati |
| USTC | 20 | Traffico malware + benigno |
cd packet_adv
# Edit adv_fine_tuning_cls.py first:
# - Update dataset paths (lines 47-50)
# - Update pretrained model path (lines 73-75)
# - Set correct num_classes (line 56)
# - Set correct training set size (line 878)
python adv_fine_tuning_cls.py
Il checkpoint addestrato verrà salvato nella directory di log specificata (ad es., span_2seg_cls_log/).
cd packet_adv
# Edit generate.py first:
# - Update test data paths (lines 42-44)
# - Update --load_model_path to your trained checkpoint (line 68-69)
# - Set BWO (bandwidth overhead ratio, line 60, default 0.1)
# - Choose generation strategy via 'fun' parameter (line 50)
python generate.py
cd packet_adv
# Edit gen_onnx.py first:
# - Update model checkpoint path (line 132)
# - Update output paths (lines 145, 207)
# - Select precision mode: 'fp16' or 'int8' (line 21)
python gen_onnx.py
fun)Il PatchGenerator di PacketPatch viene addestrato con due compiti auto-supervisionati:
Determina se due pacchetti in input appartengono alla stessa categoria di traffico. Ciò fornisce al modello capacità di estrazione di caratteristiche discriminanti.
Loss: Binary Cross-Entropy
Ricostruisce span di byte mascherati consecutivi utilizzando il contesto bidirezionale. Ciò fornisce al modello capacità di generazione di sequenze di byte sensibili al contesto.
Loss: Negative Log-Likelihood
Loss Totale: Loss = Loss_SCP + Loss_Span-MBM

| Fase | Tempo (ms/pacchetto) |
|---|---|
| Pre-elaborazione del pacchetto | 0.054 |
| Generazione della perturbazione | 9.626 |
| Ricostruzione del pacchetto | 0.398 |
| Totale | 10.078 |
PacketPatch supera i seguenti metodi baseline white-box in rigorose ipotesi black-box:

Se utilizzi PacketPatch nella tua ricerca, ti preghiamo di citare il nostro articolo:
@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},
}
Questo progetto è concesso in licenza secondo i termini della MIT License — consultare il file LICENSE per i dettagli.
Per domande e richieste, contattare l'autore corrispondente o aprire un issue su GitHub.
Questo progetto è basato sul framework ET-BERT, che fornisce il modello pre-addestrato e il framework di addestramento UER (Universal Encoder Representations). Ringraziamo gli autori di ET-BERT per i loro preziosi contributi.
| Parametro | File | Riga | Descrizione | Predefinito |
|---|
BWO | generate.py | 60 | Rapporto di overhead di banda | 0.1 (10%) |
fun | generate.py | 50 | Strategia di generazione | 'fun5' |
n_epochs | adv_fine_tuning_cls.py | 53 | Epoche di training | 50 |
batch_size | adv_fine_tuning_cls.py | 54 | Dimensione del batch | 32 |
num_classes | adv_fine_tuning_cls.py | 56 | Numero di classi di traffico | Dipende dal dataset |
learning_rate | adv_fine_tuning_cls.py | 94-95 | Tasso di apprendimento | 2e-5 |
seq_length | adv_fine_tuning_cls.py | 92-93 | Lunghezza della sequenza in input | 256 |
| Strategia | Descrizione |
|---|
fun1 | Singolo segmento, selezione argmin |
fun2 | Doppio segmento, entrambi argmax |
fun3 | Doppio segmento, split fisso 50/50, Pad1 argmin + Pad2 argmax |
fun4 | Doppio segmento, split casuale, Pad1 argmin + Pad2 argmax |
fun5 (predefinita) | Doppio segmento con header dummy casuale, Pad1 argmin + Pad2 argmax |
fun6 | Doppio segmento con header dummy, strategia guidata da NSP |
random | Baseline casuale |
random_dummy_head | Baseline sostituzione header casuale |
random_pad | Baseline padding casuale |