
Практическая генерация состязательных пакетов в режиме чёрного ящика для атак на классификацию зашифрованного трафика с минимальными накладными расходами и полной восстанавливаемостью пакетов.
Статья: 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