Исследования. Mininet

2021-08-08 · 6 мин. для прочтения

Исследования по Mininet.

Содержание

1 Что сделано

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

  1. Общая информация

  1. Краткая информация по исследованию

    1. Исходная статья

      • Механизмы сквозного управления перегрузкой в ​​TCP обычно предполагают, что хосты ведут себя хорошо.
      • Однако злонамеренный получатель может обмануть другие узлы, заставив их наводнить сеть пакетами, что вызовет перегрузку и снизит пропускную способность.
      • В рассматриваемой статье приводится пример трёх атак, которые злоумышленник может использовать, чтобы обмануть отправителя, использующего стандартный механизм контроль перегрузки TCP.
      • Чтобы сделать реализации TCP более устойчивыми, авторы предлагают средства защиты от каждой из трех атак.
      • Первая атака: разделение ACK.
        • Используется то, что управление перегрузкой TCP работает на уровне сегментов, а не отдельных байтов.
        • Злоумышленник, при получении сегмента данных, делит диапазон данных на \(M\) частей, подтверждая каждую отдельно.
        • Поскольку будет получено в \(M\) раз больше ACK, окно перегрузки отправителя будет увеличиваться в \(M\) раз по сравнению с нормальной скоростью.
      • Вторая атака: спуфинг дублирования ACK.
        • Злоумышленник многократно подтверждает каждый пакет, который он получает.
        • Отправитель неправильно увеличивает свое окно перегрузки, так как считает, что дублированные ACK являются признаком того, что его пакеты данных отброшены.
      • Третья атака: атака на оптимистический ACK.
        • После получения первого пакета данных получатель отправляет отправителю поток подтверждений для данных, которые он ещё не получил.
        • Отправитель, сбитый с толку этими ACK, отправит больше данных в сеть.
    1. Что повторяется в исследовании

      • Реализованы атака на оптимистический ACK и защита от неё.
        • Эту атаку легко реализовать, но трудно защитить от неё, что делает ее особенно разрушительной.
        • Злоумышленник может завалить сеть пакетами данных со скоростью, намного превышающей обычную скорость соединения.
        • В исходной статье предлагается две защиты от атаки на оптимистический ACK.
          • Одна защита требует изменения как отправителя, так и получателя.
          • Другая защита требует изменения только отправителя.
        • В исследовании используется второй вариант защиты.
          • Защищённый сетевой стек обратно совместим со стандартными сетевыми стеками.
          • Вводятся два изменения:
            • игнорируются ACK, которые не попадают на границу сегмента;
            • случайным образом изменяется размер каждого выходного сегмента на небольшую величину, что не позволяет злоумышленнику правильно предсказать границу сегмента.
    1. Проведение исследования

      • Топология — два хоста, соединённых коммутатором.
        • Задержки и пропускная способность оставлены по умолчанию.
      • Создаётся четыре TCP-клиента:
        • три злоумышленника плюс обычный клиент (telnet).
        • Создаётся три TCP-сервера:
          • один с использованием стека ядра;
          • один с использованием стека lwip;
          • один с использованием модифицированного стека lwip.
      • Клиенты просто устанавливают соединение и ждут данных, в то время как серверы отправляют 100 000 байт данных каждому подключающемуся клиенту.
      • Неправильно работающие приёмники написаны на Python с использованием Scapy (инструмента управления пакетами, который может отправлять и получать пакеты с использованием необработанных сокетов).
      • Обычный сервер — это простой скрипт, написанный на Python.
      • Для реализации защиты необходим стек TCP, который можно было бы модифицировать.
      • Исправление ядра слишком затратно по времени.
      • Используется стек TCP в пользовательском пространстве lwIP.
        • Чтобы использовать lwIP, создаётся TAP-устройство lwip-tap.
      • lwIP поставлялся с эхо-сервером, который модифицирован для создания сервера данных.
      • Реализация защиты изменяет только файлы tcp_in.c и tcp_out.c в lwIP и требует добавления примерно 10 строк кода.
      • Дампы пакетов захватываются с помощью tcpdump.
      • Графики выполнены с помощью Matplotlib.
    1. Результаты

      • В целом результаты соответствуют результатам исходной статьи.
      • Есть некоторые отличия:
        • в исследовании у атакующего соединения номера последовательности (sequence numbers) линейны во времени,
        • в исходной статье они образуют кривую.
      • Это может быть связано с тем, что в исследовании тесты запускались в эмуляторе сети, а исходной статье проводилась атака на CNN.com.
      • В исследовании бо́льшая задержка соединения (link delay), что приводит к разреженности по оси времени.
      • Защищённый стек LWIP игнорирует все оптимистические ACK, соединение прекращается.
  1. Задание студенту

    • Прочесть и разобраться в исходной статье.
    • Выполнить протокол исследования.
    • Сделать аннотированное описание скриптов.
    • Сравнить результаты с исходной статьёй.
  1. Протокол воспроизведения исследования

    • Установить виртуальную машину с 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
      
    1. Файлы эксперимента

      • run-experiment.sh: запускает весь эксперимент, создавая все сетевые трассировки и все графики.
      • opt-ack-defense.diff: защита от оптимистичных ACK-атак, оформленная в виде патча.
      • server.py: простой TCP-сервер.
        • Когда клиент устанавливает соединение, сервер немедленно отправляет большой поток данных.
        • После отправки данных сервер закрывает соединение.
      • attackers/: в папке находятся три скрипта, каждый из которых реализует одну из атак, упомянутых в оригинальной статье.
      • runner.py: скрипт создаёт топологию минисети и запускает клиент и сервер, регистрируя пакеты.
      • create_graph.py: скрипт создает графики ACK и сегментов данных на основе перехваченных пакетов.
    1. Результирующие файлы эксперимента

      • Графики будут находиться в папке graphs.
      • Скопируйте их на свой компьютер:
        scp -r graphs user@адрес_хоста:папка_назначения
        
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.