Цель работы: «Настройка парамнтров системы выявления сетевых атак методами статистического анализа фракционного состава полезного трафика средствами 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]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
****************************************************************************************
Пример требуемого графика.