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

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

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

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

Добавлен: 25.04.2023

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

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

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

Таким образом, можно определять популярные ресурсы, и в случае появления нового адреса в списке быстро проверить доступную информацию о его автономной системе.

Рисунок 11 – График частоты запросов на ip-адреса

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

Сервер реализован на кроссплатформенном стеке технологий MEAN (рисунок 12):

    • MongoDB — база данных;
    • Express.js — каркас веб-приложений, работающий поверх Node.js;
    • Angular.js — MVC-фреймворк для фронтенда, интерфейсной части веб-приложения, работающей в браузере;
    • Node.js — JavaScript платформа для серверной разработк

Рисунок 12 – Стек технологий MEAN

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

Express позволяет управлять и маршрутизацией / генерацией страниц на стороне сервера, но с помощью AngularJS — упор делается на представления на стороне клиента. Кроме того AngularJS одинаково хорошо работает на настольных компьютерах и ноутбуках, смартфонах и планшетах.

Стоит отметить, что клиентская часть собирается с помощью потокового сборщика проектов – gulp. Это позволяет автоматизировать сборку и минификацию CSS и JS-файлов, запуск тестов и прочее, тем самым ускоряя и оптимизируя процесс веб-разработки.

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

Реализован прототип системы анализа сетевого трафика. Система состоит из трех модулей: модуля преобразования дампа трафика, модуля хранения и модуля анализа и вывода. Каждый из них решает свою задачу.

Модуль захвата преобразования дампа трафика считывает и преобразует дамп трафика в BSON структуру, которая затем записывается в базу данных.

Модуль хранения данных отвечает за быстрый доступ к данным.


Модуль анализа и вывода предназначен для проведения заданной пользователем аналитики и отображения ее результатов.

По итогу третьей главы решены оставшиеся задачи – создать алгоритмы обработки полученных данных и разработать прототип системы анализа сетевого трафика.

ЗАКЛЮЧЕНИЕ

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

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

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

В рамках курсовой работы был разработан прототип системы анализа трафика, который решает следующие задачи:

    • обрабатывает дамп трафика;
    • преобразует и сохраняет сетевые пакеты в базу данных;
    • отображает разработанную нами аналитику.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ

  1. Cecil Alisha. A Summary of Network Traffic Monitoring and Analysis Techniques [Электронный ресурс] : статья / Alisha Cecil // сайт Вашингтонского университета в Сент-Луисе. – Режим доступа: http://www.cse.wustl.edu/~jain/cse567-06/ftp/net_monitoring/index.html
  2. IDS/IPS — Системы обнаружения и предотвращения вторжений [Электронный ресурс]: статья. Режим доступа: http://netconfig.ru/server/ids-ips/.
  3. IDS/IPS - системы обнаружения и предотвращения вторжений и хакерских атак [Электронный ресурс]: статья // сайт компании «АльтЭль». – Режим доступа: http://www.altell.ru/solutions/by_technologies/ids/.
  4. WinPcap Documentation [Электронный ресурс]: документация. – Режим доступа: http://www.winpcap.org/docs/docs_412/html/main.html
  5. Анализ угроз сетевой безопасности [Электронный ресурс]: статья // Лаборатория Сетевой Безопасности. – 2019. – Режим доступа: http://ypn.ru/138/analysis-of-threats-to-network-security/.
  6. Басараб, М. А. Анализ сетевого трафика корпоративной сети университета методами нелинейной динамики [Электронный ресурс]: статья / М. А. Басараб, А. В. Колесников, И. П. Иванов // Наука и образование: научное издание / МГТУ им. Н. Э. Баумана. – 2013. – Режим доступа: http://technomag.bmstu.ru/doc/587054.html.
  7. Лукацкий, А. Предотвращение сетевых атак: технологии и решения [Электронный ресурс]: статья / А. Лукацкий // IT-портал. – 2006. – Режим доступа: http://citforum.ru/security/articles/ips/.
  8. Маркин, Ю. В. Обзор современных инструментов анализа сетевого трафика [Электронный ресурс]: статья / Ю. В. Маркин, А. С Санаров // сборники трудов Института системного программирования Роcсийской академии наук. – 2014. – Режим доступа: http://www.ispras.ru/preprints/docs/prep_27_2014.pdf.
  9. Михеев, А. В. Исследование методов сбора статистических данных о трафике в ip-сетях передачи данных [Электронный ресурс]: статья / А. В.

Михеев // электронный научный архив Уральского федерального университета им. Б. Н. Ельцина. – 2016. – Режим доступа: http://elar.urfu.ru/bitstream/10995/36237/1/ittsm-2016-16.pdf.

  1. Мустафаев, А. Г. Нейросетевая система обнаружения компьютерных атак на основе анализа сетевого трафика [Электронный ресурс]: статья / А. Г, Мустафаев. – 2016. – Режим доступа: http://e-notabene.ru/nb/article_18834.html.
  2. Новый подход к защите информации – системы обнаружения компьютерных угроз [Электронный ресурс]: статья // Jet Info : ежемесячное деловое ИТ издание. – Инфосистемы Джет ; Москва, 2007. – № 4. – Режим доступа: http://www.jetinfo.ru/jetinfo_arhiv/novyj-podkhod-k-zaschite-informatsii- sistemy-obnaruzheniya-kompyuternykh-ugroz/2007.
  3. Олифер, Н. А. Средства анализа и оптимизации локальных сетей [Электронный ресурс]: статья / Н. А. Олифер, В. Г. Олифер. // IT-портал. – 1998.

– Режим доступа: http://citforum.ru/nets/optimize/locnop_07.shtml.

  1. Парфентьев, А. Обзор корпоративных IPS-решений на российском рынке [Электронный ресурс]: статья / А. Парфентьев // аналитический центр

«Anti-Malware.ru». – 2013. – Режим доступа: https://www.anti-malware.ru

/IPS_russian_market_review _2013.

  1. Спецификация: Система мониторинга, анализа и ответной реакции Cisco MARS [Электронный ресурс]: спецификация продукта // сайт компании

«Cisco». – Режим доступа: http://www.cisco.com/web/RU/products/ps6241

/products_data_sheet0900aecd80272e64.html

  1. Столлингс, В. Современные компьютерные сети : пер. с англ. / В. Столлингс. – Санкт-Петербург : Питер, 2003. – 783 с.
  2. Таненбаум, Э. Компьютерные сети : пер. с англ. / Э. Таненбаум. – Санкт-Петербург : Питер, 2003. – 992 c.
  3. Чивчалов, А. Shodan – самый страшный поисковик Интернета [Электронный ресурс]: статья / А. Чивчалов // IT-ресурс «Хабрахабр» – 2013. – Режим доступа: https://habrahabr.ru/post/178501/.
  4. Шакуалкызы, Ш. Ш. Моделирование трафика мультисервисной сети: дис. магистра техники и технологии : 6М071900 / Шакуалкызы Шакуал Шырын

– Алматы, 2014. – С. 58.

ПРИЛОЖЕНИЕ 1

Исходный программный код сниффера-анализатора

#include "stdafx.h" #include <pcap.h> #include <string> #include <stdio.h> #include <cstdlib> #include <iostream> #include <WinSock2.h> #include <Windows.h>

#include "mongo/client/dbclient.h" #include <string.h>

#pragma comment(lib, "WS2_32.lib") using namespace std;

using std::string;

using mongo::BSONObj;

using mongo::BSONObjBuilder;

//Ethernet Header

typedef struct ethernet_header

{

UCHAR dest[6]; UCHAR source[6]; USHORT type;

} ethernet_header;

typedef struct ethernet_header_VLAN

{

UCHAR dest[6]; UCHAR source[6];

UCHAR tag[4];

USHORT type;

} ethernet_header_VLAN;

/* 4 bytes IP address */ typedef struct ip_address{

u_char byte1; u_char byte2; u_char byte3; u_char byte4;}ip_address;

/* IPv4 header */

typedef struct ip_header{

u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) u_char tos; // Type of service


u_short tlen; // Total length u_short identification; // Identification

u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) u_char ttl; // Time to live

u_char proto; // Protocol

u_short crc; // Header checksum

u_int saddr; // Source address

u_int daddr; // Destination address u_int op_pad; // Option + Padding

}ip_header;

/* UDP header*/

typedef struct udp_header{

u_short sport; // Source port

u_short dport; // Destination port u_short len; // Datagram length u_short crc; // Checksum

}udp_header;

/* TCP header */

typedef struct tcp_header{

u_short source_port; // source port u_short dest_port; // destination port

u_int sequence; // sequence number - 32 bits

u_int acknowledge; // acknowledgement number - 32 bits

u_char ns :1; //Nonce Sum Flag Added in RFC 3540. u_char reserved_part1:3; //according to rfc

u_char data_offset:4; /*The number of 32-bit words in the TCP header. This indicates where the data begins.

The length of the TCP header is always a multiple of 32 bits.*/

u_char fin :1; //Finish Flag u_char syn :1; //Synchronise Flag u_char rst :1; //Reset Flag

u_char psh :1; //Push Flag

u_char ack :1; //Acknowledgement Flag u_char urg :1; //Urgent Flag

u_char ecn :1; //ECN-Echo Flag

u_char cwr :1; //Congestion Window Reduced Flag

//////////////////////////////// u_short window; // window

u_short checksum; // checksum

u_short urgent_pointer; // urgent pointer

}tcp_header;

int _tmain(int argc, _TCHAR* argv[])

{

mongo::DBClientConnection c; mongo::client::initialize();

try { c.connect("localhost");

std::cout << "connected ok" << std::endl;

} catch( const mongo::DBException &e ) { std::cout << "caught " << e.what() << std::endl;

return 0;

}

ethernet_header *eh; ethernet_header_VLAN *ehvlan; ip_header *ih;

udp_header *uh; tcp_header *th; u_int ip_len; u_short sport,dport;

struct sockaddr_in source,dest;

char buffer[100];

int num, inum, i = 0;

pcap_if_t* alldevs; // network device pcap_t* adhandle; // session handle struct bpf_program fcode;

bpf_u_int32 net; // the ipof our filtering device bpf_u_int32 mask; // the netmask of filtering device char* dev;

time_t seconds; struct tm tbreak;

char errbuff[PCAP_ERRBUF_SIZE];

// Create a header object:

struct pcap_pkthdr *header;

// Create a character array using a u_char const u_char *data;

dev = pcap_lookupdev(errbuff);

if(pcap_lookupnet(dev, &net, &mask, errbuff) == -1)

{

fprintf(stderr, "Can't get netmask for device %s\n", dev); net = 0;

mask = 0;

}

u_int packetCount = 0; char iStr[4];

for (int i = 119; i >= 0; i--)

{

itoa(i, iStr, 10);

string number = string(iStr); while (number.length() < 3)

{

number = '0' + number;

}

string filename = file + number;

pcap_t * pcap = pcap_open_offline(filename.c_str(), errbuff);

while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)

{

++packetCount;

// Show a warning if the length captured is different if (header->len != header->caplen)

printf("Warning! Capture size different than packet size:

%ld bytes\n", header->len);

BSONObjBuilder b; BSONObjBuilder internetLayer; BSONObjBuilder transportLayer; BSONObjBuilder sourceObj; BSONObjBuilder destinationObj;

seconds = header->ts.tv_sec; localtime_s( &tbreak , &seconds);

strftime (buffer , 80 , "%d-%b-%Y %I:%M:%S %p" , &tbreak );

//print pkt timestamp and pkt len

b.append("time", BSON("seconds" << header->ts.tv_sec <<

"useconds" << header->ts.tv_usec << "data" << buffer));

b.append("length", header->len);

/* retireve the position of the ip header */

//Ip packets

eh = (ethernet_header *) data; u_short proto = eh->type;

int headerLen = sizeof(ethernet_header);

if (ntohs(eh->type) == 0x8100)

{

headerLen = sizeof(ethernet_header_VLAN); ehvlan = (ethernet_header_VLAN *) data; proto = ehvlan->type;

}

internetLayer.append("number", proto);

//Ip packets


if (ntohs(proto) == 0x0800)

{

ethernet header

internetLayer.append("name", "IPv4");

ih = (ip_header *) (data + headerLen); //length of

transportLayer.append("number", ih->proto);

/* print ip addresses*/ memset(&source, 0, sizeof(source)); source.sin_addr.s_addr = ih->saddr;

memset(&dest, 0, sizeof(dest)); dest.sin_addr.s_addr = ih->daddr;

sourceObj.append("ip", inet_ntoa(source.sin_addr)); destinationObj.append("ip", inet_ntoa(dest.sin_addr)); ip_len = (ih->ver_ihl & 0xf) * 4;

switch (ih->proto)

{

case 6: // TCP protocol transportLayer.append("name", "TCP"); th = (tcp_header *)((u_char*)ih + ip_len);

sourceObj.append("port", ntohs(th->source_port)); destinationObj.append("port", ntohs(th->dest_port));

signed int)th->syn <<

transportLayer.append("flags", BSON("syn" << (un-

"ack" << (unsigned int)th->ack << "fin" << (unsigned int)th->fin));

break;

case 17: // UDP protocol transportLayer.append("name", "UDP"); uh = (udp_header *)((u_char*)ih + ip_len);

sourceObj.append("port", ntohs(uh->sport)); destinationObj.append("port", ntohs(uh->dport)); break;

}

}

b.append("internetLayer", internetLayer.obj()); b.append("transportLayer", transportLayer.obj()); b.append("source", sourceObj.obj()); b.append("destination", destinationObj.obj()); c.insert("network.packages", b.obj());

}

std::cout << "File number: " << number << "\tPacket # " << packetCount

<< std::endl;

}

printf("End\n"); getchar(); return 0;

}

ПРИЛОЖЕНИЕ 2

Исходный программный код отображения аналитики

<div class="wrapper wrapper-content">

<div class="row">

<div class="col-lg-12">

<div class="ibox float-e-margins">

<div class="col-sm-10">

<canvas id="all" class="chart chart-line" chart-data="all.data"

chart-labels="all.labels" chart-legend="true" chart-series="all.series">

</canvas>

</div>

<div class="hr-line-dashed"></div>

<div class="col-sm-10">

<canvas id="syn" class="chart chart-line" chart-legend="true" chart- series="syn.series"

chart-data="syn.data" chart-labels="syn.labels">

</canvas>

</div>

<div class="hr-line-dashed"></div>

<div class="col-sm-10">

<canvas id="udp" class="chart chart-line" chart-legend="true" chart- series="udp.series"

chart-data="udp.data" chart-labels="udp.labels">

</canvas>

</div>

<div class="hr-line-dashed"></div>

<div class="col-sm-10">

<canvas id="together" class="chart chart-line" chart-legend="true" chart- series="together.series"

chart-data="together.data" chart-labels="together.labels">

</canvas>

</div>

<div class="hr-line-dashed"></div>

<div class="col-sm-10">

<canvas id="ip" class="chart chart-bar" chart-series="ip.series" chart-data="ip.data" chart-labels="ip.labels">