Картинки в этой статье все из общедоступной информации в интернете, источник не указан. Контент связан с разработкой отчета о недоставке по обнаружению сети и реагированию на него.
историческая причина
Рисунок 1: Рост размера кода ядра Linux
Что общего у DPDK, PF_RING и BPF
Разделите плоскость данных сети
- Цена расширения сетевых функций — жертвовать производительностью
- Они преодолевают ограничение сложности ядра — обход ядра.
- Отделение плоскости данных от ядра
- Сдача в разработку пользовательского режима - DPDK, PF_RING и BPF
- Выполнение загрузки в сетевую карту — XDP для BPF
Разница между DPDK, PF_RING и BPF: экологические цели разные
- Независимая платформа DPDK
- Эксклюзивный сетевой стек ядра
- Выделенный SDK API
- Экологичный аппаратно-ориентированный
- Изоляция приложений и сбой механизма безопасности
- PF_RING независимый производитель
- независимая итальянская компания
- Высокопроизводительная версия оплачивается отдельно
- независимая экология
- Экология интеграции БНФ
- привитый к ядру
- Интеграция в существующее аппаратное и программное обеспечение
- Экология ориентирована на программное обеспечение и быстро развивается
ДПДК и Фонд БНФ
Ориентированность на инфраструктуру: базовое оборудование/бизнес верхнего уровня
Рисунок 2: Два фонда с разными интересами
Ежегодные мероприятия DPDK и технические стандарты
ежегодное мероприятие
- 2010, Intel, ДПДК Xeon 1 поколения
- 2013, 6WIND, сообщество DPDK.org
- 2014, OvS, распределенный виртуальный коммутатор OvS-DPDK
- 2015, ARM-версия
- В 2017 году присоединился к Linux Foundation.
- 2018, VMware, Программно-определяемая инфраструктура в центре обработки данных
- 2019, Финансовые приложения (высокочастотная торговля)
технический стандарт
- Проход через PCI, минуя эмуляцию Hyper-V, виртуальные машины проходят через PCI
- SR-IOV в обход стека Hyper-V, виртуализация одного сетевого адаптера в несколько сквозных сетевых адаптеров.
- FD.io/VPP, ввод-вывод данных с векторным ускорением, уменьшение джиттера I-кэша и задержки чтения
- vDPA, ускорение пути передачи данных virtio, программная имитация плоскости управления, аппаратная реализация плоскости данных
- Switchdev, разгружает функцию переключения ядра на аппаратное обеспечение
- Доля вклада кода (V21.11)
Бурно развивающаяся экология БНФ
технология года
- Статья 1992 г., Пакетные фильтры BSD
- 1994 cBPF, реализация libpcap в tcpdump
- 2014 eBPF, универсальная виртуальная машина
- 2015 BCC, Средства разработки и библиотеки
- 2016 XDP, модуль обхода сетевого ядра
- 2017 libbpf, разработанный независимо от ядра
- 2017 ARM/MIPS, мультиплатформенный BPF
- 2018 BTF, формат типа межъядерной версии
- 2019 Tail Calls и горячие обновления
- 2020 LSM и контроль перегрузки TCP
- 2021 Фонд eBPF
Экология продукта
- 2017 Facebook, Балансировка нагрузки Katran в производстве
- 2018 Cloudflare, DDoS/брандмауэр в производстве и многое другое
- 2018 Android 9, мониторинг трафика, включая DHCPClient
- 2018 Netronome, Agilio SmartNIC поддерживает XDP
- 2018 DPDK, поддерживает BPF (за исключением MAP и хвостовых вызовов)
- 2019 Google, KRSI Помощник по безопасности ядра во время выполнения (ядро V5.7)
- 2019 Sysdig и Falco пожертвовали фонду безопасности k8s
- 2020 Nvidia, Mellanox Smart NIC поддерживает XDP (от 3000 до 9000 иен)
- 2020 Microsoft, Sysmon для Linux, eBPF для Windows
- 2020 байт, высокопроизводительный сетевой ACL
- 2020 Alibaba Cloud, ускорение и расширение на базе Cilium
- 2021 Cilium,Сервисная сетка (无Коляска)
Экология ДПДК и БНФ
Разные для экологии и разработчиков
Категории продукта | ДПДК | БНФ |
---|---|---|
Безопасность | Сокол/Цилий/L4drop/... | |
Наблюдаемость | Хаббл/L3AF/Трейси/... | |
сеть | ДПВС/ОВС/ФД.ИО/ВПП | Тар |
SDK | С++/GO | C++/Rust/GO/Питон |
ядро | Стек TCPF-стек/mTCP | helper-API/Карты/Verfier&JIT |
Экология рынка | Фокус на виртуализации и совместном использовании аппаратных возможностей, продвигаемый производителями оборудования, является эволюцией технологий виртуализации, таких как vt-x/ept, в сетевом вводе-выводе. | Сосредоточьтесь на разделении основных возможностей и продвижении мультиплексных облачных поставщиков, что представляет собой интеграцию эволюции облачных технологий и местной экологии. |
Таблица 1: Два фонда с разными интересами
Введение в технологию BPF Анализ производительности
Сходства и различия технологий DPDK и PF_RING - похожие технологии
Рисунок 3: Принцип PF_RING
Рисунок 4: Структура модуля DPDK
такой же
- Активный опрос UIO+PMD уменьшает прерывания и переключение контекста ЦП
- UIO+mmap реализует нулевое копирование
- HugePages сокращают промахи TLB
разница
- PF_RING делится на обычную версию и высокопроизводительную версию ZC (нулевая копия).
- Плата за лицензию ZC, DPDK бесплатно
- Производительность ZC и DPDK практически одинакова.
- API прикладного уровня ZC прост в использовании, а сложность разработки намного меньше, чем у DPDK.
- ZC является продуктом итальянской компании ntop, с небольшим экологическим
Сетевые технические характеристики БНФ
Рисунок 5: Структура модуля BPF
7 типов точек крепления BPF, охватывающих весь процесс жизненного цикла
- зонд
- системный вызов
- карта носков / носки
- kprobe
- контрольные группы
- тк
- xdp
Рисунок 6: Четыре метода обработки пакетов в программе BPF XDP
Четыре метода обработки пакетов XDP
- Выпуск PASS для ядра
- DROP Discard, меньше ядра
- REDIRECT Переадресовать другую обработку
- Откат TX (для блокировки и перенаправления)
Производительность разгруженной сетевой карты XDP
Данные Netronome SmartNIC
- XDP 3 точки подключения (сетевая карта Offload/Native перед ядром/Generic в ядре)
- Разгрузка 1 ядра примерно в 1/3 раза быстрее, чем Native 8 ядер.
- Native немного медленнее, чем DPDK, но производительность аналогична Stackoverflow Redhat
Рис. 7. Производительность трех режимов монтирования XDP
Рисунок 8: Положение XDP в стеке сетевых протоколов
Протокол испытаний под давлением NAC
3 типа пропускной способности, виртуальная машина NAC WSL2
XDP_DROP Сбрасывать напрямую
❯ tcpreplay -t -i lo t.pcap
Actual: 56320 packets (46419288 bytes) sent in 1.10 seconds
Rated: 42062496.6 Bps, 336.49 Mbps, 51033.95 pps
Flows: 1091 flows, 988.60 fps, 56290 flow packets, 30 non-flow
Блокировка XDP_TX, перенаправление
Actual: 56320 packets (46419288 bytes) sent in 1.30 seconds
Rated: 35446666.1 Bps, 283.57 Mbps, 43007.04 pps
Flows: 1091 flows, 833.10 fps, 56290 flow packets, 30 non-flow
XDP_TX + map_perf блокирует и отчитывается перед приложением
Actual: 56320 packets (46419288 bytes) sent in 1.49 seconds
Rated: 31016641.1 Bps, 248.13 Mbps, 37632.14 pps
Flows: 1091 flows, 728.98 fps, 56290 flow packets, 30 non-flow
Конкурирующие продукты имеют 10 гигабитных электрических портов, количество транзакций в секунду — 1000 транзакций в секунду, максимальная пропускная способность — 500 Мбит/с, максимальное количество одновременных подключений: 1000 (шт.)
Введение в технологию BPF — пример из практики
Реальный случай облачной DDOS-атаки ботнета Mirai 3
Рисунок 9: Трафик, передаваемый по сети во время DDOS
2020.07, 654 Гбит/с, SYN-флуд и UDP-флуд 2021.08, 1,2 Тбит/с, SYN-флуд и UDP-флуд, максимальная скорость HTTP-запроса 25 миллионов раз/с, блокировка в течение 3 секунд 2021.11, 2 Тбит/с, 1-минутная атака с усилением DNS и UDP-флуд, 15 000 зомби ( ниже) почти 2 Тбит/с
Экологическая цепочка процесса смягчения последствий DDOS: полная интеграция продуктов серии BPF
Рисунок 10: Toolchain, использующий XDP для предотвращения DDOS
- Автоматически продвигать стратегии смягчения при получении образцов и анализе атак
- Затем выполните локальную стратегию смягчения последствий на каждом сервере,
- L4Drop (XDP) для DDoS-атак
- Unimog от LB (XDP)
- Магический брандмауэр для брандмауэров (BPF xt_btf)
- распространение и мониторинг
- Ограничение скорости UDP (BPF SO_ATTACH_BPF)
- ebpf_exporter для отчетов о показателях
Рис. 11. Технология обнаружения протоколов с использованием XDP при предотвращении DDOS.
Библиотека отпечатков пальцев p0f описывает характеристики заголовка TCP.
Снятие отпечатков пальцев DDOS-трафика
тип отпечатка пальца
Windows XP: 4:120+8:0:1452:65535,0 :mss,nop,nop,sok :df,id+:0
Windows 7: 4:128:0:* :8192,8 :mss,nop,ws,nop,sok:df,id+:0
Windows 11: 4:128+0:0:1460:mss*44,8 :mss,nop,ws,nop,sok:df,id+:0
ubuntu 14: 4:64 :0 :*:mss*10,6:mss,sok,ts,nop,ws :df,id+:0
Основанием для оценки отпечатков пальцев TCP является то, что TTL для Linux составляет 64, а для Win — 128. Количество и положение флагов различаются между Linux и Win.
4: IP version
64: TTL
0: IP options length
*: MSS maximum segment size
mss*10,6: TCP window size and scale
mss,sok,ts,nop,ws: TCP Options(sok:selective ACK permitted)
df,id+: quirks(df: don't fragment)
0 TCP Payload Length
Идентификация трафика при балансировке нагрузки
Опция Facebook katran TCP добавить собственный идентификатор
Рис. 12. Взаимосвязь между XDP на уровне L4 и другими сервисами во время балансировки нагрузки
- Реализуйте механизм маршрутизации без сохранения состояния, добавив server_id в заголовок TCP.
- Накладные расходы на обработку заголовка TCP (ЦП/память) очень малы
- Выберите бэкэнд на основе server_id, используя вариант Maglev Hash.
- Применимо только к интрасети без брандмауэра
Перехват точки события чтения и записи server_id
Рис. 13. События, используемые XDP для балансировки нагрузки на уровне L4
Отладка наблюдаемости
cilium pwru (пакет, ты где?)
Вызовы API для трассировки сетевых пакетов в ядре
Введение в технологию BPF — технический анализ
Механизм разработки и работы БНФ
Рисунок 14: Процесс жизненного цикла BPF (XDP и TC сети)
1. Написать и скомпилировать 2. Проверить 3. Преобразовать байт-код BPF в машинный код 4. Смонтировать и выполнить 6. Связь с системой 5. DROP/PASS/TX/REDIRECT XDP
Принцип виртуальной машины cBPF
Рисунок 15: Декомпозиция кода в компиляторе
Рис. 16. Преобразование BPF в DAG
BPF основан на регистровой виртуальной машине, и программа окончательно преобразуется в DAG, а ядро выполняет компиляцию и декомпозицию выражений фильтра в двух режимах, как показано на рисунке ниже.Модель 1: Проблема, ограничивающая производительность в большинстве случаев выполняется повторный расчет Модель 2: и т. д. По сравнению с Моделью 1 требуется только 6 логических операций для обхода всего дерева Модель 2 eBPF Модель 1 cBPF
Процесс выполнения виртуальной машины cBPF
Рисунок 17: Внутренний процесс выполнения BPF
Рисунок 18: Объяснение кода инструкции BPF
$ tcpdump TCP-порт 443 -d
Существующие проблемы BPF
Версия ядра и безопасность
- Версия ядра поддерживает Linux > V4.18
- XDP и его поддержка MAP
- BTF работает на разных версиях ядра
- Уязвимость повышения привилегий безопасности Linux V5.7~V5.8
- CVE-2020-27194: Чтение и запись за пределами допустимого диапазона во время проверки
- CVE-2020-8835: Логическая ошибка диапазона значений постоянной переменной при проверке
- CVE-2020-27194: Регистрация отслеживания границ во время проверки
- Побег из контейнера: написать руткит, изменить пространство пользователя, перехватить сетевые данные