Ela.kpi.ua



НАЦ?ОНАЛЬНИЙ ТЕХН?ЧНИЙ УН?ВЕРСИТЕТ УКРА?НИ?КИ?ВСЬКИЙ ПОЛ?ТЕХН?ЧНИЙ ?НСТИТУТ ?МЕН? ?ГОРЯ С?КОРСЬКОГО??НСТИТУТ ПРИКЛАДНОГО СИСТЕМНОГО АНАЛ?ЗУКАФЕДРА МАТЕМАТИЧНИХ МЕТОД?В СИСТЕМНОГО АНАЛ?ЗУНа правах рукописуДо захисту допущеноУДК 004.338.65 В. о. зав?дувача кафедри ММСАО.Л.Тимощук?___? ____________ 2019 р.Маг?стерська дисертац?яна здобуття ступеня маг?стра за спец?альн?стю 122 Комп’ютерн? науки на тему: ?Система моделювання процесу зараження мереж? та ?? протид???Виконав: студент ?? курсу, групи КА-83 мпГаркавенко Денис Миколайович ____________Кер?вник: доцент кафедри ММСА,к.ф-м. н, с.н.с. ?гнатенко О.П.____________Рецензент: зав. в?дд?лу ?нституту програмних систем НАН,д.т.н., с.н.с. С?н?цин ?.П.____________Засв?дчую, що у ц?й маг?стерськ?й дисертац??нема? запозичень з праць ?нших автор?вбез в?дпов?дних посиланьСтудент ____________Ки?в2019НАЦ?ОНАЛЬНИЙ ТЕХН?ЧНИЙ УН?ВЕРСИТЕТ УКРА?НИ?КИ?ВСЬКИЙ ПОЛ?ТЕХН?ЧНИЙ ?НСТИТУТ ?МЕН? ?ГОРЯ С?КОРСЬКОГО??НСТИТУТ ПРИКЛАДНОГО СИСТЕМНОГО АНАЛ?ЗУКАФЕДРА МАТЕМАТИЧНИХ МЕТОД?В СИСТЕМНОГО АНАЛ?ЗУР?вень вищо? осв?ти — другий (маг?стерський)Спец?альн?сть (спец?ал?зац?я) — ________________________________________ЗАТВЕРДЖУЮВ. о. зав?дувача кафедри ММСАО. Л. Тимощук?___? ____________ 2019 р.ЗАВДАННЯна маг?стерську дисертац?ю студентуГаркавенко Денису Миколайовичу1.?Тема дисертац??: ?Система моделювання процесу зараження мереж? та ?? протид???,науковий кер?вник дисертац?? ?гнатенко Олекс?й Петрович, канд ф?зико–математичних наук, доцент, затверджен? наказом по ун?верситету в?д ___________________________2.?Терм?н подання студентом дисертац??: ___________________________3.?Об’?кт досл?дження: теор?ко-?гров? методи забезпечення ?нформац?йно? безпеки.4.?Предмет досл?дження: застосування мультиагентних систем для моделювання зараження та захисту комп’ютерно? мереж?.5.?Перел?к завдань, як? потр?бно розробити:Систематизувати ?снуюч? теорико-?гров? п?дходи в задачах мережево? безпеки.Виявити основн? напрямки та методи.Оц?нити ?снуюч? п?дходи моделювання повед?нки порушника. Виявити ключов? особливост? та недол?ки ?снуючих моделей.Реал?зувати теорико-?гров? п?дходи ? мультиагентн? системи для моделювання д?й ? стратег?й порушника ? захищаючого. Розробити систему моделювання процес?в зараження мереж? ? ?? протид?? на основ? ?гор з неповною ?нформац??ю.6.?Ор??нтовний перел?к ?люстративного матер?алу: Загальн? схеми мереж?.Процедура побудови модел? мереж? п?дпри?мства.Модель зловмисника.Модель захищаючого.Процедура прийняття р?шень зловмисником та захищаючого.7.?Ор??нтовний перел?к публ?кац?й: стаття _______________________________________________________________ тези _______________________________________________________________8. Дата видач? завдання: __________________________________________Календарний план№ з/пНазва етап?в виконання маг?стерсько? дисертац??Терм?н виконання етап?в маг?стерсько? дисертац??Прим?тка1?рунтовне ознайомлення з предметною областю2Визначення структури маг?стерсько? дисертац??; вивчення л?тератури, пошук додатково? л?тератури3Робота над першим розд?лом маг?стерсько? дисертац??4Проведення наукового досл?дження; робота над другим розд?лом маг?стерсько? дисертац??5Проведення наукового досл?дження; робота над статтею за результатами наукового досл?дження6Робота над трет?м розд?лом маг?стерсько? дисертац??; п?дготовка статт? за результатами наукового досл?дження; розроблення програмного забезпечення7Завершення роботи над основною частиною маг?стерсько? дисертац??; робота над розд?лом з охорони прац?8Оформлення текстово? ? граф?чно? частин маг?стерсько? дисертац??Студент______________Гаркавенко Д. М.Науковий кер?вник дисертац??______________?гнатенко О.П.РЕФЕРАТМаг?стерська дисертац?я: 97 с., 27 рис., 30 табл., 16 джерел. Зд?йснено пор?вняльний анал?з р?зних п?дход?в розробки системи виявлення вторгнень як складово? частини запропоновано? системи моделювання зараження мереж? та протид?? процесу зараження.Метою запропоновано? системи ? моделювання реальних загроз безпец? комп’ютерно? мереж? та створення системи протид?? цим загрозам.Предметом досл?дження ? побудування теор?ко-?грово? модел? протид?? системи виявлення вторгнень процесу атаки на мережу.Об’?ктом досл?дження ? створення системи виявлення вторгнень на основ? даних нормально? та аномально? роботи мереж?.Система виявлення вторгнень навча?ться на даних нормально? роботи мереж? деякий час, формуючи дек?лька кластер?в, як? характеризують нормальну роботу правильно налаштовано? мереж?. Для виявлення загроз навчена система перев?ря? наск?льки близьк? поточн? дан? до одного з кластер?в, що дозволя? виявити аномал?? по в?дхиленню значення нових вим?р?в в?д середнього в?дносно даних, на яких вона навчалась.Реал?зац?я дано? системи моделювання була ?мплементована та протестована на в?дкритому набор? реальних даних комп’ютерно? мереж?. Алгоритм GNG показав значно кращ? результати н?ж IGNG у представлен?й реал?зац??. Ефективн?сть кластер?зац?? системою виявлення вторгнень майже не залежить в?д к?лькост? спостер?га?мих параметр?в. Швидк?сть та як?сть роботи системи моделювання д?й атакуючого та системи виявлення вторгнень ? задов?льною. Подальше досл?дження може включати в себе використання б?льш досконалих алгоритм?в кластер?зац??, ?мплементац?? багатопоточност? у систему виявлення вторгнень, використання даних, з?браних за допомогою honeypot, у навчанн? системи виявлення, та оптим?зац?? моделюючо? системи шляхом додавання рефлекс?? до модел? при вибор? часу роботи. Подальше досл?дження може включати використання б?льш досконалих моделей для вид?лення тексту, а також розробка б?льш складних метрик для оц?нки результат?в под?бних моделей.К?БЕРЗАГРОЗА, МУЛЬТИАГЕНТН? СИСТЕМИ, СИСТЕМИ ВИЯВЛЕННЯ ВТОРГНЕНЬ, МОДЕЛЮВАННЯ СЦЕНАР??В, НЕЙРОННИЙ ГАЗ, КЛАСТЕР?ЗАЦ?ЯABSTRACTMaster's Thesis: 97 pages, 27 figures, 30 tables,16 parative analysis of different approaches to the development of intrusion detection system as part of the proposed system for modelling network infection and countering the infection process.The purpose of the proposed system is to simulate real threats to the security of the computer network and to create a system to counter these threats.The subject of the study is the construction of a theoretical-game model of counteracting the system of intrusion detection of the process of attack on the network.The object of the study is to create an intrusion detection system based on normal and abnormal network data.The intrusion detection system has been learning in the normal operation of the network for some time, forming several clusters of data that characterize the normal operation of a properly configured network. To detect threats, the trained system checks how close the current data is to one of the clusters, which reveals anomalies in the deviation of the values of the new measurements from the average relative to the data on which it was trained.The simulation system considers the interaction of the attacker and the anomaly detection system from the standpoint of game theory, where the attacker and the system build their strategy with respect to the information they know. The implementation of this simulation system was implemented and tested on an open set of real data on a computer network. The GNG algorithm performed much better than IGNG in the implementation presented. The effectiveness of clustering by the intrusion detection system is almost independent of the number of parameters observed. The speed and quality of the attacker simulation system and the intrusion detection system are satisfactory. Further research may include the use of more sophisticated clustering algorithms, the implementation of multithreading into an intrusion detection system, the use of honeypot data in training the detection system, and the optimization of the modeling system by adding reflection to the model at run time.CYBER SECURITY, CYBER THREATS, MULTI-AGENT SYSTEMS, INTERVENTION DETECTION SYSTEMS, MODELING SYSTEM, NEURAL GAS, CLUSTERIZATIONЗМ?СТ TOC \o "1-3" \h \z \u ВСТУП PAGEREF _Toc27559782 \h 10РОЗД?Л 1 ОГЛЯД ?СНУЮЧИХ П?ДХОД?В ЗАБЕЗПЕЧЕННЯ МЕРЕЖ?ВО? БЕЗПЕКИ PAGEREF _Toc27559783 \h 131.1 Характеристика напрямк?в ? груп метод?в виявлення вторгнень PAGEREF _Toc27559784 \h 131.2 Мережев? атаки. Види та засоби протид?? PAGEREF _Toc27559785 \h 171.3 Огляд тип?в систем виявлення вторгнень PAGEREF _Toc27559786 \h 201.4 Огляд ?снуючих систем виявлення вторгнень PAGEREF _Toc27559787 \h 221.5 Огляд ?снуючих СВВ на основ? нейронних мережей PAGEREF _Toc27559788 \h 261.6 Теор?ко-?гров? п?дходи забезпечення мережево? безпеки PAGEREF _Toc27559789 \h 271.7 Висновок до розд?лу PAGEREF _Toc27559790 \h 29РОЗД?Л 2 ОГЛЯД МЕТОД?В МОДЕЛЮВАННЯ СЦЕНАР??В ЗАРАЖЕННЯ МЕРЕЖ? PAGEREF _Toc27559791 \h 302.1 Можлив? типи атаки. PAGEREF _Toc27559792 \h 302.2 Класиф?кац?я к?берзагроз PAGEREF _Toc27559793 \h 322.3 Методи розповсюдження к?берзагроз PAGEREF _Toc27559794 \h 362.3 Визначення основних етап?в к?берзагроз PAGEREF _Toc27559795 \h 372.5 Висновок до розд?лу PAGEREF _Toc27559796 \h 39РОЗД?Л 3 ОПИС ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ PAGEREF _Toc27559797 \h 413.1. Виб?р та анал?з датасету програмного продукту PAGEREF _Toc27559798 \h 413.2 Виб?р та анал?з арх?тектури системи виявлення вторгнень PAGEREF _Toc27559799 \h 423.3 Програмне забезпечення для системи виявлення вторгнень PAGEREF _Toc27559800 \h 473.4 Висновки ? анал?з результат?в системи виявлення вторгень. PAGEREF _Toc27559801 \h 503.6 Вза?мод?я СВВ ? атакуючого PAGEREF _Toc27559802 \h 523.7. Висновок до розд?лу PAGEREF _Toc27559803 \h 54РОЗД?Л 4 РОЗРОБКА СТАРТАП-ПРОЕКТУ PAGEREF _Toc27559804 \h 564.1 Опис ?де? проекту PAGEREF _Toc27559805 \h 564.2 Опис товару PAGEREF _Toc27559806 \h 574.3 Анал?з ринкових можливостей запуску стартап-про?кту PAGEREF _Toc27559807 \h 574.4 Оц?нка конкурент?в PAGEREF _Toc27559808 \h 604.5 План маркетингу PAGEREF _Toc27559809 \h 624.6. Виробнич?й план PAGEREF _Toc27559810 \h 644.7 Ф?нансовий план PAGEREF _Toc27559811 \h 654.8 Висновки PAGEREF _Toc27559812 \h 66ВИСНОВКИ PAGEREF _Toc27559813 \h 67ПЕРЕЛ?К ПОСИЛАНЬ PAGEREF _Toc27559814 \h 69ДОДАТОК А Л?СТИНГ ПРОГРАМИ PAGEREF _Toc27559815 \h 72ВСТУП2019 р?к став черговим роком витоку даних, в?д ав?акомпан?й до медичних страховик?в, в?д теллекоммун?кац?онних компан?й до традиц?йних копорац?й, так? як мереж? готел?в. Частина атак була зд?йснена за допомогою шк?дливого ПО, частина - за допомогою хакерських атак, але нема? н?яких ознак того, що в майбутньому спов?льниться процес глобального взлому. Проста вразлив?сть або в?дсутн?сть елемент?в управл?ння можуть привести до катастроф?чних результат?в [1].Останн? досл?дження International Data Corporation говорять про те, що об’?м цифрово? ?нформац?? в 2019 роц? досяг 300 зетабайт. Швидк?сть зростання ?нформац??, що потребу? захисту, зб?льшу?ться значно швидше зростання об’?му ?нформац?? в ц?лому[2]. Приблизно 30-35% цифрово? ?нформац?? потребу? захисту. Лише половина ма? в?дпов?дн? ступен? захисту.Веб-додатки та комп’ютерн? мереж? ? найб?льш схильними до ризику з точки зору ?нформац?йно? безпеки. В?дсоток критичних та високих р?зик?в, як ? ран?ше, залиша?ться занадто високим – 24.9% для непубл?чних мережей та 19.2% для публ?чних веб-додатк?в [1], а оц?нка щ?льност? ризику у 24.3% для внутр?шних мережей виклика? занепоко?ння.Розвиток сучасних мережевих технолог?й супроводжу?ться п?двищенням вимог до забезпечення приватност? обробки ?нформац?? ?, як насл?док, передбача? ?стотну модерн?зац?ю нормативно методолог?чно? бази ? стандарт?в управл?ння ?нформац?йною безпекою. Тим часом в цих документах зазнача?ться, що в ряд? випадк?в методи управл?ння системами захисту ?нформац??, ор??нтован? на застосування к?льк?сних оц?нок, все ще не мають достатньо розвиненого математичного апарату для ?х об?рунтування. У роботах останн?х рок?в простежу?ться тенденц?я розширення наявних математичних п?дход?в до об?рунтування параметр?в систем захисту за рахунок застосування метод?в теор?? ?гор до вир?шення завдань забезпечення безпеки мережевих технолог?й, в тому числ? управл?ння ?нформац?йною безпекою.На тепер?шн?й час одним з найб?льш ?фективним методом захисту мереж ? системи виявлення вторгнень. СВВ дозволя? розп?знавати шаблони аномальних д?й, анал?зувати системну та мережеву активност?, викону? контроль ц?л?сност? файл?в та ?нших ресурс?в ?С, проводить аудит конф?гурац?? системи та нада? контроль над функц?ями захисту. Недол?ки ?снуючих систем виявлення вторгнень.Недол?ки сучасних СВВ розпод?ляють на недол?ки, що пов’язан? з? структурою СВВ, ? недол?ки реал?зац??.Недол?ки структур СВВ:Недостатн?сть сп?льних угод в терм?нолог?? призвели до в?дсутн?ст? загально? методолог?? побудови СВВ.Методи СВВ намагаються виявити аномал?? та будь-яку зрозум?лу атаку, що призводить до ?стотного споживання ресурс?в.Портативн?сть. До цих п?р б?льш?сть СОВ створю?ться для використання на конкретному обладнанн?, ? досить важко використовувати ?х в ?нш?й систем?, де потр?бно реал?зувати схожу пол?тику безпеки. Наприклад, завдання з перем?щення СОВ ?з системи, в як?й п?дтриму?ться т?льки однор?вневий список доступу, в систему з багатор?вневою досить складна, ? для ?? вир?шення потр?бн? значн? доробки. Основною причиною цього ? те, що багато СОВ спостер?гають за певними пристроями, програмами конкретно? ОС. Також сл?д зауважити, що кожна ОС розробля?ться для виконання конкретних завдань. Право на оновлення. Дуже складно в?дновити ?снуюч? системи новими технолог?ями виявлення. Нова п?дсистема повинна вза?мод?яти з ус??ю системою, ? часом неможливо забезпечити ун?версальну можлив?сть вза?мод??.Продуктивн?сть ? допом?жн? тести - важко оц?нити продуктивност? СОВ в реальних умовах. Б?льш того, в?дсутня загальний наб?р правил для тестування СОВ, на п?дстав? яких можна було сказати про доц?льн?сть використання дано? системи в конкретних умовах ? отримати як?сь к?льк?сн? показники.Недол?ки метод?в виявлення:неприпустимо високий р?вень помилкових спрацьовувань ? пропуск?в атак;слабк? можливост? виявлення принципово нових атак;б?льш?сть вторгнень неможливо визначити на початкових етапах;важко, а ?нод? неможливо, визначити атакуючого та ц?л? атаки;в?дсутн?сть оц?нок точност? ? адекватност? результат?в роботи;неможливо визначати ?стар?? атаки, що використовують нов? стратег??;складн?сть виявлення вторгнень в реальному час? з необх?дною повнотою в високошвидк?сних мережах;слабк? можливост? з автоматичного виявлення складних координованих атак;значне перевантаження систем, в яких функц?онують СОВ, при робот? в реальному час?;Виходячи з вищесказаного, можна зробити висновок, що в практичн?й д?яльност? набуто значного досв?ду вир?шення проблем виявлення вторгнень. Поточн? СВВ багато в чому базуються на емп?ричних схемах процесу виявлення вторгнень. Подальше вдосконалення СВВ пов'язане з конкретизац??ю метод?в синтезу та анал?зу складних систем, теор??ю розп?знавання шаблон?в як? застосовани до СВВ.РОЗД?Л 1 ОГЛЯД ?СНУЮЧИХ П?ДХОД?В ЗАБЕЗПЕЧЕННЯ МЕРЕЖ?ВО? БЕЗПЕКИ1.1 Характеристика напрямк?в ? груп метод?в виявлення вторгненьСеред метод?в, як? використовуються в п?дсистем? анал?зу сучасно? СВВ, ? два напрямки: один спрямований на виявлення аномал?й в захищен?й систем?, а другий на пошук зловживань. Кожна з цих областей ма? сво? переваги та недол?ки, тому б?льш?сть ?снуючих СВВ використовують комб?нован? р?шення, заснован? на синтез? в?дпов?дних метод?в. ?дея метод?в, що використовуються для виявлення аномал?й, поляга? у визнанн? того, що ?сну? процес, який спричинив зм?ни в систем?, д?? зловмисника. Методи пошуку аномал?й наведен? в таблицях 1.1 та 1.2.Таблиця 1.1 – виявлення аномал?й при навчанн? з вчителемМетоди виявленняВикористову?ться в системахОпис методуМоделювання правилW&SСВВ форму? наб?р правил, що опису? нормальну повед?нку системи, у процес? навчання. На етап? пошуку аномал?й система застосову? отриман? правила ? у раз? недостатньо? в?дпов?дност? сигнал?зу? про ?? виявлення.Описова статистикаIDES, NIDES, EMERLAND, JiNao, HayStackЗб?р описово? статистики безл?ч? показник?в системи в структуру. Обчислю?ться в?дстань м?ж двома векторами показник?в поточними ? збереженими значеннями. Якщо отримана в?дстань велика – стан аномальний.К?нець таблиц? 1.1Методи виявленняВикористову?ться в системахОпис методуНейронн? мереж?HyperviewСтруктура використовуваних нейронних мереж р?зна. Але у вс?х випадках навчання проводиться за даними, що представляють нормальну повед?нку системи. Отримана нейронна мережа використову?ться для оц?нки в?дхилення в?д норми огляда?мо? системи. Вих?д нейронно? мереж? вказу? на аномал?ю.Таблиця 1.2 – виявлення аномал?й при навчанн? без вчителяМетоди виявленняВикористову?ться в системахОпис методуМоделювання множини стан?вDPEM, JANUS, BroНормальна повед?нка системи опису?ться в вигляд? набору ф?ксованих стан?в ? переход?в м?ж ними. Де стан ? не що ?нше як вектор певних значень параметр?в вим?рювань системи.Описова статистикаMIDAS, NADIR, Haystack, NSMЗб?р просто? описово? статистики безл?ч? показник?в системи в структуру. Для виявлення аномал?й обчислю?ться в?дстань м?ж двома векторами показник?в поточними ? збереженими значеннями. Якщо отримана в?дстань досить велика – стан ? аномал??ю.Метою другого напряму (виявлення зловживань) ? пошук посл?довностей под?й, визначених адм?н?стратором безпеки або експертом п?д час п?дготовки СВВ як етап?в зд?йснення вторгнення. Методи пошуку зловживань наведен? в таблиц? 3. В даний час розр?зняють лише методи з контрольованим навчанням.Методи, що застосовуються в даний час в СВВ, заснован? на загальних поняттях теор?? розп?знавання образ?в або теор?? ?гор. В?дпов?дно до них для виявлення аномал?й, заснованих на експертних оц?нках, форму?ться зображення нормального функц?онування ?нформац?йно? системи. Це зображення д?? як наб?р значень параметр?в оц?нки. Його зм?на вважа?ться проявом ненормального функц?онування системи. П?сля виявлення аномал?? ? оц?нки ?? ступеня форму?ться судження про характер зм?н: чи ? вони насл?дком вторгнення або прийнятного в?дхилення. Таблиця 1.3 – виявлення зловмисника при навчанн? з вчителемМетоди виявленняВикористову?ться в системахОпис методуМоделювання множини стан?вUSTAT, IDIOTВторгненням вважа?ться перел?к стан?в, де стан – вектор параметр?в оц?нки захищено? системи. Необх?дною ? достатньою умовою наявност? ?нваз?? ? наявн?сть ц??? посл?довност?. ? два основн? способи подання сценар?ю проникнення: 1) у вигляд? простого ланцюжка под?й; 2) використання мереж Петр?, де вузли - це под??.Експертн? системиNIDES, EMERLAND, MIDAS, DIDSЕкспертн? системи являють процес вторгнення у вигляд? р?зного набору правил. Дуже часто використовуються продукц?йн? системи.К?нець таблиц? 1.3Методи виявленняВикористову?ться в системахОпис методуМоделювання правилNADIR, HayStack, JiNao, ASAX, BroНайпрост?ший вар?ант експертно? системи.Синтаксичний анал?заторNSMСВВ анал?зу? виявлення конкретно? комб?нац?? символ?в, що передаються м?ж п?дсистемами та системами захищеного комплексу.Одним ?з вар?ант?в виявлення зловживань ? по?днання модел? зловживань та очевидних причин. Суть його поляга? в наступному: ?сну? база даних сценар??в атаки, кожен з яких по?дну? в соб? посл?довн?сть повед?нки, що склада? атаку. У будь-який момент часу ?сну? можлив?сть, що один ?з цих п?дмножин сценар??в атаки ма? м?сце в систем?. Робиться спроба перев?рити припущення про ?х наявн?сть шляхом пошуку ?нформац?? в аудиторських записах. Результатом пошуку ? певна к?льк?сть факт?в, достатня для п?дтвердження або спростування г?потези. Перев?рка проводиться в одному процес?, який назива?ться антисипатором. Антисипатор на основ? д?ючо? активно? модел? форму? наступний можливий наб?р повед?нки, який повинен бути перев?рений в аудиторських записах, ? переда? ?х планувальнику. Планувальник визнача?, як задумана повед?нка в?добража?ться в записах аудиту та перетворю? ?х у вираз, що залежить в?д системи. Ц? вирази повинн? складатися з структур, як? можна було б просто знайти в аудиторських записах, ? для яких була б досить висока ймов?рн?сть появи в аудиторських записах.У м?ру накопичення п?дозр щодо деяких сценар??в, а для ?нших вони зменшуються, перел?к моделей д?яльност? зменшу?ться. Розрахунок причин вбудований в систему виявлення порушень, що дозволя? оновити ймов?рн?сть сценар??в атаки у списку моделей д?яльност? [4]1.2 Мережев? атаки. Види та засоби протид?? Мережева атака – д?я, метою яко? ? зб?льшення прав над в?ддаленою чи локальною комп'ютерною системою, ?? дестаб?л?зац?я, в?дмова в обслуговуванн?, а також отримання даних користувач?в за допомогою ц??? в?ддалено? чи локально? комп'ютерно? системи.Враховуючи дан? в?д HackerOne [11], що зображен? на рисунку 1.1, розглянемо найвпливов?ш? з них. Рисунок 1.1 – загальний зв?т за типом уразливост?.В?дсоток в?дпов?да? обсягу зв?т?в в?д представник?в галуз?.?н'?кц?я SQL - атака, п?д час яко? зм?нюються параметри SQL-запит?в до бази даних. В результат? запит набува? зовс?м ?ншого значення, ? в раз? недостатньо? ф?льтрац?? вх?дних даних в?н здатний не т?льки виводити конф?денц?йну ?нформац?ю, але ? зм?нювати / видаляти дан?. [4] Засоби боротьби з даним типом атак:Для ц?лих ? дробових значень, перш н?ж використовувати ?х у запит?, достатньо привести значення до потр?бного типу:$id=(int)$id; $total=(float)$total;Для строкових параметр?в, як? не використовуються в like чи регулярному вираз?:$str=addslashes($str);Атака XSS - це атака на вразлив?сть, що ?сну? на сервер?, що дозволя? вбудувати якийсь дов?льний код у створену сервером HTML-стор?нку, яка може м?стити що завгодно ? передавати цей код у вигляд? зм?нно? величини, ф?льтруючи за якою не працю?, тобто сервер не перев?ря? цю зм?нну на наявн?сть в н?й заборонених символ?в -, <,>, ', ?. Значення ц??? зм?нно? переда?ться з? створено? HTML-стор?нки на сервер у сценар??, який ?? викликав, надсилаючи запит. ? тод? почина?ться забава для Нападника. У в?дпов?дь на цей запит скрипт PHP генеру? HTML-стор?нку, яка в?добража? значення зм?нних, необх?дних зловмиснику, ? в?дправля? цю стор?нку в браузер зловмисника. Активна вразлив?сть б?льш небезпечна, оск?льки зловмисников? нема? необх?дност? заманювати жертву по спец?альному посиланню, йому досить впровадити код в базу або який-небудь файл на сервер?. Таким чином, вс? в?дв?дувач? сайту автоматично стають жертвами. В?н може бути ?нтегрований, наприклад, за допомогою впровадження SQL-коду (SQL Injection). Тому, не варто дов?ряти даним, що збер?гаються в БД, нав?ть якщо при вставц? вони були оброблен?.Приклад пасивно? уразливост? можна подивитися в самому початку статт?. Тут вже потр?бна соц?альна ?нженер?я, наприклад, важливий лист в?д адм?н?страц?? сайту з проханням перев?рити налаштування свого обл?кового запису, п?сля в?дновлення з бекапа. В?дпов?дно, потр?бно знати адресу жертви або просто влаштувати спам-розсилку або розм?стити пост на якомусь форум?, та ще й не факт що жертви виявляться на?вними ? перейдуть по вашому посиланню.Причому пасивно? уразливост? можуть бути схильн? як POST так ? GET-параметри. З POST-параметрами, зрозум?ло, доведеться йти на хитрощ?. Наприклад, переадресац?я з сайту зловмисника:<form method="post" action=""><input type="hidden" name="var" value="<script>alert('xss')</script>"></form><script type="text/javascript">document.getElementsByTagName('form')[0].submit();</script>Тобто атака XSS - це атака, що використову? вразливост? на сервер? на кл??нтських комп'ютерах. Напад XSS найчаст?ше використову?ться для крад?жки файл?в cookie (або файл?в cookie, оск?льки вони вимовляються рос?йською мовою). Вони збер?гають ?нформац?ю про сеанс перебування користувача на сайтах, який необх?дний, щоб зловмисники перехоплювали управл?ння особистими даними користувача на сайт?, поки сеанс не буде закритий сервером, на якому розм?щений сайт. Засоби боротьби з даним типом атак:Заборона включення параметр?в $ _GET, $ _POST, $ _COOKIE в HTML-стор?нку.Заборона завантаження дов?льних файл?в на сервер, щоб уникнути завантаження тимчасових скрипт?в. Приклад XSS-атаки:<form><input name="content"><img src=""onerror="with(parentNode)alert('XSS',submit(content.value='<form>'+innerHTML.slice(action=(method='post')+'.php',155)))">Вага даного скрипта п?д час виконання – 161 байт.XPath-?н'?кц?я - вид вразливостей, який поляга? у впровадженн? XPath-вираз?в в ориг?нальний запит до бази даних XML. XPath (XML Path Language) - це мова, яка призначена для дов?льного звернення до частин XML документа.Засоби боротьби з даним типом атак:Припускайте, що все що вводяться дан? сумн?вн?.Перев?ряйте не т?льки тип даних, що вводяться, але також ?х формат, довжину, д?апазон ? вм?ст Перев?ряйте дан? як на сторон? кл??нта, так ? на сторон? сервера.Дотримуйтесь посл?довно? стратег?? захищеност? додатка, ?рунтуючись на передовому досв?д? розробки захищених додатк?в.Тестуйте додаток на в?дом? загрози перед його випуском.1.3 Огляд тип?в систем виявлення вторгненьНа тепер?шн?й час ?сну? 26 тип?в систем виявлення вторгнень, що розпод?ляються по типу даних, метод?в ?нтерпретац?? даних, реакц?? на результат та ?ншим характеристикам.Класичне розпод?лення СВВ:Network-based system системи р?вня мереж?.Host-based system – системи р?вня хоста, що виявляють зм?ни у кл??нтському компьютер?, анал?зуючи журнали або мережеву активн?сть. Vulnerability-assessment system – системи, що заснован? на оц?нц? вразливостей.СВВ можливо розц?нювати по наступним признакам задач:Типи даних, що вона збира?.Методи отримання даних.Методи ?нтерпретац?? даних.До несистемних параметр?в в?дносять реакц?ю на отриманий результат:?нформац?йна. Проводиться ?нформування зац?кавлених ос?б.Активна. Проводиться активна д?я, наприклад блокування д?апазону адрес атакуючого чи в?дключення в?д мереж? ?нф?кованного приладу.За ц??ю ознакою системи виявлення вторгнень розпод?ляють на IDS та IPS, але будь яка IDS може бути включена до складу IPS.Розпод?лення по класу даних:Дан? вузл?в мереж?.Дан? по вс?й мереж?.Г?бридна система.Типи вузлових даних – дан?, що збираються т?льки з одного вузла та тих, що з ним вза?мод?ють. Анал?з таких даних в?дпов?да? на питання: ?чи проходить атака на цей хост??. Як правило, ц? дан? зручно збирати безпосередньо на самому вузл?, але це опц?онально. Наприклад, мережев? сканери отримують список в?дкритих порт?в на хост? ззовн? без можливост? запуску коду на хост?.Цей клас даних включа? наступн? типи:Мережева активн?сть.Мережева конф?гурац?я.Дан? о файлах.Дан? о процесах.У даному випадку вузлами можуть бути робоч? станц??, сервери та роутери. Дан? о мереж? дозволяють в?добразити загальну картину вза?мод??. Повн? дан? не збираються в силу ?х надлишковост?.Також можливе збирання траф?ку мереж? та вузл?в. Це змушу? мережевий адаптер працювати в режим? захвату траф?ку. Зазвичай це не передбача?ться у робот? в штатному режим?. ?диний можливий вар?ант – розпод?лений анал?з потоку.По класам метод?в отримання даних вид?ляють:Пасивний. При пасивному виявлен? система спостер?га? за обстановко. Б?льш?сть IDS використовують саме цей клас метод?в. Наприклад, вони не намагаються видалити системний файл з п?д користувача ? перев?рити, що в?н був видалений, а просто оц?нюють в?дпов?дн?сть прав на даний файл, шаблоном в баз?, ? якщо в?дпов?дн?сть не спостер?га?ться, видають попередження. Активний. В даному клас? метод?в помилки провокуються шляхом деяких д?й, як в?домих, так ? нев?домих (fuzzy системи). П?сля цього за базою анал?зу?ться реакц?я на дан? д??. Даний клас метод?в характерний для сканер?в вразливостей.Комб?нований.До переваг активного методу в?дносять:Превентивне виявлення вторгнень.Перев?рка мереж? аналог?чно д?ям атакуючого.До недол?к?в в?дносять:Додаткове навантаження на мережу.Можлив?сть реал?зувати усп?шну атаку в процес? сканування.Залежн?сть в?д бази даних атак, що пост?йно стар??.?люз?я безпеки.1.4 Огляд ?снуючих систем виявлення вторгненьSnort ? класичною IDS р?вня мереж? ? анал?зу? траф?к на зб?г з базою правил (фактично з базою сигнатур). Тобто, дана система шука? в?дом? порушення. Для Snort можливо нескладно реал?зувати св?й модуль. На баз? ц?й СВВ реал?зовано багато комерц?йних проект?в.Кр?м роботи з базою сигнатур, побудована на баз? Snort IDS може мати в сво?му склад? нейромережев?, евристичн? та под?бн? ?м модул? виявлення вторгнень. ?сну? статичний детектор аномал?й AnomalyDetection.Suricata також, як ? Snort ? системою р?вня мереж?, але у дано? системи ? к?лька особливостей:Бази сигнатур повн?стю сум?сн? з SnortВикону?ться оц?нка не лише мережевого чи транспортного р?вня, але працю? ? на р?вн? прикладних протокол?в.Можлив?сть реал?зац?? правил на Lua, що ?стотно розширю? д?апазон можливостей СВВ.Можлив?сть анал?зу траф?ка м?ж двома хостами, а не лише окрем? пакети та з’?днання. ?нтегрована п?дсистема IP reputation дозволя? привласнювати р?вень репутац?? кожному адресу у мереж?.Дана система дозволя? виявляти в?дом? порушення та ма? б?льшу адаптивн?сть з можлив?стю навчання, але р?вень репутац?? адреса пристро?в може зм?нюватись та ?стотно впливати на прийнят? СВВ р?шення.Bro – це платформа для створення IDS р?вня мереж?. ? г?бридною системою, з упором на виявлення в?домих порушень. Працю? на транспортному, мережевому р?вн? ? р?вн? додатк?в. П?дтриму? свою мову сценар??в. Ма? можлив?сть виявлення аномальних повед?нок, невластивих для даного вузла мереж?, наприклад, множинне п?дключення до серв?с?в на р?зних портах. Це реал?зовано на основ? перев?рок переданих даних на нормальн?сть, наприклад, TCP-пакет з ус?ма встановленими прапорами ? п?дозр?лим, не дивлячись на те, що в?н коректний, та на баз? пол?тик, як? описують нормальне функц?онування мереж?.Bro також допомага? при д?агностиц? мережевих проблем.Ця СВВ не робить анал?з траф?ку за ознаками безпосередньо, а оброблю? пакети на ?под??в?й машин??, що перетворю? пот?к пакет?в у сер?ю под?й р?зного р?вня. Дана машина вважа?ться додатковим р?внем абстракц??, що дозволя? в?добразити мережеву активн?сть в нейтральн? в?дносно пол?тик терм?ни. Ц? под?? сигнал?зують про те, що настала деяка аномал?я, але не обробля? цю под?ю оск?льки це завдання ?нтерпретатора пол?тик. Наприклад, под?я http_request, що переда?ться на р?вень анал?зу, в?дпов?да? HTTP з в?дпов?дними параметрами.?нтерпретатор пол?тик викону? сценар?й, встановлюючи обробники под?й. Обробники розраховують статичн? параметри траф?ку, збер?гаючи контекст, а не лише реагують на окремо взятий пакет. Таким чином врахову?ться тимчасова ?стор?я потоку.Принцип роботи ядра СВВ представлений на рисунку 1.2.Рисунок 1.2 – принцип роботи ядра СВВ Bro.СВВ TripWire, OSSEC та Samhain в?дносять до систем р?вня хоста. Вони по?днують в соб? методи виявлення порушень, як? в?дом?, та методи виявлення аномальний под?й.Механ?зм пошуку аномал?й буду?ться на наступному: при ?нсталяц?? СВВ система збер?га? в баз? хеш? системних файл?в з мета?нформац??ю про них. Оновлення пакет?в ОС призводить до перерахування хеш?в.При зм?н? будь-якого спостережуваного файлу СВВ реагу? на аномал?ю.Окр?м спостереження за файлами ОС ц? СВВ спостер?гають за процесами, зв’язками та зм?нами у системних журналах.TripWire, OSSEC та Samhain також використовують бази загроз, яка пост?йно оновлю?ться. Ц? СВВ мають централ?зований ?нтерфейс, який дозволя? анал?зувати дан? на багатьох вузлах одночасно.Приклад роботи OSSEC зображений на рисунку 1.3.Рисунок 1.3 – приклад роботи OSSECСВВ Prelude SIEM та OSSIM в?дносять до г?бридних систем типу SIEM Security information and event management. Ц? системи по?днують сенсорну мережу та анал?затор аномал?й, що п?двищу? р?вень безпеки експоненц?ально завдяки багаточисельним механ?змам захисту.Системи легко масштабуються та сум?сн? з багатьма ?снуючими СВВ за форматом даних IDMEF, що представлений на рисунку 1.4.Рисунок 1.4 – формат пов?домлень IDMEF1.5 Огляд ?снуючих СВВ на основ? нейронних мережейУ роботах Мустафа?ва [12], Жигул?на ? Подворчан [16], Halenar [17] використовують багатошаровий перцептрон, навчений на баз? атак KDD.В робот? Haibo Zhang [13] ? сп?вавтор?в використовують нейронну мережу з вейвлет-перетвореннями.Min-Joo Kang [14] ? сп?вавтори використовують глибоке навчання виявлення аномал?й у бортовий платформ? м?кроконтролера автомоб?ля. Талалаев ? сп?вавтори [18] використовують рециркулярну нейромережу та метод головних компонент для звуження простору ключових ознак. П?сля цього використовують двошаровий перцептрон та карти Кохонена.Балахонцев ? сп?вавтори [10] використовують тришаровий перцептрон.Корн?в ? Пильк?н [15] вказують на ефективн?сть застосування дек?лькох багатошарових перцептрон?в, одношарових детектор?в нормального стану та г?бридн? нейромереж?, що складаються з перцептрону та карт Кохонена.Компан?я DeepInstinct використову? р?шення з глибоким навчанням нейромереж? з вчителем. 1.6 Теор?ко-?гров? п?дходи забезпечення мережево? безпекиТеоретико-?гров? методи знайшли широке застосування в задачах проектування систем виявлення вторгнень [4, 5]. При цьому питання протид?? атакам, спрямованим на саму СОВ, не отримали належного досл?дження з позиц?? теор?? ?гор. В даний час до таких атак в?дносять [6]: надстимуляц?? - створення велико? к?лькост? патерн?в, що генерують помилков? сигнали системи виявлення вторгнень, що призводить до перевантаження обробник?в под?й; DoS-атаку на перевантаження сенсор?в або упов?льнення алгоритму, який перев?ря? патерни.Розвиток сучасних мережевих технолог?й супроводжу?ться п?двищенням вимог до забезпечення приватност? обробки ?нформац?? ?, як насл?док, передбача? ?стотну модерн?зац?ю нормативно-методолог?чно? бази ? стандарт?в управл?ння ?нформац?йною безпекою. Тим часом в цих документах зазнача?ться, що в ряд? випадк?в методи управл?ння системами захисту ?нформац??, ор??нтован? на застосування к?льк?сних оц?нок, все ще не мають достатньо розвиненого математичного апарату для ?х об?рунтування. У роботах останн?х рок?в простежу?ться тенденц?я розширення наявних математичних п?дход?в до об?рунтування параметр?в систем захисту за рахунок застосування метод?в теор?? ?гор до вир?шення завдань забезпечення безпеки мережевих технолог?й, в тому числ? управл?ння ?нформац?йною безпекою[5, 7, 8].Застосовуван? теоретико-?гров? п?дходи до вир?шення завдань ?нформац?йно? безпеки умовно можна розд?лити на 2 класи[6, 9]:один клас (позначимо А) опису? вза?мод?ю ?напад - захист?, пророкуючи д?? нападник?в ? визначаючи в?дпов?дн? д?? захисту;другий (В) дозволя? отримувати к?льк?сн? оц?нки р?вня захисту ?нформац?йно? системи шляхом передбачення д?й нападник?в ? захисту.У клас? А можна вид?лити два п?дкласу ?гор - А1 ? А2:гри п?дкласу А1 дозволяють досл?джувати вза?мод?ю ?напад - захист? в загальних випадках (гри зазвичай ведуться двома гравцями - ?нападником? ? ?того, хто захища?ться?, ? у кожного з них ? всього по два можливих д??: { ?нападати?, ?не зд?йснювати будь д?й?} ? { ?захищатися", "не зд?йснювати жодних д?й?} в?дпов?дно); в п?дклас? А2 розглядаються б?льш складн? сценар?? нападу ? захисту, спец?ал?зован? п?д конкретн? ситуац?йн? параметри (прикладом таких параметр?в можуть бути властивост? мереж?, в як?й зд?йсню?ться вза?мод?я). ?гри п?дкласу А1 часто ? статичними ?грами з двома гравцями, або ?грами з неповною ?нформац??ю. Переваги ?гор п?дкласу А2 в ?х б?льшо? реал?стичност? ? кращому опис? динам?ки вза?мод?? ?нападника? ? ?того, хто захища?ться?, але отримання висновк?в про ?правильному? повед?нц? учасник?в вимага? значних обсяг?в обчислень, а р?шення в ряд? випадк?в може не волод?ти достатньою точн?стю.П?дходи до оц?нки р?вня ?нформац?йно? безпеки використовують в якост? вх?дних даних передбачуван? стратег?? нападаючо? ? захища?ться стор?н. По?днання ?дей таких п?дход?в з в?домими теоретико-?гровими методами призвело до появи класу В ?гор, ор??нтованих на отримання оц?нок ? анал?з р?вня захищеност? комп'ютерних систем.Теоретико-?гров? методи знайшли широке застосування в задачах проектування систем виявлення вторгнень.1.7 Висновок до розд?луСучасн? системи прагнуть не т?льки виконувати вузьке завдання виявлення вторгнень, але ? допомагати в д?агностиц? несправност? мереж, реал?зовуючи як методи пошуку аномал?й, так ? методи виявлення порушень.До складу комплексних систем входять розпод?лен? по мереж? сенсори в активному та пасивному режим?. На даних сенсор?в, якими можуть бути повноц?нн? IDS, центральний корелятор анал?зу? загальний стан мереж?.Це зб?льшу? обсяг та розм?рн?сть даних, що п?длягають обробц?.В л?тератур?, в основному, розглянут? нейромережев? методи, заснован? на перцептронах, або картах Кохонена. ? не заповнена н?ша у вигляд? розробок, на баз? останн?х досл?джень, що стосуються змагальних або розгорткових нейроних мереж. Хоча ц? методи добре себе зарекомендували в сум?жних областях, де потр?бно складний анал?з.Явно спостер?га?ться розрив м?ж потребами ринку та пропозиц??ю у вигляд? ?снуючих р?шень. Тому, ма? сенс проводити досл?дження в даному напрямку.РОЗД?Л 2 ОГЛЯД МЕТОД?В МОДЕЛЮВАННЯ СЦЕНАР??В ЗАРАЖЕННЯ МЕРЕЖ?2.1 Можлив? типи атаки.Оглядаючи динам?ку атак за р?внями, видно, що з мережевого та транспортного р?вня у 90-2000х роках, вони зм?щуються у б?к прикладного р?вня.Ран?ше популярними типами атак були Ping of the Death, IP Spoofing, SYN flood або ARP cache poison, а зараз нижн?й р?вень почина?ться десь в район? DNS.Атаки типу ?н’?кц?й коду, як? зустр?чаються усе р?дше, атакуючи перейшли до XSS та CSRF, що дозволяють отримати обл?ков? дан? чи виконувати неавторизован? запити на серверах всередин? мереж.Кроссайтовий скриптинг закритий у б?льшост? фрейморк?в для web-api, але на сьогодн? в?н залиша?ться найпопулярн?шим типом атаки.Активних оберт?в набира? ?стара? атака на Active Directory або на SMB.Експло?ти застар?лих верс?й ПЗ на даний час особливо опасн? в силу поширеност? баз даних вразливостей.Окремо варто вид?лити DoS атаки, як? як правило, проводяться на конкретний сервер.Колись вони могли реал?зовуватися на транспортному р?вн? (наприклад, SYN Flood) ? нижче, тепер же, найчаст?ше реал?зуються на прикладному у вигляд? DDoS.Розглядати лише атаки мережевого р?вня було б на?вно в силу того, що не ма? значення як саме буде зд?йснений DoS. Для зд?йснення майже будь-яко? атаки потр?бне знання про мереж? (приклад, коли не потр?бно: ф?зичне в?дключення сегмента, - ? то тут треба бути впевненим, що канал зв'язку ?з зовн?шн?м св?том т?льки один). Це знання можливо отримати прямо або поб?чно (крад?жкою даних про тополог??, наприклад). Пряме отримання даних про мережу та ?? вузлах зд?йсню?ться за рахунок сканування.Сканування п?дрозд?ля?ться на наступн? типи:Пошук вузл?в мереж? за допомогою сканування д?апазону адрес.Виявлення серв?с?в, що надаються вузлом, за допомогою сканування д?апазону порт?в.Виявлення вузл?в, що надають послуги, наприклад посилаючи широкомовн? запити.Сканування д?апазону адрес може бути по?днане з? скануванням порт?в для пошуку серв?с?в, як? можуть виявитися уразливими.Сканування може проводитися "на?вним методом", наприклад використовуючи посилку ICMP ping. Але може бути замасковано.Приклад маскування - посилка TCP SYN на зазначен? порти без подальшого встановлення з'?днання.Як правило, сучасн? IDS можуть в?дловити обидва вар?анти. Маскування сканування також може зд?йснюватися рознесенням його на тривалий час, або виконанням з дек?лькох вузл?в.Кр?м сканування, тополог?я мереж? може бути визначена менш точно, але б?льш приховано:Виявленням вузл?в, що розсилають широкомовн? запити. Виявити таке практично неможливо: машина працю? в звичайному режим?.Прослуховуванням траф?ку. Може бути виявлено, кр?м того сучасн? тополог?? мереж перешкоджають дан?й атац? (ф?зична загальна шина майже не використову?ться).До тип?в атак р?вня мереж? в?дносять:В?дмова в обслуговуванн?: DoS / DDoS.Перехоплення управл?ння.Несанкц?оноване отримання даних користувача. Як пасивне, так ? активне.Сканування п?дрозд?ля?ться на:Пошук вузл?в: n вузл?в в?дправлятимуть m вузл?в под?бн? запити. При цьому, я вважаю, що вузол не в?дправлятиме запит сам соб?.Пошук серв?с?в вузла: n вузл?в звертаються до m вузл?в на p порт?в.Перший вар?ант атаки прост?ше виявити мережевий IDS: траф?к сканування буде пом?тний, якщо в?н компактно розташований в час?.В ?ншому випадку, сл?д використовувати методи слабо чутлив? до тимчасових розрив?в.Другий вар?ант найпрост?ше виявити за використанням даних, отриманих безпосередньо з вузла.2.2 Класиф?кац?я к?берзагрозПершим кроком в класиф?кац?? к?берзагроз ? под?л атак на два п?дтипи: ф?зичн? атаки на р?вн? вза?мод?? з пристро?м ? його обладнанням та атаки на р?вн? ?нформац?? з використанням програмного забезпечення.Несправност? пристро?в при ф?зичному втручанн? зазвичай виконуються шляхом створення нестандартних умов для самого пристрою. П?д такими умовами розум??ться несправн?сть пристрою методами вза?мод?? з технолог?ями генерац?? рад?очастотних хвиль або звичайною зам?ною ?дентиф?катор?в для зчитування [10] [11].Класиф?кац?я атак може бути зроблена шляхом вказ?вки характеристик к?бератак. Розр?зняють так? характеристики: характер вза?мод??, ц?л? вза?мод??, умова початку атаки, наявн?сть зворотного зв'язку в?д об'?кта атаки, м?сце розташування щодо об'?кта атаки.Розр?зняють за характером к?берзагрози на пасивн? ? активн?. При активному тип? порушник викону? д??, пов'язан? з? зм?нами в потоц? даних. У пасивних атаках шк?дливий код розм?щу?ться, наприклад, в ?нтернет?, ? порушник спод?ва?ться, що жертва викона? шк?дливий код незалежно в?д неуважност?.За ц?лями вза?мод?? вид?ляють загрози, спрямован? на порушення конф?денц?йност?, ц?л?сност? або доступност? ?нформац??.По типу ?н?ц?ювання вид?ляють безумовн? ? умовн?. Атака на запит жертви може вважатися продовженням пасивно? атаки. П?сля переходу на шк?дливий ресурс в?дбува?ться ?добров?льний? запуск шк?дливого коду. Атака без вивчення систем захисту жертви ? безумовною. Атака на основ? умов викону?ться на основ? визначення ступеня усп?шност? атаки.Якщо ?сну? об'?кт зворотного зв'язку, його можна розд?лити на атаки з? зворотним зв'язком ? односторонн? атаки.Одним з основних фактор?в, що лежать в основ? атаки, ? м?сцезнаходження суб'?кта атаки, тому вони розр?зняють зовн?шн? ? внутр?шн? атаки. При внутр?шньо? атац? зловмисник може в?дразу ж ув?йти в систему, наприклад як сп?вроб?тник компан??, або мати доступ до внутр?шньо? мереж? з самого початку. У зовн?шнього порушника необх?дно спочатку пройти зовн?шн?й захист (рис. 2.1).Рисунок 2.1 – Класиф?кац?я к?берзагрозАтаки можна розд?лити на в?с?м клас?в за уразливими м?сцями операц?йно? системи:?Соц?альна ?нженер?я? - атака, спрямована на введення в оману жертви;?Запозичення прав? - атака, метою яко? ? захоплення прав авторизованих користувач?в;?Використання? - використання вразливостей програмного забезпечення або операц?йно? системи;?В?дносна (оманлива) дов?ра? - використання дов?ри в мережах або сайтах;?Атаки управл?ння даними? - використання троян?в, в?рус?в або черв'як?в;?Уразлив?сть ?нфраструктури? - використання особливостей стандарт?в, специф?кац?й;?В?дмова в обслуговуванн?? - атака, спрямована на запоб?гання використання системи;?Чарод?йство? - це нев?дома атака, яка не була розшифрована або ран?ше заф?ксована.Рисунок 2.2 – Класи атак за уразливими м?сцямиХарактер к?берзагроз в б?льшост? випадк?в визнача?ться класом атаки ? ?? спрямован?стю. Часто одна атака може в?двол?кати в?д ?ншо? атаки. Найб?льш поширеними атаками в ?нтернет?, а також найпрост?шими ? одночасно ефективними серед метод?в зараження пристро?в ? атаки сторонн?х розповсюджувач?в програмного забезпечення [3], як? використовуються, наприклад, для майн?нга криптовалюти, створення бот-мереж. , збору ?нформац??.2.3 Методи розповсюдження к?берзагрозПодальший розгляд метод?в к?берзагроз не ма? сенсу без розум?ння арх?тектури мереж. Теор??ю граф?в опишемо принцип по?днання прилад?в у мереж?. На рисунку 2.3 зображен? типи з’?днаних пристро?в.Рисунок 2.3 – Типи з’?днаних мереж пристро?вДо базових тополог?й мереж в?дносять наступн? типи:Шина.З?рка.К?льце.Пох?дними в?д них ?:Подв?йне к?льце.Реш?тка.Дерево.Сн?жинка.Пов’язаний граф.Ц? типи в?дносяться до локальних та глобальних мереж. За технолог?ями п?дключення мереж под?ляють наступн? види атак, що зображен? на рисунку 2.4:Рис. 2.4 – Технолог?? п?дключення мереж ? розповсюдження в?рус?в2.3 Визначення основних етап?в к?берзагрозПланування ? реал?зац?я к?бератак склада?ться з дек?лькох етап?в:Зб?р ?нформац?? о систем? (рис. 2.4) Зараження пристрою, який ? метою к?бератак (рис. 2.6). Етап ман?пуляц?? з даними та досягнення мети зараження мереж? наста? п?сля вдалго зараження пристрою, що зображен на рисунку 2.5Рисунок 2.4 - Етап розв?дки. Зб?р ? анал?з ?нформац??Рисунок 2.5 - Етап розповсюдження атакиРисунок 2.6 - Етап ?нф?кування пристрою чи мереж?2.5 Висновок до розд?луБ?льш?сть з представлених атак легко маскуються п?д звичайну активн?сть мереж?, але цю спробу маскування можливо виявити та ?нтерпретувати як спробу атаки на мережу. Прикладом ? робота антив?русу: техн?ка маскування розп?зна?ться як впроваджена в процес активн?сть, що вважа?ться шк?дливою.Деяк? атаки на хост розп?знають по зм?н? споживання ресурс?в. Запуск додаткового коду веде до п?двищення споживання пам’ят?, зб?льшенню частоти звертання до диску та використання CPU. Ц? аспекти не маскують в силу ?х незначного впливу, однак при ураженн? велико? к?лькост? вузл?в можливо вид?лити характерн? патерни атаки.Найчаст?ше хост почина? нетипову активн?сть, наприклад звернення до сайт?в, доменн? ?мена яких не розбиваються на словник ?мен або ма? високу ентроп?ю щодо ?нормальних? ?мен. На сторон? вузла дана активн?сть усп?шно маску?ться, але ?? легко пом?ча? мережева СВВ.РОЗД?Л 3 ОПИС ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ3.1. Виб?р та анал?з датасету програмного продуктуУ якост? первинного датасету для навчання детектору СВВ використан NSL-KDD з ресурсу як популярн?ший датасет для навчання СВВ. З множини параметр?в датасету використан? наступн? при навчанн? та тестуванн? роботи системи виявлення вторгнень:duration – тривал?сть з’?днання у секундахprotocol_type тип протоколу (TCP, UDP та ?нш?.).service – мережева служба одержувача пов?домлення (HTTP, TELNET, HTTPS та ?нш?).flag .стан з’?днання.src_bytes – число байт, що були в?дправлен? до одержувача в?д джерела пов?домлення.dst_bytes – число байт, що були в?дправлен? в?д одержувача до джерела пов?домлення.land – прийма? значення в1 якщо з’?днання проходить по ?дентичним портам, 0 ?накше.wrong_fragment – к?льк?сть помилкових чи пошкоджених пакет?в.urgent к?льк?сть пакет?в з флагом URG.ID protocol тип протоколу, що асоц?ю?ться з с пакетом.Source port номер порту в?дправника TCP/UDP пакету.Destination port номер порту одержувача TCP/UDP пакету.Source Address IP адреса в?дправника.Destination Address IP адрес одержувача.ICMP type тип ICMP пакету.Length of data transferred розм?р пакету даних у байт.FLAGS прапори заголовку протоколу.TCP window size розм?р TCP в?кна.3.2 Виб?р та анал?з арх?тектури системи виявлення вторгненьДля пошуку аномал?й використову?ться кластер?зац?я даних мережево? активност?. Як правило, цю задачу вир?шують за допомогою систем Кохонена з самоорган?зац??ю. Цей п?дх?д вносить додатков? проблеми:Необх?дн?сть завдання числа кластер?в.Необх?дн?сть перенавчання СВВ при зм?н? тополог?? мереж?.Для вир?шення цих проблем був використаний нейромережевий алгоритм кластер?зац??.Для виявлення факту атаки СВВ вчиться в режим? нормально? роботи мереж? протягом деякого часу. На даному етап? утворюються дек?лька кластер?в даних, що характеризують нормальну працю правильно налаштовано? мереж?.? дек?лька вар?ант?в виявлення атак:Навчання СВВ на даних, що надходять. У раз? появи аномал?й зм?ню?ться структура та к?льк?сть кластер?в.Надання даних навчено? нейромереж? ? перев?рка наск?льки близько вони п?дходять до одного з кластер?в.Перший випадок да? можлив?сть виявити аномальну повед?нку у комп’ютерн?й мереж? при зм?н? к?лькост? кластер?в та по динам?ц? швидкост? створення та видалення нових нейрон?в чи зв’язк?в. Другий п?дх?д дозволя? виявити аномал?? по в?дхиленню значення нових вим?р?в в?д середнього в?дносно даних, на яких навчалась СВВ.У мережевих алгоритмах розрахунок динам?ки виконати майже неможливо: на кожн?й ?терац?? мережа може зм?нювати к?льк?сть нейрон?в та зв’язк?в, а деяк? алгоритми видаляють деяку ф?ксовану к?льк?сть нейрон?в на кожн?й ?терац??.Зм?на к?лькост? кластер?в не ? над?йним показником для СВВ. Навчання мереж? в процес? виявлення аномальн?й може призвести до перенавчання.Для над?йност? у дан?й робот? використову?ться вар?ант з вим?ром в?дхилень.Основними алгоритмами для реал?зовано? СВВ ? GNG та IGNG. GNG або нейронний газ – це адаптивний алгоритм нейронно? мереж?, натхненний самоорган?зац?йною картою Кохонена, що направлений на оц?нку щ?льност? розпод?лення даних. В прост?р даних впроваджують нейрони, котр? при робот? алгоритму п?длаштовують розташування.Нейронний газ не використову? г?потезу про стац?онарн?сть даних, що дозволя? приймати не ф?ксований масив даних, а функц?ю, залежну в?д часу.Умовн? позначення:x – зразок даних;W – матриця з положенням нейрон?в розм?ром не б?льше н?ж β×d, де β – максимальна к?льк?сть нейрон?в, d – вектор розм?ром не б?льший н?ж β;error – вектор розм?ром не б?льший н?ж β;nwinner – швидк?сть навчання нейрона-переможця;nneighbour – швидк?сть навчання сус?д?в нейрона-переможця;αmax – максимальний в?к зв’язку м?ж нейронами;λ – пер?од м?ж ?терац?ями створення нових нейрон?в;α – показник згасання накопичених помилок при створенн? нових нейрон?в;γ – згасання помилок на кожн?й ?терац??;E – к?льк?сть епох.Основн? кроки алгоритму, що виконуються до зб?жност?:?дентиф?кувати вектор x.Знайти два найближчих до x , де s найближчий нейрон, t наступний за ним.Накопичити в масив? помилок в?дстань в?д ноди до ?дентиф?кованого вектору даних:errors←errors+ws-xОновити м?сце розташування s та вс?х нейрон?в, що з’?днан? з ним ребрами, використовуючи р?зн? швидкост? навчання:ws←ws+nwinner(x-ws)wn←wn+nneighbourx-wn, ?wnЗб?льшити в?к вс?х дуг, що виходять з нейрона sЯкщо s та t вже з’?днан? дугою прийняти в?к ц??? дуги за 0, ?накше необх?дно створити дугу з в?ком 0 м?ж ними.Видалити ус? дуги, якщо ?х в?к перевищу? αmax.Видалити ус? ноди, з котрих не виходять н?як? дуги.Якщо поточна ?терац?я д?литься λ на без залишку та к?льк?сть нод не досягла максимального значення β, то необх?дно:Знайти нейрон u з найб?льшою накопиченою помилкою.Знайти нейрон v з найб?льшою накопиченою помилкою серед сус?д?в u.Створити нову ноду м?ж u та v:wr ←wu+ wv2Створити ребра м?ж u r та v r видалити ребро u – v.Зменьшити помилки нейрон?в u та v передати новому нейрону частину цих помилок:erroru←a×erroruerrorv←a×errorverrorr←a×erroru2Зменшити вектор помилок:error←γ×errorОсновн? принципи алгоритму IGNG полягають у наступному: Використання мереж? адаптивного резонансу. Проводиться пошук найближчого нейрону на первинному етап?. Якщо р?зниця не перевищу? деякий пор?г – корегу?ться вага, ?накше проводиться зм?на координати нейрона у простор? даних. Якщо пор?г не був подоланий, то створюються нов? нейрони, що краще наближають значення ?дентиф?кованих даних.Нейрони також мають параметр в?ку, на в?дм?нн?сть в?д GNG, де цей параметр притаманний лише дугам.Новий нейрон не ? активним деякий час. Якщо етап навчання мереж? зак?нчився, то нов? неактивн? нейрони не приймають участ? у кластер?зац??.Цикл роботи алгоритму почина?ться з пустого графу. Параметр σ ?дентиф?ку?ться як середньоквадратичне в?дхилення по навчальн?й виб?рц?:σ=1Ni=1N(xi-x)2Параметр x – середн? м?ж координатами по виб?рц?.Основний цикл зменшу? значення σ, що ? порогом близькост?, та розрахову? р?зницю м?ж попередн?м р?внем якост? кластер?зац?? та р?внем, який отримали у результат? кластер?зац?? процедурою IGNG. Як?сть кластер?зац?? знаходять за ?ндексом CHI – чим б?льшим ? це значення, тим краще. Якщо р?зниця м?ж ?ндексами п?сля кластер?зац?? та до не? буде негативною – кластер?зац?я виконана усп?шно. Алгоритм ма? три вза?мовиключних етапи:Не знайдено жодного нейрону.Знайдено один нейрон, що задовольня? умовам.Знайдено два нейрона, що задовольняють умовам.П?сля виконання одного з цих етап?в ?нш? не виконуються.На першому кроц? викону?ться пошук нейрона, що найкраще наближу? семпл даних:c1=min?(dist(ξ,wc)Якщо не було знайдено жодного задовольняючого умов? dist(ξ,wc)≤σ нейрона – створюють новий неактивний нейрон з координатами семплу у простор? даних. Якщо такий нейрон було знайдено, то проводиться пошук другого нейрону аналог?чним чином. Якщо його нема? – в?н створю?ться.Якщо знайдено два нейрона, що задовольняють умовам, ?х координати корегуються наступним чином:?thc, ci=?b, якщо c=ci?n,якщо ? зв'язок c ci0, у ?нших випадках?wc= ?thc, ciξ-wcwc=wc+?wcДе: ?t – шаг адаптац??.ci – номер нейрона.hc, ci – функц?я сус?дства нейрона c з переможцем. Вона верта? 1 для прямих сус?д?в, або 0 у ?нших випадках. Це означа?, що шаг адаптац?? w не ? нульовим лише для прямих сус?д?в.На наступному кроц? створю?ться чи оновлю?ться дуга м?ж нейронами-переможцями, а в?к ус?х ?нших дуг зроста?.Видаляють ус? дуги, якщо ?х в?к перевищу? αmax.Видалються ус? активн? нейрони, з котрих не виходять н?як? дуги, а в?к ус?х нейрон?в-сус?д?в нейрона-переможця зроста?.Якщо в?к неактивного нейрона перевищу? agemature, в?н становиться активним.Остаточний граф включа? лише активн? нейрони.Основною перевагою IGNG над GNG ? висока швидк?сть навчання та обробки даних ц?ною точност? кластер?зац??.3.3 Програмне забезпечення для системи виявлення вторгнень СВВ реал?зована за допомогою мови програмування Python. Висока швидк?сть написання коду, зручна обробка великих об’?м?в ?нформац?? та легка в?зуал?зац?я процесу кластер?зац?? завдяки Mayavi стали основними причинами вибору мови програмування.Точкою входу ? функц?я main (), яка встановлю? параметри ? виклика? функц?ю test_detector (). У функц?? test_detector () попередньо завантажуються дан? для навчання детектора.Для навчання використову?ться метод train (), що виклика?ться на р?зних наборах даних, використовуючи метод detect_anomalies ().Вс? дан? завантажуються функц??ю read_ids_data ().Функц?я чита? дан? з бази NSL-KDD з використанням стандартного модуля csv. Як? дан? будуть прочитан?: нормальн?, аномальн? або повн?, зада?ться параметром activity_type.Також функц?я, якщо було запрошено, може згенерувати активн?сть хост?в, викликавши generate_host_activity (), ? додати отриман? дан? до даних мереж?. Функц?я поверта? ненормал?зований масив Numpy.П?сля повернення з функц??, дан? будуть нормал?зован?, використовуючи функц?ю normalize () модуля preprocessing б?бл?отеки Scikit-Learn. Дал?, вся робота проводиться т?льки з нормал?зованими даними.П?сля обробки даних буду?ться ненаправлений граф як об’?кт класу Graph б?бл?отеки NetworkX через виклик функц?? create_data_graph ().Цей граф потр?бен т?льки для в?зуал?зац??.Дан? передаються у конструктор класу детектора. У конструктор? дан? запам'ятовуються у внутр?шн?й атрибут класу ? створю?ться порожн?й граф, в який будуть додаватися нейрони ? зв'язку.Основним класом детектора ? GNG або IGNG, в залежност? в?д реал?зованого алгоритму. Ц? класи ? спадко?мцями абстрактного класу NeuralGas, в якому реал?зован? загальн? методи.У метод? train () багаторазово виклика?ться метод кластер?зац?? ? пер?одично збер?га?ться картинка з в?зуал?зац??ю через виклик методу __save_img ().Методу кластер?зац?? передають одне з? значень, що представля? собою наб?р координат точки даних в багатовим?рному простор?.П?сля отримання ц??? точки метод кластер?зац?? вибира? найб?льш близьк? нейрони внутр?шнього графа, який був створений в конструктор?, ?, якщо вони не задов?льн?, створю? нов? нейрони ? зв'язку.У метод? __save_img () для формування картинки використовуються функц?? draw_dots3d (), або draw_graph3d (), який виклика?ться два рази: спочатку для в?дтворення даних, пот?м для в?дтворення нейронно? мереж? поверх даних. В?зуал?зац?я реал?зована за допомогою б?бл?отеки Mayavi ? основний виклик, який малю? точки - це mayavi.points3d ().Приклад кластер?зац?? на мал?й п?дмножин? з використанням алгоритму GNG зображений на рисунках 3.1 та 3.2. Незначний обсяг п?дмножини обумовлений наочн?стю демонстрац?? зб?жност? алгоритму. Рисунок 3.1 Кластер?зац?я алгоритмом GNG на 700 ?терац?? Рисунок 3.2 Кластер?зац?я алгоритмом GNG на 4500 ?терац??Протокол реал?зовано? СВВ з використанням алгоритму GNG на тестов?й виб?рц? зображений на рисунку 3.3 для 2152 запис?в з даними в?д host.Рисунок 3.3 – Результат роботи GNG на тестов?й виб?рц? у 2152 запис?в 3.4 Висновки ? анал?з результат?в системи виявлення вторгень.Прототип ? однопотоковим та пов?льним. Його навчання на великих виб?рках займа? досить багато часу, а розпод?л результат?в в?дпов?да? маленьк?й виб?рц?. На першому етап? декодер навчався на навчальн?й виб?рц?. П?сля цього в?н був застосований до виб?рц?, на як?й в?н навчався.Навчений декодер був застосован до повно? виб?рки з аномальними даними та то? множини, з яко? побудована навчальна виб?рка.Аналог?чн? д?? застосован? до тестових даних.Завдан? параметри: К?льк?сть крок?в: 7000.Нормальних запис?в навчально? виб?рц?: 516.Аномальних запис?в навчально? виб?рц?: 495.Нормальних запис?в тестово? виб?рц?: 2152.Аномальних запис?в тестово? виб?рц?: 9698.Повний розм?р тестово? виб?рц?: 11850.Умовн? позначення:l_time - Час навчання в секундах.te_l_time - Час перев?рки в секундах на набор?, з якого була сформована навчальна виб?рка.te_t_time - Час перев?рки в секундах на повному набор? даних тестово? виб?рки.g_l_perc - В?дсоток знайдених аномал?й для повного набору, з якого була сформована навчальна виб?рка.g_t_perc - В?дсоток знайдених аномал?й для повного набору даних тестово? виб?рки.f_l_perc - В?дсоток помилкових спрацьовувань для повного набору, з якого була сформована навчальна виб?рка.f_t_perc - В?дсоток помилкових спрацьовувань для повного набору даних тестово? виб?рки.Результати пошуку аномал?й представлен? у таблиц? 3.1.Таблиця 3.1 – результати роботи СВВТипl_timete_l_timete_t_timeg_l_percg_t_percf_l_percf_t_percGNG без host 18690.394.6169.578.4036.9GNGз host18390.424.7260.272.5047.7IGNG без host5511.0211.9722.226.8017.3IGNGз host5671.1413.3428.927.0020.8Основн? висновки щодо роботи СВВ:Додатков? поля не впливають значно на швидк?сть навчання детектора СВВ. На вс?х тестових даних детектори показали нульову к?льк?сть помилкових спрацювань.IGNG у поточн?й реал?зац?? працю? значно г?рше GNG. Можливо, це вплив п?д?браних коеф?ц??нт?в.Детектор на основ? GNG працю? задов?льно.3.6 Вза?мод?я СВВ ? атакуючого Розгляда?ться наступна вза?мод?я системи виявлення вторгнень ? атакуючого.Нехай Ω - безл?ч спостережуваних об'?кт?в, кожному з яких з?ставлено безл?ч в?дсл?дковуються параметр?в Iω∈Ω.Кожна атака ? посл?довн?стю крок?в. Кожен крок породжу? певний вид активност?, що виявля?ться СВВ. П?сля першо? активност?, яку СВВ розп?знала як п?дозр?лу, зд?йсню?ться спроба передбачити подальш? кроки передбачуваного зловмисника ? розширю?ться безл?ч Iω∈Ω спостережуваних параметр?в. Дал? СВВ спостер?га? розширений список параметр?в протягом деякого пер?оду часу tm. Позначимо Jω∈Ω безл?ч додаткових параметр?в спостереження. До виявлення п?дозр?ло? активност? система виявлення вторгнень спостер?га? базовий наб?р критичних параметр?в. де f - середн?й ваговий коеф?ц??нт, що визнача? ц?ну одного спостережуваного параметра, k - к?льк?сть спостережуваних пар ?об'?кт - параметр?, а S (t) - ц?на додаткових ресурс?в [10].Атакуючий форму? свою стратег?ю на основ? наступного безл?ч? д?й: {?Завершити атаку?; ?Продовжити без паузи?; ?Зробити паузу на деякий пер?од часу?}.У раз? якщо вузлова СВВ виявля? атаку або ж зловмисник вир?шу? припинити напад, виграш для системи виявлення атаки буде α [8]. В ?ншому випадку його значенням буде -α. Атакуючий може належати одному з двох тип?в залежно в?д сво?х ц?лей: проведення атаки на мережу або ж на саму СВВ. Перший тип стретег?? нада? виграш β в раз? усп?шно? атаки, ?накше -β. Z(t) - варт?сть паузи для атакуючого, яку, так само як ? у випадку з СВВ, для простоти приймемо л?н?йно залежить в?д часу:Z (t) = gt,де g - ваговий коеф?ц??нт, який визнача? варт?сть одиничного пер?оду паузи. В?дпов?дна першого типу атакуючих [8]:СВВ та атакуючий зд?йснюють виб?р на безл?ч? з д?й, зазначених ран?ше[8]. У таблиц? 3.2 представлен? результати одного раунду. Таблиц? 3.3 ? 3.4 показують стратег?? гравц?в.Д?? СВВ ? атакуючого вибираються зг?дно р?вноваги Неша. Одночасно з метою пор?вняння для кожного сценар?ю був п?драхований в?дпов?дний обсяг ресурс?в для традиц?йно? реал?зац?? СВВ.Таблиця 3.2 – Результати першо? ?терац?? гриТаблиця 3.3. – Стратег?я атакуючогоТаблиця 3.4. – Стратег?я СВВ3.7. Висновок до розд?луУ процес? тестування модел? була створена база знань CВB, що склада?ться з 10 сценар??в атаки. Стратег??, заснован? на ньому, в?др?зняються одна в?д одно? як за об'?ктами ? параметрами для мон?торингу, так ? за значенням m t. Кожен сценар?й був реал?зований 100 раз?в, а результати в?дображають середн? значення ц?ни та в?дсотка виявлення. Д?? СВВ та нападника обиралися в?дпов?дно до р?вноваги Неша. У той же час для пор?вняння для кожного сценар?ю була розрахована в?дпов?дна к?льк?сть ресурс?в для традиц?йного впровадження СВВ, що ма? 95-в?дсоткову точн?сть.К?льк?сть ресурс?в, необх?дних для традиц?йно? реал?зац??, у багато раз?в перевищу? запропонований п?дх?д. З ?ншого боку, точн?сть виявлення дещо поступа?ться нормальн?й реал?зац??, але, тим не менше, дозволя? використовувати таку ?грово-теоретичну оптим?зац?ю в системах з обмеженими ресурсами. Як подальше досл?дження, перспективним напрямком буде реал?зац?я можливост? автоматичного вибору часу мон?торингу, наприклад, шляхом введення рефлекс?? в модель.РОЗД?Л 4 РОЗРОБКА СТАРТАП-ПРОЕКТУ4.1 Опис ?де? проектуNICSS – це продукт у сфери ?нформац?йно? безпеки, що моделю? комп’ютерну мережу п?дпри?мства, можлив? та поточн? сценар?? ?? зараження та розрахову? оптимальн? сценар?? протид?? зараженню. До ?нших важливих п?дпроект?в належать shellcode арх?в, пов'язан? з проектом досл?дження, проведення CTF, незалежного аудиту безпеки та п?дготовчих курс?в.Основною м?с??ю проекту ? вдосконалення ?снуючих та створення нових засоб?в захисту конф?денц?йних даних.Основною метою проекту ? навчання висококвал?ф?кованих кадр?в, що надають перевагу ПЗ NICSS.Необх?дний обсяг ?нвестиц?й становить 4.7 тис. дол. З них:1500$ для оренди хмарного серверного обладнання Amazon.700$ початку рекламно? компан?? на спец?ал?зованих форумах.2000$ для реклами у google ads.500$ для друку навчальних матер?ал?в.Початок реал?зац?? та поширення безкоштовно? верс??: 29.09.2019Початок продажу коммерц?йно? верс??:7.01.2020.Оч?куваний терм?н окупност?: 18 м?сяц?в.Оч?куваний терм?н повернення вкладених кошт?в:4.2 Опис товаруNICSS – ?нструмент для моделювання мереж? за заданими параметрами, так? як типи та к?льк?сть вузл?в, арх?тектура мереж?, початков? парметри зараження, властивост? IDS або IPS, якщо вони використовуються. Основн? в?дм?нност? NICSS в?д конкурент?в:Абстрактн?сть модел?. Для моделювання достатньо лише знати базов? властивост? мереж?.В?дносно висока швидк?сть розрахунк?в, що дозволя? використовувати ПЗ з? сканерами вразливостей у реальному часу. Можлив?сть використання хмарних потужностей для прискорення сценарних тест?в або анал?зу мережевих вразливостей.До додаткових послуг, що надаються NICSS BB Project, в?дносяться:Проведення аудиту безпеки командою NICSS Ltd.Проведення CTF-змагань з використанням NICSS.В?дкриття тестов?й лаборатор??.Продаж ?нформац?йно-анал?тично? л?тератури.Техн?чне обслуговування кл??нт?в командою NICSS BB Project.Курси п?двищення квал?ф?кац??.Основним конкурентом ? ком'юн?т? Offensive Security ? Metasploit Project.4.3 Анал?з ринкових можливостей запуску стартап-про?ктуВизначена за результатами експертно? оц?нки м?стк?сть ринку встановить 27500 користувач?в, з яких 17% ? спец?ал?стами з ?Б.Середня варт?сть додаткових послуг з навчання встановить 1400$.Середня варт?сть придбання ПЗ встановить 2300$ для комерц?йного використання. Приблизна м?стк?сть ринку встановить 10 700 000$ без врахування надання додаткових послуг.Ступ?нь насиченост? ринку нульова ? на найближчу перспективу оч?ку?ться зростання ?мкост? ринку, темпи якого перевищуватимуть темпи насичення. Оч?кувана в перспектив? ?мн?сть ринку оц?ню?ться приблизно у 15?000 000$.Таблиця 5.1 - Запланован? м?н?мальн? обсяги продаж?в та доходи в?д реал?зац?? на 2019-20 р?к (?нфляц?я не врахову?ться)КварталIII 2019pIV 2019pI 2020pII 2020pIII 2020pIV 2020pРазомОбсяг продажу ПЗ00357733Ц?на, $/коп?я001500200020002000-Дох?д, тис $004.510141442.2Ком?с?йн?,%1%1%1%1%1%1%1%Прибуток, тис $002.979.9913.8613.8641.78Таблиця 5.2 Запланован? м?н?мальн? обсяги продаж?в та доходи в?д реал?зац?? на 2021-22 р?к (?нфляц?я не врахову?ться)КварталI-II 2021pII-IV 2021pI-II 2022pIII-IV 2022pРазомОбсяг продажу ПЗ1515172269Ц?на, $/коп?я1500200020002000-Дох?д, тис $22.5303444130.5Ком?с?йн?,%1%1%1%1%1%Прибуток, тис $22.729.733.643.5129.5Таблиця 5.4 Запланован? м?н?мальн? обсяги продаж?в та доходи в?д реал?зац?? на 2022-23 р?к(?нфляц?я не врахову?ться)КварталI-II 2022pII-IV 2022pI-II 2023pIII-IV 2023pРазомОбсяг продажу ПЗ1515172269Ц?на, $/коп?я1500200020002000-Дох?д, тис $22.5303444130.5Ком?с?йн?,%1%1%1%1%1%Прибуток, тис $22.729.733.643.5129.5Таблиця 5.3 Запланован? м?н?мальн? обсяги продаж?в та доходи в?д реал?зац?? на 2023-24 р?к (?нфляц?я не врахову?ться)КварталI-II 2023pII-IV 2023pI-II 2024pIII-IV 2024pРазомОбсяг продажу ПЗ1515172269Ц?на, $/коп?я1500200020002000-Дох?д, тис $22.5303444130.5Ком?с?йн?,%1%1%1%1%1%Прибуток, тис $22.729.733.643.5129.5Таким чином оч?куванний м?н?мальний прибуток в?д виведення на ринок NICSS становить 42000$ на 2020 р?к та 430000$ на 5 рок?в.4.4 Оц?нка конкурент?вЕдиний конкурент, що постача? ПЗ з схожим функц?оналом ? Metasploit. За оц?нками експерт?в спад на попит прогнозу?ться на трет?й квартал 2021 року в зв’язку з моральним стар?нням технолог?й. Частка ринку, що належить конкурентам, становить 80%, що з урахуванням запланованих об?сяг?в продажу 430000$ за 5 рок?в не встановить серйозно? загрози. Ц?на л?ценз?йно? коп?? на р?к, нов?тн? технолог??, хмарн? обчислення та зручний функц?онал для побудов? зв?т?в нада? явну перевагу перед головним конкурентом. Таблиця 5.4 Пор?вняльн? характеристики NICSS та MetasploitПор?вняльн? характеристикиNICSSMetasploitВ?дом?стьВ?дсутняВисокаВитрати на рекламуВисок?Середн?Середня ц?на л?ценз?? на р?к2000$5000$Швидк?сть виконання тест?вВисока завдяки хмаршим обчисленням.Залежить в?д конф?гурац?? користувача. Зазвичай низька.Як?сть виконання тест?вНе залежить в?д попереднього анал?зу ?ншими засобами .ВисокаЗалежить в?д попереднього анал?зу системи ?ншими засобами. Задов?льнаЗручн?сть формування зв?т?вПрисутн?й влаштованний шаблон?затор. Задов?льна.Коммерц?йна верс?я не передбача?.Модульн?стьТакТакДумка покупц?вВ?дсутняПозитивна В ц?лому, шанси стати монопол?стом низьк?, але значна конкурентоспроможн?сть за рахунок якост? послуг та ц?ни нада? змогу зайняти нишу.4.5 План маркетингуПри виведенн? на ринок нового серв?су “ NICSS ”, команда “ NICSS BB Project” ма? обмежен? можливост? у формуванн? та використанн? елемент?в комплексу маркетингу. Оск?льки команда ма? складну IT-?нфраструктуру основним завданням ста? в?дпов?дна техн?чна п?дтримка користувач?в та системи, масштабування ПЗ та створення лаборатор??.Основн? пункти, що виносятся на аутсорс “ NICSS Ltd”:Найм фах?ц?в техн?чно? п?дтримки 1-2 л?н??.Найм додаткових розробник?в ПЗ для створення модульно? системи.Найм фах?вц?в з ?Б.Основн? пункти, що вир?шуються “ NICSS BB Project”:Створення тестово? лаборатор??.Створення внутр?шньо? БД експлойт?в.Створення умов для проведення CTF.Маркетингова стратег?я: Оск?льки продукт ? новим р?шенням на ринку з ч?тким монопол?стом, що морально застар?в, необх?дно залучити нових користувач?в, використовуючи community верс?ю ПЗ, що передбача? деяк? функц?ональн? обмеження. Випуск ПЗ для комерц?йного використання сп?впадатиме з проведенням CTF та в?дкриттям тестово? лаборатор??. Розповсюдження ?нформац?? о ПЗ “ NICSS ” почнеться з? стартом рекламно? компан?? CTF на тематичних форумах, що п?двищить конверс?ю користувач?в-аматор?в та заохочить спец?ал?ст?в. Допуск до тестово? лаборатор?? стане можливим лише використовуючи “NICSS”.Ц?нова стратег?я:Оск?льки основним и найголовн?шими кл?ентами для “ NICSS BB Project” ? спец?ал?сти з ?Б та аудиторськ? компан??, ц?нова пол?тика сформована таким чином щоб забезпечити в?дпов?дну техн?чну на консультативну п?дтримку кл?ент?в на високому р?вн?, залишаючи незначний % прибутку на покриття витрат на розвиток продукту.Протягом 2019 року витрати на реал?зац?ю заход?в плану маркетингу становлять 38100$, як? будут покрит? лише у IV квартал? 2020 року. В подальшому маркетингов? витрати становлять 120900$/р?к, як? повн?стю покриваються прибутком в?д п?дтримки м?н?мального числа користувач?в.Таблиця 5.5 Маркетингова стратег?я на 2019-20 рЗаходВиконанняВарт?сть виконанняВитрати у? 2019рВитрати з 2020рНайм фах?ц?в техн?чно? п?дтримки 1-2 л?н??.Використання услуг аутсор-компан?й. Найм 5 спец?ал?ст?в за 3 м?с до рел?зу.560$/м?с на 1фах?вця8400$33600$Найм додаткових розробник?в ПЗ для створення модульно? системи.Використання услуг аутсор-компан?й. Найм 3 спец?ал?ст?в.1000$/м?с на 1фах?вця18000$36000$К?нец таблиц? 5.5ЗаходВиконанняВарт?сть виконанняВитрати у?2019рВитрати з 2020рНайм фах?вц?в з ?Б.Використання услуг аутсор-компан?й. Найм спец?ал?ст?в.1300$/м?с на 1фах?вця23400$46800Створення тестово? лаборатор??.Внутр?шн?й проект “NICSS BB Project”. Придбання обладнання3000$.3000$3000$Створення умов для проведення CTF.Внутр?шн?й проект “NICSS BB Project”1500$.1500$1500$Разом:381001209004.6. Виробнич?й планСпециф?ка д?яльност? компан?? передбача? запровадження додаткових технолог?чних та орган?зац?йних процесс?в, як? були розкрит? у попередн?х розд?лах. Для в?зуал?зац?? процесу була створена Canvas модель:Рисунок 5.1 Canvas модель 4.7 Ф?нансовий планРорозрахунок доход?в, витрат та ф?нансових результат?в при виведенн? на ринок ПЗ “NICSS” наведен? у таблицях 8-9. Таблиця 5.6 Додатков? доходи, витрати та ф?нансов? результати компан?? у 2019-2020 роках при виведенн? на ринок ПЗ “NICSS”Квартал 2019-2020 рокуIIIIVIIIIIIIVРазомДодатков? доходи0029709990138601386041780Додатков? витрати184002910029100291002910029100163900Ф?нансовий результат-18400-29100-26130-19110-15240-15240-123220Накопичуваний п?дсумок-18400-47500-73630-93740-107980-123220-123220 Таблиця 5.7 Додатков? доходи, витрати та ф?нансов? результати магазину на найближч? 5 рок?в (без урахування ?нфляц??), $Р?к20192020202120222023РазомДодатков? доходи 041780129500129500129500430280Додатков? витрати 4750057320573205732057320276780Ф?нансовий результат -47500-155405,54 56640728001535004.8 ВисновкиВ даному розд?л? було повн?стю виконано перший етап розроблення стартап-проекту, а саме, виконано маркетинговий анал?з стартап-проекту. За допомогою нього можна сказати, що ?сну? можлив?сть ринково? комерц?ал?зац?? проекту при терм?н? окупност? у 18 м?сяц?в та вартост? проекту в 63040$.Потенц?йний ринок кл??нт?в не ? переповненим, тому ?новац?йн?йсть технолог?? та р?шення мають велику перспективу впровадження.Для ринково? реал?зац?? достатньо створити MVP та впровадити його у дек?лька орган?зац?й малого б?знесу. ВИСНОВКИУ маг?стерський дисертац?? розглянута тема моделювання атаки на мережу п?д наглядом системи виявлення вторгнень. Актуальн?сть задач? поляга? у недосконалост? ?снуючих систем виявлення вторгнень, в?дсутност? досл?джень на тему моделювання атак на СВВ. Метою дисертац?? була розробка системи моделювання атак на мережу та системи протид?? цим атакам.Перший розд?л присвячений огляду ?снуючих р?шень забезпечення мережево? безпеки. Недол?ки поточних систем та швидк?сть розвитку нових тип?в к?бератак вплинули на виб?р метод?в, що найкраще п?дходять для задач?, що поставлена в рамках ц??? роботи. Також розглянут? деяк? з актуальних напрямк?в розробки систем виявлення вторгнень та найпоширен?ш? типи атак. Другий розд?л присвячений моделюванню сценар??в к?берзагроз з вид?ленням основних етап?в при приведенн? атаки на мережу.Трет?й розд?л присвячений практичн?й реал?зац?? програмного продукту. Проведений глибокий анал?з датасету для мереж? з виявленням ключових для дано? розробки параметр?в. Проведено пор?вняльний анал?з основних та в?дносно нових алгоритм?в нейромережево? кластер?зац??. Реал?зован? алгоритми нейронного газу та ?нкрементального нейронного газу з додатковим модулем створення аномал?й для комп’ютерно? мереж?. Проанал?зован? результати роботи на даному етап? та виявлен? основн? переваги та недол?ки поточно? реал?зац??, а саме пов?льн?сть навчання СВВ, однопоточн?сть та незадов?льн? результати IGNG. Для подальшого покращення результат?в роботи системи необх?дно розширити можлив?сть навчання через honeypot, оптим?зувати алгоритм роботи IGNG та GNG, можливо, використовуючи Fast-GNG.П?сля створення СВВ було проведено моделювання р?зних сценар??в атаки на не?. Зг?дно р?вноваги Неша атакуючий та система виявлення вторгнень приймали р?шення щодо подальших д?й. Виявлен? основн? переваги та недол?ки поточно? реал?зац??, а саме – низька ц?на роботи СВВ в пор?внянн? з класичними системами, швидк?сть прийняття р?шень програмним продуктом та задов?льна ефективн?сть роботи системи. У подальшому можлива ще б?льша оптим?зац?я ресурс?в шляхом додавання рефлекс?? до модел? при вибор? часу роботи, оптим?зац?я само? СВВ та ?? навчання на даних, з?браних з honeypot.ПЕРЕЛ?К ПОСИЛАНЬDavid Reinsel, John Gantz, John Rydning. The Digitization of the World URL?. Vulnerability statistic report. Junuary 2019. URL:? Axelsson. Intrusion Detection Systems:A Survey and Taxonomy. Chalmers University of Technology G ?oteborg, Sweden. 14 March 2000. URL:?. Garvey, T.F. Lunt, Model-based Intrusion Detection. Proceeding of the 14 th Nation computer security conference. Baltimore, MD, October 1991.Захарченко А. Черводинамика: причины и следствия. Защита информации. Конфидент, 2004. № 2, С. 50–55. Zou C., Gao L., Gong W., Towsley D. Monitoring and early warning for Internet worms. ACM Conference on Computer and Communications Security(CCS'03). Washington, DC, October 2003. P. 190–199. Chen Z., Gao L., Kwiat K. Modeling the spread of active worms. IEEE INFOCOM 2003. P. 1890–1900. URL:? 2003/papers/ 46_03.PDFLeveille J. Epidemic spreading in technological networks. Technical Report HPL-2002-287, HP Laboratories Bristol, October 2002. 100 p. URL:? J. R. C., Navarro B. F., Monteiro L. H. A. Epidemiological models applied to viruses in computer networks. Journal of Computer Science. 2005. Vol. 1, No. 1. P. 31–34. Williamson M. M., Leveille J. An epidemiological model of virus spread and cleanup. Proceeding of Virus Bulletin Conference, Toronto, Canada. 11 p. URL:?Боршевников А. Е. Сетевые атаки. Виды. Способы борьбы Современные тенденции технических наук: материалы. М?жнародна наукова конференц?я. М. Уфа, жовтень 2011. URL:? Parveen. Neural networks in cyber security. URL:?Мустафаев А.Г. Нейросетевая система обнаружения компьютерных атак на основе анализа сетевого трафика. URL:? Zhang, Qing Huang, Fangwei Li, Jiang Zhu. A network security situation prediction model based on wavelet neural network with optimized parameters.. URL:? Kang, Je-Won Kang. Intrusion Detection System Using Deep Neural Network for In-Vehicle Network Security. URL:?"Д.К. Левоневский, Р.Р. Фаткиева. Разработка системы обнаружения аномалий сетевого трафика. URL:? Igor, Juhasova Bohuslava, Juhas Martin, Nesticky Martin. Application of Neural Networks in Computer Security. URL:?Талалаев А.А., Тищенко И.П., Фраленко В.П., Емельянова Ю.Г. Нейросетевая технология обнаружения сетевых атак на информационные ресурсы. URL:? Reddy. Neural Networks for Intrusion Detection. URL:?Балахонцев А.Ю., Сидорик Д.В., Сидоревич А.Н., Якутович М.В. Нейросетевая система для обнаружения атак в локальных вычислительных сетях. URL:?ДОДАТОК А Л?СТИНГ ПРОГРАМИ#!/usr/bin/env python3# -*- coding: utf-8 -*-from abc import ABCMeta, abstractmethodfrom copy import copyfrom mayavi import mlabimport operatorimport imageiofrom collections import OrderedDictfrom scipy.spatial.distance import euclideanfrom sklearn import preprocessingimport csvimport numpy as npimport networkx as nximport reimport osimport shutilimport sysimport globfrom future.utils import iteritemsimport timedef sh(s): sum = 0 for i, c in enumerate(s): sum += i * ord(c) return sumdef create_data_graph(dots): """Create the graph and returns the networkx version of it 'g'.""" count = 0 g = nx.Graph() for i in dots: g.add_node(count, pos=i) count += 1 return gdef get_ra(ra=0, ra_step=0.3): while True: if ra >= 360: ra = 0 else: ra += ra_step yield radef shrink_to_3d(data): result = [] for i in data: depth = len(i) if depth <= 3: result.append(i) else: sm = np.sum([(n) * v for n, v in enumerate(i[2:])]) if sm == 0: sm = 1 r = np.array([i[0], i[1], i[2]]) r *= sm r /= np.sum(r) result.append(r) return preprocessing.normalize(result, axis=0, norm='max')def draw_dots3d(dots, edges, fignum, clear=True, title='', size=(1024, 768), graph_colormap='viridis', bgcolor=(1, 1, 1), node_color=(0.3, 0.65, 0.3), node_size=0.01, edge_color=(0.3, 0.3, 0.9), edge_size=0.003, text_size=0.14, text_color=(0, 0, 0), text_coords=[0.84, 0.75], text={}, title_size=0.3, angle=get_ra()): # # numpy array of x, y, z positions in sorted node order xyz = shrink_to_3d(dots) if fignum == 0: mlab.figure(fignum, bgcolor=bgcolor, fgcolor=text_color, size=size) # Mayavi is buggy, and following code causes sockets leak. #if mlab.options.offscreen: # mlab.figure(fignum, bgcolor=bgcolor, fgcolor=text_color, size=size) #elif fignum == 0: # mlab.figure(fignum, bgcolor=bgcolor, fgcolor=text_color, size=size) if clear: mlab.clf() # the x,y, and z co-ordinates are here # manipulate them to obtain the desired projection perspective pts = mlab.points3d(xyz[:, 0], xyz[:, 1], xyz[:, 2], scale_factor=node_size, scale_mode='none', color=node_color, #colormap=graph_colormap, resolution=20, transparent=False) mlab.text(text_coords[0], text_coords[1], '\n'.join(['{} = {}'.format(n, v) for n, v in text.items()]), width=text_size) if clear: mlab.title(title, height=0.95) mlab.roll(next(angle)) mlab.orientation_axes(pts) mlab.outline(pts) """ for i, (x, y, z) in enumerate(xyz): label = mlab.text(x, y, str(i), z=z, width=text_size, name=str(i), color=text_color) label.property.shadow = True """ pts.mlab_source.dataset.lines = edges tube = mlab.pipeline.tube(pts, tube_radius=edge_size) mlab.pipeline.surface(tube, color=edge_color) #mlab.show() # interactive windowdef draw_graph3d(graph, fignum, *args, **kwargs): graph_pos = nx.get_node_attributes(graph, 'pos') edges = np.array([e for e in graph.edges()]) dots = np.array([graph_pos[v] for v in sorted(graph)], dtype='float64') draw_dots3d(dots, edges, fignum, *args, **kwargs)def generate_host_activity(is_normal): # Host loads is changed only in 25% cases. attack_percent = 25 up_level = (20, 30) # CPU load in percent. cpu_load = (10, 30) # Disk IO per second. iops = (10, 50) # Memory consumption in percent. mem_cons = (30, 60) # Memory consumption in Mb/s. netw_act = (10, 50) cur_up_level = 0 if not is_normal and np.random.randint(0, 100) < attack_percent: cur_up_level = np.random.randint(*up_level) cpu_load = np.random.randint(cur_up_level + cpu_load[0], cur_up_level + cpu_load[1]) iops = np.random.randint(cur_up_level + iops[0], cur_up_level + iops[1]) mem_cons = np.random.randint(cur_up_level + mem_cons[0], cur_up_level + mem_cons[1]) netw_act = np.random.randint(cur_up_level + netw_act[0], cur_up_level + netw_act[1]) return cpu_load, iops, mem_cons, netw_actdef read_ids_data(data_file, activity_type='normal', labels_file='NSL_KDD/Field Names.csv', with_host=False): selected_parameters = ['duration', 'protocol_type', 'service', 'flag', 'src_bytes', 'dst_bytes', 'land', 'wrong_fragment', 'urgent', 'serror_rate', 'diff_srv_rate', 'srv_diff_host_rate', 'dst_host_srv_count', 'count'] # "Label" - "converter function" dictionary. label_dict = OrderedDict() result = [] with open(labels_file) as lf: labels = csv.reader(lf) for label in labels: if len(label) == 1 or label[1] == 'continuous': label_dict[label[0]] = lambda l: np.float64(l) elif label[1] == 'symbolic': label_dict[label[0]] = lambda l: sh(l) f_list = [i for i in label_dict.values()] n_list = [i for i in label_dict.keys()] if activity_type == 'normal': data_type = lambda t: t == 'normal' elif activity_type == 'abnormal': data_type = lambda t: t != 'normal' elif activity_type == 'full': data_type = lambda t: True else: raise ValueError('`activity_type` must be "normal", "abnormal" or "full"') print('Reading {} activity from the file "{}" [generated host data {} included]...'. format(activity_type, data_file, 'was' if with_host else 'was not')) with open(data_file) as df: # data = csv.DictReader(df, label_dict.keys()) data = csv.reader(df) for d in data: if data_type(d[-2]): # Skip last two fields and add only specified fields. net_params = tuple(f_list[n](i) for n, i in enumerate(d[:-2]) if n_list[n] in selected_parameters) if with_host: host_params = generate_host_activity(activity_type != 'abnormal') result.append(net_params + host_params) else: result.append(net_params) print('Records count: {}'.format(len(result))) return resultclass NeuralGas: __metaclass__ = ABCMeta def __init__(self, data, surface_graph=None, output_images_dir='images'): self._graph = nx.Graph() self._data = data self._surface_graph = surface_graph # Deviation parameters. self._dev_params = None self._output_images_dir = output_images_dir # Nodes count. self._count = 0 if os.path.isdir(output_images_dir): shutil.rmtree('{}'.format(output_images_dir)) print("Output images will be saved in: {0}".format(output_images_dir)) os.makedirs(output_images_dir) self._start_time = time.time() @abstractmethod def train(self, max_iterations=100, save_step=0): raise NotImplementedError() @property def number_of_clusters(self): return nx.number_connected_components(self._graph) @property def clusters(self): return nx.connected_components(self._graph) def detect_anomalies(self, data, threshold=5, train=False, save_step=100): anomalies_counter, anomaly_records_counter, normal_records_counter = 0, 0, 0 anomaly_level = 0 start_time = self._start_time = time.time() for i, d in enumerate(data): risk_level = self.test_node(d, train) if risk_level != 0: anomaly_records_counter += 1 anomaly_level += risk_level if anomaly_level > threshold: anomalies_counter += 1 #print('Anomaly was detected [count = {}]!'.format(anomalies_counter)) anomaly_level = 0 else: normal_records_counter += 1 if i % save_step == 0: tm = time.time() - start_time print('Abnormal records = {}, Normal records = {}, Detection time = {} s, Time per record = {} s'. format(anomaly_records_counter, normal_records_counter, round(tm, 2), tm / i if i else 0)) tm = time.time() - start_time print('{} [abnormal records = {}, normal records = {}, detection time = {} s, time per record = {} s]'. format('Anomalies were detected (count = {})'.format(anomalies_counter) if anomalies_counter else 'Anomalies weren\'t detected', anomaly_records_counter, normal_records_counter, round(tm, 2), tm / len(data))) return anomalies_counter > 0 def test_node(self, node, train=False): n, dist = self._determine_closest_vertice(node) dev = self._calculate_deviation_params() dev = dev.get(frozenset(nx.node_connected_component(self._graph, n)), dist + 1) dist_sub_dev = dist - dev if dist_sub_dev > 0: return dist_sub_dev if train: self._dev_params = None self._train_on_data_item(node) return 0 @abstractmethod def _train_on_data_item(self, data_item): raise NotImplementedError() @abstractmethod def _save_img(self, fignum, training_step): """.""" raise NotImplementedError() def _calculate_deviation_params(self, distance_function_params=None): if self._dev_params is not None: return self._dev_params clusters = {} dcvd = self._determine_closest_vertice dlen = len(self._data) #dmean = np.mean(self._data, axis=1) #deviation = 0 for node in self._data: n = dcvd(node) #, **distance_function_params) cluster = clusters.setdefault(frozenset(nx.node_connected_component(self._graph, n[0])), [0, 0]) cluster[0] += n[1] cluster[1] += 1 clusters = {k: np.sqrt(v[0]/v[1]) for k, v in clusters.items()} self._dev_params = clusters return clusters def _determine_closest_vertice(self, curnode): """.""" pos = nx.get_node_attributes(self._graph, 'pos') kv = list(zip(*pos.items())) distances = np.linalg.norm(kv[1] - curnode, ord=2, axis=1) i0 = np.argsort(distances)[0] return kv[0][i0], distances[i0] def _determine_2closest_vertices(self, curnode): """Where this curnode is actually the x,y index of the data we want to analyze.""" pos = nx.get_node_attributes(self._graph, 'pos') l_pos = len(pos) if l_pos == 0: return None, None elif l_pos == 1: return pos[0], None kv = list(zip(*pos.items())) # Calculate Euclidean distance (2-norm of difference vectors) and get first two indexes of the sorted array. # Or a Euclidean-closest nodes index. distances = np.linalg.norm(kv[1] - curnode, ord=2, axis=1) i0, i1 = np.argsort(distances)[0:2] winner1 = tuple((kv[0][i0], distances[i0])) winner2 = tuple((kv[0][i1], distances[i1])) return winner1, winner2class IGNG(NeuralGas): """Incremental Growing Neural Gas multidimensional implementation""" def __init__(self, data, surface_graph=None, eps_b=0.05, eps_n=0.0006, max_age=7, a_mature=1, output_images_dir='images'): """.""" NeuralGas.__init__(self, data, surface_graph, output_images_dir) self._eps_b = eps_b self._eps_n = eps_n self._max_age = max_age self._a_mature = a_mature self._num_of_input_signals = 0 self._fignum = 0 self._max_train_iters = 0 # Initial value is a standard deviation of the data. self._d = np.std(data) def train(self, max_iterations=100, save_step=0): """IGNG training method""" self._dev_params = None self._max_train_iters = max_iterations fignum = self._fignum self._save_img(fignum, 0) CHS = self.__calinski_harabaz_score igng = self.__igng data = self._data if save_step < 1: save_step = max_iterations old = 0 calin = CHS() i_count = 0 start_time = self._start_time = time.time() while old - calin <= 0: print('Iteration {0:d}...'.format(i_count)) i_count += 1 steps = 1 while steps <= max_iterations: for i, x in enumerate(data): igng(x) if i % save_step == 0: tm = time.time() - start_time print(f'Training time = {round(tm, 2)} s, ' + f'Time per record = {tm / (i if i and i_count == 0 else len(data))} s ' + f'Training step = {i_count} / {max_iterations}, ' + f'Clusters count = {self.number_of_clusters}, ' + f'Neurons = {len(self._graph)}, CHI = {old - calin}' ) self._save_img(fignum, i_count) fignum += 1 steps += 1 self._d -= 0.1 * self._d old = calin calin = CHS() print('Training complete, clusters count = {}, training time = {} s'.format(self.number_of_clusters, round(time.time() - start_time, 2))) self._fignum = fignum def _train_on_data_item(self, data_item): steps = 0 igng = self.__igng # while steps < self._max_train_iters: while steps < 5: igng(data_item) steps += 1 def __long_train_on_data_item(self, data_item): """.""" np.append(self._data, data_item) self._dev_params = None CHS = self.__calinski_harabaz_score igng = self.__igng data = self._data max_iterations = self._max_train_iters old = 0 calin = CHS() i_count = 0 # Strictly less. while old - calin < 0: print('Training with new normal node, step {0:d}...'.format(i_count)) i_count += 1 steps = 0 if i_count > 100: print('BUG', old, calin) break while steps < max_iterations: igng(data_item) steps += 1 self._d -= 0.1 * self._d old = calin calin = CHS() def _calculate_deviation_params(self, skip_embryo=True): return super(IGNG, self)._calculate_deviation_params(distance_function_params={'skip_embryo': skip_embryo}) def __calinski_harabaz_score(self, skip_embryo=True): graph = self._graph nodes = graph.nodes extra_disp, intra_disp = 0., 0. # CHI = [B / (c - 1)]/[W / (n - c)] # Total numb er of neurons. #ns = nx.get_node_attributes(self._graph, 'n_type') c = len([v for v in nodes.values() if v['n_type'] == 1]) if skip_embryo else len(nodes) # Total number of data. n = len(self._data) # Mean of the all data. mean = np.mean(self._data, axis=1) pos = nx.get_node_attributes(self._graph, 'pos') for node, k in pos.items(): if skip_embryo and nodes[node]['n_type'] == 0: # Skip embryo neurons. continue mean_k = np.mean(k) extra_disp += len(k) * np.sum((mean_k - mean) ** 2) intra_disp += np.sum((k - mean_k) ** 2) return (1. if intra_disp == 0. else extra_disp * (n - c) / (intra_disp * (c - 1.))) def _determine_closest_vertice(self, curnode, skip_embryo=True): """Where this curnode is actually the x,y index of the data we want to analyze.""" pos = nx.get_node_attributes(self._graph, 'pos') nodes = self._graph.nodes distance = sys.maxsize for node, position in pos.items(): if skip_embryo and nodes[node]['n_type'] == 0: # Skip embryo neurons. continue dist = euclidean(curnode, position) if dist < distance: distance = dist return node, distance def __get_specific_nodes(self, n_type): return [n for n, p in nx.get_node_attributes(self._graph, 'n_type').items() if p == n_type] def __igng(self, cur_node): """Main IGNG training subroutine""" # find nearest unit and second nearest unit winner1, winner2 = self._determine_2closest_vertices(cur_node) graph = self._graph nodes = graph.nodes d = self._d # Second list element is a distance. if winner1 is None or winner1[1] >= d: # 0 - is an embryo type. graph.add_node(self._count, pos=copy(cur_node), n_type=0, age=0) winner_node1 = self._count self._count += 1 return else: winner_node1 = winner1[0] # Second list element is a distance. if winner2 is None or winner2[1] >= d: # 0 - is an embryo type. graph.add_node(self._count, pos=copy(cur_node), n_type=0, age=0) winner_node2 = self._count self._count += 1 graph.add_edge(winner_node1, winner_node2, age=0) return else: winner_node2 = winner2[0] # Increment the age of all edges, emanating from the winner. for e in graph.edges(winner_node1, data=True): e[2]['age'] += 1 w_node = nodes[winner_node1] # Move the winner node towards current node. w_node['pos'] += self._eps_b * (cur_node - w_node['pos']) neighbors = nx.all_neighbors(graph, winner_node1) a_mature = self._a_mature for n in neighbors: c_node = nodes[n] # Move all direct neighbors of the winner. c_node['pos'] += self._eps_n * (cur_node - c_node['pos']) # Increment the age of all direct neighbors of the winner. c_node['age'] += 1 if c_node['n_type'] == 0 and c_node['age'] >= a_mature: # Now, it's a mature neuron. c_node['n_type'] = 1 # Create connection with age == 0 between two winners. graph.add_edge(winner_node1, winner_node2, age=0) max_age = self._max_age # If there are ages more than maximum allowed age, remove them. age_of_edges = nx.get_edge_attributes(graph, 'age') for edge, age in iteritems(age_of_edges): if age >= max_age: graph.remove_edge(edge[0], edge[1]) # If it causes isolated vertix, remove that vertex as well. #graph.remove_nodes_from(nx.isolates(graph)) for node, v in nodes.items(): if v['n_type'] == 0: # Skip embryo neurons. continue if not graph.neighbors(node): graph.remove_node(node) def _save_img(self, fignum, training_step): """.""" title='Incremental Growing Neural Gas for the network anomalies detection' if self._surface_graph is not None: text = OrderedDict([ ('Image', fignum), ('Training step', training_step), ('Time', '{} s'.format(round(time.time() - self._start_time, 2))), ('Clusters count', self.number_of_clusters), ('Neurons', len(self._graph)), (' Mature', len(self.__get_specific_nodes(1))), (' Embryo', len(self.__get_specific_nodes(0))), ('Connections', len(self._graph.edges)), ('Data records', len(self._data)) ]) draw_graph3d(self._surface_graph, fignum, title=title) graph = self._graph if len(graph) > 0: #graph_pos = nx.get_node_attributes(graph, 'pos') #nodes = sorted(self.get_specific_nodes(1)) #dots = np.array([graph_pos[v] for v in nodes], dtype='float64') #edges = np.array([e for e in graph.edges(nodes) if e[0] in nodes and e[1] in nodes]) #draw_dots3d(dots, edges, fignum, clear=False, node_color=(1, 0, 0)) draw_graph3d(graph, fignum, clear=False, node_color=(1, 0, 0), title=title, text=text) mlab.savefig("{0}/{1}.png".format(self._output_images_dir, str(fignum))) #mlab.close(fignum)class GNG(NeuralGas): """Growing Neural Gas multidimensional implementation""" def __init__(self, data, surface_graph=None, eps_b=0.05, eps_n=0.0006, max_age=15, lambda_=20, alpha=0.5, d=0.005, max_nodes=1000, output_images_dir='images'): """.""" NeuralGas.__init__(self, data, surface_graph, output_images_dir) self._eps_b = eps_b self._eps_n = eps_n self._max_age = max_age self._lambda = lambda_ self._alpha = alpha self._d = d self._max_nodes = max_nodes self._fignum = 0 self.__add_initial_nodes() def train(self, max_iterations=10000, save_step=50, stop_on_chi=False): """.""" self._dev_params = None self._save_img(self._fignum, 0) graph = self._graph max_nodes = self._max_nodes d = self._d ld = self._lambda alpha = self._alpha update_winner = self.__update_winner data = self._data CHS = self.__calinski_harabaz_score old = 0 calin = CHS() start_time = self._start_time = time.time() train_step = self.__train_step for i in range(1, max_iterations): tm = time.time() - start_time print(f'Training time = {round(tm, 2)} s, ' + f'Time per record = {tm / len(data)} s ' + f'Training step = {i} / {max_iterations}, Clusters count = {self.number_of_clusters}, ' + f'Neurons = {len(self._graph)}' ) for x in data: update_winner(x) train_step(i, alpha, ld, d, max_nodes, True, save_step, graph, update_winner) old = calin calin = CHS() # Stop on the enough clusterization quality. if stop_on_chi and old - calin > 0: break print(f'Training complete, clusters count = {self.number_of_clusters}, ' + f'training time = {round(time.time() - start_time, 2)} s') def __train_step(self, i, alpha, ld, d, max_nodes, save_img, save_step, graph, update_winner): g_nodes = graph.nodes # Step 8: if number of input signals generated so far if i % ld == 0 and len(graph) < max_nodes: # Find a node with the largest error. errorvectors = nx.get_node_attributes(graph, 'error') node_largest_error = max(errorvectors.items(), key=operator.itemgetter(1))[0] # Find a node from neighbor of the node just found, with a largest error. neighbors = graph.neighbors(node_largest_error) max_error_neighbor = 0 max_error = -1 for n in neighbors: ce = g_nodes[n]['error'] if ce > max_error: max_error = ce max_error_neighbor = n # Decrease error variable of other two nodes by multiplying with alpha. new_max_error = alpha * errorvectors[node_largest_error] graph.nodes[node_largest_error]['error'] = new_max_error graph.nodes[max_error_neighbor]['error'] = alpha * max_error # Insert a new unit half way between these two. self._count += 1 new_node = self._count graph.add_node(new_node, pos=self.__class__.__get_average_dist(g_nodes[node_largest_error]['pos'], g_nodes[max_error_neighbor]['pos']), error=new_max_error) # Insert edges between new node and other two nodes. graph.add_edge(new_node, max_error_neighbor, age=0) graph.add_edge(new_node, node_largest_error, age=0) # Remove edge between old nodes. graph.remove_edge(max_error_neighbor, node_largest_error) if True and i % save_step == 0: self._fignum += 1 self._save_img(self._fignum, i) # step 9: Decrease all error variables. for n in graph.nodes(): oe = g_nodes[n]['error'] g_nodes[n]['error'] -= d * oe def _train_on_data_item(self, data_item): """IGNG training method""" np.append(self._data, data_item) graph = self._graph max_nodes = self._max_nodes d = self._d ld = self._lambda alpha = self._alpha update_winner = self.__update_winner data = self._data train_step = self.__train_step #for i in xrange(1, 5): update_winner(data_item) train_step(0, alpha, ld, d, max_nodes, False, -1, graph, update_winner) def _calculate_deviation_params(self): return super(GNG, self)._calculate_deviation_params() def __add_initial_nodes(self): """Initialize here""" node1 = self._data[np.random.randint(0, len(self._data))] node2 = self._data[np.random.randint(0, len(self._data))] # make sure you don't select same positions if self.__class__.__is_nodes_equal(node1, node2): raise ValueError("Rerun ---------------> similar nodes selected") self._count = 0 self._graph.add_node(self._count, pos=node1, error=0) self._count += 1 self._graph.add_node(self._count, pos=node2, error=0) self._graph.add_edge(self._count - 1, self._count, age=0) @staticmethod def __is_nodes_equal(n1, n2): return len(set(n1) & set(n2)) == len(n1) def __update_winner(self, curnode): """.""" # find nearest unit and second nearest unit winner1, winner2 = self._determine_2closest_vertices(curnode) winner_node1 = winner1[0] winner_node2 = winner2[0] win_dist_from_node = winner1[1] graph = self._graph g_nodes = graph.nodes # Update the winner error. g_nodes[winner_node1]['error'] += + win_dist_from_node**2 # Move the winner node towards current node. g_nodes[winner_node1]['pos'] += self._eps_b * (curnode - g_nodes[winner_node1]['pos']) eps_n = self._eps_n # Now update all the neighbors distances. for n in nx.all_neighbors(graph, winner_node1): g_nodes[n]['pos'] += eps_n * (curnode - g_nodes[n]['pos']) # Update age of the edges, emanating from the winner. for e in graph.edges(winner_node1, data=True): e[2]['age'] += 1 # Create or zeroe edge between two winner nodes. graph.add_edge(winner_node1, winner_node2, age=0) # if there are ages more than maximum allowed age, remove them age_of_edges = nx.get_edge_attributes(graph, 'age') max_age = self._max_age for edge, age in age_of_edges.items(): if age >= max_age: graph.remove_edge(edge[0], edge[1]) # If it causes isolated vertix, remove that vertex as well. for node in g_nodes: if not graph.neighbors(node): graph.remove_node(node) @staticmethod def __get_average_dist(a, b): """.""" return (a + b) / 2 def __calinski_harabaz_score(self): graph = self._graph nodes = graph.nodes extra_disp, intra_disp = 0., 0. # CHI = [B / (c - 1)]/[W / (n - c)] # Total numb er of neurons. #ns = nx.get_node_attributes(self._graph, 'n_type') c = len(nodes) # Total number of data. n = len(self._data) # Mean of the all data. mean = np.mean(self._data, axis=1) pos = nx.get_node_attributes(self._graph, 'pos') for node, k in pos.items(): mean_k = np.mean(k) extra_disp += len(k) * np.sum((mean_k - mean) ** 2) intra_disp += np.sum((k - mean_k) ** 2) def _save_img(self, fignum, training_step): """.""" title = 'Growing Neural Gas for the network anomalies detection' if self._surface_graph is not None: text = OrderedDict([ ('Image', fignum), ('Training step', training_step), ('Time', '{} s'.format(round(time.time() - self._start_time, 2))), ('Clusters count', self.number_of_clusters), ('Neurons', len(self._graph)), ('Connections', len(self._graph.edges)), ('Data records', len(self._data)) ]) draw_graph3d(self._surface_graph, fignum, title=title) graph = self._graph if len(graph) > 0: draw_graph3d(graph, fignum, clear=False, node_color=(1, 0, 0), title=title, text=text) mlab.savefig("{0}/{1}.png".format(self._output_images_dir, str(fignum)))def sort_nicely(limages): """Numeric string sort""" def convert(text): return int(text) if text.isdigit() else text def alphanum_key(key): return [convert(c) for c in re.split('([0-9]+)', key)] limages = sorted(limages, key=alphanum_key) return limagesdef convert_images_to_gif(output_images_dir, output_gif): """Convert a list of images to a gif.""" image_dir = "{0}/*.png".format(output_images_dir) list_images = glob.glob(image_dir) file_names = sort_nicely(list_images) images = [imageio.imread(fn) for fn in file_names] imageio.mimsave(output_gif, images)def test_detector(use_hosts_data, max_iters, alg, output_images_dir='images', output_gif='output.gif'): """Detector quality testing routine""" #data = read_ids_data('NSL_KDD/20 Percent Training Set.csv') frame = '-' * 70 training_set = 'NSL_KDD/Small Training Set.csv' #training_set = 'NSL_KDD/KDDTest-21.txt' testing_set = 'NSL_KDD/KDDTest-21.txt' #testing_set = 'NSL_KDD/KDDTrain+.txt' print('{}\n{}\n{}'.format(frame, '{} detector training...'.format(alg.__name__), frame)) data = read_ids_data(training_set, activity_type='normal', with_host=use_hosts_data) data = preprocessing.normalize(np.array(data, dtype='float64'), axis=1, norm='l1', copy=False) G = create_data_graph(data) gng = alg(data, surface_graph=G, output_images_dir=output_images_dir) gng.train(max_iterations=max_iters, save_step=50) print('Saving GIF file...') convert_images_to_gif(output_images_dir, output_gif) print('{}\n{}\n{}'.format(frame, 'Applying detector to the normal activity using the training set...', frame)) gng.detect_anomalies(data) for a_type in ['abnormal', 'full']: print('{}\n{}\n{}'.format(frame, 'Applying detector to the {} activity using the training set...'.format(a_type), frame)) d_data = read_ids_data(training_set, activity_type=a_type, with_host=use_hosts_data) d_data = preprocessing.normalize(np.array(d_data, dtype='float64'), axis=1, norm='l1', copy=False) gng.detect_anomalies(d_data) dt = OrderedDict([('normal', None), ('abnormal', None), ('full', None)]) for a_type in dt.keys(): print('{}\n{}\n{}'.format(frame, 'Applying detector to the {} activity using the testing set without adaptive learning...'.format(a_type), frame)) d = read_ids_data(testing_set, activity_type=a_type, with_host=use_hosts_data) dt[a_type] = d = preprocessing.normalize(np.array(d, dtype='float64'), axis=1, norm='l1', copy=False) gng.detect_anomalies(d, save_step=1000, train=False) #for a_type in ['full']: # print('{}\n{}\n{}'.format(frame, 'Applying detector to the {} activity using the testing set with adaptive learning...'.format(a_type), frame)) # gng.detect_anomalies(dt[a_type], train=True, save_step=1000)def main(): """Entry point""" start_time = time.time() mlab.options.offscreen = True test_detector(use_hosts_data=False, max_iters=7000, alg=GNG, output_gif='gng_wohosts.gif') print('Working time = {}'.format(round(time.time() - start_time, 2))) test_detector(use_hosts_data=True, max_iters=7000, alg=GNG, output_gif='gng_whosts.gif') print('Working time = {}'.format(round(time.time() - start_time, 2))) test_detector(use_hosts_data=False, max_iters=10, alg=IGNG, output_gif='igng_wohosts.gif') print('Working time = {}'.format(round(time.time() - start_time, 2))) test_detector(use_hosts_data=True, max_iters=10, alg=IGNG, output_gif='igng_whosts.gif') print('Full working time = {}'.format(round(time.time() - start_time, 2))) return 0if __name__ == "__main__": exit(main()) ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download