Прототип эвристической системы обнаружения вторжений в компьютерные сети на основе метода главных компонент

УДК 004.492.3

А.К. Большев, А.Р. Лисс

ПРОТОТИП ЭВРИСТИЧЕСКОЙ СИСТЕМЫ ОБНАРУЖЕНИЯ ВТОРЖЕНИЙ В КОМПЬЮТЕРНЫЕ СЕТИ НА ОСНОВЕ МЕТОДА ГЛАВНЫХ КОМПОНЕНТ

Рост пропускной способности современных компьютерных сетей предъявляет повышенные требования к системам их защиты. Системы обнаружения вторжений должны обладать возможностью работать на мегабитных и гигабитных линиях. Эта возможность определяется показателем PPs (Packet per second - максимальное количество пакетов, которое система может обработать за 1 с на этапе тестирования), который приобретает решающее значение в оценке применимости системы в реальных условиях. В связи с этим проектирование систем обнаружения вторжений должно базироваться на использовании новых методов, таких, как применение GPU (Graphic Processor Unit), быстрые алгоритмы преобразования трафика, методы сокращения размерности пространства данных и др. В данной статье предложен прототип системы обнаружения, использующий некоторые из вышеперечисленных решений проблемы производительности.

Архитектура современной эвристической системы обнаружения вторжений. Механизм работы системы (HNIDS - Heuristic Network Intrusion Detection Systems) состоит из двух этапов: обучения и тестирования. На этапе обучения система накапливает трафик в специальном хранилище, после чего преобразует его в набор векторов признаков, а затем обучается на полученной выборке. В результате обучения вырабатываются некоторые закономерности в поведении сети. На этапе тестирования система просматривает проходящие пакеты, преобразуя их в векторы в реальном времени, и сравнивает их с выработанными закономерностями. Если обнаружено несовпадение, то принимается решение о вторжении в сеть и объявляется тревога.

Архитектура такой системы представлена на рисунке.

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

Достоинствами таких HNIDS являются возможность обнаружения аномалий, обусловленных даже неизвестными атаками, сбоями в работе сети, а также слабая зависимость времени работы от объема базы знаний системы.

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

При разработке любой HNIDS необходимо определиться с уровнями модели OSI, на которых будет осуществляться обнаружение вторжений. В общем случае выделяют два типа систем обнаружения вторжений - на сетевом/транспортном уровнях и на прикладном уровне. Системы прикладного уровня анализируют информацию, содержащуюся в управляющих полях протоколов седьмого уровня, а также непосредственно в полях данных этих протоколов. Такие системы предназначены для обнаружения атак на Web-сервисы, файловые серверы и др. Системы обнаружения вторжений на сетевом/транспортном уровнях работают с полями пакетов протоколов IP, ICMP, UDP и TCP. Такие системы предназначены для обнаружения распределенных атак, отказов в обслуживании, сетевых сканирований, аномалий в поведении узлов и др. Предлагаемый нами прототип представляет систему второго типа.

Детектор

Ниже представлена информация, которая извлекается алгоритмом из полей протоколов 3-4 уровней модели OSI:

тип протокола транспортного или сетевого уровня;

флаги и опции IP, время жизни, тип сервиса; количество отправленных и принятых байт в сессии;

сервис (для TCP и UDP представляет из себя порт сервера) и land (флаг, установленный в 1 если порт сервера и клиента в рассматриваемом пакете/сессии совпадают), код и тип сообщения ICMP;

корректность контрольной суммы пакета; является ли пакет широковещательным или групповым.

Отдельно выделим информацию, которая извлекается только из сессий TCP: флаги TCP;

«отпечаток» операционной системы; количество пакетов и время сессии; отношение отправленных/принятых байт к их общему количеству; опции TCP;

количество изменений окна; нулевое значение последовательности; количество соединений с сервером на момент начала сессии.

Как видно, реализуются два типа обработчиков пакетов - для IP/ICMP/UDP пакетов и для TCP-сессий. Это связано с тем, что не имеет смысла рассматривать пакеты TCP раздельно, т. к. большинство атак на транспортном уровне так или иначе используют наборы из пакетов TCP. Аналогичное утверждение справедливо и для UDP, но на 3/4 уровнях модели OSI невозможно достоверно определить конкретную сессию для того или иного пакета UDP, не имея сенсоров, непосредственно установленных на получателе пакета. Это утверждение становится понятным, если рассмотреть случай множественных SMB-запросов к одному серверу.

Определим понятие сессии: сессией называется любая последовательность TCP-сегментов между двумя оконечными точками вида (хост, порт). Такая последовательность может быть ограничена сверху по количеству пакетов и/или времени сессии. Сессия считается завершенной, если получена стандартная последовательность успешного завершения TCP-соединения (получена последовательность сегментов с флагами

FIN, FIN, ACK или FIN, ACK, FIN, ACK) или признак завершения соединения по ошибке (получен флаг RST).

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

Поля (элементы) вектора, кодирующего пакет или сессию, могут быть трех типов: булев - принимает значение 0 или 1, дискретный - принимает дискретное значение в заданном диапазоне, числовой - может принимать любое числовое значение. Например, кодирование происходит в порядке появления сервиса в трафике сети, т. е. первый встретившийся системе сервис, вне зависимости от номера его порта, будет кодирован как 1. Так как количество сервисов ограничено, такое кодирование легко реализовать с помощью двух массивов (для TCP и UDP происходит отдельное кодирование сервиса) размером в 65535 элементов целочисленного типа и доступом по указателю, со сдвигом на номер порта сервиса. Кодирование необходимо, т. к. в случае простой записи номера порта сервера в вектор могут возникнуть проблемы с нормированием и точностью (для самых «известных» и широко используемых сервисов в диапазоне 1-1500 значения после нормирования будут значительно меньше, чем для малоизвестных сервисов в конце диапазона портов). Для IP- и ICMP-пакетов в поле сервиса записывается 0.

Пусть на вход алгоритма поступает некий пакет. В случае IP- или ICMP-пакета преобразование его в вектор признаков осуществляется за один шаг без каких-либо дополнительных действий. При поступлении UDP-пакета единственное отличие заключается в определении, какой из двух портов (отправителя или получателя пакета) является сервисом, и этот параметр должен быть закодирован и вписан в соответствующее поле. После этого пакет также преобразуется в вектор признаков. Для TCP-пакета возможны четыре следующих случая:

захваченный пакет содержит флаги SYN или SYN+ACK: в памяти системы формируется новая сессия и добавляется в специальную структуру

SD (Session Data); никаких дополнительных эвристик для определения сервиса не нужно, т. к. мы находимся непосредственно «в начале» TCP-соединения;

захваченный пакет содержит флаги FIN, FIN+ACK или RST и сессия присутствует в SD: на основе сессии формируется вектор и сессия удаляется из SD;

захваченный пакет не содержит флагов FIN, RST или SYN и сессия присутствует в SD: обновляем количественные характеристик сессии (количество принятых отправленных байт, пакетов с тем или иным флагом, время и пр.);

захваченный пакет не содержит флагов FIN, RST или SYN и сессия отсутствует в SD: необходимо применить эвристику для определения порта сервиса (аналогично UDP-пакету) и добавить сессию в SD.

Механизм выделения клиентских портов в стеке TCP/IP устроен таким образом, что при соединении с сервером клиентский порт выбирается случайным образом из довольно большого интервала (или интервалов). Так как в самом пакете не содержится какой-либо специфичной для транспортного уровня информации, которая могла бы точно указать, какая из сторон является сервером, необходимы дополнительные шаги для такого определения. Для определения, какая из сторон сессии (в случае, если система упустила ее начало) или UDP-дейтаграммы является сервисом, будет использоваться метод, состоящий из двух шагов:

если номер порта превышает некую определенную пользователем константу, описывающую максимальный серверный порт в его сети, то он является клиентским;

в противном случае, можно использовать предопределенный список серверных портов в сети; такой список представляет собой массив размером 65535 элементов, значение «1» элемента массива означает, что этот порт является серверным; естественно, база серверных портов должна поставляться вместе с системой, кроме того, пользователь должен иметь возможность вносить изменения в эту базу.

Алгоритм в процессе работы использует две структуры данных: для хранения информации о количестве активных соединений сервисов в сети и для хранения сессий (Session Data). Первую можно реализовать как простую хэш-таблицу с ключом,

состоящим из комбинации 32-х битного (адрес) и 16-ти битного числа (порт сервиса). Для хранения сессий необходимо использовать перекрестную хэш-таблицу, в которой мы имеем два набора ключей (комбинации «хост_отправителя : порт_от-правителя - хост_получателя : порт_получателя» и, наоборот, обе комбинации ссылаются на одну сессию). Это позволяет распараллелить поиск и ускорить обновление информации о сессиях.

Алгоритмическая сложность процедуры преобразования пакета является очень важной характеристикой, т. к. на этапе тестирования именно она будет в основном влиять на скорость обработки пакетов системой. Очевидно, что процедура определения порта сервиса имеет сложность 0(1), и тогда преобразование UDP-ЛP- или 1СМР-пакета выполняется за один шаг. Рассмотрим случай ТСР-пакета. Временем на работу с таблицей активных соединений сервисов можно пренебречь, т. к. она осуществляется только при появлении нового сервиса в сети (в первые минуты работы системы таблица будет заполнена и количество записей в ней мало изменится в дальнейшем). Операция получения элемента из хэш-таблицы сессий имеет сложность 0(log2n) и в худшем случае она выполняется два раза (для получения сессии и обновления таблицы списка сессий сервера). Процедура вставки в хэш-таблицу имеет сложность 0(log22 п) ив худшем случае также выполняется два раза. Здесь п - количество сессий, которые в данный момент существуют (еще не завершены) в сети. Таким образом, в худшем случае, если полученный пакет модифицирует SD, т. е. начинает новую сессию или заканчивает уже существующую, сложность выполнения процедуры для одного пакета составит 20(^22 п) + + 20(^2 п)) ~ 0(^22 п), где п - число активных сессий на момент получения пакета. В среднем, число активных сессий может колебаться для нагруженной сети в пределах от 5000 до 10000 в с. То есть сложность алгоритма является приемлемой для поставленных условий.

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

Нормирование позволяет улучшить сходимость алгоритмов обучения. Для нормирования и центрирования векторов {хп} применим следующие операции:

max{x(} - minlx,}

/ I

где xf - нормированный вектор; xfC - нормированный и центрированный вектор.

Сокращение размерности данных позволяет уменьшить размерность обучающей выборки и, таким образом ускорить этапы обучения и тестирования. Метод главных компонент (МГК) -одно из основных средств уменьшения размерности данных с потерей наименьшего количества информации. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных [1].

Пусть имеется матрица переменных X [n*m], где n - число образцов (строк); m - число независимых переменных (столбцов). В МГК используются новые формальные переменные t i = 1, 2, ..., m', являющиеся линейной комбинацией исходных переменных (x. }:

t. = p.x, + px + ... + p x .

i ri1 1 r i2 2 r im m

Новые переменные t. называются «главными компонентами», поэтому и сам метод называется «методом главных компонент». Число m' называется «числом главных компонент». Эта величина заведомо меньше числа переменных m и числа образцов n.

После того как построено пространство из главных компонент, новые образцы Xnw могут быть на него спроецированы, иными словами, определены матрицы их счетов T . В методе МГК это делается так:

T = TP.

new new

Процедуру сокращения размерности данных можно ускорить, распараллелив ее, например, при помощи графического процессора GPU. Современные графические процессоры эффективно обрабатывают и изображают компьютерную графику. Благодаря специализированной конвейерной архитектуре они намного эффективнее в обработке графической информации, чем типичный

центральный процессор. Например, преобразование (1) в терминах GPU и библиотеки Microsoft Accelerator будет выглядеть так:

FloatParallelArray Xnew;

Xnew = FloatParallelArray.InnerProduct(X, FloatParallelArray.Transpose(P)).

Эвристический алгоритм. Для обнаружения аномалий в наборе векторов будем использовать классификацию с обучением на данных только одного класса при помощи искусственной нейронной сети. Классификация - процесс группировки объектов исследования или наблюдения в соответствии с их общими признаками. Обычно объекты разделяются по нескольким группам. Нас интересует только одна группа - положительные объекты. Все объекты, не попавшие в эту группу, считаются отрицательными или аномальными. Обладая неким набором векторов, полученных из положительного трафика (который был накоплен за определенный промежуток времени), мы должны обучить алгоритм, который определяет, является ли новый пакет похожим на «обычный» для сети трафик или нет. Для того, чтобы обеспечить устойчивость к шуму в обучающей выборке и высокую скорость на этапе тестирования, в алгоритме использован многослойный перцептрон (МП), обучение и работа которого описана в [2].

Детектор. Принцип работы детектора в данном случае очень прост - выбрав некую метрику расстояния P, мы пропускаем всю обучающую выборку через алгоритм классификации и получаем пороговое значение:

thres = (1 + 0) max P(x y),

где 0 - пороговый коэффициент. Далее, чтобы узнать, является ли произвольный вектор x положительным, достаточно получить посредством ИНС вектор y и проверить, не превышает ли значение P(x, y) порог thres.

Прототип и его исследование. Прототип реализован на языке C#. В качестве сенсора выступает утилита tcpdump и/или библиотека sharp-Pcap. Алгоритм преобразования реализован с использованием структур данных из библиотеки .Net System.Collections. Метод главных компонент и сжатие пространства обучающей выборки реализованы на основе библиотек alglib и Microsoft Research Accelerator (для быстрых матричных операций с помощью GPU). Библиотека Neuron-DotNet используется для операций с ИНС.

Помимо PPs, важными критериями оценки HNIDS являются: CR - количество корректно распознанных аномальных и нормальных пакетов; FP (False Positive) - количество нормальных пакетов/сессий, принятых за аномальные; FN (False Negative) - количество аномальных пакетов/сессий, принятых за нормальные.

Исследование проводилось в два этапа: на данных DARPA Intrusion Detection Evaluation1 и в реальной сети. Обучение и тестирование проводилось на ПК с процессором Intel Core2Duo P8700 2.53GHz, 1066 Mhz FSP, 4Gb RAM, жесткие диски SATA, Ethernet 1Gbit/s.

На первом этапе испытания проводились на данных DARPA IDS Evaluation. Обучающая выборка состояла из двух наборов трафика - понедельников первой и третьей недели (3 569 991 пакетов); тестовая - из трафика захваченного в понедельник второй недели (1 753 377 пакетов). Тестирование проводилось в режиме «offline», т. е. прототип работал с дампами трафика, полученного утилитой tcpdump. Скорость обработки пакетов на этапе тестирования при этом составила 301,5 килопакетов/с. В тестовой выборке было 17 вторжений сетевого уровня (например, таких, как различные сетевые сканирования nmap, атаки land и smurf и др.). С помощью варьирования таких параметров, как h (количество нейронов скрытого слоя), m' (новая размерность при свертке пространства при помощи МГК) и п (коэффициент обучения) проводились минимизации по критериям FP и FN. При минимизации

по критерию FP, прототип обнаружил 12 атак при двух ложных срабатываниях. При минимизации по критерию FN прототип обнаружил 16 атак при 1 878 ложных срабатываниях. Для сравнения, метод Трана Кванг-Анга (OTAD) [3] на тех же данных показал 8 атак при одном ложном срабатывании (минимизация по FP) и 17 атак при 9 176 ложных срабатываниях (минимизация по FN).

На втором этапе сенсор прототипа был установлен в сети, состоящей из одиннадцати серверов, обслуживающих крупный Web-сайт. Обучение продолжалось в течение понедельника, вторника и среды (более 200 млн пакетов), тестирование - оставшуюся часть рабочей недели. Прототип обнаружил 27 попыток вторжения при 347 ложных срабатываниях. Скорость обработки пакетов в некоторые моменты времени достигала 238 килопакетов/с. На обучение прототип затратил менее четырех часов реального времени.

Разработанный прототип показал неплохие результаты в сравнении с аналогичными системами (на данных DARPA IDS Evaluation обнаружено 12 из 17 атак сетевого уровня). Использование GPU позволило увеличить производительность на этапе обучения почти в три раза, а на этапе тестирования - в полтора раза. Испытания в сети показали возможность применения прототипа в реальных условиях. Дальнейшее ускорение работы прототипа возможно за счет его реализации на статически компилируемом языке, например, на

C++.

СПИСОК ЛИТЕРАТУРЫ

1. Айвазян, С.А. Прикладная статистика. Классификация и снижение размерности. [Текст]/ С.А. Айвазян, В.М. Бухштабер, И.С. Енюков [и др.]. -М.: Финансы и статистика, 1989.-607 с.

2. Большев, А.К. Применение нейронных сетей для обнаружения вторжений в компьютерные сети [Текст]/А.К. Большев, В.В. Яновский//Вест-

ник СПбГУ.-2009.-Сер. Прикладная математика информатика процессы управления. -Вып. 4. -С. 38-44.

3. Quang-Anh, Tran One-class Support Vector Machine for Anomaly Network Traffic Detection. [Текст]/Ггап Quang-Anh, Duan Haixin, Li Xing. -Tsinghua University, Beijing, 2007.

1 http://www.ll.mit.edu/mission/communications/ist/CST/index.html