Файл: Обзор методов и средств анализа сетевого трафика и поиска аномалий трафика (Классификация средств мониторинга и анализа).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 1789

Скачиваний: 41

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

На текущий момент идет разбор пакетов исключительно на сетевом и транспортном уровне, так как для прототипа это тот максимум информации, который нужен в дальнейшем анализе [18]. Этот функционал системы легко расширяем по мере надобности.

С сетевого уровня сохраняем информацию о:

  • длине пакета;
  • времени поступления пакета (секунды, миллисекунды и строку с датой и временем);
  • протоколе сетевого уровня (идентификатор и название);
  • протоколе транспортного уровня (идентификатор и название). С транспортного уровня сохраняем информацию о:
  • ip-адрес и порт источника;
  • ip-адрес и порт получателя.

Модуль реализован на языке С++ с использованием библиотеки WinPcap

  1. для правильной обработки дампа трафика и драйвером для базы данных.

3.2 Обоснование выбора программных средств

C++ — компилируемый, статически типизированный язык программирования общего назначения. Являясь чрезвычайно мощным языком, он содержит средства создания эффективных программ почти любого назначения: от низкоуровневых утилит и драйверов до сложных программных комплексов. В частности:

    • поддерживает разные технологии программирования: традиционное директивное программирование, метапрограммирование (шаблоны, макросы), ООП, обобщённое программирование;
    • позволяет пользовательским функциям-операторам кратко и емко записывать выражения над пользовательскими типами в естественной алгебраической форме;
    • автоматически вызывает деструкторы объектов при их уничтожении в порядке обратном вызову конструкторов, что упрощает создание кода, делает более надёжным освобождение ресурсов (таких как память, семафоры, файлы и т. п.) и позволяет гарантированно выполнить любые переходы состояний программы, даже не обязательно связанные с освобождением ресурсов (к примеру, запись в журнал);
    • выполняет программы предсказуемо, что является важным для построения систем реального времени. Генерируемый компилятором код для реализации языковых возможностей (например, при преобразовании переменной к другому типу) описан в стандарте, в котором также строго определены места, где этот код выполняется. Такое поведение дает возможность измерять время реакции программы на внешнее событие;
    • поддерживает понятия логической (mutable) и физической (const) константности, что увеличивает надежность программы, так как позволяет компилятору диагностировать ошибочные попытки изменения значения переменной. Объявление константности предоставляет программисту, который читает текст программы, дополнительное представление о правильном использовании классов и функций, что, в свою очередь, может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности дает возможность определить внутри объекта цели вызова метода (константный – для чтения, неконстантный – для изменения). Чтобы сохранить логическую константность при использовании кэшей и ленивых вычислений используют объявление mutable;
    • может создавать встроенные предметно-ориентированные языки программирования. Для иллюстрации этого пункта можно привести библиотеку Boost.Spirit, которая позволяет задавать EBNF-грамматику парсеров прямо в коде C++;
    • использует шаблоны с целью создания обобщённых контейнеров и алгоритмов для различных типов данных, а также специализации и вычисления на этапе компиляции;
    • с помощью шаблонов и множественного наследования может имитировать классы-примеси и комбинаторную параметризацию библиотек. Пример такого использования языка существует в библиотеке Loki, где класс SmartPrt позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать примерно 300 видов «умных указателей» для управления ресурсами;
    • может имитировать расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую: к примеру, библиотека Boost.Bind позволяет связывать аргументы функций;
    • кроссплатформенен: стандарт языка накладывает минимальные требования на вычислительное устройство для запуска скомпилированных программ. В стандартной библиотеке есть возможности для определения реальных свойств системы выполнения. Стоит отметить, что компиляторы этого языка доступны для большого количества платформ;
    • высоко совместим с языком Си; это позволяет использовать весь существующий Си-код: код на Си может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на Си, могут вызываться из C++ без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на Си, вызывать код, написанный на С++.
    • эффективен при использовании, благодаря тому, что язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Для обеспечения максимальной производительности позволяет отключить все языковых возможностей, которые приводят к дополнительным накладным расходам, потому что они не являются обязательными для использования;
    • имеет инструменты для работы на низком уровне с памятью и адресами.

Хотя у С++ существуют и недостатки, в нашем случае они не столь важны, потому что скоростная эффективность от использования этого языка превышает неудобства при разработке.

3.3 Модуль хранения сетевого трафика

Через драйвер программа-сниффер заполняет базу данных записями о полученных пакетах (одна запись – один пакет). Назначение данного модуля по мимо хранения информации – это уменьшить объем занимаемый дампом и ускорить выборку данных при запросе пользователя.

Для нашей системы сниффер записывает только определенные части пакетов, которые на текущем этапе интересны нам для анализа. В таблице 2 отображена схема записи об одном пакете.

Таблица 2 – Схема данных, хранящихся в базе данных

Поле

Тип

Описание

id

ObjectId

Идентификатор записи в документе

time

Object

Сборное поле для времени получения пакета

seconds

Int32

Время в секундах

useconds

Int32

Время в миллисекундах

data

String

Дата и время получения пакета

internetLayer

Object

Данные о протоколе сетевого уровня

number

Int32

Идентификатор

name

String

Название

transportLayer

Object

Данные о протоколе транспортного уровня

number

Int32

Идентификатор

name

String

Название

length

Int32

Длина пакета в октетах, включая заголовок и данные

source

Object

Данные об отправителе пакета

ip

String

IP-адрес

port

Int32

Порт

destination

Object

Данные о получателе пакета

ip

String

IP-адрес

port

Int32

Порт


3.4 Обоснование выбора программных средств

Для прототипа была взята MongoDB – документо-ориентированная база данных с открытым исходным кодом, не требующая описания схемы таблиц.

Основные возможности:

    • документо-ориентированное хранение (JSON-подобная схема данных);
    • использование Javascript в качестве языка для формирования запросов;
    • широкий набор атомарных операций над данными (условный поиск, сложная вставка/обновление и тому подобное);
    • разные типы данных (в том числе поддержка массивов);
    • поддержка индексов (B-Tree);
    • профилирование запросов;
    • журналирование операций, изменяющих данные в базе данных;
    • поддержка отказоустойчивости и масштабируемости: асинхронная репликация, набор реплик и распределения базы данных на узлы;
    • эффективное хранение больших объектов, административный интерфейс, серверные функции, Map/Reduce и другое;
    • полнотекстовый поиск, в том числе на русском языке, с поддержкой морфологии.

В отличие от реляционных баз данных MongoDB предлагает документо- ориентированную модель данных, благодаря чему она работает быстрее, обладает лучшей масштабируемостью, ее легче использовать.

Но, даже учитывая все недостатки традиционных баз данных и достоинства MongoDB, важно понимать, что задачи бывают разные и методы их решения бывают разные. В какой-то ситуации MongoDB действительно улучшит производительность вашего приложения, например, если надо хранить сложные по структуре данные. В другой же ситуации лучше будет использовать традиционные реляционные базы данных. Кроме того, можно использовать смешенный подход: хранить один тип данных в MongoDB, а другой тип данных - в традиционных БД.

Вся система MongoDB может представлять не только одну базу данных, находящуюся на одном физическом сервере. Функциональность MongoDB позволяет расположить несколько баз данных на нескольких физических серверах, и эти базы данных смогут легко обмениваться данными и сохранять целостность.

Рассмотрим несколько свойств этой базы данных:

  1. Формат данных в MongoDB.

Одним из популярных стандартов обмена данными и их хранения является JSON (JavaScript Object Notation). JSON эффективно описывает сложные по структуре данные. Способ хранения данных в MongoDB в этом плане похож на JSON, хотя формально JSON не используется. Для хранения в MongoDB применяется формат, который называется BSON или сокращение от binary JSON.

BSON позволяет работать с данными быстрее: быстрее выполняется поиск и обработка. Хотя надо отметить, что BSON в отличие от хранения данных в формате JSON имеет небольшой недостаток: в целом данные в JSON- формате занимают меньше места, чем в формате BSON, с другой стороны, данный недостаток с лихвой окупается скоростью.


  1. Кроссплатформенность.

MongoDB написана на C++, поэтому ее легко портировать на самые разные платформы. MongoDB может быть развернута на платформах Windows, Linux, MacOS, Solaris. Можно также загрузить исходный код и самому скомпилировать MongoDB, но рекомендуется использовать библиотеки с официального сайта.

  1. Коллекции.

Если в традиционном мире SQL есть таблицы, то в мире MongoDB есть коллекции. И если в реляционных БД таблицы хранят однотипные жестко структурированные объекты, то в коллекции могут содержать самые разные объекты, имеющие различную структуру и различный набор свойств.

  1. Репликация.

Система хранения данных в MongoDB представляет набор реплик. В этом наборе есть основной узел, а также может быть набор вторичных узлов. Все вторичные узлы сохраняют целостность и автоматически обновляются вместе с обновлением главного узла. И если основной узел по каким-то причинам выходит из строя, то один из вторичных узлов становится главным.

  1. Простота в использовании.

Отсутствие жесткой схемы базы данных и в связи с этим потребности при малейшем изменении концепции хранения данных пересоздавать эту схему значительно облегчают работу с базами данных MongoDB и дальнейшим их масштабированием. Кроме того, экономится время разработчиков. Им больше не надо думать о пересоздании базы данных и тратить время на построение сложных запросов.

  1. GridFS.

Одной из проблем при работе с любыми системами баз данных является сохранение данных большого размера. Можно сохранять данные в файлах, используя различные языки программирования. Некоторые СУБД предлагают специальные типы данных для хранения бинарных данных в БД (например, BLOB в MySQL).

В отличие от реляционных СУБД MongoDB позволяет сохранять различные документы с различным набором данных, однако при этом размер документа ограничивается 16 Мб. Но MongoDB предлагает решение - специальную технологию GridFS, которая позволяет хранить данные по размеру больше, чем 16 Мб.

Система GridFS состоит из двух коллекций. В первой коллекции, которая называется files, хранятся имена файлов, а также их метаданные, например, размер. А в другой коллекции, которая называется chunks, в виде небольших сегментов хранятся данные файлов, обычно сегментами по 256 Кб.

3.5 Модуль анализа и отображения

К заполненной базе подключается web-сервер, который берет на себя функционал:


  1. разграничения доступа к информации – взаимодействие разрешено только провайдеру (рисунок 6);
  2. проведения заданной аналитики;
  3. отображение данных и графиков;
  4. обеспечение запросов на сторонние ресурсы – получение данных об автономных системах, которым принадлежат IP-адреса, на которые идут запросы.

Рисунок 6 – Аутентификация пользователя

3.6Аналитика сетевого трафика

С заданного временного промежутка выбираются пакеты, которые отправляются из локальной сети во внешнюю, измеряется временной промежуток между соседними по записи пакетами, а затем подсчитывается количество пакетов, попавших в заданный временной интервал. То есть, к примеру, если пакет пришел с интервалом 10 от предыдущего, то он записывается в промежуток от 0 до 10.

Для демонстрации работы был установлен промежуток в 200 миллисекунд, это значит, что подсчитывались пакеты, попадающие в интервал с шагом 200. Также было установлено ограничение на вывод полученных результатов: отображаются первые 50 (рисунок 7).

Рисунок 7 – Отображение графика временных интервалов между

отправленными пакетами с шагом в 200 миллисекунд

Кроме этого имеет фильтр, позволяющий получать временную статистику для всех типов сетевых пакетов, так и для отдельных протоколов.

Например, на рисунках 8-10 выводятся графики временных интервалов для пакетов, устанавливающих сессию в протоколе TCP, для пакетов протокола UDP.

Рисунок 8 – График временных интервалов между отправленными

пакетами с установкой сессии

Рисунок 9 – График временных интервалов между отправленными

пакетами протокола UDP

Рисунок 10 – График временных интервалов для сравнения аналитики по различным протоколам

3.7 Анализ частоты запросов по ip-адресам

Следующий частью аналитики является вывод статистики частоты запросов на различные ip-адреса (рисунок 11). Для демонстрации вывод был ограничен до 30 часто запрашиваемых ресурсов.