Цель работы:  «Настройка парамнтров системы выявления сетевых атак методами статистического анализа фракционного состава полезного трафика средствами MATLAB’а.

Исследование имеет целью испытание алгоритма, который в режиме обучения способен сформировать базу моделей «нормального» поведения трафика, а в дальнейшем, в реальном времени по данным специфицированной (порт+назначение) полезной нагрузки хоста позволяет определить, не находится ли хост в «аномальном»  режиме работы.

Работа системы в «нормальном» режиме  иммитируется массивами данных normtrXX.mat, где XX – номер варианта. «Аномальный» режим препредставлен в наборах anormtrXX. mat (см. lab3tasks.rar).

В зависимости от номера варианта меняется и словарь анализируемых признаков. Это проявляется в изменении состава (алфавита) анализируемых вариантов-лексиконов.

Инструментарий для  выполнения  анализа  представлен  в  виде программ, написанных на языке Matlab 3.5.

Итогом исследования является график ROC системы обнаружения вторжения для специфицированных данных.

Пример скрипта, выполняющего построение требуемого графика и построение таблиц.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

***************************************************************************************************************************

clear all

load normtr24

load anormtr24 

[rdat,cdat]=size(normtr); %Размер входного массива "нормальных" данных

M=max(normtr(:,1)); % Количество символов входного алфавита

[radat,cadat]=size(anormtr); %Размер входного массива "нормальных" данных

alfa=0.001; % Регуляризатор-на случай нулевого колличества символов

N=rdat; % Длина блока "нормальных" данных, блоки составляют колонки

ST=cdat; % Число блоков "нормальных" данных

 %%%% Обучение, т.е. вычисление выборочных средних и выборочных вариаций

 %%%% по каждому признаку (букве алфавита)на массиве "нормальных" данных

count1=zeros(1,M);%

count2=zeros(1,M);% %Инициализация счетчиков "нормальных" средних и квадратов

    b=normtr(:,1);

 for i=1:M, count1(i)=sum(b==i); end; % Создание массива посимвольных частот

                                      % для первой колонки "нормальных"

                                      % данных

     count1=count1(:)'./M;  % Теперь это относительные частоты

     count2=count1(:)'.^2;  % А это их квадраты

 % Теперь итерационный процесс уточнения выборочных значений

 cnt1=zeros(M,1); % Счетчик частот для каждого блока

 cnt2=zeros(M,1); % Счетчик квадратов частот для каждого блока

 cnt11=zeros(M,1);% Счетчик частот для каждого блока при тестировании

 cnt22=zeros(M,1);% Счетчик частот для каждого нормального блока при тестировании

% Обработаем остальные блоки обучающей совокупности

 for y=2:ST

     b = normtr(:,y); % Добавим еще один блок байтов

        for i=1:M, cnt1(i)=sum(b==i); end; % Еще один массив посимвольных частот

         cnt1=cnt1(:)'/M; % Еще один массив относительных посимвольных частот

         count1=count1+(cnt1-count1)/y; % Поправка вектора средних, согласно очередному блоку данных

         cnt2=cnt1(:)'.^2 ; % Массив квадратов посимвольных частот

         count2=count2+(cnt2-count2)/y;% Поправка вектора средних квадратов, согласно очередному блок данных

 end;

 ncount1=count1/sum(count1);

     var=count2-count1.^2; % Вектор посимвольных вариаций

  %%Теперь посчитаем расстояния Махалонобиса для примеров нормального

  %%трафика

     distance1=[]; % Для нормальных данных

  for y=1:ST

        b=normtr(:,y); % Считаем блок "нормальных" пакетов

        for i=1:M, cnt22(i)=sum(b==i); end; % Очередной массив посимвольных частот

     cnt22=cnt22(:)'/M; % Очередной массив посимвольных относительных частот

     ww=sum(abs(cnt22-count1)./(var+alfa));

     % Добавляем очередное расстояние в массив distance1

     distance1=[distance1;ww];

  end

% Удобно эти расстояния отсортироваать

        eval1=sort(distance1);

nl=min(distance1); nu=max(distance1);% Границы для расстояний на нормальном трафике

%Теперь посчитаем расстояния Махалонобиса для примеров аномального трафика

  distance2=[]; % Для аномальных данных

  for z=1:ST,

     b1=anormtr(:,z); % Считаем еще один блок пакетов, с альтернативным распределением

    for i=1:M, cnt22(i)=sum(b1==i); end; % Очередной массив посимвольных частот

         cnt22=cnt22(:)'/M; % Очередной массив посимвольных относительных частот

         % Добавляем очередное расстояние в массив distance2

         distance2=[distance2;sum(abs(cnt22-count1)./(var+alfa))];

  end 

   eval2=sort(distance2);

  % figure(3),plot(eval2),title('Distances for abnormal traffic')

  al=min(distance2); au=max(distance2);% Границы для расстояний на аномальном трафике

  rl=min(nl,al); % Нижняя граница наблюденных расстояний

  ru=max(nu,au); % Верхняя граница наблюденных расстояний

  x=rl+(0:(ST-1))*(ru-rl)/ST; % Это массив вариантов настройки системы подачи тревоги

  TP=[];FP=[];

  % Протабулируем функции TP=TP(x),FP=FP(x) на интервале [rl,ru] с шагом (ru-rl)/ST

  for i=1:ST

      TP=[TP,sum(distance1<x(i))]; %Число "номальных" блоков удаленных от центра менее x(i)

      FP=[FP,sum(distance2<x(i))]; %Число "аномальных" блоков удаленных от центра менее x(i)

  end

  figure(3),

  subplot(2,2,1),plot(1:M,[ncount1;prob1;prob2]), title('Friquences of symbols')

  subplot(2,2,2), plot(x(1:ST),FP(1:ST)), title('Distances vs FP for normal traffic')

  subplot(2,2,3),plot(x(1:ST),TP(1:ST)),title('Distances vs TP for abnormal traffic')

  subplot(2,2,4), plot(FP/ST,TP/ST,'*'),title('ROC curve')

  opt=(FP/ST).^2+(TP/ST-1).^2;

  disp('      levels      FP         TP      DistBy01  ')

  [x' FP' TP' opt']

  disp(' levels   normal distances   abnormal distances  ')

  [x' eval1 eval2]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

****************************************************************************************

Пример требуемого графика.