
Практическая генерация состязательных пакетов в режиме чёрного ящика для атак на классификацию зашифрованного трафика с минимальными накладными расходами и полной восстанавливаемостью пакетов.
Статья: PacketPatch: Practical Generation and Deployment of Adversarial Packets for Byte-Feature-Based Encrypted Traffic Classification Авторы: Yuwei Xu, Yuanyuan Xu, Yunpeng Bai, Jiahui Chen, Kehui Song, Jie Cao, Qiao Xiang, Guang Cheng Организации: Southeast University, Purple Mountain Laboratories, Tiangong University, Queen's University, Xiamen University Статус: Принято / На рассмотрении (Elsevier)
PacketPatch — это практический метод генерации состязательных сетевых пакетов для моделей классификации зашифрованного трафика на основе байтовых признаков (B-ETC), направленный на защиту конфиденциальности пользователей. В отличие от существующих подходов, которые полагаются на нереалистичные предположения white-box или вносят чрезмерные накладные расходы, PacketPatch работает в строгих условиях black-box, сохраняя производительность в реальном времени и пригодность пакетов.

Pad1 → arg min (максимально нарушает исходные признаки)Pad2 → arg max (генерирует признаки, согласованные со случайным заголовком)PacketPatch/
├── README.md # Обзор проекта (этот файл)
├── LICENSE # Лицензия MIT
├── requirements.txt # Зависимости Python
├── bert_base_config.json # Конфигурация модели BERT (12 слоёв, 768-мерность, 12 голов)
│
├── packet_adv/ # ★ Основной экспериментальный код
│ ├── README.md # Руководство по использованию основных модулей
│ ├── adv_fine_tuning_cls.py # Шаг 1: Обучение PatchGenerator (SpanBERT)
│ ├── generate.py # Шаг 2: Генерация состязательных пакетов
│ └── gen_onnx.py # Шаг 3 (опционально): Ускорение ONNX/TensorRT
│
├── uer/ # Фреймворк UER (Universal Encoder Representations)
│ ├── README.md # Документация фреймворка
│ ├── encoders/ # Реализации кодировщиков (Transformer, RNN, CNN)
│ ├── layers/ # Слои сети (Embedding, Attention, FFN)
│ ├── targets/ # Цели обучения (MLM, NSP, Span-MBM и др.)
│ ├── models/ # Определение модели
│ ├── utils/ # Утилиты (токенизаторы, оптимизаторы, загрузка данных)
│ ├── model_builder.py # Построение модели
│ ├── model_loader.py # Загрузка предобученных весов
│ ├── model_saver.py # Сохранение контрольных точек модели
│ ├── trainer.py # Реализация цикла обучения
│ └── opts.py # Определение аргументов командной строки
│
├── dataset/ # Документация наборов данных
│ └── README.md # Описания наборов данных, ссылки для скачивания, предобработка
│
├── image/ # Рисунки архитектуры и результатов
│ └── README.md # Описания рисунков
│
└── tools/ # Вспомогательные инструменты
└── README.md # Описания инструментов и их использование
# Клонировать репозиторий
git clone https://github.com/your-org/PacketPatch.git
cd PacketPatch
# Установить зависимости
pip install -r requirements.txt
Требования:
PacketPatch построен поверх ET-BERT. Загрузите следующие файлы из репозитория ET-BERT:
pretrained_model.bin — предобученные веса ET-BERTencryptd_vocab.txt — файл словаря для кодирования пар байтовНаборы данных: Мы проводим оценку на трёх общедоступных наборах. Ссылки для скачивания и инструкции по предобработке см. в dataset/README.md.
| Набор данных | Классы | Сценарий |
|---|---|---|
| ISCX-TOR | 16 | Анонимный трафик Tor |
| ISCX-VPN | 11 | Зашифрованные туннели VPN |
| USTC | 20 | Вредоносный + легитимный трафик |
cd packet_adv
# Сначала отредактируйте adv_fine_tuning_cls.py:
# - Обновите пути к наборам данных (строки 47-50)
# - Обновите путь к предобученной модели (строки 73-75)
# - Установите правильное num_classes (строка 56)
# - Установите правильный размер обучающего набора (строка 878)
python adv_fine_tuning_cls.py
Обученная контрольная точка будет сохранена в указанной директории логов (например, span_2seg_cls_log/).
cd packet_adv
# Сначала отредактируйте generate.py:
# - Обновите пути к тестовым данным (строки 42-44)
# - Обновите --load_model_path, указав путь к обученной контрольной точке (строка 68-69)
# - Установите BWO (коэффициент накладных расходов пропускной способности, строка 60, по умолчанию 0.1)
# - Выберите стратегию генерации через параметр 'fun' (строка 50)
python generate.py
cd packet_adv
# Сначала отредактируйте gen_onnx.py:
# - Обновите путь к контрольной точке модели (строка 132)
# - Обновите пути вывода (строки 145, 207)
# - Выберите режим точности: 'fp16' или 'int8' (строка 21)
python gen_onnx.py
| Параметр | Файл | Строка | Описание | По умолчанию |
|---|---|---|---|---|
BWO | generate.py | 60 | Коэффициент накладных расходов пропускной способности | 0.1 (10%) |
fun | generate.py | 50 | Стратегия генерации | 'fun5' |
n_epochs | adv_fine_tuning_cls.py | 53 | Количество эпох обучения | 50 |
batch_size | adv_fine_tuning_cls.py | 54 | Размер батча | 32 |
num_classes | adv_fine_tuning_cls.py | 56 | Количество классов трафика | Зависит от набора данных |
learning_rate | adv_fine_tuning_cls.py | 94-95 | Скорость обучения | 2e-5 |
seq_length | adv_fine_tuning_cls.py | 92-93 | Длина входной последовательности | 256 |
fun)| Стратегия | Описание |
|---|---|
fun1 | Один сегмент, выбор argmin |
fun2 | Два сегмента, оба argmax |
fun3 | Два сегмента, фиксированное деление 50/50, Pad1 argmin + Pad2 argmax |
fun4 | Два сегмента, случайное деление, Pad1 argmin + Pad2 argmax |
fun5 (по умолчанию) | Два сегмента со случайным фиктивным заголовком, Pad1 argmin + Pad2 argmax |
fun6 | Два сегмента с фиктивным заголовком, стратегия с управлением NSP |
random | Случайный базовый метод |
random_dummy_head | Базовый метод со случайной заменой заголовка |
random_pad | Базовый метод со случайным дополнением |
PatchGenerator обучается с помощью двух самоконтролируемых задач:
Определяет, принадлежат ли два входных пакета к одной категории трафика. Это даёт модели способность извлекать дискриминативные признаки.
Функция потерь: Бинарная кросс-энтропия
Реконструирует последовательные маскированные диапазоны байтов, используя двунаправленный контекст. Это даёт модели способность генерировать последовательности байтов с учётом контекста.
Функция потерь: Отрицательное логарифмическое правдоподобие
Общая ошибка: Loss = Loss_SCP + Loss_Span-MBM

| Этап | Время (мс/пакет) |
|---|---|
| Предобработка пакета | 0.054 |
| Генерация возмущения | 9.626 |
| Восстановление пакета | 0.398 |
| Итого | 10.078 |
PacketPatch превосходит следующие базовые методы white-box в строгих предположениях black-box:

Если вы используете PacketPatch в своих исследованиях, пожалуйста, процитируйте нашу статью:
@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},
}
Этот проект распространяется под лицензией MIT — подробнее см. в файле LICENSE.
По вопросам и запросам обращайтесь к соответствующему автору или создайте issue на GitHub.
Этот проект построен на фреймворке ET-BERT, который предоставляет предобученную модель и среду обучения UER (Universal Encoder Representations). Мы благодарим авторов ET-BERT за их ценный вклад.