Исследования. Mininet
2021-08-08
·
6 мин. для прочтения
Исследования по Mininet.
Содержание
1 Что сделано
Посмотрел научные публикации по mininet:
- https://github.com/mininet/mininet/wiki/Publications — список избранных публикаций на сайте mininet.
- https://reproducingnetworkresearch.wordpress.com/ — сайт с материалами по воспроизводимым исследованиям сетей.
Посмотрел дополнительный инструментарий для mininet:
Посмотрел дополнительные разработки по mininet (не все полезные):
Также есть смысл обратить внимание на wiki-страницу:
2 Возможные направления исследований
2.1 Воспроизводимые исследования сетей.
- Находится в мировом мейнстриме по воспроизводимости научных исследований.
- Подразумевается, что по статье можно полностью повторить исследование.
- К статье прилагается полный программный код с пояснениями.
2.1.1 Проблемы воспроизводимых исследований с mininet
- Проблемы с версиями python
- Большая часть исследований сделана на python2
- Современные версии mininet на python3
- Под python2 нет уже многих модулей
- Необходимо переписывать скрипты на python3
- Проблемы с версиями mininet
- Новые версии могут содержать изменения, делающими неработоспособными старые скрипты
- Часто не указывается, с какой версией совместимы скрипты эксперимента
2.2 Сравнение натурного эксперимента (mininet), имитационной модели (ns-2, ns-3), математической модели
3 Инструментальные средства
4 Задания студентам
- Необходимо выполнить сначала техническую часть.
- Далее необходимо повторить протокол проведённого исследования.
- Результат:
- Описание работы с mininet.
- Описание исследуемой статьи.
- Воспроизведение результатов протокола исследования.
- Код воспроизводимого исследования.
- Код будет помещаться на github.
4.1 Техническая часть (как делать)
- Поскольку тема новая для нас, необходимо исследовать техническую часть проведения исследования.
- Подробное описание установки и запуска mininet.
- Снятие показаний с mininet.
- Дополнительные инструментальные средства для исследований (в первую очередь, тулзы с сайта).
- Возможные расширения ядра Linux (Click).
4.2 Исследовательская часть
- Научные статьи идут с графиками, которые потом сравниваются с некоторой моделью.
- Необходимо повторить эти результаты с помощью моделирования на mininet.
4.2.1 RED
- Основная статья: S. Floyd and V. Jacobson. Random Early Detection gateways for congestion avoidance. IEEE/ACM Transactions on Networking, 1(4):397–413, 1993.
- Протокол исследования: https://reproducingnetworkresearch.wordpress.com/2012/06/05/seeing-red/.
- Авторам не удалось воспроизвести результаты исходной статьи.
- Нам необходимо повторить протокол и определить, в чём состоит проблема.
4.2.2 TCP congestion control with a misbehaving receiver
Общая информация
- Репозиторий кода: https://github.com/rameshvarun/misbehaving-receiver
- Описание исследования: https://reproducingnetworkresearch.wordpress.com/2016/05/30/cs244-16-tcp-congestion-control-with-a-misbehaving-receiver/
- Исследуемая статья: Savage, Stefan, Neal Cardwell, David Wetherall, and Tom Anderson. “TCP congestion control with a misbehaving receiver.” ACM SIGCOMM Computer Communication Review 29, no. 5 (1999): 71-78.
- Ссылка на текст статьи: https://cseweb.ucsd.edu/~savage/papers/CCR99.pdf
Краткая информация по исследованию
Исходная статья
- Механизмы сквозного управления перегрузкой в TCP обычно предполагают, что хосты ведут себя хорошо.
- Однако злонамеренный получатель может обмануть другие узлы, заставив их наводнить сеть пакетами, что вызовет перегрузку и снизит пропускную способность.
- В рассматриваемой статье приводится пример трёх атак, которые злоумышленник может использовать, чтобы обмануть отправителя, использующего стандартный механизм контроль перегрузки TCP.
- Чтобы сделать реализации TCP более устойчивыми, авторы предлагают средства защиты от каждой из трех атак.
- Первая атака: разделение ACK.
- Используется то, что управление перегрузкой TCP работает на уровне сегментов, а не отдельных байтов.
- Злоумышленник, при получении сегмента данных, делит диапазон данных на \(M\) частей, подтверждая каждую отдельно.
- Поскольку будет получено в \(M\) раз больше ACK, окно перегрузки отправителя будет увеличиваться в \(M\) раз по сравнению с нормальной скоростью.
- Вторая атака: спуфинг дублирования ACK.
- Злоумышленник многократно подтверждает каждый пакет, который он получает.
- Отправитель неправильно увеличивает свое окно перегрузки, так как считает, что дублированные ACK являются признаком того, что его пакеты данных отброшены.
- Третья атака: атака на оптимистический ACK.
- После получения первого пакета данных получатель отправляет отправителю поток подтверждений для данных, которые он ещё не получил.
- Отправитель, сбитый с толку этими ACK, отправит больше данных в сеть.
Что повторяется в исследовании
- Реализованы атака на оптимистический ACK и защита от неё.
- Эту атаку легко реализовать, но трудно защитить от неё, что делает ее особенно разрушительной.
- Злоумышленник может завалить сеть пакетами данных со скоростью, намного превышающей обычную скорость соединения.
- В исходной статье предлагается две защиты от атаки на оптимистический ACK.
- Одна защита требует изменения как отправителя, так и получателя.
- Другая защита требует изменения только отправителя.
- В исследовании используется второй вариант защиты.
- Защищённый сетевой стек обратно совместим со стандартными сетевыми стеками.
- Вводятся два изменения:
- игнорируются ACK, которые не попадают на границу сегмента;
- случайным образом изменяется размер каждого выходного сегмента на небольшую величину, что не позволяет злоумышленнику правильно предсказать границу сегмента.
- Реализованы атака на оптимистический ACK и защита от неё.
Проведение исследования
- Топология — два хоста, соединённых коммутатором.
- Задержки и пропускная способность оставлены по умолчанию.
- Создаётся четыре TCP-клиента:
- три злоумышленника плюс обычный клиент (telnet).
- Создаётся три TCP-сервера:
- один с использованием стека ядра;
- один с использованием стека lwip;
- один с использованием модифицированного стека lwip.
- Клиенты просто устанавливают соединение и ждут данных, в то время как серверы отправляют 100 000 байт данных каждому подключающемуся клиенту.
- Неправильно работающие приёмники написаны на Python с использованием Scapy (инструмента управления пакетами, который может отправлять и получать пакеты с использованием необработанных сокетов).
- Обычный сервер — это простой скрипт, написанный на Python.
- Для реализации защиты необходим стек TCP, который можно было бы модифицировать.
- Исправление ядра слишком затратно по времени.
- Используется стек TCP в пользовательском пространстве lwIP.
- Чтобы использовать lwIP, создаётся TAP-устройство
lwip-tap
.
- Чтобы использовать lwIP, создаётся TAP-устройство
- lwIP поставлялся с эхо-сервером, который модифицирован для создания сервера данных.
- Реализация защиты изменяет только файлы
tcp_in.c
иtcp_out.c
в lwIP и требует добавления примерно 10 строк кода. - Дампы пакетов захватываются с помощью tcpdump.
- Графики выполнены с помощью Matplotlib.
- Топология — два хоста, соединённых коммутатором.
Результаты
- В целом результаты соответствуют результатам исходной статьи.
- Есть некоторые отличия:
- в исследовании у атакующего соединения номера последовательности (sequence numbers) линейны во времени,
- в исходной статье они образуют кривую.
- Это может быть связано с тем, что в исследовании тесты запускались в эмуляторе сети, а исходной статье проводилась атака на CNN.com.
- В исследовании бо́льшая задержка соединения (link delay), что приводит к разреженности по оси времени.
- Защищённый стек LWIP игнорирует все оптимистические ACK, соединение прекращается.
Задание студенту
- Прочесть и разобраться в исходной статье.
- Выполнить протокол исследования.
- Сделать аннотированное описание скриптов.
- Сравнить результаты с исходной статьёй.
Протокол воспроизведения исследования
- Установить виртуальную машину с mininet версии 2.2.2
- Скрипты написаны на python2, поэтому нам не подходит версия 2.3 (она на python3)
- Подключиться к виртуальной машине
- Обновить систему:
sudo apt-get update sudo apt-get upgrade
- Установить необходимое дополнительное программное обеспечение:
sudo apt-get install python-matplotlib
- Скачать скрипты:
git clone https://github.com/rameshvarun/misbehaving-receiver.git
- Выполнить исследование:
cd misbehaving-receiver sudo ./run-experiment.sh
Файлы эксперимента
run-experiment.sh
: запускает весь эксперимент, создавая все сетевые трассировки и все графики.opt-ack-defense.diff
: защита от оптимистичных ACK-атак, оформленная в виде патча.server.py
: простой TCP-сервер.- Когда клиент устанавливает соединение, сервер немедленно отправляет большой поток данных.
- После отправки данных сервер закрывает соединение.
attackers/
: в папке находятся три скрипта, каждый из которых реализует одну из атак, упомянутых в оригинальной статье.runner.py
: скрипт создаёт топологию минисети и запускает клиент и сервер, регистрируя пакеты.create_graph.py
: скрипт создает графики ACK и сегментов данных на основе перехваченных пакетов.
Результирующие файлы эксперимента
- Графики будут находиться в папке
graphs
. - Скопируйте их на свой компьютер:
scp -r graphs user@адрес_хоста:папка_назначения
- Графики будут находиться в папке