Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программная реализация лабораторного стенда





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

В первый модуль входят следующие функции:

- void Initialize_setting();

- void Number_of_Interface_for_Sniffer();

- string IP_PK();

- string Sniffer(int index_id, string ipv4_str);

- Packet_Info[] Parser(string name_file).

Функция void Initialize_setting() отвечает за настройку параметров лабораторного стенда по умолчанию.

Функция void Number_of_Interface_for_Sniffer() является функцией определения доступных сетевых интерфейсов на персональном компьютере. Number_of_Interface_for_Sniffer()запускает анализатор трафика, расположение которого указано в области «Настройка программы» в поле «Путь к WinDump». Результатом работы данной функции является выпадающий список (checkbox) «Сетевой интерфейс» (см. Рисунок)

Рисунок 19. Результат работы функции определения сетевого интерфейса

Функция string IP_PK() получает IP-адрес компьютера, на котором запущен лабораторный стенд. Определение адреса происходит через параметр командной строки ipconfig.

private string IP_PK()

{

ProcessStartInfo cmd = new ProcessStartInfo(@"cmd.exe");

 

/// процесс cmd.exe с параметром "ipconfig"

cmd.Arguments = @"/C ipconfig";

 

/// скрываем окно запущенного процесса

cmd.StandardOutputEncoding = Encoding.GetEncoding(866);

cmd.WindowStyle = ProcessWindowStyle.Hidden;

cmd.RedirectStandardOutput = true;

cmd.UseShellExecute = false;

cmd.CreateNoWindow = true;

 

/// запускаем процесс

Process proc_ipconfig = Process.Start(cmd);

 

/// считываем переменную

StreamReader srIncoming = proc_ipconfig.StandardOutput;

string ipconfig = srIncoming.ReadToEnd();

 

/// закрываем процесс

proc_ipconfig.Close();

 

///ищем IPv4 в строке ipconfig

///

return ip;

}

Функция string Sniffer(int index_id, string ipv4_str) запускает анализатор трафика в режиме прослушивания сетевого трафика на сетевом интерфейсе с номером index_id для компьютера с IP-адресом ipv4_str. Номер сетевого интерфейса определяет пользователь, выбрав одну из записей выпадающего списка «Сетевой интерфейс». Параметр ipv4_str является результатом запуска предыдущей функции string IP_PK(). WinDump запускается с параметрами, описанными в пункте «Описание входных данных» данного раздела. По окончанию своей работы функция возвращает строковую переменную, которая содержит путь к файлу с данными о трафике. Функция Packet_Info[] Parser(string name_file) в качестве входного параметра принимает данный путь. Перед тем, как начать сбор трафика, функция Sniffer запускает параллельный поток void thread_time(), который следит за временем захвата пакетов. В исполняемом коде программы прописано, что превышение времени захвата трафика в 120 секунд влечет за собой автоматическое завершение данной функции. Интервал в две минуты выбран из расчета, что лабораторный стенд является средством для помощи в обучении студентов. Он может быть изменен при необходимости в исходном коде программы.

private string Sniffer(int index_id, string ipv4_str)

{

int kolvo_packets = Convert.ToInt32(KolichestvoPacketov.Text);

string name_file = Application.StartupPath.ToString() + "\\log_.txt";

 

/// Сниффер

ProcessStartInfo cmd_1 = new ProcessStartInfo(@"cmd.exe");

cmd_1.Arguments = "/c " + textBox_windump.Text + " -i" + index_id + " -s 0 -c " + kolvo_packets + " -vv -n ip host " + ipv4_str + " > " + name_file;

 

/// скрываем окно запущенного процесса

cmd_1.StandardOutputEncoding = Encoding.GetEncoding(866);

cmd_1.WindowStyle = ProcessWindowStyle.Hidden;

cmd_1.RedirectStandardOutput = true;

cmd_1.UseShellExecute = false;

cmd_1.CreateNoWindow = true;

 

/// параллельный поток считает время

Thread my_thread = new Thread(thread_time);

my_thread.Priority = ThreadPriority.AboveNormal;

my_thread.Start();

Process proccess_1 = Process.Start(cmd_1);

proccess_1.WaitForExit();

if (exit_cmd == 0) exit_cmd = 1;

 

richTextBox_data.Text += "Захват пакетов окончен \n";

richTextBox_data.Text += String.Empty.PadLeft(30, '=') + "\n";

 

if (exit_cmd == 1)

return name_file;

else return "";

}

 

Packet_Info[] Parser(string name_file) – функция преобразования данных сетевого трафика из файла в массив данных Packet_Info[]. Класс Packet_Info является пользовательским типом данных. Поля данного класса представляют собой поля заголовков IP и TCP пакетов. В Таблице приведен пример для записи входного файла

11:11:50.236378 IP (tos 0x0, ttl 128, id 9821, offset 0, flags [DF], proto: TCP (6), length: 41) 192.168.1.5.3546 > 173.194.122.193.443:., cksum 0xaf6c (correct), 274325955:274325956(1) ack 3778425421 win 256

Таблица 2 - Данные класса Packet_Info

Поле Packet_Info Значение поля Packet_Info
public int[] time; time[0] = 11; time[1] = 11; time[2] = 50; time[3] = 236378
public string tos; 0x0
public int ttl;  
public int id;  
public int offset;  
public string flag_fragment; DF
public string flag_urgent; -
public string flag_psh; -
public string flag_rst; -
public string flag_fin; -
public string flag_syn; -
public Int64 ack;  
public string flag_icmp; -
public string proto; TCP (6)
public int len;  
public string IP_ot; 192.168.1.5
public int port_ot;  
public string Ip_pol; 173.194.122.193
public int port_pol;  
public string checksum; correct
public int win;  
public string text; - (сообщение в шестнадцатеричном виде)
public int size_data;  
public string seq  

 

Функция Parser является завершающей в первом модуле программы.

Второй модуль представляет собой совокупность сигнатур, вызываемых по очереди или обособленно друг от друга (в зависимости от цели пользователя). Сигнатуры, представленные в лабораторном стенде:

- void TCP_scan(Packet_Info[] packets, string ipv4_str);

- void Port_dos(Packet_Info[] packets, string ipv4_str, int number_port);

- void ICMP_flood(Packet_Info[] packets, string ipv4_str);

- void SMURF_attack(Packet_Info[] packets, string ipv4_str);

- void Land_attack(Packet_Info[] packets, string ipv4_str);

- void Bad_packet_TCP(Packet_Info[] packets, string ipv4_str).

Подробный алгоритм функционирования правил распознавания вторжений представлен в пункте «Сигнатуры атак».

Входными данными для всех функций являются IP-адрес компьютера-жертвы и массив данных с характеристиками сетевых пакетов. void Port_dos() также принимает дополнительный параметр – номер порта, который задается в исходном коде программы.

Тестирование

Date: 2016-05-23; view: 555; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию