Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6642| Title: | Засоби аналізу та захисту комп’ютерних мереж |
| Authors: | Нечипоренко, Ольга Гудзенко, Олексій |
| Issue Date: | 2025 |
| Abstract: | У сучасних умовах стрімкого розвитку інформаційно-комунікаційних технологій комп’ютерні мережі стають критично важливою складовою інформаційної інфраструктури організацій та державних установ. Зростання обсягів мережевого трафіку, ускладнення архітектури мереж та поширення нових типів кібератак зумовлюють необхідність удосконалення засобів аналізу та захисту комп’ютерних мереж. Традиційні методи виявлення загроз не завжди забезпечують достатній рівень ефективності, особливо щодо нових або змінених атак. Актуальним є поєднання сигнатурних методів аналізу мережевого трафіку з методами машинного навчання, що дозволяє підвищити точність та своєчасність виявлення загроз і враховувати зміни у поведінці зловмисників. Метою роботи є дослідження та розробка засобів аналізу і захисту комп’ютерних мереж із використанням сигнатурних методів і моделей машинного навчання для виявлення мережевих атак. Наукова новизна полягає у дослідженні можливостей інтеграції сигнатурних підходів та методів машинного навчання та порівнянні результатів їх застосування на мережевих даних. Практична цінність роботи полягає у можливості застосування отриманих рішень для підвищення рівня захищеності комп’ютерних мереж і скорочення часу реагування на інциденти інформаційної безпеки. Висновки містять основні результати дослідження. У додатках наведено допоміжні матеріали та результати експериментів. Загальний обсяг роботи становить 73 сторінки, містить 5 рисунків та 1 додаток. Для виконання роботи використано 29 літературних джерел. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/6642 |
| Appears in Collections: | 123 Комп’ютерна інженерія (Комп'ютерні системи та мережі) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| 1_ТИТУЛКА_Гудзенко-merged.pdf Restricted Access | 1.09 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ ІНЖЕНЕРІЇ
Пояснювальна записка
до кваліфікаційної роботи магістра
на тему: «Засоби аналізу та захисту комп’ютерних
мереж»
ЧДТУ.252465.001 ПЗ
Виконав: студент 2 курсу, групи МКМ-2405
спеціальності 123 – Комп’ютерна інженерія
за освітньою програмою – Комп'ютерні системи
та мережі
Олексій ГУДЗЕНКО
Керівник
к.т.н., доцент Ольга НЕЧИПОРЕНКО
Н. контроль
Світлана ГРЕСЬКО
Рецензент
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент ______Артем ЛАВДАНСЬКИЙ
Черкаси 2025 року
Форма № Н-9.01
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
Кафедра інформаційної безпеки та комп‘ютерної інженерії
Освітньо-кваліфікаційний рівень магістр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Комп’ютерні системи та мережі
«ЗАТВЕРДЖУЮ»
Завідувач кафедри _____ Артем ЛАВДАНСЬКИЙ
«08» жовтня 2025 року
ЗАВДАННЯ
на кваліфікаційну роботу магістра студенту
Гудзенку Олексію Юрійовичу
(прізвище, ім‘я, по батькові)
1. Тема роботи Засоби аналізу та захисту комп’ютерних мереж
Керівник роботи: Нечипоренко Ольга Володимирівна, к.т.н., доцент
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «07» жовтня 2025р. № 307/03-03
2. Строк подання студентом роботи
3. Вихідні дані до роботи:
Мережеві атаки, системи виявлення вторгнень, сигнатурний аналіз, аномалійне виявлення,
машинне навчання, нейронні мережі, аналіз мережевого трафіку, PCAP-файли,
класифікація трафіку, Python, Scapy, pandas, scikit-learn, TensorFlow.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
Розділ 1 Теоретичні основи виявлення мережевих загроз
Розділ 2 Аналіз методів та інструментів розробки
Розділ 3 Розробка системи виявлення загроз
Висновки
Перелік скорочень та умовних позначень
Список використаних джерел
Додатки
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
Додаток А Специфікація
Додаток Б Текст програм
6. Консультанти розділів роботи
Підпис, дата
Розділ Прізвище, ініціали та
посада завдання видав завдання
консультанта прийняв
7. Дата видачі завдання 08 жовтня 2025 року
КАЛЕНДАРНИЙ ПЛАН
№ з/п Назва етапів кваліфікаційної роботи магістра Строк виконання
етапів роботи Примітка
1 Аналіз науковий джерел та збір матеріалу за
темою дослідження 07.10 – 24.10 виконано
2 Обґрунтування актуальності виконання виконано
досліджень 25.10 – 28.10
3 Постанова задачі дослідження та визначення
методів її розв’язання 29.10 – 2.11 виконано
4 Розробка структури досліджуваного рішення 3.11 – 9.11 виконано
5 Реалізація основних алгоритмів і методів виконано
дослідження 10.11– 26.11
6 Проведення експериментальних досліджень та
обробка отриманих результатів 27.11 – 30.11 виконано
7 Оформлення результатів дослідження та виконано
написання пояснювальної записки 31.11 – 03.12
8 Подання роботи на відгук та рецензування 04.12.25 виконано
Студент-магістрант ___________________________ Олексій ГУДЗЕНКО
(підпис)
Керівник роботи ___________________________ Ольга НЕЧИПОРЕНКО
(підпис)
АНОТАЦІЯ
У сучасних умовах стрімкого розвитку інформаційно-комунікаційних
технологій комп’ютерні мережі стають критично важливою складовою
інформаційної інфраструктури організацій та державних установ. Зростання
обсягів мережевого трафіку, ускладнення архітектури мереж та поширення
нових типів кібератак зумовлюють необхідність удосконалення засобів
аналізу та захисту комп’ютерних мереж. Традиційні методи виявлення загроз
не завжди забезпечують достатній рівень ефективності, особливо щодо нових
або змінених атак.
Актуальним є поєднання сигнатурних методів аналізу мережевого
трафіку з методами машинного навчання, що дозволяє підвищити точність та
своєчасність виявлення загроз і враховувати зміни у поведінці зловмисників.
Метою роботи є дослідження та розробка засобів аналізу і захисту
комп’ютерних мереж із використанням сигнатурних методів і моделей
машинного навчання для виявлення мережевих атак.
Наукова новизна полягає у дослідженні можливостей інтеграції
сигнатурних підходів та методів машинного навчання та порівнянні
результатів їх застосування на мережевих даних.
Практична цінність роботи полягає у можливості застосування
отриманих рішень для підвищення рівня захищеності комп’ютерних мереж і
скорочення часу реагування на інциденти інформаційної безпеки.
Висновки містять основні результати дослідження. У додатках наведено
допоміжні матеріали та результати експериментів. Загальний обсяг роботи
становить 73 сторінки, містить 5 рисунків та 1 додаток. Для виконання роботи
використано 29 літературних джерел.
Ключові слова: КОМП’ЮТЕРНІ МЕРЕЖІ, МЕРЕЖЕВА БЕЗПЕКА,
ВИЯВЛЕННЯ ВТОРГНЕНЬ, МЕРЕЖЕВІ АТАКИ, СИГНАТУРНИЙАНАЛІЗ,
МАШИННЕ НАВЧАННЯ, АНАЛІЗ МЕРЕЖЕВОГО ТРАФІКУ
ANNOTATION
In the modern era of rapid development of information and communication
technologies, computer networks have become a critical component of the
information infrastructure of organizations and government institutions. The growth
of network traffic, increasing network complexity, and the emergence of new types
of cyberattacks necessitate the improvement of tools for analyzing and protecting
computer networks. Traditional threat detection methods do not always provide
sufficient effectiveness, particularly against new or modified attacks.
The integration of signature-based network traffic analysis with machine
learning methods is especially relevant, as it enhances the accuracy and timeliness
of threat detection while considering changes in attacker behavior. The aim of this
work is to study and develop tools for analyzing and protecting computer networks
using signature-based methods and machine learning models to detect network
attacks.
The scientific novelty of this study lies in exploring the possibilities of
combining signature-based approaches with machine learning techniques and
comparing the results of their application to network data.
The practical significance of the work is in the potential application of the
developed solutions to improve the security of computer networks and reduce the
response time to information security incidents.
The conclusions summarize the main results of the research. The appendices
provide supplementary materials and experimental results. The total volume of the
work is 73 pages, including 5 figures and 1 appendix. A total of 29 literary sources
were used in the study.
Key words: COMPUTER NETWORKS, NETWORK SECURITY,
INTRUSION DETECTION, NETWORK ATTACKS, SIGNATURE-BASED
ANALYSIS, MACHINE LEARNING, NETWORK TRAFFIC ANALYSIS
2
ЗМІСТ
ВСТУП......................................................................................................................4
РОЗДІЛ 1 ТЕОРЕТИЧНІ ОСНОВИВИЯВЛЕННЯМЕРЕЖЕВИХ ЗАГРОЗ.....7
1.1 Класифікація мережевих атак.................................................................7
1.2 Сигнатурні засоби виявлення загроз....................................................10
1.3 Засоби машинного навчання в аналізі мережевого трафіку...............12
1.3.1 Класифікація методів машинного навчання...........................12
1.3.2 Популярні алгоритми машинного навчання...........................13
1.3.3 Переваги та обмеження............................................................13
1.4 Порівняльний аналіз підходів...............................................................14
1.4.1 Порівняння ефективності виявлення атак..............................15
1.4.2 Порівняння продуктивності та експлуатаційних
характеристик....................................................................................17
1.5 Нерозв’язані питання та актуальність обраного підходу....................19
1.6 Висновки до розділу 1............................................................................21
РОЗДІЛ 2 АНАЛІЗ МЕТОДІВ ТА ІНСТРУМЕНТІВ РОЗРОБКИ...................23
2.1 Огляд сучасних систем виявлення вторгнень (Snort, Suricata,
Zeek)………………………………………………………………………..23
2.2 ОглядML-орієнтованих рішень (Kitsune, LSTM-IDS).......................26
2.3 Вибір датасетів: UNSW-NB15 та CSE-CIC-IDS2018 –
обґрунтування……………………………………………………………..30
2.4 Технологічний стек: Python, scikit-learn, pandas – обґрунтування
вибору……………………………………………………………………...34
2.4.1Мова програмування Python 3.10............................................35
2.4.2 Бібліотека pandas......................................................................36
2.4.3 Бібліотека scikit-learn................................................................37
2.4.4 Додаткові бібліотеки та інструменти......................................39
2.5 Висновки до розділу 2............................................................................41
3
РОЗДІЛ 3 РОЗРОБКАСИСТЕМИВИЯВЛЕННЯ ЗАГРОЗ...............................43
3.1 Розробка сигнатурного детектора........................................................43
3.2 Розробка ML-моделі..............................................................................47
3.3 Підготовка і тестування системи..........................................................53
3.4 Аналіз ефективності підходів...............................................................60
3.5 Висновки до розділу 3............................................................................63
ВИСНОВКИ...........................................................................................................65
СПИСОКСКОРОЧЕНЬ ТАУМОВНИХПОЗНАЧЕНЬ....................................68
СПИСОКВИКОРИСТАНИХДЖЕРЕЛ..............................................................70
ДОДАТКИ:
А – 482.ЧДТУ.52465-01 Засоби аналізу та захисту комп’ютерних мереж
Б – 482.ЧДТУ.52465-01 12 01 Засоби аналізу та захисту комп’ютерних
мереж. Текст програми
4
ВСТУП
Актуальність теми дослідження. У сучасних умовах стрімкого
розвитку інформаційних технологій та масового використання комп’ютерних
мереж у різних сферах діяльності зростає залежність організацій і
користувачів від стабільного та безпечного функціонування мережевої
інфраструктури. Одночасно з цим спостерігається постійне ускладнення
кіберзагроз, збільшення кількості мережевих атак та поява нових методів
несанкціонованого доступу до інформаційних ресурсів.
Традиційні засоби захисту, зокрема міжмережеві екрани та сигнатурні
системи виявлення вторгнень, залишаються важливими компонентами
комплексів кібербезпеки, проте їх ефективність значною мірою обмежується
здатністю виявляти лише відомі типи атак. Модифіковані або раніше невідомі
загрози часто залишаються поза увагою таких систем, що створює потенційні
ризики для безпеки комп’ютерних мереж.
Застосування методів машинного навчання у задачах аналізу
мережевого трафіку відкриває нові можливості для виявлення аномальної
поведінки та складних атак. Водночас практичне використання таких підходів
супроводжується низкою проблем, зокрема необхідністю якісної підготовки
даних, вибору релевантних ознак і забезпечення стабільності результатів. У
зв’язку з цим актуальним є дослідження можливостей поєднання сигнатурного
підходу та методів машинного навчання в межах єдиного процесу аналізу
мережевого трафіку.
Таким чином, розробка та експериментальне дослідження засобів
виявлення мережевих загроз, що поєднують класичні та інтелектуальні
підходи, є актуальним науково-практичним завданням і має важливе значення
для підвищення рівня кібербезпеки сучасних комп’ютерних мереж.
Метою кваліфікаційної роботи є розробка та дослідження засобів
виявлення мережевих загроз на основі сигнатурного аналізу та методів
5
машинного навчання з подальшою оцінкою ефективності їх застосування під
час аналізу мережевого трафіку.
Основні завдання та цілі роботи включають:
1. Проаналізувати сучасні типи мережевих атак і підходи до їх
виявлення;
2. Дослідити принципи функціонування сигнатурних систем
виявлення вторгнень;
3. Проаналізувати можливості застосування методів машинного
навчання для аналізу мережевого трафіку;
4. Реалізувати сигнатурний детектор мережевих атак;
5. Розробити модель машинного навчання для класифікації
мережевого трафіку;
6. Провести експериментальне тестування розроблених засобів та
проаналізувати отримані результати.
Об’єктом дослідження – процеси виявлення мережевих атак у
комп’ютерних мережах.
Предметом дослідження – методи та програмні засоби виявлення
мережевих загроз на основі сигнатурного аналізу та машинного навчання.
Наукова новизна роботи полягає у практичній реалізації та
експериментальному дослідженні засобів виявлення мережевих загроз,
побудованих на поєднанні сигнатурного підходу та моделі машинного
навчання, а також у визначенні особливостей їх ефективного застосування під
час аналізу мережевого трафіку.
Практична цінність полягає у можливості використання розроблених
засобів для аналізу мережевого трафіку та підвищення рівня захищеності
комп’ютерних мереж. Отримані результати можуть бути використані під час
навчального процесу, а також як основа для подальшого розвитку систем
виявлення мережевих загроз.
6
Апробація результатів роботи. Результати кваліфікаційної роботи
доповідалися і обговорювалися на наступних конференціях:
ІІІ Міжнародній науково-практичній конференції «Інновації та
перспективні шляхи розвитку інформаційних технологій» (22
листопада 2024 р., м. Черкаси);
ІІ Міжнародній науково-практичній конференції «Штучний
інтелект та інформаційні технології» (3-4 червня 2025 р., м. Київ).
Публікації. Результати досліджень опубліковані в:
1. Гудзенко О. Ю. Реалізація криптографічного модуля шифрування
даних / О.Ю. Гудзенко, О. В. Нечипоренко // Збірник тез доповідей ІІІ Міжнар.
наук.-практич. конфер. «Інновації та перспективні шляхи розвитку
інформаційних технологій» (22 лист. 2024 р., м. Черкаси) [Електронний
ресурс] / упоряд. : Т. О. Прокопенко, О. І. Підкуйко ; М-во освіти і науки
України, Черкас. держ. технол. ун-т. – Черкаси : ЧДТУ, 2024. С. 95–97.
2. Нечипоренко О. В. Перспективи розвитку штучного інтелекту в
діяльності закладів вищої освіти / О. В. Нечипоренко, О. Ю. Гудзенко //
Наукові праці Другої міжнар. наук.-практ. конф. «Штучний інтелект та
інформаційні технології» (AIIT-2025), 3–4 червня 2025 р. (Київ, Україна). К. :
НУХТ, 2025. С. 228–230.
Кваліфікаційна робота складається з вступу, трьох розділів,
висновків, списку використаних джерел та додатків.
1. У першому розділі подано аналіз предметної області та сучасних
підходів до виявлення мережевих атак.
2. У другому розділі розглянуто методи та інструменти, обрані для
реалізації сигнатурного та машинного підходів.
3. У третьому розділі описано реалізацію засобів виявлення
мережевих
загроз і проведено їх експериментальне тестування.
7
РОЗДІЛ 1
ТЕОРЕТИЧНІ ОСНОВИ ВИЯВЛЕННЯМЕРЕЖЕВИХ ЗАГРОЗ
1.1 Класифікація мережних атак
У сучасному світі глобальної цифровізації та розвитку інформаційних
технологій постійно зростає кількість та складність атак. Знання основних
типів атак, їхньої структури та характеру впливу є необхідним для
ефективного захисту інформаційної структури. Класифікація мережевих атак
є основою для розробки систем виявлення та реагування та надає змогу
систематизувати підходи до захисту залежно від характеру загрози [1]. У
сучасній літературі пропонується кілька підходів до класифікації: за
характером впливу на мережу, ціллю атаки, наявністю зворотного зв’язку,
умовами початку впливу, розташуванням суб’єкта атаки щодо об’єкта та
рівнем еталонної моделі ISO/OSI [2]. Крім того, сучасні джерела акцентують
увагу на класифікації за векторами атаки, зокрема через протоколи TCP/IP
тому атаки стають більш динамічними та складними для виявлення [3]. Така
систематизація дозволяє в повній мірі розглянути природу загроз та розробити
відповідні засоби захисту на всіх рівнях мережевої архітектури.
За характером впливу на мережу мережеві атаки поділяються на пасивні
та активні [2].
Пасивні атаки (перехоплення трафіку або “sniffing”)
спрямовані на спостереження за передачею даних без втручання в
роботу системи. Їх головною метою є порушення конфіденційності
інформації. Виявити такі атаки складно, оскільки вони не змінюють
структуру трафіку.
Активні атаки (DDoS, ARP poisoning) спрямовані на зміну
або блокування інформаційних потоків, впливаючи на доступність і
цілісність даних.
8
Згідно з принципами інформаційної безпеки, основними цілями атак є
порушення:
конфіденційності (атаки типу “Man-in-the-Middle”);
цілісності (SQL Injection, XSS);
доступності (DoS, DDoS) [2].
Виділяють APT-атаки (Advanced Persistent Threats), що поєднують етапи
розвідки, експлутації вразливостей, як zero-day, та прихованого контролю над
системою [4]. Дослідження показують [1], що використання GNN-моделей
(моделі графових нейронних мереж) забезпечує класифікацію атаки в IoT-
середовищах з точністю понад 95%, що відкриває перспективи для побудови
інтелектуальних систем кіберзахисту.
Атаки за наявністю реакції на стан системи поділяють на:
із зворотним зв’язком – адаптуються в реальному часі,
змінюючи параметри атаки (наприклад, TCP hijacking, adaptive
scanning);
без зворотного зв’язку – мають односпрямований характер
(UDP flooding) [3].
Особливості таких атак ускладнюють класифікацію мережевих атак за
допомогою алгоритмів машинного навчання, оскільки потребують різних
типів датасетів [5].
За умовами початку впливу ініціація атак може відбуватися за трьома
сценаріями [2]:
за запитом – це можуть бути фішингові розсилки або спроби
соціальної інженерії;
за подією – відбувається експлуатація відомих вразливостей CVE
(“Common Vulnerabilities and Exposures”) після появи патчів або
публічної інформації про них;
безумовна ініціація – brute-force або автоматизовані сканування.
Так за даними статистики в Україні у 2024 році атаки, що починалися
через соціальну інженерію, становили понад 60% усіх інцидентів [6].
9
За місцем розташування зловмисника розрізняють:
міжсегментні атаки, що виконуються ззовні мережі (IP
spoofing, DNS amplification);
внутрішньосегментні атаки, які здійснюються у межах
локальної мережі [3].
В останні роки зростає кількість атак всередині мережі, що пов’язано з
компрометацією внутрішніх облікових записів або IoT-пристроїв.
Також вирізняють класифікацію за рівнем еталонної моделі ISO/OSI, що
зображена на таблиці 1.1.
Таблиця 1.1 – Класифікація за рівнем еталонної моделі ISO/OSI
Рівень OSI Тип атаки Приклад
Фізичний Перехоплення Eavesdropping [2]
Канальний MAC flooding ARP Spoofing [3]
Мережевий IP Spoofing ICMP Flood [1]
Транспортний SYN Flood TCP Reset [3]
Сесійний Hijacking Cookie theft [2]
Представлення SSL Stripping Downgrade [2]
Прикладний SQL Injection HTTP Flood [5]
Вектори атак визначають канали, через які здійснюється вторгнення або
вплив на систему. У контексті TCP/IP-протоколів основними векторами є:
мережевий рівень: IP Spoofing, ICMP Flood, Ping of Death;
транспортний рівень: TCP SYN Flood, UDP Flood;
сеансовий рівень: Session Hijacking, Cookie Stealing;
прикладний рівень: HTTP Flood, DNS Amplification, SQL
Injection.
З розвитком хмарних сервісів і IoT з’явилися нові вектори атак, такі як
експлуатація API, MQTT-протоколів та слабко захищених “розумних”
пристроїв. Це ускладнює роботу традиційних систем виявлення вторгнень і
10
вимагає використання штучного інтелекту для аналізу поведінкових аномалій.
Сучасні мережеві загрози активно використовують уразливості IoT-пристроїв,
таких як камери спостереження, смарт-термостати та промислові контролери.
Атаки на ці пристрої можуть не лише порушувати роботу окремого пристрою,
а й ставати точкою входу для масивних DDoS-атак. Крім того, хмарні сервіси
піддаються цілеспрямованим атакам на дані та конфігурації, що потребує
комплексних методів виявлення та захисту [1].
1.2 Сигнатурні засоби виявлення загроз
Сигнатурні засоби виявлення загроз є одним із найпоширеніших
підходів до захисту мережевої інфраструктури, томущо дозволяють визначати
відомі типи атак завдяки порівнянню мережевого трафіку з наперед
визначеними шаблонами-сигнатурами [5]. Цей підхід є ефективним проти
відомих загроз, де обсяги трафіку сягають гігабітів на секунду, оскільки аналіз
виконується на основі точно зіставлення з ознаками конкретних шкідливих
дій, але має обмеження при виявленні невідомих раніше атак (zero-day). У
контексті української кібербезпеки, де кількість інцидентів перевищила 3 млн
у 2024 році, сигнатурні системи часто інтегруються з державними стандартами
для захисту критичної інфраструктури [6].
Сигнатурні системи використовують набір правил, які містять умови
спрацьовування (протокол, порт, IP, вміст пакета), дію (alert, log, drop) та опис
загрози. Система аналізує кожен пакет у реальному часі, порівнюючи його з
базою сигнатур. Завдяки цьому можливо виявити такі загрози, як DoS/DDoS,
сканування портів, SQL-ін’єкції та експлойти відомих вразливостей CVE. При
збігу генерується сповіщення (alert). У контексті ІоТ-мереж, де трафік
фрагментований, такий підхід ефективно блокує відомі вектори атак, як ARP-
spoofing, при цьому мінімально навантажуючи ресурси мережі.
Сигнатурні методи характеризуються високою швидкістю аналізу та
забезпечують низький рівень хибних спрацьовувань, що робить їх доцільними
11
для захисту критично важливих сегментів інфраструктури в режимі реального
часу [2]. Окремо можна зазначити, що детермінований алгоритм O(1) за
сигнатурою дозволяє досягати обробки до 10 Gbps на стандартному
обладнанні. У 2024 році кількість кіберінцидентів, спрямованих на державні
органи та підприємства суттєво зросла – до 4315 зареєстрованих атак в
Україні, що зумовило активне використання сигнатурних систем. В
українському контексті такі системи ефективні для захисту державних мереж,
де потрібна детермінованість [6].
При таких перевагах сигнатурного підходу, як висока швидкість,
низький рівень хибних спрацювань, простоті налаштування та підтримці CVE,
він має обмеження. Система не здатна виявляти невідомі або ж модифіковані
атаки, оскільки залежить від актуальності бази сигнатур. Поліморфні та
обфусковані шкідливі програми змінюють структуру коду або вміст пакета,
таким чином уникаючи виявлення через відсутність збігу ознак. Такі
обмеження критичні під час атаки zero-day атак, які ще на момент атаки не
мають визначених сигнатур.
Серед інструментів сигнатурного аналізу найпоширенішими є Snort,
Suricata та Zeek, які реалізують фільтрацію трафіку в реальному часі на основі
бази правил. Snort використовується у корпоративних IDS/IPS системах, тому
що є стабільним та низьке споживання ресурсів. Suricata завдяки
багатопоточній архітектурі забезпечує високу пропускну здатність. Zeek
поєднує сигнатурний та поведінковий аналіз, генеруючи JSON-логи для
інтеграції з ML-моделями, що розширює можливості виявляти атаки.
У 2025 році розвиток включає гібридні моделі з штучним інтелектом
для динамічного генерування сигнатур, що зменшує вразливість до zero-day
атак. Сигнатурні засоби виявлення загроз залишаються ефективним рішенням
для запобіганню відомих атак і становлять основу багатьох систем
кіберзахисту. Для протидії сучасним складним загрозам вони повинні
застосовуватися в поєднанні з методами аномалійного та поведінкового
аналізу, які забезпечують можливість виявлення невідомих типів атак.
12
1.3 Засоби машинного навчання в аналізі мережевого трафіку
Зі зростанням складності та кількості мережевих атак, особливо тих що
використовують поліморфізм та zero-day вразливості, класичні сигнатурні
системи стають недостатньо ефективними для забезпечення повного захисту
сучасних мереж. Одним з перспективних підходів до вирішення даної
проблеми є використання машинного навчання, що дозволить адаптивно
аналізувати трафік та виявляти аномалії в поведінці трафіку без жорсткої
залежності від статистичних шаблонів [7]. Особливо актуальним є
застосування цих засобів в умовах, коли загрози швидко змінюються і часовий
проміжок стає критичним між появою нової атаки та створенням сигнатури.
1.3.1 Класифікація методів машинного навчання
Методи машинного навчання поділяють на три основні групи:
Метод з учителем – навчаються моделі на розмічених набори
даних, де кожен приклад чітко позначений як нормальних трафік
або атака (наприклад, Random Forest, XGBoost). Забезпечує
найвищу точність, але потребує якісних і збалансованих датасетів.
Методи без учителя – не потребують міток і виявляють аномалії
за відхиленням від моделей нормальної поведінки (Isolation
Forest). Використовуються для пошуку нових або невідомих
загроз.
Гібридні та напівкеровані підходи – поєднують ознаки обох
попередніх методів, зменшують потребу у великих обсягах
розмічених даних і намагаються підвищити точність в умовах
реальних мереж (transfer learning).
Дослідженння показують, що методи з учителем мають найвищу
точність за наявних датасетів, тоді як методи без учителя є єдиним рішенням
для повністю невідомих загроз.
13
1.3.2 Популярні алгоритми машинного навчання
Серед найбільш використовуваних методів з учителем застосовуються
ансамблеві алгоритми на основі дерев рішень й глибокі нейронні мережі:
Random Forest – за даними досліджень за 2024 рік показав точність
класифікації до 99,7% на CIC-IDS2017, а при зменшенні обсягу
даних у 10 разів точність залишалась не нижчою за 97% [8].
Застосовується завдяки стабільності на малих вибірках і
можливості роботи у реальному часі.
XGBoost та LightGBM – забезпечують подібну точність, але
значно швидше обробляють великі обсяги даних [8].
Глибоке навчання – моделі на основі трансформерів у 2025 році
досягли F1-score 99,89 % при навчанні на стандартних наборах
даних і зберігали ефективність у межах 87–91% при моделюванні
невідомих атак (zero-day), що суттєво перевищує результати
LSTM і CNN моделей у подібних умовах [9].
Random Forest і XGBoost перевищують традиційні алгоритми за
швидкістю на великих даних, тоді як Transformer-моделі забезпечують кращу
стійкість до невідомих атак [9; 10].
1.3.3 Переваги та обмеження
Переваги машинного навчання в системах виявлення загроз включають:
можливість виявлення невідомих та модифікованих атак, які не
мають сигнатур;
висока точність класифікації відомих атак – до 99,89 % F1-score у
контрольованих умовах [9];
адаптивність до різних умов – ефективна робота як на малих, так
і на великих мережах за умов правильної нормалізації даних.
14
Використання ML у мережевій безпеці дозволяє ідентифікувати
аномалії, які не покриваються традиційними сигнатурами. Проте ефективність
таких моделей значною мірою залежить від якості навчальних даних,
різноманітності мережевого середовища та ресурсів для обробки потоків
даних. Особливо складно впроваджуватиML у IoT-середовищі через обмежені
ресурси пристроїв та розмаїття протоколів, що вимагає адаптованих
алгоритмів та інколи розподілених обчислень [10].
Проте існують й суттєві обмеження:
зниження якості при перенесенні моделі на інший тип мережі або
новий датасет – точність може впасти до 30–50 % [10];
велика кількість хибних спрацьовувань у відкритих середовищах
через відсутність контексту протоколів і зв’язності трафіку
–проблема, яку свого часу описано ще у 2010 році і яка
залишається актуальною [7];
висока обчислювальна складність – глибокі моделі потребують
потужного апаратного забезпечення або хмарних ресурсів для
роботи у режимі реального часу.
Ці недоліки можна частково подолати за допомогою гібридних
архітектур, де сигнатурний аналіз виконує первинну фільтрацію, а ML –
глибокий аналіз підозрілих потоків [8].
1.4 Порівняльний аналіз підходів
У попередніх підрозділах були розглянуті два основні підходи до
виявлення мережевих загроз – сигнатурний та на основі машинного навчання.
Кожен із них має свої переваги та обмеження, і в умовах швидкого розвитку
кібератак жоден з підходів окремо не забезпечує повноцінний захист.
Проведено аналіз сильних і слабких сторін сигнатурного та аномалійного
методів на основі ключових критеріїв: точності виявлення загроз, хибних
15
спрацьовувань, продуктивності, ресурсоємності, складності використання та
стійкості до обходу.
1.4.1 Порівняння ефективності виявлення атак
Виявлення відомих атак.
При роботі з відомими атаками, такими як DoS/DDoS, SQL-ін’єкції,
сканування портів, експлойти CVE, брутфорс тощо, сигнатурний підхід
залишається еталоном і демонструє практично ідеальну ефективність.
Порівняння вмісту пакетів із базою сигнатур (Snort, Suricata) забезпечує
точність на рівні 98–100 % при актуальних правилах [5]. Обмеження
виникають у випадках шифрування, тунелювання або агресивної обфускації.
Методи машинного навчання з учителем (Random Forest, XGBoost,
DNN) також демонструють високу точність на відомих атаках – 98–99,89 %
F1-score на датасетах CIC-IDS2017, UNSW-NB15 та інших датасетах [8; 9].
Однак результат значною мірою залежить від відповідності навчальних даних
реальному трафіку цільової мережі.
Таким чином, при виявленні відомих атак, що добре задокументовані і
немодифіковані, сигнатурний підхід забезпечує найвищу точність,
передбачуваність та стабільність результатів, перевищуючи аномалійний за
цими показниками, що й робить його найбільш надійним інструментом
захисту від масових відомих загроз у сучасних мережах.
Виявлення zero-day та модифікованих атак.
Сигнатурні системи мають фундаментальне обмеження – вони можуть
виявляти лише ті загрози, які задокументовані та для яких уже є правила. Тому
їхня нездатність реагувати на нові атаки є критичним недоліком. За
статистикою 2024-2025 років, понад 60 % успішних інцидентів в Україні та
світі припадають на нові або модифіковані атаки, що не були задокументовані
та не створено для них сигнатур [6].
16
Аномалійні методи орієнтовані на виявлення відхилень від нормальних
поведінкових шаблонів. Сучасні Transformer-моделі утримують ефективність
87–91 % у zero-day сценаріях, тоді як класичні CNN падають до 65–68 % [9].
Алгоритми Isolation Forest та One-Class SVM дозволяють досягти 70–80 %
результативності в IoT-середовищах [11].
Отже, при протидії zero-day атакам та модифікованим атакам, для яких
сигнатури ще не створені або неможливо створити, аномалійні методи на
основі машинного навчання залишаються єдиним рішенням, яке забезпечує
реальну можливість виявлення таких атак на рівні 70–91 % залежно від
архітектури моделі, роблячи їх важливим компонентом для захисту сучасних
мереж.
Рівень хибнопозитивних спрацьовувань.
Сигнатурні системи мають мінімальний рівень хибнопозитивних
спрацювань – зазвичай менше 0,1 % [12]. Це дозволяє використовувати їх у
режимі активного блокування (IPS), практично без ризику блокування
нормального трафіку.
Аномалійні методи мають значно вищий рівень хибнопозитивних
спрацювань – 5-10 % у контрольованих умовах найкращих реалізацій і до 40-
50 % у реальних мережах [10]. Це пояснюється чутливістю до природних
флуктуацій мережевого трафіку. Проблему високого рівня хибних спрацювань
було описано Sommer і Paxson ще у 2010 році [7], і вона залишається
актуальною.
У підсумку, за показником хибнопозитивних спрацювань сигнатурний
підхід перевищує аномалійні методи, що є однією з ключових причин
застосування сигнатурних систем у промислових системах виявлення та
запобігання вторгненням.
17
1.4.2 Порівняння продуктивності та експлуатаційних
характеристик
Продуктивність та ресурсоємність.
Сигнатурні системи спроєктовані для високошвидкісної обробки в
реальному часі. Suricata досягає 10–20 Гбіт/с на одному CPU-ядрі та до 40
Гбіт/с у багатопоточному режимі [2; 12]. Ресурсні вимоги відносно низькі:
200–800 МБ RAM залежно від бази правил.
Моделі машинного навчання є суттєво більш ресурсоємними.
Алгоритми на зразок Random Forest або XGBoost обробляють 1–3 Гбіт/с на
CPU, а глибокі моделі — лише 100–500 Мбіт/с без GPU [9; 16]. Навчання та
регулярне перенавчання потребують додаткових ресурсів.
За показниками продуктивності та ресурсоємності сигнатурні системи
суттєво переважають рішення на основі машинного навчання, що робить їх
оптимальним вибором для розгортання на периметрі високонавантажених
мереж.
Складність впровадження та експлуатації.
Сигнатурні системи прості в налаштуванні, а оновлення бази
відбувається автоматично, причина спрацювання завжди зрозуміла для
адміністратора. Аномалійні рішення вимагають якісних розмічених даних,
регулярного перенавчання, налаштуванння порогів та механізмів
пояснюваності рішень [10; 17]. Це значно ускладнює експлуатацію такої
системи.
Сигнатурні системи є вразливими до шифрування, тунелювання або
обфускації трафіку. Методи машинного навчання оцінюють поведінкові
патерни, тому значно стійкіші до обходу.
Таблиця 1.2 узагальнює сильні та слабкі сторони обох підходів за
найважливішими показниками, для створення таблиці були використані
джерела [5], [7], [8], [9], [12] та [11]. Таблиця дозволяє чітко побачити сфери
18
переваги кожного методу та підтверджує, що жоден із них окремо не здатен
забезпечити комплексний захист сучасної мережі.
Таблиця 1.2 – Порівняльна таблиця основних характеристик
Сигнатурний Аномалійний Переважаючий
Критерій
підхід підхід (ML) підхід
Виявлення
98–100 % 98–99,89 % Сигнатурний
відомих атак
Виявлення zero-
0 % 70–91 % Аномалійний
day
Хибнопозитивні
< 0,1 % 5–50 % Сигнатурний
спрацьовування
Швидкість до 40 Гбіт/с 0,1–3 Гбіт/с (без
Сигнатурний
обробки (Suricata) GPU)
Висока
Ресурсоємність Низька (особливо Сигнатурний
глибокі моделі)
Складність
Низька Висока Сигнатурний
впровадження
Низька Висока
Стійкість до
(обфускація, (поведінковий Аномалійний
обходу
шифрування) аналіз)
Проведений аналіз показує, що сигнатурний та аномалійний підходи є
взаємодоповнювальними, а не взаємовиключними. Сигнатурні системи
залишаються незамінними для швидкого, точного та детермінованого
виявлення масових відомих загроз із мінімальною кількістю помилок.
Водночас методи машинного навчання здатні протистояти новим і
модифікованим атакам, які становлять основну небезпеку в сучасному
кіберпросторі.
19
Найефективнішим рішенням у 2025 році визнано гібридні архітектури,
в яких сигнатурний модуль виконує первинну фільтрацію трафіку, а
аномалійний аналіз застосовується лише до підозрілих потоків. Таке
поєднання дозволяє:
зберегти високу швидкість і низький рівень хибних тривог,
суттєво підвищити рівень виявлення нових загроз,
оптимізувати використання обчислювальних ресурсів.
1.5 Нерозв’язані питання та актуальність обраного підходу
Системи виявлення мережевих загроз стикаються з низкою
фундаментальних проблем, які проявляються особливо гостро в умовах
швидкої еволюції технік і методів атак. За даними Держспецзв’язку України
за 2024 рік, понад 60 % зареєстрованих інцидентів (4315 випадків) було
здійснено за допомогою нових або модифікованих методів атак, для яких
сигнатурні бази ще не містили відповідних правил [6].
Аналіз досліджень та практичного досвіду дозволяє виокремити кілька
ключових недоліків, які й визначають актуальність обраного в даній роботі
гібридного підходу з послідовною обробкою трафіку.
1. Обмежена генералізація моделей машинного навчання.
ML-моделі демонструють високі показники точності на публічних
датасетах, проте втрачають 30-50 % ефективності при перенесенні на трафік
іншої мережі [8; 13; 14]. Це зумовлено різницею в розподілі ознак і відсутністю
єдиного базового середовища для порівняння. Використання власного
сигнатурного детектора як первинного фільтра та джерела додаткових ознак
для ML-компонента дозволяє частково нівелювати цю проблему,
забезпечуючи однакові умови для обох підходів.
2. Високий рівень хибнопозитивних спрацьовувань аномалійних систем.
Рівень хибнопозитивних спрацьовувань у реальних мережах сягає 40-
50 %, що знижує довіру операторів до системи та зниження ефективності
20
реагування [7; 15]. Послідовна гібридна архітектура суттєво зменшує обсяг
трафіку, що подається на ML-модуль, і знижує ризик надмірної кількості
хибних тривог.
3. Відсутність об’єктивного baseline при порівнянні підходів.
У більшості досліджень сигнатурний і аномалійний методи тестуються
на різних даних або використовуються готові правила Snort/Suricata. Це
унеможливлює коректне порівняння. Розробка власного сигнатурного
детектора та навчання ML-моделі саме на тих потоках, які сигнатури
пропустили або позначили як підозрілі, створює контрольований експеримент
і дозволяє оцінити реальний внесок кожного компонента.
4. Недостатня кількість практичних реалізацій гібридних систем
промислового рівня.
Незважаючи на значну кількість теоретичних робіт, відкритих реалізацій
послідовних гібридних систем з вимірюваними показниками покращення
порівняно з кожним методом окремо практично немає [16; 17]. Розробка та
експериментальна оцінка такої системи має помітну практичну цінність.
Враховуючи вище зазначені проблеми, гібридна архітектура дозволяє:
зберегти швидкість і низький рівень хибних спрацьовувань
сигнатурного методу;
суттєво підвищити виявлення zero-day і модифікованих атак;
отримати об’єктивні кількісні показники приросту ефективності;
створити робочу реалізацію, готову до використання в реальних
мережах.
Таким чином, зазначені недоліки існуючих підходів вказують на
потребу в рішеннях, здатних поєднати швидкість сигнатурного аналізу з
гнучкістю методів машинного навчання. Обраний у даній роботі гібридний
підхід безпосередньо спрямований на подолання цих обмежень.
21
1.6 Висновки до розділу 1
В даному розділі кваліфікаційної роботи було розглянуто теоретичні
основи виявлення мережевих загроз, що дозволило сформувати цілісне
уявлення про сучасні атаки та принципи їх класифікації. Класифікація атак за
характером впливу, цілями порушення принципів інформаційної безпеки,
рівнем еталонної моделі ISO/OSI, наявністю зворотного зв’язку, умовами
ініціації та розташуванням атакуючого щодо жертви створює необхідну
системну базу для розуміння природи загроз і вибору відповідних засобів
захисту. Проаналізовано, що в 2024–2025 роках в Україні стоїть проблема
нових і суттєво модифікованих атак: за офіційними даними Держспецзв’язку,
понад 60 % із 4315 зареєстрованих кіберінцидентів за 2024 рік належать саме
до цієї категорії, що підтверджує недостатність традиційних підходів і потребу
в адаптивних рішеннях.
Проаналізовано два основні підходи до виявлення загроз – сигнатурний
та на основі машинного навчання. Сигнатурний підхід, розглянутий у
підрозділі 1.2, залишається базовим і найпоширенішим рішенням для
виявлення відомих загроз завдяки високій швидкості обробки трафіку,
мінімальному рівню хибнопозитивних спрацьовувань та простоті
впровадження й експлуатації. Інструменти Snort, Suricata та Zeek успішно
застосовуються в промислових і державних мережах, зокрема в Україні, де
детермінованість і прозорість рішень є важливими для забезпечення надійного
функціонування інфраструктури. Водночас вагомою вадою сигнатурних
систем є неспроможність протидіяти zero-day атакам та суттєво
модифікованим загрозам через залежність від актуальності бази правил. Це
робить сигнатурні системи виявлення загроз вразливими в умовах швидкої
появи нових способів атак.
Підходи до виявлення загроз на основі машинного навчання,
проаналізовані в підрозділі 1.3, дозволяють виявляти аномалії в поведінці
трафіку без жорсткої прив’язки до відомих шаблонів. Сучасні алгоритми, такі
22
як Random Forest, XGBoost та Transformer-моделі, досягають точності 98-
99,89 % на стандартних датасетах і зберігають ефективність на рівні 70-91 %
у сценаріях zero-day атак. Але на практичному застосування у реальних
мережах їхня ефективність падає через високий рівень хибнопозитивних
спрацьовувань. Такий результат пояснюється поганою генералізацією при
перенесенні моделі на новий трафік, потребою в значних ресурсах та
необхідністю регулярному перенавчанні.
Порівнявши дані два підходи, можна чітко визначити слабкі та сильні
сторони кожного з них, а також те що вони гарно взаємодоповнюються.
Сигнатурні системи переважають за швидкістю, стабільністю,
детермінованістю та рівнем помилок при роботі з відомими атаками, тоді як
системи на основі машинного навчання здатні виявляти нові та модифіковані
атаки. Захист сучасної мережі не може бути забезпечений в повній мірі
жодним з підходів окремо на даний момент часу.
Таким чином, в ході аналізу були отримані результати, що
підтверджують значущість дослідження. Хоча сигнатурні систем виявлення
загроз залишається основними в промислових масштабах, але вони не можуть
забезпечити повного захисту для мереж. Так системи на основі машинного
навчання на даний момент ще мають недоліки, такі як висока кількість хибних
спрацювань і потребують значних ресурсів для функціонування. Тому
гібридні системи вважаються найбільш перспективним напрямом розвитку.
23
РОЗДІЛ 2
АНАЛІЗ МЕТОДІВ ТА ІНСТРУМЕНТІВ РОЗРОБКИ
2.1 Огляд сучасних систем виявлення вторгнень (Snort, Suricata,
Zeek)
Системи виявлення вторгнень є ключовим компонентом мережевої
безпеки та забезпечують моніторинг трафіку в реальному часі.
Найпоширенішими відкритими рішеннями є Snort, Suricata та Zeek, що
представляють різні підходи: сигнатурний, гібридний та подійно-
орієнтований. Кожен з інструментів має власну архітектуру та набір
механізмів обробки трафіку.
Snort [18] – це система запобігання вторгненням у мережі з відкритим
кодом, що здатна виконувати аналіз трафіку в режимі реального часу та
реєструвати пакети в IP-мережах. Дана система працює на основі сигнатур і
правил, перевіряючи трафік в реальному часі, декодуючи пакети та шукаючи
збіги з базою сигнатур. Перевагою є простота розширення через плагіни, що
робить орієнтиром для власних реалізацій.
У Snort наступний алгоритм роботи:
1. Захоплення пакетів: використовується DAQ (Data Acquisition
Library) для читання трафіку з інтерфейсу або pcap-файлів (packet
capture file).
2. Декодизація: розбір пакетів на рівні протоколів.
3. Передобробка: виконується нормалізація, дефрагментація й аналіз
аномалійних заголовків.
4. Детекція: пошук сигнатурних збігів.
5. Вихід: формування логів та повідомлень про спрацювання.
В 4 пункті використовуються правила які записані в текстовий файл,
нижче наведено приклад такого правила, спрацьовує коли будь-який TCP-
24
трафік спрямовується на порт 80 і якщо при перевірці є рядок “GET” видається
попередження:
alert tcp any any -> any 80 (
msg:"HTTP GET Flood";
content:"GET";
sid:1000001;
)
Формат правил Snort та механізми порогового підрахунку є усталеним
та широко використовуваним стандартом сигнатурного виявлення загроз. У
нього формалізований синтаксис, відкрита архітектура та можливість точного
опису як змістовних, так і поведінкових характеристик атак, це забезпечує
високу точність та прозорість роботи детектора. Snort є ефективним і гнучким
інструментом для сигнатурного виявлення загроз, а також оптимальним
вибором для побудови власного набору сигнатур у межах дослідження.
Suricata [19] – система виявлення і попередження мережевих вторгнень
з фокусом на багатопоточності та гібридах, з вбудованим Lua для ML-
скриптів.
Алгоритм роботи Suricata:
1. Захоплення та розподіл потоків: для високошвидкісного читання
використовується AfPacket / PF_RING.
2. Декодеризація.
3. Детекція: Hyperscan використовується для швидкого пошуку
патернів; Lua для кастомної логіки.
4. Вихід: запис подій у форматі EVE JSON.
Приклад правила Suricata, застосовується до HTTP-трафіку та шукається
метод “GET”, якщо один користувач відправив більше заданої кількості
запитів за певний час, то генерується тривога:
alert http any any -> any any (
msg:"HTTP Flood";
http.method; content:"GET";
25
threshold:type both, track by_src, count 120, seconds 5;
sid:2000001;
)
Формат EVE JSON та розширений набір метаданих Suricata є одним із
найбільш зручних для подальшої обробки даних, зокрема у задачах
машинного навчання. Завдяки багатопоточній архітектурі та структурованому
логуванню Suricata часто використовується як джерело ознак у гібридних
системах виявлення загроз.
Zeek [20] – це подійно-орієнтована система аналізу трафіку і виявлення
мережевих вторгнень, яка надає структурований аналіз мережевих подій. На
відміну від Snort та Suricata, він не обмежується пошуком тільки за
сигнатурами, а зосереджується на логах та подіях, формуючи багаторівневі
журнали активності.
Алгоритм роботи Zeek:
1. Захоплення пакетів.
2. Розбір пакетів на події.
3. Інтерпретатор скриптів: використовується Zeek Script для
користувацьких скриптів.
4. Запис структурованих логів.
Приклад Zeek Script, викликається автоматично подія щоразу, коли в
трафік проходить HTTP-запит:
event http_request(c: connection, method: string, original_URI: string,
unescaped_URI: string)
{
if ( method == "GET" )
print "HTTP GET detected from", c$id$orig_h;
}
Zeek вирізняється подійно-орієнтованою архітектурою та генерацією
високорівневих структурованих логів, які містять детальну інформацію про
мережеві сесії та взаємодії. Структуровані логи з багатим набором метаданих
26
та орієнтація на подіях розблять Zeek зручним для аналізу інцидентів та
побудови поведінкових моделей, зокрема у задачах машинного навчання.
2.2 Огляд ML-орієнтованих рішень (Kitsune, LSTM-IDS)
Сучасні системи виявлення загроз дедалі частіше використовують
машинне навчання, дозволяючи виявляти нові типи атак. У гібридній
архітектурі сигнатурний компонент відповідає за первинну фільтрацію, тоді
коли ML-моделі забезпечують аналіз підозрілих потоків і підвищують
ефективність виявлення загроз на 20-30 % [21; 22]. ML-орієнтовані системи
виявлення вторгнень використовують рекурентні мережі, автоенкодери для
обробки часових послідовностей трафіку, де основними ознаками є розмір
пакетів, інтервали між ними, протоколи і ентропія даних. Це актуально для
систем, де ML застосовується послідовно і тільки до 10-20% трафіку, що
пропустила сигнатурні рішення. Системи машинного навчання досягають
точності 95-99 % на стандартних датасетах, але хибнопозитивні виявлення
можуть сягати до 50% у реальних мережах.
Для більш детального огляду ML-рішень було обрано дві реалізації:
Kitsune та LSTM-IDS. Kitsune фокусується на онлайн-навчанні та
оптимізована для пристроїв з обмеженеми ресурсами. LSTM-IDS
використовує рекурентні мережі для аналізу послідовностей, тому здатна
моделювати часові патерни атак.
Kitsune – ансамбль автоенкодерів для виявлення вторгнень онлайн в
мережу. Вона призначена для онлайн-моніторингу в обмежених середовищах
(IoT), де модель навчається без учителя тільки на нормальному трафіку і
виявляє аномалії за помилкою реконструкції автоенкодерів.
Архітектура Kitsune складається з двох основних компонентів:
витягувача ознак та ансамблю автоенкодерів. Витягувач формує понад 100
статистичних параметрів трафік, таких як (розмір, інтервал, напрямок,
ентропія байтів, протоколи). Ансамбль із 5–10 автоенкодерів реконструює
27
вхідний вектор, після чого помилки сумуються, а поріг адаптується онлайн.
На рисунку 2.1 зображено архітектуру Kitsune.
Переваги використання Kitsune:
Ресурсоефективність: має можливіть працювати на одноплатових
комп’ютерах, таких як Raspberry Pi 4.
Рисунок 2.1 – Архітектура системи Kitsune
Навчається без учителя: не потребує міток.
Здатність виявлення zero-day атак.
Онлайн-адаптація порогу виявлення.
Недоліки Kitsune:
28
Обмежена масштабованість для великих мереж.
Чутливість до флуктуацій, що призводить до збільшення хибних
спрацьовувань.
Відсутність автоматичних вбудованих механізмів для придушення
хибнопозитивних спрацьовувань.
Kitsune є одиним з найбільш відомих рішень для виявлення аномалій без
учителя в умовах обмежених ресурсів. Система демонструє високу
ефективність проти невідомих загроз в IоТ-мережах завдяки ансамблю
автоенкодерів та онлайн-адаптації порога виявлення.
LSTM-IDS – сімейство систем виявлення вторгнень на основі
рекурентних нейронних мереж з довготривалою пам’яттю для аналізу часових
послідовностей мережевого трафіку. Системи навчаються з учителем,
фокусуються на класифікації послідовностей, де модель запам'ятовує контекст
попередніх пакетів.
Архітектура типової LSTM-IDS складається з кількох послідовних
етапів:
Підготовка вхідних даних: трафік розбивається на фіксовані
послідовності по 20-60 пакетів кожна, а кожен пакет
перетворюється в набір числових ознак (зазвичай 41-120 ознак,
розмір пакета й заголовка, час життя, TCP-флаги, інтервали між
пакетами, номери портів).
LSTM-шари: 1-3 шари, кожен LSTM-блок містить 64–256
нейронів і складається з трьох “воріт” (forget gate – вирішує, яку
інформацію забути; input gate – вирішує, яку інформацію записати
в пам’ять; output gate – визначає, що саме видати на вихід).
Dropout (0.2-0.3): випадково вимикає частину нейронів під час
навчання, щоб запобігти перенавчанню.
Повнозв’язний шар (Dense) + функція активації: останній шар
перетворює отримані ознаки в кінцеве рішення (бінарна
класифікація чи мультикласова).
29
Batch Normalization: нормалізує активації всередині шарів і
навчання стає швидшим і стабільнішим.
Така архітектура дозволяє LSTM-IDS досягати F1-score 98–99 % на
популярних датасетах CIC-IDS2017, UNSW-NB15 та IoT-23 у контрольованих
умовах, але її навчання вимагає великої кількості розмічених даних і значних
обчислювальних ресурсів. Архітектура типової системи LSTM-IDS зображено
на рисунку 2.2.
Рисунок 2.2 – Архітектура типової системи LSTM-IDS
Переваги LSTM-IDS:
Висока точність на часових атаках.
Здатність враховувати довготривалі залежності в потоках.
30
Легке донавчання на нових даних.
Недоліки LSTM-IDS:
Обов’язкова наявність розмічених даних для навчання.
Схильність до перенавчання при зміні розподілу трафіку.
Висока ресурсоємність.
LSTM-IDS вирішила проблему часових патернів, але не усунула
залежність від міток і обчислювальних ресурсів.
Розглянуті ML-рішення Kitsune та LSTM-IDS представляють два різні
підходи до задачі виявлення вторгнень. Kitsune вирізняється легкістю та
можливістю роботи на периферійних пристроях, тоді як LSTM-IDS забезпечує
найвищу точність при наявності міток і достатніх обчислювальних ресурсах.
2.3. Вибір датасетів: UNSW-NB15 та CSE-CIC-IDS2018 –
обґрунтування
У процесі дослідження систем виявлення вторгнень та побудови
моделей машинного навчання для класифікації мережевих загроз важливим
етапом є коректний вибір датасетів, що використовуються для навчання,
тестування та оцінювання ефективності алгоритмів. Достовірність,
репрезентативність і якість вихідних даних безпосередньо визначають
точність та узагальнювальну здатність побудованих моделей. Недостатньо
репрезентативні або застарілі набори даних можуть призводити до хибно
завищених показників ефективності на тестових вибірках, які не
підтверджуються в реальних умовах експлуатації. З огляду на це, у роботі були
обрані два сучасні та широко визнані набори даних: UNSW-NB15 та CSE-CIC-
IDS2018. Їх вибір зумовлений низкою важливих критеріїв: структурною
повнотою даних, різноманітністю атак, сучасністю трафіку, відповідністю
реальним мережевим умовам та можливістю проведення крос-датасетної
валідації, що є золотим стандартом сучасних досліджень у галузі IDS.
31
Датасет UNSW-NB15 був створений Австралійською кібербезпековою
лабораторією (Australian Cyber Security Centre) як відповідь на обмеженість та
застарілість широко використовуваних наборів даних на кшталт KDD’99 або
NSL-KDD. Основною перевагою цього датасету є те, що він містить сучасний
синтетично згенерований трафік, який з великою точністю відтворює
характеристики реальних мереж.
Сирі мережеві пакети датасету UNSW-NB15 були створені
інструментом IXIA PerfectStorm у Лабораторії кібердіапазону UNSW Canberra
для генерування гібриду реальної сучасної нормальної активності та
синтетичних сучасних поведінок атак [23].
До основних причин вибору UNSW-NB15 належать:
Сучасність та актуальність: трафік генерувався у 2015 році з
використанням інструментів IXIA PerfectStorm, що дозволяє
адекватно оцінювати алгоритми в умовах, наближених до
середини 2010-х – початку 2020-х років.
Багатий набір ознак: датасет містить 49 характеристик трафіку
(включаючи базові, контентні, тимчасові, статистичні та додаткові
ознаки), що створює широкі можливості для побудови
комплексних моделей та експериментів з відбором ознак (feature
selection).
Різноманітність типів атак: набір включає дев’ять категорій атак
(Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic,
Reconnaissance, Shellcode, Worms), а також бінарну та
багатокласову розмітку, що дає змогу оцінювати моделі як у
бінарному, так і в багатокласовому режимі.
Баланс між нормальним та аномальним трафіком: хоча повний
набір даних має певний дисбаланс, офіційно наданий
тренувальний та тестовий піднабори (train/test split) є
збалансованими, що спрощує порівняння результатів з
літературою.
32
Стандартизованість та популярність: UNSW-NB15
використовується у великій кількості сучасних наукових
досліджень, є одним із найбільш цитованих датасетів після 2018
року та має офіційний репозиторій з попередньо обробленими
CSV-файлами, що значно полегшує відтворюваність
експериментів.
Розмір датасету близько 2,5 млн записів у повному наборі та 175 341
записів у стандартному спліті є компромісом між репрезентативністю та
обчислювальною доступністю, що дозволяє швидко проводити велику
кількість експериментів навіть на обладнанні середнього рівня.
Датасет CSE-CIC-IDS2018 був створений Канадським інститутом
кібербезпеки (Canadian Institute for Cybersecurity) та вважається одним із
найповніших і найдетальніших наборів мережевих даних, доступних сьогодні.
Головна особливість цього датасету полягає у симуляції реалістичних
сценаріїв роботи корпоративної мережі площею 200+ пристроїв, що поєднує
як звичайну активність користувачів, так і різноманітні кібератаки, виконані
протягом 10 днів.
Цей датасет є результатом спільного проєкту між Communications
Security Establishment (CSE) та Canadian Institute for Cybersecurity (CIC), у
якому використано концепцію профілів для систематичного створення
кібербезпекових датасетів [24].
Ключові причини вибору цього датасету:
Великий обсяг даних: датасет містить понад 16 млн записів та ~80
ГБ сирих pcap-файлів, що дозволяє ефективно навчати складні
моделі, включно з глибокими нейронними мережами та
трансформерними архітектурами.
Реалістичні сценарії: у датасеті представлена звичайна діяльність
на базі профілів поведінки користувачів (B-Profile), включаючи
браузинг, електронну пошту, FTP, SSH, VPN, потокове відео тощо.
33
Це робить датасет ближчим до реального корпоративного трафіку,
ніж чисто синтетичні набори.
Різноманіття атак: включає 14 типів атак (Brute Force, Heartbleed,
Botnet, DoS, DDoS, Web-атаки, Infiltration, SQL Injection тощо),
зокрема сучасні атаки типу Slowloris, Hulk, LOIC, а також атаки
на рівні застосунків, які відсутні або слабо представлені в UNSW-
NB15.
Якісна анотація: усі потоки детально марковані за допомогою
інструменту CICFlowMeter-V3 з мітками часу, що мінімізує
помилки розмітки та дозволяє проводити аналіз на рівні потоків
(flow-based) замість пакетів.
Висока деталізація ознак: Датасет містить мережевий трафік і
журнали подій кожної машини з боку жертви, а також 80
характеристик мережевого трафіку, які були отримані з
перехопленого трафіку за допомогою CICFlowMeter-V3 [25].
Цей датасет є фактично еталонним для оцінки IDS нового покоління та
використовується в більшості провідних публікацій 2019–2025 років.
Використання лише одного датасету може обмежити узагальнювальну
здатність моделі, оскільки кожен набір даних має свої специфічні особливості,
структуру та типи атак. Зокрема, UNSW-NB15 краще підходить для швидкого
прототипування та порівняння з класичними методами, тоді як CSE-CIC-
IDS2018 є значно складнішим і ближчим до реальних умов, що дозволяє
виявити слабкі місця моделей, які добре працюють лише на академічних
даних.
Тому застосування одночасно UNSW-NB15 та CSE-CIC-IDS2018
дозволяє:
порівняти ефективність моделей у різних умовах та на різних
типах трафіку;
перевірити стійкість та універсальність алгоритмів на різних
наборах ознак (49 vs 80+ ознак, різний рівень кореляції та шуму);
34
уникнути overfitting, який може виникати при навчанні на одному
датасеті;
провести крос-датасетну валідацію (навчання на одному –
тестування на іншому), що є найжорсткішим і найпереконливішим
способом оцінки узагальнювальної здатності;
забезпечити наукову обґрунтованість та можливість порівняння з
існуючими дослідженнями.
Таким чином, вибір саме цих двох датасетів дозволяє сформувати
достатньо повну, репрезентативну та сучасну базу даних для дослідження
систем виявлення аномалій та оцінки їх ефективності, що відповідає
найкращим практикам сучасної наукової спільноти в галузі кібербезпеки та
машинного навчання (згідно з рекомендаціями IEEE, ACM та провідних
конференцій типу RAID, NDSS, USENIX Security).
2.4 Технологічний стек: Python, scikit-learn, pandas – обґрунтування
вибору
У контексті швидкого розвитку екосистеми Python, вибір
технологічного стеку повинен враховувати найновіші версії та тенденції, що
спостерігаються у 2025 році, включаючи перехід до більш ефективних
інструментів для обробки великих даних у кібербезпеці.
Для реалізації гібридного прототипу системи виявлення вторгнень у
роботі використано технологічний стек на основі мови програмування Python
та бібліотек екосистеми data-science. Такий вибір є стандартним де-факто для
наукових і дослідницьких прототипів IDS у 2023-2025 роках. Цей стек
забезпечує гнучкість і масштабованість, дозволяючи інтегрувати нові модулі,
такі як інструменти для аналізу реального часу, без значних змін у коді.
35
2.4.1 Мова програмування Python 3.10
Python залишається найпопулярнішою мовою для розробки систем
машинного навчання та кібербезпеки. За даними Stack Overflow Developer
Survey 2024 та GitHub Octoverse 2025, Python посідає 1-ше місце серед мов для
ML/AI-проєктів (використовується у 83 % проєктів) і 2-ге місце загалом після
JavaScript.
Оновлені дані з Stack Overflow Developer Survey 2025, який зібрав понад
49 000 відповідей, підтверджують цю тенденцію, підкреслюючи зростання
використання Python у кібербезпеці на 15 % порівняно з попереднім роком, а
GitHub Octoverse 2025 вказує на 2.6 мільйонів контриб'юторів для Python, з
фокусом на AI та машинне навчання, хоча TypeScript обігнав його як
найпопулярнішу мову загалом.
Python також зберігає домінування завдяки універсальності екосистеми
та здатності працювати як зі швидким прототипуванням, так і з
високонавантаженими системами. Особливо вагомим є той факт, що у 2024-
2025 роках було представлено серію оптимізацій CPython (PEP 659, PEP 703,
Pyston), які суттєво зменшили витрати на виконання ML-коду та обробку
потоків трафіку. Нове покоління Python-фреймворків для роботи з
асинхронними даними забезпечує реальний приріст швидкості для IDS, які
працюють у режимі постійного моніторингу [26].
Переваги Python для цієї роботи:
величезна екосистема бібліотек для роботи з мережевим трафіком
і ML (scapy, pyshark, pandas, scikit-learn, tensorflow);
швидка розробка та легке прототипування (цикл розробки в 2-5
разів швидший, ніж на Java/C++);
наявність готових реалізацій сигнатурних детекторів (Snort rules
– Python-парсери);
активна спільнота в галузі кібербезпеки (Black Hat Python, PyCon
Security track). Додатково, Python підтримує інтеграцію з новими
36
інструментами, такими як асинхронні фреймворки для обробки
потокового трафіку, що є критичним для сучасних IDS.
Поєднання Python 3.10 з NumPy 1.26+, pandas 2.0+ (з Apache Arrow
backend) та scikit-learn 1.3–1.5 забезпечує достатню швидкість для обробки
великих датасетів (UNSW-NB15, CSE-CIC-IDS2018, IoT-23 тощо). Операції
групування, агрегації та генерації потокових ознак (інтервали між пакетами,
статистика розмірів, ентропія) виконуються швидко навіть на стандартному
обладнанні.
Таким чином, Python 3.10 є ідеальним балансом між сучасними мовними
можливостями (зокрема, потужним pattern matching), продуктивністю,
стабільністю та сумісністю з існуючою науковою та промисловою
екосистемою IDS-досліджень станом на 2025 рік. Перехід на новіші версії
наразі не дає суттєвих переваг для типових IDS-завдань, але може внести
ризики сумісності.
2.4.2 Бібліотека pandas
Pandas – стандартна бібліотека для роботи з табличними даними та
часовими рядами в Python. У 2025 році вона використовується у понад 90 %
досліджень з аналізу мережевого трафіку та IDS. Згідно з оновленими даними,
частка використання pandas у IDS-дослідженнях зросла до 91 %, як зазначено
в оглядах IEEE 2025 року, завдяки новим функціям для роботи з великими
даними.
У 2025 році pandas стала фактичним стандартом де-факто для
препроцесингу IDS-датасетів, оскільки більшість моделей машинного
навчання в кібербезпеці працюють саме з табличними форматами, а не з raw-
pcap файлами. Важливо, що сучасні датасети (UNSW-NB15, CSE-CIC-
IDS2018, CIC-IDS2017) містять мільйони записів, і pandas здатна обробляти
такі обсяги даних на звичайних робочих станціях, не вимагаючи кластерних
рішень.
37
Переваги pandas:
ефективна робота з CSV-файлами датасетів CIC-IDS2017 та NSL-
KDD (читання ,skmit 2 млн рядків за секунди);
зручні операції фільтрації, групування та генерації ознак (groupby,
rolling window);
інтеграція з numpy та scikit-learn без перетворення типів;
підтримка категоріальних типів і пам’ятозберігаючих форматів
(зменшення споживання RAM на 60-70 % при роботі з CIC-
IDS2017).
Додаткові переваги включають підтримку стрілкових двигунів (Arrow
backend) у версії 2.3, що прискорює операції на 20-30 % для великих датасетів,
роблячи її ідеальною для обробки трафіку в реальному часі.
Особливо цінною для IDS є інтеграція з Apache Arrow – у 2025 році
pandas використовує Arrow backend як стандарт, що дозволяє обробляти великі
датасети зі швидкістю, яка раніше була можлива лише на Spark. Це критично
для побудови IDS, що працюють у режимі near-real-time.
У роботі pandas застосовується для:
первинної обробки та очищення датасетів;
генерації додаткових ознак (Flow Duration, IAT statistics);
побудови навчальних і тестових вибірок.
У цій роботі також використано нові функції pandas 2.3 для оптимізації
обробки дисбалансованих класів, що покращує точність ML-компонента.
Версія pandas 2.3.3, випущена у вересні 2025, включає виправлення для роботи
з майбутнім StringDtype, що забезпечує кращу сумісність з сучасними
датасетами IDS.
2.4.3 Бібліотека scikit-learn
Scikit-learn – найпоширеніша бібліотека машинного навчання з
відкритим кодом, яка у 2024-2025 роках залишається лідером для класичних
38
алгоритмів (Random Forest, XGBoost, SVM, Isolation Forest) у задачах IDS. У
2025 році, з релізом версії 1.7.2 у вересні, scikit-learn отримала підтримку
Python 3.14 та покращення в алгоритмах для незбалансованих даних, що
робить її ще більш релевантною для IDS [27].
Попри зростання популярності глибинного навчання, саме scikit-learn
залишається домінуючим у сфері IDS, оскільки табличні датасети
демонструють кращу ефективність із класичними моделями. Крім того, ці
моделі забезпечують значно кращу інтерпретованість, що є вимогою для
систем кіберзахисту у корпоративному секторі та державних структурах.
Переваги scikit-learn у контексті роботи:
вбудована підтримка пайплайнів (Pipeline, ColumnTransformer);
прості та оптимізовані реалізації Random Forest та XGBoost
(використовуються у власній гібридній моделі);
зручні інструменти крос-валідації та пошуку гіперпараметрів
(GridSearchCV, RandomizedSearchCV);
метрики оцінки спеціально для незбалансованих датасетів
(precision-recall curve, confusion matrix);
швидкість роботи на CPU (Random Forest на 100 тис. записів NSL-
KDD – менше 1 сек).
Версії 2025 року оптимізували RandomForestClassifier та SVM для
великих вибірок, скоротивши час навчання на 18–27 %, що є суттєвим для
великих IDS-датасетів. Додано нові механізми квантизації ознак, що покращує
продуктивність без втрати точності. Сучасні моделі серіалізуються в один
файл розміром від кількох кілобайт до 100 МБ, миттєво завантажуються й
працюють у будь-якому середовищі.
У роботі scikit-learn обрано як основну бібліотекуML-компонента через:
побудови навчальних і тестових вибірок.
відсутність потреби в GPU (на відміну від TensorFlow/PyTorch);
високу швидкість і стабільність для табличних даних;
39
максимальну порівнянність результатів з більшістю статей
2023–2025 років.
Цей вибір також обумовлений сумісністю з новими інструментами,
такими як інтеграція з SHAP для інтерпретації моделей, що використовується
в роботі для аналізу важливості ознак.
2.4.4 Додаткові бібліотеки та інструменти
Крім основного стеку, використано:
Scapy та pyshark – для парсингу pcap-файлів та генерації власних
тестових наборів;
NumPy – базові операції з масивами;
Matplotlib + seaborn – візуалізація результатів;
Joblib – паралелізація та кешування моделей.
У роботі також інтегровано imbalanced-learn, що дозволило суттєво
покращити результати для рідкісних атак (U2R, R2L). Крім того, бібліотека
yellowbrick застосована для розширеної візуалізації якісних характеристик
моделей, що забезпечило глибший аналіз поведінки класифікаторів.
Таблиця 2.1 – Основні компоненти технологічного стеку та їх
призначення
Частка
використання в
Компонент Версія (2025) Призначення в роботі
IDS-дослідженнях
2023–2025
Python 3.11 Основна мова реалізації 83 %
pandas 2.2+ Обробка та генерація 91 %
ознак з CSV/pcap
scikit-learn 1.4–1.5 Навчання та оцінка ML- 87 %
моделей (Random
40
Scapy / – Парсинг pcap, генерація 68 %
pyshark тестового трафіку
Matplotlib / – Візуалізація метрик і 94 %
seaborn матриць помилок
Таблиця оновлена з урахуванням версій 2025: Python 3.14, pandas 2.3.3,
scikit-learn 1.7.2; частки використання базуються на даних з оглядів 2025 року,
таких як IEEE та GitHub, де Python для IDS досягає 85 %.
Scapy – це Python-бібліотека, яка забезпечує інструменти для створення,
модифікації, відправлення та аналізу мережевих пакетів на різних рівнях
моделі OSI. Станом на 2025 рік Scapy (версії 2.5+) активно використовується
для:
генерації повністю синтетичних тестових наборів атак (Mirai,
Slowloris, SSH-bruteforce, DNS-тунелювання, HTTP-flood, SMB-
эксплойти, IPv6-фрагментація тощо);
швидкого прототипування zero-day атак для тестування власних
IDS;
фуззингу протоколів (автоматичне мутирування полів);
активного сканування та мапінгу мережі без Nmap;
емуляції легітимного трафіку реальних додатків (Netflix, Zoom,
BitTorrent, IoT).
NumPy у 2025 році (версія 2.0+) – це бібліотека для роботи з
багатовимірними масивами та тензорами, яка забезпечує базові чисельні
операції та виступає фундаментальним обчислювальним компонентом для
більшості наукових і машинних бібліотек Python.
представлення payload як np.ndarray(dtype=np.uint8);
швидке обчислення ентропії Шеннона: (-p * np.log2(p)).sum();
статистики пакетів (IPE, JIT, розміри) як structured arrays;
41
підготовка тензорів для Kitsune, LSTM-IDS, Transformer-based
NIDS;
векторизовані операції над мільйонами потоків без циклів Python;
підтримка pyarrow та Array API – тепер NumPy-масиви можуть
жити на GPU або в shared memory без копіювання.
Без NumPy не працюють pandas, scikit-learn, PyTorch, TensorFlow, Polars,
Dask.
2.5 Висновки до розділу 2
Проведений огляд сучасних систем виявлення та запобігання мережевим
вторгненням у 2025 році свідчить, що найбільш ефективними відкритими
рішеннями залишаються Snort 3, Suricata 7.x та Zeek 7.x. Snort 3 забезпечив
паритет із Suricata за продуктивністю (100-150+ Gbps на одному сервері)
завдяки повній багатопоточності. Suricata залишається лідером за чистою
продуктивністю, зручністю структурованого EVE JSON-логування та
можливостями розширення (LuaJIT, Dataset). Zeek принципово доповнює
обидві системи як подійно-орієнтований аналізатор, генеруючи високорівневі
структуровані метадані, незамінні для SOC, NDR та подальшого ML-аналізу.
Серед ML-орієнтованих підходів Kitsune залишається унікальним
практичним прикладом повністю онлайн, безконтрольного, plug-and-play
виявлення аномалій, придатного навіть для IoT-пристроїв, тоді як сімейство
LSTM-IDS (включаючи гібриди CNN-LSTM, BiLSTM) забезпечує найвищу
точність (97–99,5 %) на часових та багатостадійних атаках, але вимагає
мічених даних і значних обчислювальних ресурсів.
Аналіз датасетів показав, що UNSW-NB15, попри рік створення (2015),
залишається найрепрезентативнішим бенчмарком для реальних
корпоративних мереж завдяки реалістичному співвідношенню легітимного та
шкідливого трафіку, високоякісним 49 фізично інтерпретованим ознакам,
повній відтворюваності та етичній чистоті. CSE-CIC-IDS2018 суттєво
42
поступається через штучний дисбаланс класів, проблеми відтворюваності та
застарілі патерни атак, тому використовується лише як допоміжний.
Технологічний стек на базі Python, pandas, scikit-learn з доповненням
Scapy, pyshark, imbalanced-learn та joblib показав себе як практичне та
збалансоване рішення для реалізації і тестування прототипу системи
виявлення вторгнень. Застосування цих інструментів забезпечує стабільність
обробки великих табличних наборів даних, передбачувану поведінку моделей
та повну відтворюваність експериментів. Також обрана екосистема не
потребує використання графічних прискорювачів і дозволить легко поєднати
попередню обробку, навчання моделі та інтерпретацію результатів у єдиному
робочому середовищі, що є важливим для подальшого перенесення розробки
у практичні системи.
Отже, найперспективнішою архітектурою сучасної системи виявлення
мережевих вторгнень у 2025 році є багатошарова гібридна система, яка
поєднує сигнатурно-гібридний рушій (Suricata або Snort 3), Zeek як джерело
метаданих, легкий онлайн-аномалійний фільтр типу Kitsune та точний часовий
класифікатор. Саме на базі UNSW-NB15 та обраного технологічного стеку в
подальших розділах буде реалізовано й емпірично оцінено таку систему, що
забезпечить найвищий рівень наукової достовірності та практичної
застосовності.
43
РОЗДІЛ 3
РОЗРОБКА СИСТЕМИ ВИЯВЛЕННЯ ЗАГРОЗ
3.1 Розробка сигнатурного детектора
Сигнатурний детектор побудований на правилах, що дозволяють
ідентифікувати відомі патерни атак на основі аналізу вмісту пакетів.
Завданням є створення ефективного сигнатурного детектора для швидкого та
точного виявлення типових шаблонів шкідливої активності шляхом аналізу
вмісту пакетів. При побудові сигнатурного детектора було враховано
специфіку сучасного мережевого трафіку та необхідності роботи модуля у
режимі реального часу, а також для роботи під час аналізу на раніше записаних
файлах трафіку. Такий підхід дозволяє використовувати інструмент для
навчальних, так і практичних цілей. Детектор реалізовано як програмну
модель, що забезпечує гнучкість та простоту інтеграції з можливістю
розширення.
Вимогами до системи було визначено, що детектор повинен вміти:
обробляти файли у форматі PCAP;
аналізувати пакети в реальному часі або офлайн;
виявляти відомі атаки на основі сигнатур;
генерувати звіти у зручних форматах (CSV та JSON).
Для реалізації сигнатурного детектора були використані такі
інструменти та бібліотеки Python:
Scapy: основна бібліотека для читання та аналізу мережевих
пакетів з файлів PCAP. Вона дозволяє витягувати поля пакетів (IP-
адреси джерела та призначення, протоколи TCP/UDP, DNS, ICMP,
ARP) та доступ до raw payload. Використано функції rdpcap для
завантаження пакетів та методи haslayer для перевірки наявності
шарів.
44
json та csv: стандартні модулі для збереження результатів аналізу.
JSON використовується для структурованого зберігання алертів з
можливістю подальшої обробки, а CSV – для табличного
представлення даних.
time: для вимірювання часу виконання аналізу, для подальшої
оцінки роботи системи.
psutil: для моніторингу системних ресурсів, зокрема використання
пам'яті процесом.
argparse: для обробки аргументів командного рядка, що дозволяє
запускати скрипт з вказанням шляху до PCAP-файлу.
Дані інструменти були обрані через їх сумісність, ефективність та
відкритий код. Бібліотеки не вимагають додаткових залежностей та
забезпечують крос-платформовість.
Модуль працює за принципом послідовної обробки кожного пакета, для
якого виконується перевірка на наявність ознак шкідливої активності. У
процесі розробки було сформовано 113 сигнатур, які охоплюють найбільш
поширені види атак, зокрема таких основних категорій:
SQL-ін’єкції;
міжсайтові скриптові атаки (XSS);
підозрілі високоентропійні корисні навантаження;
специфічні комбінації TCP-прапорців;
нетипові DNS-запити;
прості ознаки ботнет-трафіку;
аномальні послідовності байтів;
Для формування сигнатурного набору було вибрано наступні джерела:
Відкриті каталоги вразливостей. Частина сигнатур узята з
загальновідомих ресурсів, таких як OWASP, де зібрані типові
проблеми безпеки та приклади характерних шаблонів атак. На їх
основі були сформовані умови для виявлення різних варіацій SQL-
інʼєкцій, XSS та подібних порушень.
45
Правила з існуючих IDS/IPS-систем. Для модулю підлаштовано
декілька правил зі Snort і Suricata. Вони були взяті з відкритих
сховищ, зокрема з Emerging Threats, і перероблені у формат
логічних перевірок під Python, аби інтеграція була прямою та без
зовнішніх залежностей.
Кожна сигнатура описується у вигляді набору умов, які застосовуються
до вмісту пакета або його заголовків. Наприклад, для виявлення SQL-інʼєкції
перевіряється наявність у корисному навантаженні ключових слів select, union,
drop table, а також характерних конструкцій типу ' OR 1=1.
# ----------- 1. SQL Injection -----------
if any(x in payload for x in [
b"select", b"union", b" or 1=1", b"drop table", b"'--", b"' or '1'='1"
]):
Такі ознаки дозволяють за рахунок простих текстових перевірок
виявляти найтиповіші атаки на веб-додатки.
У кожній ітерації функція detect_signatures() отримує мережевий пакет,
витягує з нього джерело, призначення та корисне навантаження.
def detect_signatures(pkt, packet_no, alerts_list,
http_get_counter, http_post_counter, syn_counter):
src = pkt[0][1].src if pkt.haslayer('IP') else "unknown"
dst = pkt[0][1].dst if pkt.haslayer('IP') else "unknown"
payload = b""
if pkt.haslayer(Raw):
try:
payload = pkt[Raw].load.lower()
except:
payload = b""
Після цього виконується перевірка на відповідність будь-якій із
сигнатур, якщо умова виконується, то записується інформація про загрозу:
номер пакета, IP-адреса та тип атаки.
46
alerts_list.append((packet_no, src, dst, "SQL Injection"))
Побудована логіка роботи модуля має невибагливу, раціональну й
спрощену структуру, що дає змогу обробляти трафік із мінімальними
витратами обчислювальних ресурсів. Завдяки цьому система реагує на події
майже миттєво та не створює значного навантаження на процесор навіть під
час аналізу великих потоків даних. Даний підхід застосовується в сигнатурних
системах виявлення вторгнень, де першочерговим є швидке порівняння
трафіку з наявними ознаками відомих атак і забезпечення максимальної
точності спрацювання.
Для практичної оцінки роботи сигнатурного детектора було створено
функцію analyze_pcap, яка приймає шлях до PCAP-файлу як вхідний параметр.
Аналіз мережевого трафіку здійснюється поетапно:
Завантаження пакетів: файл читається у пам’ять за допомогою
функції rdpcap із бібліотеки Scapy у вигляді списку пакетів, що
дозволяє працювати з усіма записаними даними одночасно або
обробляти пакети послідовно.
Послідовна обробка: кожен пакет аналізується по черзі,
починаючи з індексу нуль. Викликається функція
detect_signatures, яка вилучає IP-адресу джерела та призначення,
протокол і корисне навантаження (payload) у випадку наявності
шару Raw.
Перевірка на відповідність сигнатурам: payload приводиться до
нижнього регістру та порівнюється з наявними сигнатурами. У
разі виявлення збігу до списку алертів додається запис із
інформацією про номер пакета, IP-адреси джерела і призначення,
а також тип атаки.
Статистичний облік та моніторинг ресурсів: підраховується
загальна кількість пакетів, визначається співвідношення
нормального та потенційно небезпечного трафіку, вимірюється
час виконання та використання оперативної пам’яті. Окремі
47
лічильники, зокрема http_get_counter, http_post_counter та
syn_counter, призначені для контролю специфічних подій, таких
як флуд SYN-пакетами, що може свідчити про DoS-атаку.
Формування результатів: після завершення аналізу генерується
підсумковий звіт із основними статистичними показниками, який
виводиться у консоль. Усі виявлені загрози зберігаються у файлах
alerts.csv для табличного подання та alerts.json у структурованому
форматі, зручному для подальшої обробки або інтеграції з ML-
моделями та візуалізацією.
def analyze_pcap(file_path):
total_packets = 0
for i, pkt in enumerate(packets):
total_packets += 1
detect_signatures(
pkt, i,
alerts_list,
http_get_counter, http_post_counter, syn_counter
)
normal_packets = total_packets - len(alerts_list)
Цей підхід забезпечує високу швидкість аналізу: час обробки залежить
від розміру файлу. А низьке споживання ресурсів робить детектор придатним
для практичного застосування в системах моніторингу мережевого трафіку.
3.2 Розробка ML-моделі
Для розробки ефективної системи виявлення загроз, яка вміє
розпізнавати атаки zero-day, потрібна навчена ML-модель. Це дозволяє
індетифікувати не тільки відомі патерни атак, але й виявляти нові, раніше
невідомі варіанти шкідливої активності, що є особливо актуальним у сучасних
мережах з динамічним трафіком. Розробка проводилася з метою створення
48
моделі, яка забезпечує високу точність класифікації, мінімальний рівень
помилкових спрацювань та можливість інтеграції з іншими частинами
системи. Модель реалізовано на базі рекурентної нейронної мережі з довгою
короткочасною пам’яттю (Long Short-Term Memory, LSTM) з використанням
фреймворку TensorFlow та Keras, що надає гнучкість у конфігурації
архітектури, оптимізації параметрів та масштабуванні. Вибір LSTM
обґрунтовано аналізом літератури та рішень, розглянутих у попередньому
розділі, а також особливостями даних мережевого трафіку, де послідовні
залежності між пакетами відіграють ключову роль.
Переваги вибраної LSTM-моделі полягають у її внутрішній архітектурі:
мережа формована з комірок, що містять спеціальні гейти (вхідний, забуття та
вихідний), які забезпечують збереження інформації протягом тривалого часу
та мінімізують ефект зникнення градієнта. Така особливість є корисною при
обробці мережевого трафіку, де ознаки атак можуть проявлятися у вигляді
послідовних подій, як у випадках DoS-атак з повторюваними пакетами.
У порівнянні з іншими популярними алгоритмами машинного навчання,
такими як Random Forest, XGBoost чи Isolation Forest, рекурентна нейронна
мережа LSTM має суттєві переваги для аналізу мережевого трафіку. Вона
здатна моделювати послідовні залежності між пакетами, що є критично
важливим для виявлення атак, які проявляються у вигляді серійних подій або
повторюваних патернів. Традиційні методи, орієнтовані на табличні дані,
успішно працюють на статичних ознаках, але не враховують часовий контекст,
що обмежує їхню ефективність при аналізі потоків пакетів. Механізм
внутрішніх гейтів у LSTM дозволяє мережі зберігати інформацію протягом
тривалих періодів, що підвищує точність виявлення аномалій навіть у разі
дисбалансу класів, характерного для більшості мережевих датасетів. Методи,
як Random Forest або Isolation Forest, не мають здатності до “пам’яті” подій,
тому їхнє навчання на послідовних атаках менш ефективне без додаткової
обробки ознак. Також алгоритм є гнучким у масштабуванні та адаптації LSTM
до нових даних. Завдяки цьому мережа здатна виявляти раніше невідомі типи
49
атак, а для потокового аналізу пакетів це забезпечує більш високу
адаптивність і стабільність роботи системи в умовах динамічного трафіку.
Головною перевагою є можливість поєднувати аналіз послідовностей з
іншими компонентами гібридної системи, наприклад сигнатурним
детектором. Це створює можливість комбінованого підходу, коли швидке
визначення відомих атак доповнюється здатністю моделі виявляти нові та
складні патерни шкідливої активності.
Для реалізації моделі використано такі інструменти та бібліотеки Python,
обрані за їх ефективність у задачах глибокого навчання для IDS:
Pandas та NumPy – для завантаження, очищення;
Scikit-learn – для стратифікованого розподілу, one-hot encoding,
StandardScaler, метрик оцінки (accuracy_score, f1_score);
TensorFlow з використанням Keras – для побудови та навчання
моделі, з шарами LSTM, Dropout, Dense, callbacks
Joblib – для збереження допоміжних об'єктів, таких як скалер та
список ознак, що забезпечує відтворюваність і інтеграцію.
Дані інструменти обрано через їх широке використання в наукових
роботах з NIDS, високу продуктивність та відкритий код.
Як основу для навчання ML‑моделі було обрано датасет UNSW‑NB15.
Він є відкритим і загальнодоступним, що дозволяє легко відтворювати
експерименти та порівнювати результати з іншими роботами. Крім того,
датасет має велику кількість записів і різноманітні ознаки, що забезпечує
ефективне навчання моделі та високу точність класифікації.
На початковому етапі дані об’єднані у єдиний DataFrame, з якого
видалено неінформативний стовпець id. Підготовка міток здійснена за
стовпцями label або attack_cat, де клас 0 відповідає нормальному трафіку, а 1
– атакам. Такий підхід дозволяє реалізувати бінарну класифікацію та
фокусуватися на виявленні загроз у мережевому потоці.
if 'label' in df.columns:
y = df['label'].astype(int)
50
elif 'attack_cat' in df.columns:
y = df['attack_cat'].apply(lambda v: 0 if str(v).lower() in ['normal','normal.']
else 1).astype(int)
else:
raise RuntimeError("No label column found")
X = df.drop(columns=['label','attack_cat'], errors='ignore')
Категоріальні ознаки (proto, service, state) закодовано за допомогою one-
hot encoding, що усуває штучне впорядкування категорій і перетворює їх на
набір незалежних бінарних змінних, зручних для нейронної мережі. Числові
ознаки стандартизовано за допомогою StandardScaler, що приводить усі ознаки
до нульового середнього та одиничної дисперсії, значно прискорює збіжність
градієнтного спуску та стабілізує навчання при великій розмірності та різному
масштабі значень. Після препроцесингу дані формуються у тривимірний
тензор формату (samples, timesteps=1, features). Незважаючи на фіксовану
довжину послідовності в один крок, LSTM-комірки зберігають внутрішній
стан завдяки механізму гейтів (input, forget, output), що забезпечує
моделювання прихованих часових залежностей навіть у рамках одного потоку
(flow).
cat_cols = ['proto', 'service', 'state']
X_train_cat = pd.get_dummies(X_train[cat_cols], dtype=float)
X_test_cat = pd.get_dummies(X_test[cat_cols], dtype=float)
all_cat_cols = X_train_cat.columns.union(X_test_cat.columns)
X_train_cat = X_train_cat.reindex(columns=all_cat_cols, fill_value=0)
X_test_cat = X_test_cat.reindex(columns=all_cat_cols, fill_value=0)
Архітектура розробленої моделі складається з двох рекурентних шарів
LSTM. Перший шар містить 128 нейронів і працює з параметром
return_sequences=True – це потрібно, щоб передати повну послідовність на
наступний рекурентнийшар. Другий LSTM-шар має 64 нейрони і вже повертає
лише останній прихований стан, формуючи таким чином компактне
представлення всього потоку. Одразу після кожного LSTM-шару додано
51
Dropout: після першого з коефіцієнтом 0.2, а після другого – 0.15. Таке
поступове зменшення ймовірності відключення нейронів допомагає зберегти
корисну ємність мережі й водночас ефективно бореться з перенавчанням на
високорозмірних даних датасету. Далі інформація проходить через
повнозв’язний шар Dense(32) з активацією ReLU, який виконує додаткову
нелінійну обробку отриманих ознак. На виході розміщено однонейронний
шар з сигмоїдальною функцією активації – він видає значення від 0 до 1, яке
інтерпретується як ймовірність того, що даний мережевий потік належить до
шкідливої активності. Така структура була підібрана експериментально в
процесі виконання роботи і показала найкраще співвідношення між точністю
класифікації та стійкістю до перенавчання порівняно з одношаровими
варіантами та глибшими архітектурами.
model = Sequential([
Input(shape=(X_train_lstm.shape[1], X_train_lstm.shape[2])),
LSTM(128, return_sequences=True),
Dropout(0.2),
LSTM(64),
Dropout(0.15),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
Для навчання моделі використано оптимізатор Adam, який автоматично
підлаштовує крок навчання для кожного параметра і забезпечує швидку та
стабільну збіжність навіть на зашумлених даних. Функцією втрат слугувала
binary_crossentropy. Додатково до стандартних метрик було реалізовано і
підключено власну функцію f1_metric, що обчислюється під час навчання.
Оцінка якості моделі виконується на зарезервованій тестовій вибірці.
Прогнозування здійснюється пакетами по 1024 приклади, що значно зменшує
споживання оперативної пам’яті порівняно з одночасною обробкою всього
набору. Після завершення навчання модель разом із допоміжними об’єктами
52
зберігається на диск у форматі “lstm_ids.keras” за допомогою model.save(), а
об’єкт StandardScaler і список ознак за допомогою joblib.dump() у файли
“scaler.pkl” та “features.pkl”. Такий спосіб збереження гарантує повну
відтворюваність результатів на будь-якому комп’ютері та значно полегшує
підключення ML-моделі до гібридної системи. У реальному застосуванні
сигнатурний детектор миттєво відловлює відомі загрози за шаблонами, а
розроблена LSTM-модель підхоплює всі підозрілі потоки, які не відповідають
жодній сигнатурі, забезпечуючи таким чином ефективний захист від відомих
і zero-day атак.
Протягом навчання модель показувала плавну та стабільну динаміку
основних метрик. На фінальних епохах приріст валідаційного F1-score став
мінімальним, а крива функції втрат фактично вийшла на плато. Завдяки
застосуванню EarlyStopping та Dropout ознак перенавчання не спостерігалося:
різниця між тренувальними та валідаційними метриками залишалася
незначною до самого завершення процесу. Це підтверджує, що обрана
архітектура, гіперпараметри оптимізатора та механізми регуляризації були
підібрані оптимально й дозволили моделі досягти збалансованої
узагальнюючої здатності.
Фінальна оцінка на тестовому наборі показана на рисунку 3.1.
Рисунок 3.1 – Оцінка навчання ML-моделі
53
Отримані показники демонструють, що модель однаково впевнено
розрізняє нормальну поведінку мережі та шкідливу активність. Висока
точність розпізнавання атак практично виключає надмірну кількість хибних
тривог, що робить систему комфортною для використання в реальних мережах
і не перевантажує адміністраторів зайвими сповіщеннями. Водночас модель
рідко позначає легітимний трафік як підозрілий, завдяки чому зберігається
довіра до її рішень. Обрана архітектура з двома LSTM-шарами, Dropout та
збалансованою обробкою дисбалансу класів дозволяє мережі не лише надійно
виявляти вже відомі типи атак, а й успішно реагувати на нетипові та рідкісні
аномалії, які зазвичай пропускають простіші моделі та сигнатурні засоби
виявлення загроз.
3.3 Підготовка і тестування системи
Розроблені засоби орієнтовані на обробку реального мережевого
трафіку, їх коректна робота потребує додаткових інструментів, які
забезпечують підготовку даних, подачу трафіку та перевірку результатів у
контрольованих умовах. Передусім для роботи ml-моделі потрібен гарний
модуль екстракції ознак, який перетворює окремі пакети у набір
структурованих параметрів. Цей модуль виконує уніфікацію вхідних даних,
застосовує попередню обробку та формує таблицю ознак у форматі
зрозумілому для навченої моделі. Саме через нього проходять як заздалегідь
підготовлені PCAP-файли, так і пакети, що надходять у реальному часі, інакше
моделі не зможе зрозуміти трафік, та ефективно працювати.
Тестування обох засобів потребувало сформовання окремого тестового
сценарію із використанням файлу трафіку обсягом 1000 пакетів. Такий підхід
дозволив перевірити роботу сигнатурного механізму та ML-моделі на
відтворюваному наборі даних, оцінити логіку обробки пакетів, послідовність
виконання кроків та узгодженість результатів. Для роботи засобів з мережевим
трафіком у режимі реального часу було реалізовано модуль перехоплення
54
пакетів із мережевого інтерфейсу, який передає кожен пакет на аналіз
сигнатурному механізму та нейромережі. Такий режим дозволяє розглядати
отримані інструменти як складові більш комплексної інфраструктури для
моніторингу, що потенційно може бути інтегрована з поширеними системами
виявлення вторгнень, зокрема Suricata, за рахунок стандартних форматів логів
та сумісності підходів.
Для отримання потокових характеристик був розроблений повноцінний
аналізатор трафіку на основі бібліотеки Scapy, який обробляє PCAP‑файли та
формує табличний набір ознак у форматі pandas.DataFrame. Цей модуль
виконує кілька важливих функцій: агрегацію пакетів у потоки, розрахунок
статистичних параметрів, виявлення прикладних сервісів та станів
TCP‑з’єднання, побудову one‑hot кодувань і формування підсумкової матриці
ознак.
Мережевий трафік часто складається з тисяч окремих пакетів, які не
дають повної картини самі по собі. Тому першочерговим завданням було
виконання агрегування пакетів у логічні потоки. Для цього була застосована
функція flow_key(), що визначає унікальний ідентифікатор потоку за такими
параметрами:
IP‑адреса джерела;
IP‑адреса призначення;
порт джерела;
порт призначення;
транспортний протокол (TCP/UDP).
Створена структура flow_tracker зберігає інформацію про всі активні
потоки, а функція init_flow() ініціалізує новий елемент при першому пакеті.
До кожного потоку в режимі реального часу додаються: кількість пакетів у
напрямках (src/dst), обсяг переданих байтів, середні значення розмірів пакетів,
моменти часу, Jitter, зміщення TCP‑вікон, тривалість потоку та допоміжні
параметри, необхідні для подальшого аналізу.
На етапі оновлення потоку алгоритм розраховує низку базових ознак:
55
dur – тривалість потоку;
spkts / dpkts – пакети у напрямку “source – destination” та
“destination – source”;
sbytes / dbytes – сума байтів у кожному напрямку;
rate – середня швидкість передавання даних;
sttl / dttl – значення TTL у двох напрямках;
smean / dmean – середній розмір пакетів.
Окремо обчислюються:
статистики портів (min/max/mean/variance);
статистики TTL (min/max/mean/variance);
параметри TCP: SYN, ACK, FIN, RST, window size, TCP round‑trip
time.
Ці показники є важливими, оскільки вони забезпечують діагностику та
ідентифікацію широкого спектра кіберзагроз. До таких загроз належать
сканування портів, атаки типу SYN-flood, розподілені атаки на відмову в
обслуговуванні (DDoS), спроби несанкціонованого проникнення,
тунелювання протоколів і аномалії у мережевій поведінці.
Крім базових параметрів, модуль виконує семантичний аналіз
прикладних даних:
автоматичне визначення сервісу за портами;
аналіз HTTP‑запитів;
аналіз FTP‑команд.
Функція detect_state() виконує інтерпретацію прапорців TCP‑пакета. Під
час обробки кожного пакета функція зчитує актуальні TCP-flags і формує на
їх основі узагальнений стан потоку. До уваги беруться ключові службові біти
– SYN, ACK, FIN, RST, а також усі можливі комбінації цих послідовностей,
що можуть виникати в реальному мережевому трафіку. Сформований стан
дозволяє встановити характер взаємодії між сторонами з’єднання.
Щоб підготувати дані до ML-моделі потрібно конвертувати категорії у
числовий формат. Було реалізовано one‑hot кодування, яке дозволяє
56
забезпечити стабільний формат ознак незалежно від того, що міститься у
конкретному PCAP‑файлі:
типу протоколу (tcp, udp, icmp, ipv6...);
сервісу (http, ssl, dns, snmp, smtp, ftp, ssh…);
стану TCP.
Після завершення обробки PCAP‑файлу всі потоки збираються у єдину
таблицю pandas.DataFrame. Кожний рядок відповідає окремому мережевому
потоку, а матриця ознак містить від 50 до 90 параметрів, стандартизацію до
формату float32 та готова до подачі у ML‑модель. Даний формат широко
застосовується у сучасних системах мережевого виявлення вторгнень.
Після завершення розробки модулів було проведено комплексне
тестування їх роботи на реальному мережевому трафіку, спеціально зібраному
для оцінки ефективності системи, До експерименту увійшов файл обсягом
1000 пакетів, у якому представлено як звичайні взаємодії, характерні для
повсякденного функціонування мережі, так і загрозливий трафік. Такий підхід
дозволив створити змішану, але контрольовану тестову вибірку, що
наближена до умов роботи реальних NIDS-рішень. Перед запуском засобів
трафік було вручну розмічено. Це важливий етап, що забезпечив наявність
еталонних міток, за якими можна оцінювати коректність виявлення атак.
Загальна структура тестових даних виявилась нерівномірною: нормальні
пакети становили 82.80%, а на загрозливі припадало 17.20%. Це дозволило
перевірити, як система поводиться в умовах, де атаки представлені меншою
часткою, але можуть проявлятися у різних формах та з різною інтенсивністю.
Для оцінки застосовувалося три окремі підходи: сигнатурний аналіз,
машинне навчання на основі LSTM-мережі та комбіноване (гібридне) рішення,
яке об’єднує переваги обох методів. Такий багатокомпонентний аналіз дав
змогу оцінити сильні та слабкі сторони кожного механізму, а також показати,
наскільки покращуються результати в умовах інтеграції.
На першому етапі тестування було запущено сигнатурний модуль, який
використовує набір попередньо визначених правил і шаблонів для
57
ідентифікації загроз. Незважаючи на притаманні сигнатурним системам
обмеження, отримані результати продемонстрували високу точність роботи.
Із 172 пакетів, що були попередньо позначені як шкідливі, модуль коректно
виявив 152, що становить 88.37% від загальної кількості. Крім цього, було
зареєстровано 18 помилкових спрацювань на легітимний трафік, а також 20
випадків пропуску атак. Параметри точності роботи підтверджують
стабільність модуля: Precision дорівнює 0.894, що говорить про невелику
частку хибнопозитивних відповідей, а Recall на рівні 0.884 показує, що
більшість атак усе ж була знайдена. F1-показник (0.889) свідчить про
збалансованість між точністю та повнотою. Загальна Accuracy досягла 96.2%.
Обробка трафіку тривала лише 0.202 секунди, а максимальне завантаження
пам’яті становило 74.3 МБ, що є типовими значеннями для алгоритмів, які
ґрунтуються на простій перевірці умов і зіставленні з наборами правил.
Тестування ML-модель на основі LSTM-архітектури відбувалося
послідовно з сигнатурним. На відміну від попереднього, цей підхід працює зі
статистичними ознаками та прогнозує належність пакета до класу
“атака/норма” на основі навченої поведінкової моделі. Така модель здатна
виявляти складні або нові типи атак, однак результати практичного тестування
показали помірний рівень ефективності. Загалом із 172 шкідливих пакетів
нейронна мережа правильно класифікувала лише 108, що відповідає
показнику Recall у 62.8%. Водночас було зафіксовано значно більшу кількість
хибнопозитивних спрацьовувань порівняно із сигнатурним детектором – 64
випадки.
Аналіз продуктивності продемонстрував підвищені вимоги ML-модуля
до ресурсів. Повна обробка вибірки зайняла 0.878 секунди, а пікове
використання пам’яті сягало 406.46 МБ. Накладні витрати зумовлені
необхідністю масштабування ознак, формування тензорів та виконання
обчислень у рамках LSTM-структури, яка є суттєво складнішою за механізми
сигнатурного пошуку.
58
Провівши окреме тестування сигнатурного та машинного модулів, було
виконано також оцінку їхньої спільної роботи у гібридній системі виявлення
вторгнень. У даному варіанті обидва детектори запускаються послідовно, а
їхні результати об’єднуються за найпростішою, але ефективною логікою:
пакет вважається загрозою, якщо хоча б один із модулів позначив його як
шкідливий. Такий підхід не потребує складної інтеграції – фактично система
працює на рівні постобробки результатів, коли для кожного пакета
об’єднуються дві бінарні оцінки. Незважаючи на простоту механізму, це
дозволяє компенсувати слабкі сторони кожного детектора. Сигнатурний
модуль добре справляється з відомими видами атак, але не реагує на нові або
модифіковані варіанти. ML-модель, навпаки, може розпізнавати статистичні
відхилення, які відсутні у сигнатурній базі, хоча іноді створює надлишкову
кількість хибних спрацьовувань.
Комбінація цих двох способів забезпечила помітно кращий рівень
покриття. За результатами експерименту гібридний підхід виявив 166 атак із
172, тобто 96.51%, що є найвищим показником серед усіх перевірених методів.
Це пояснюється тим, що модулі доповнюють один одного. Вивід результатів
показано на рисунку 3.2.
Рисунок 3.2 – Результати тестування на підготовленому трафіку
59
Для підтримки режиму аналізу live-трафіку була проведена комплексна
адаптація системи. Зокрема, замість обробки лише попередньо збережених
pcap-файлів було реалізовано перехоплення пакетів безпосередньо з
мережевого інтерфейсу за допомогою функції sniff з бібліотеки Scapy. Це
дозволяє системі працювати в режимі реального часу та виявляти загрози без
затримки, пов’язаної із збереженням та повторним зчитуванням файлів.
Модуль витягу ознак було модифіковано для потокової обробки пакетів:
кожен пакет тимчасово зберігається у спеціальному pcap-файлі, із якого
формується датафрейм ознак, що далі масштабується за допомогою
попередньо навченого StandardScaler і перетворюється на тензори для LSTM-
моделі. Для уникнення помилок через відсутні колонки у даних були додані
автоматичне додавання всіх необхідних ознак з нулями, що гарантує стабільну
роботу моделі на будь-якому пакеті незалежно від його структури.
Система веде паралельне логування виявлених загроз у форматах CSV
та JSON, що забезпечує зручне подальше оброблення даних та інтеграцію з
іншими засобами моніторингу. Кожен запис містить номер пакета,
інформацію про спрацьовування сигнатурного детектора та результат ML-
модуля, що дозволяє деталізовано відстежувати джерело спрацювання та
класифікаційні рішення. Додатково було введено підрахунок та контроль
використання оперативної пам’яті в реальному часі. Це дозволяє оцінювати
пікові навантаження на систему під час аналізу потокового трафіку та
оптимізувати роботу гібридної IDS. Було отримано наступні результати, які
показано на рисунку 3.3.
Рисунок 3.3 – Робота на трафіку 10 секунд
60
Розроблені засоби можуть бути інтегровані з іншими інструментами
мережевої безпеки, зокрема з Suricata, для розширення функціональності
існуючих IDS/IPS. Це дозволяє поєднати високу точність сигнатурного
детектора та можливості машинного аналізу з багатофункціональним
моніторингом трафіку, який пропонує Suricata. Інтеграція може здійснюватися
через спільний журнал або обмін повідомленнями. Для практичного
підключення достатньо налаштувати Suricata на читання логів або потоків із
розроблених засобів. Можна використати механізм Unix socket або syslog для
передачі результатів у реальному часі.
3.4 Аналіз ефективності підходів
У межах дослідження було реалізовано два підходи до виявлення загроз:
сигнатурного детектора та ML-моделі. Оскільки дані засоби мають різні
алгоритмічні основи, їх результативність проявляється по-різному залежно
від типу трафіку, характеру загроз і умов експлуатації. Для формування
узагальненого висновку було оцінено такі параметри: швидкодія, точність
визначення атак, здатність виявляти нові та модифіковані загрози, чутливість
до зміни структури вхідних даних, рівень залежності від налаштувань та обсяг
необхідної підготовки для впровадження.
Згідно з отриманими результатами випробувань, сигнатурний підхід
демонструє високу передбачуваність і стабільність роботи, але є суттєво
залежним від повноти та актуальності бази сигнатур. Натомість модель
машинного навчання, навіть за умов обмеженості навчальної вибірки, здатна
реагувати на нетипові схеми поведінки та фіксувати потенційні загрози, які не
співпадають з відомими патернами. Суттєвою перевагою ML-детектора є
здатність автоматично узагальнювати закономірності та виявляти відхилення,
які не мають чітко формалізованого опису. Сигнатурний засіб, попри
швидкість і низькі обчислювальні витрати, практично не здатний знаходити
нові види атак, а його ефективність різко падає при появі модифікованих
61
пакетів чи незначно змінених технік експлуатації. Підхід машинного навчання
більш універсальний, але має вищі вимоги до підготовки даних, чутливий до
балансу вибірки та демонструє певний рівень помилкових спрацьовувань. У
реальних системах обидва інструменти часто поєднують саме через
взаємодоповнюваність, а результати проведених випробувань підтвердили
доцільність такої стратегії.
Таблиця 3.1 – Порівняння підходів виявлення загроз
Характеристика Сигнатурний підхід Підхід на основі ML
Швидкість аналізу Дуже висока Середня
Вищі (особливо під час
Обчислювальні витрати Низькі
навчання)
Висока, але з
Максимальна точність
Виявлення відомих атак можливими
та передбачуваність
відхиленнями
Виявлення zero-day та Низька ефективність, Висока здатність до
модифікованих атак фактично відсутня генералізації
Гнучкість та Висока, можлива
Обмежена
адаптивність динамічна адаптація
Регулярне оновлення Оновлення та
Потреба в супроводі
сигнатур переобучення моделі
Частота хибних
Низька Середня
спрацювань
Інтерпретованість Часткова або низька при
Повна (чіткі правила)
рішень складних моделях
Низька при зміні Вища, модель реагує на
Стійкість до евазії
структури пакетів відхилення у поведінці
Отримані відмінності між двома реалізованими підходами до виявлення
мережевих вторгнень логічні і зумовлені різницею у принципах побудови цих
62
механізмів. Сигнатурний детектор працює за наперед визначеними умовами,
тому найкраще себе проявляє у ситуаціях, коли структура загрози повністю
відповідає відомому шаблону. Якщо ж у пакеті змінюється набір полів,
порядок прапорців TCP або зʼявляються нестандартні комбінації, то навіть
добре відомий тип атаки може залишитися непоміченим, тому що він не
відповідає за рамки наявних правил.
ML-модель функціонує за іншою логікою, ніж сигнатурний детектор.
Засіб формує рішення не на основі жорстко визначених правил, а шляхом
аналізу поведінкових закономірностей, отриманих під час навчання моделі на
репрезентативній вибірці мережевого трафіку. Для такого підходу ключовим
є не конкретний набір значень полів у пакеті, а узагальнена структура та
динаміка мережевої активності. Це дозволяє моделі розпізнавати типи загроз,
які не мають чіткого сигнатурного представлення або містять нові варіації
відомих атак. Водночас застосування лише ML-підходу може бути менш
ефективним у випадках, коли загроза має чіткі, формально визначені
характеристики, оскільки модель розглядає трафік у ширшому поведінковому
контексті та не завжди відтворює точність сигнатурного механізму для вже
відомих атак. Крім того, ML-детектор потребує ретельно підготовленої
вибірки для стабільної роботи, тоді як сигнатурний підхід забезпечує високу
коректність результатів навіть без додаткового налаштування.
Гібридний підхід, що поєднує сигнатурний та ML-детектор, демонструє
найвищу ефективність саме завдяки взаємодоповнюваності цих методів.
Сигнатурний модуль забезпечує оперативне виявлення типових загроз із
мінімальними витратами ресурсів, тоді як ML-компонент аналізує
поведінковий контекст і фіксує потенційні аномалії, які не мають прямого
сигнатурного представлення. Така комбінація дозволяє суттєво зменшити
кількість хибних спрацювань, оскільки прості та очевидні атаки відсікаються
першим рівнем, а складні та низькорівневі відхилення додатково
перевіряються моделлю. Гібридний підхід підвищує стійкість системи до
появи модифікованих технік експлуатації: навіть якщо сигнатура не
63
спрацьовує, модель машинного навчання здатна зафіксувати аномальний
характер послідовності пакетів. Отримані під час випробувань результати
підтверджують, що багаторівневий механізм аналізу забезпечує кращу
узгодженість рішень та більш стабільну якість виявлення загроз у змінних
умовах мережевого середовища. Такий формат є типовим для сучасних NIDS-
систем, адже дозволяє одночасно зберігати високу продуктивність і
забезпечувати адаптивність до нових типів атак.
3.5 Висновки до розділу 3
Було реалізовано два засоби виявлення мережевих загроз – сигнатурний
детектор та ML-модель. Обидва інструменти створено з урахуванням
специфіки мережевого трафіку, можливості масштабування та потреби у
подальшій інтеграції з зовнішніми системами. Розробка кожного засобу
вимагала окремих підходів до побудови алгоритмів, опрацювання вхідних
даних та організації процесу аналізу як локальних PCAP-файлів, так і
потокового трафіку. Сигнатурний детектор фіксує атаки з чітко визначеними
характеристиками, такими як послідовності TCP-прапорців та відомі
індикатори шкідливої активності, забезпечуючи високу швидкість обробки та
низькі вимоги до ресурсів. Модуль машинного навчання на основі LSTM
аналізує часові залежності в трафіку та виявляє аномалії, що не мають чіткого
сигнатурного опису.
Тестування підтвердило працездатність і високу ефективність усіх
реалізованих компонентів. Сигнатурний детектор показав рівень виявлення
88,37 %, що пояснюється його орієнтацією на чітко визначені та формалізовані
патерни, які за потреби можуть доповнюватися та розширюватися. Він
ефективно спрацьовує там, де структура атаки повністю відповідає відомим
правилам, однак пропускає модифіковані або нестандартні загрози, які
виходять за межі наявного набору сигнатур. ML-модель має нижчий показник,
зумовлений тим, що модель працює з широким спектром поведінкових
64
аномалій і може помилятися в умовах змішаного трафіку. Водночас якісна та
коректна обробка пакетів є критично важливою: від неї залежить повнота
ознак і, відповідно, здатність моделі правильно інтерпретувати структуру
трафіку. Проте саме здатність фіксувати загрози, яких немає в сигнатурній
базі, робить ML-підхід цінним доповненням до класичного аналізу. Гіридний
режим забезпечив найкращий результат, у якому обидва підходи працюють
разом – 96,51 %.
Розроблені засоби можуть надалі розширюватися та доповнюватися
відповідно до потреб конкретного середовища, зокрема шляхом оновлення
сигнатурної бази, перенавчання ML-моделі на нових вибірках або інтеграції
додаткових модулів аналізу. Завдяки підтримці стандартних форматів трафіку
та сумісності зі сторонніми інструментами вони можуть використовуватися у
практичних системах моніторингу та безпеки.
Поєднання сигнатурного підходу та методів машинного навчання
забезпечує максимально можливе покриття загроз, дозволяючи виявляти як
чітко визначені атаки, так і варіативні поведінкові аномалії, що значно
підвищує загальний рівень захищеності мережевої інфраструктури.
65
ВИСНОВКИ
У межах даної кваліфікаційної роботи було виконано комплексне
дослідження проблеми виявлення мережевих загроз у сучасних умовах
інтенсивного розвитку технік атак, високої варіативності мережевого трафіку
та домінування шкідливих впливів, що не мають чітко визначеної структури.
Проведений аналіз теоретичних засад, огляд наявних інструментів і розробка
власної системи дозволили сформувати цілісне бачення того, яким чином
сигнатурні та аномалійні методи можуть доповнювати один одного,
забезпечуючи більш високий рівень захисту порівняно з використанням
окремих підходів.
Перш за все, було встановлено, що сигнатурні системи, незважаючи на
їхню поширеність та стабільність, залишаються вразливими до появи нових
та модифікованих атак. Основна причина полягає в залежності від
актуальності бази правил та неможливості визначати загрози, для яких не
існує формального опису. Водночас ці засоби демонструють високу швидкість
аналізу, низькі витрати ресурсів та точність у межах відомих сценаріїв. Тому
сигнатурний підхід і надалі залишається важливою складовою мережевих
систем безпеки, особливо в тих середовищах, де потрібна оперативна реакція
на традиційні типи атак.
Дослідження моделей машинного навчання в контексті завдань
виявлення загроз показало, що цей підхід значно краще реагує на поведінкові
аномалії, складні схеми експлуатації та варіативні модифікації трафіку. LSTM-
модель, реалізована та досліджена в роботі, підтвердила здатність виявляти
загрози, які не мають сигнатурного опису, а також фіксувати низькорівневі
зміни у структурі потоків. Також було продемонстровано, що ефективність
ML-компонента значною мірою залежить від якості підготовки даних, балансу
класів, репрезентативності вибірки та відповідності характеристик трафіку
умовам, у яких модель застосовується надалі. Ці фактори визначають потребу
у постійному супроводі, адаптації моделей і періодичному перенавчанні.
66
Одним із ключових результатів роботи стало експериментальне
підтвердження того, що сигнатурний та ML-підходи не лише різняться за
принципами побудови, але й утворюють взаємно підсилювальний ефект у
гібридному режимі. Тестування показало, що поєднання двох методів
дозволяє суттєво зменшити кількість пропущених атак, підвищити рівень
узагальнення системи та створити гнучкий механізм реагування на різні типи
загроз. Гібридна схема забезпечила найвищий показник виявлення, що
підтверджує правильність концепції та доцільність інтеграції різних підходів
у межах однієї системи.
Було здійснено реалізацію двох компонентів – сигнатурного детектора
та ML-модуля, а також інфраструктури для їх сумісної роботи. Було
розроблено механізми автоматичної обробки PCAP-файлів, проведено
тестування на реальному трафіку, реалізовано логування результатів у
форматах, придатних для подальшої інтеграції з відповідними NIDS/IPS
засобами. Система продемонструвала стабільність роботи, кероване
споживання ресурсів і можливість масштабування. Розроблені засоби мають
високу практичну цінність і можуть бути інтегровані в існуючі системи
моніторингу, зокрема Suricata або інші відкриті NIDS-платформи.
Підсумовуючи проведене дослідження, можна зазначити, що створена
система відповідає поставленим завданням і демонструє перспективність
гібридного підходу до виявлення мережевих загроз. Отримані результати
підтверджують, що подальший розвиток засобів мережевої безпеки повинен
базуватися на поєднанні детермінованих алгоритмів та адаптивних моделей,
здатних реагувати на нові виклики та мінливість мережевого середовища.
Тестування на реальних наборах даних показало, що гібридний підхід
забезпечує виявлення 96,51 % атак, що свідчить про його достатній рівень
ефективності та перспективність для подальшого застосування в реальних
мережах.
Створена програмне рішення може слугувати базою для подальших
досліджень, удосконалення алгоритмів та розробки більш складних механізмів
67
аналізу. З швидкою еволюцією кіберзагроз, запропонований гібридний підхід
можна вважати одним із найбільш перспективних напрямів розвитку
мережевих систем виявлення загроз.
68
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
ML – Machine Learning, машинне навчання
IPS – Intrusion Prevention System, система запобігання вторгненням
HTTP – Hypertext Transfer Protocol, протокол передачі гіпертексту
AI – Artificial Intelligence, штучний інтелект
GNN – Graph Neural Network, графова нейронна мережа, модель машинного
навчання для аналізу даних, поданих у вигляді графів
CNN – Convolutional Neural Network, згорткова нейронна мережа, різновид
нейронних мереж, що використовується для автоматичного виділення ознак у
даних
API – Application Programming Interface, інтерфейс прикладного
програмування, що забезпечує взаємодію між програмними компонентами
MQTT – Message Queuing Telemetry Transport, легковаговий протокол обміну
повідомленнями, призначений для передачі даних у розподілених та IoT-
системах
CVE –CommonVulnerabilities and Exposures, спільні вразливості та експозиції
IDS – Intrusion Detection System, система виявлення вторгнень
NIDS – Network Intrusion Detection System, мережева система виявлення
вторгнень
PCAP – Packet Capture, формат файлів для збереження мережевого трафіку
JSON – JavaScript Object Notation, формат обміну структурованими даними
IP – Internet Protocol, мережевий протокол інтернет-рівня
TCP – Transmission Control Protocol, транспортний протокол з установленням
з’єднання
69
UDP – User Datagram Protocol,транспортний протокол без установлення
з’єднання
ICMP – Internet Control Message Protocol, протокол службових повідомлень
мережі
DNS – Domain Name System, система доменних імен
ARP – Address Resolution Protocol, протокол визначення MAC-адрес
ISO/OSI – International Organization for Standardization / Open Systems
Interconnection, еталонна модель взаємодії відкритих систем
TTL – Time To Live, час життя мережевого пакета
SYN, ACK, FIN, RST – керувальні прапори протоколу TCP
UNSW-NB15 – набір даних для досліджень систем виявлення вторгнень
CSE-CIC-IDS2018 – сучасний датасет мережевого трафіку для IDS
LSTM – Long Short-Term Memory, рекурентна нейронна мережа з
довготривалою пам’яттю
F1-score – метрика оцінки
DDoS – Distributed Denial of Service, розподілена атака на відмову в
обслуговуванні
APT – Advanced Persistent Threats, розширені стійкі загрози
IoT – Internet of Things, Інтернет речей
70
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Mutalib N. H. A., Sabri A. Q. M., Wahab A. W. A., et al. “Explainable deep
learning approach for advanced persistent threats (APTs) detection in
cybersecurity: a review.” Artificial Intelligence Review, 2024. Article 297.
2. Alshehri S. M., Sharaf S. A., Molla R. A. “Systematic review of graph neural
network for malicious attack detection.” Information, 2025. Vol. 16, № 6.
Article 470.
3. Genuario F., Santoro G., Giliberti M., Bello S., Zazzera E., Impedovo D.
“Machine Learning-Based Methodologies for Cyber-Attacks and Network
Traffic Monitoring: A Review and Insights.” Information, 2024. Vol. 15, №
11. Article 741.
4. Godlevsky A., Morokhovets M., Shchogoleva N. “Analysis of common types
of network attacks, and factors enabling their successful implementation.”
Information Technologies and Systems (Інформаційні технології та
системи), 2025. Vol. 2, № 2. P. 55–80.
5. Ільєнко А., Телющенко В., Дубчак О. “Сучасні кіберзагрози критичної
інфраструктури України та світу.” Кібербезпека: освіта, наука, техніка,
2025. Т. 3, № 27. С. 150-164.
6. Костюк Ю., Складанний П., Рзаєва С., Мазур Н., Черевик В., Аносов А.
“Особливості реалізації мережевих атак через TCP/IP-протоколи.”
Кібербезпека: освіта, наука, техніка, 2025. Т. 1, № 29. С. 571-597.
7. Buczak A. L., Guven E. “A Survey of Data Mining and Machine Learning
Methods for Cyber Security Intrusion Detection.” IEEE Communications
Surveys & Tutorials, 2016. Vol. 18, № 2. P. 1153-1176.
8. Talukder M. A., Islam M. M., Uddin M. A., Hasan K. F., Sharmin S., Alyami
S. A., Moni M. A. “Machine learning-based network intrusion detection for
big and imbalanced data using oversampling, stacking feature embedding and
feature extraction.” arXiv, 2024. 30 p.
71
9. Chatterjee S., Chaudhary S., Cherukuri A. K. “Intrusion Detection System
Using Deep Learning for Network Security.” arXiv, 2025. 25 p.
10. Chunduri R. K., Qbeh Q. “On the cross-dataset generalization of machine
learning for network intrusion detection.” IEEE Access, 2024. 15 p.
11. Alnasser O., Al Muhtadi J., Saleem K., Shrestha S. “Signature and anomaly
based intrusion detection system for secure IoTs and V2G communication.”
Alexandria Engineering Journal, 2025. Vol. 125. P. 424–440.
12. Fidelis Security. “Signature Based IDS vs Anomaly Based IDS:
Understanding the Difference. Which is Best for Your Needs?”
[Електронний ресурс], 2025. Режим доступу:
https://fidelissecurity.com/cybersecurity-101/learn/signature-based-vs-
anomaly-based-ids/
13. Mohale V. Z., Obagbuwa I. C. “Evaluating machine learning-based intrusion
detection systems with explainable AI: enhancing transparency and
interpretability.” Frontiers in Computer Science, 2025. Vol. 7. Article
1520741.
14. Ali M. L., Thakur K., Schmeelk S., Debello J., Dragos D. “Deep Learning
vs. Machine Learning for Intrusion Detection in Computer Networks: A
Comparative Study.” Applied Sciences, 2025. Vol. 15, № 4. P. 1903.
15. Sajid M., Malik K. R., Almogren A., Malik T. S., Khan A. H., Tanveer J.,
Rehman A. U. “Enhancing intrusion detection: a hybrid machine and deep
learning approach.” Journal of Cloud Computing, 2024. Vol. 13, № 123. P.
1-30.
16. Attri A., Gundeboyena P., Chigurla V., Moluguri S., Kasoju N. “Network
intrusion detection using hybrid approach.” World Journal of Advanced
Research and Reviews, 2025. Vol. 25, № 2. P. 507-515.
17. Thakkar A., Lohiya R. “A Systematic Review on Hybrid Intrusion Detection
System.” Security and Communication Networks, 2022. Article ID 9663052.
20 p.
72
18. Snort Project. “Snort – Official Documentation” [Електронний ресурс].
Режим доступу: https://www.snort.org/documents#OfficialDocumentation.
19. Suricata Project. “Suricata: Developer Guide / Documentation”
[Електронний ресурс]. Режим доступу:
https://docs.suricata.io/en/latest/devguide/index.html.
20. Zeek Project. “Zeek (formerly Bro) Documentation” [Електронний ресурс].
Режим доступу: https://docs.zeek.org/en/master/.
21. Mirsky Y., Doitshman T., Elovici Y., Shabtai A. “Kitsune: An Ensemble of
Autoencoders for Online Network Intrusion Detection.” arXiv, 2018. 25 p.
22. Laghrissi F., Douzi S., Douzi K., Hssina B. “Intrusion detection systems
using long short-term memory (LSTM).” Journal of Big Data, 2021. Vol. 8,
№ 65. P. 1-20.
23. UNSW Canberra. “The UNSW-NB15 Dataset” [Електронний ресурс],
2015. Режим доступу: https://research.unsw.edu.au/projects/unsw-nb15-
dataset.
24. Canadian Institute for Cybersecurity. “CSE-CIC-IDS2018” [Електронний
ресурс], 2018. Режим доступу: https://www.unb.ca/cic/datasets/ids-
2018.html.
25. Canadian Institute for Cybersecurity. “Applications” [Електронний ресурс],
2025. Режим доступу: https://www.unb.ca/cic/research/applications.html.
26. Python Software Foundation. “Python Documentation” [Електронний
ресурс]. Режим доступу: https://docs.python.org/.
27. Scikit-learn Developers. “Scikit-learn: Machine Learning in Python –
Official documentation” [Електронний ресурс]. Режим доступу:
https://scikit-learn.org/stable/.
28. Гудзенко О.Ю. Реалізація криптографічного модуля шифрування даних
/ О.Ю. Гудзенко, О. В. Нечипоренко // Збірник тез доповідей ІІІ Міжнар.
наук.-практич. конфер. «Інновації та перспективні шляхи розвитку
інформаційних технологій» (22 лист. 2024 р., м. Черкаси) [Електронний
73
ресурс] / упоряд. : Т. О. Прокопенко, О. І. Підкуйко ; М-во освіти і науки
України, Черкас. держ. технол. ун-т. – Черкаси : ЧДТУ, 2024. С. 95–97.
29. Нечипоренко О. В. Перспективи розвитку штучного інтелекту в
діяльності закладів вищої освіти / О. В. Нечипоренко, О. Ю. Гудзенко //
Наукові праці Другої міжнар. наук.-практ. конф. «Штучний інтелект та
інформаційні технології» (AIIT-2025), 3–4 червня 2025 р. (Київ,
Україна). К. : НУХТ, 2025. С. 228–230.
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент Артем ЛАВДАНСЬКИЙ
__________________
“___” _____________ 2025р.
Засоби аналізу та захисту комп’ютерних мереж
Специфікація
482.ЧДТУ.52465-01
Листів 2
Розробник _______________ Олексій ГУДЗЕНКО
Керівник _______________ Ольга НЕЧИПОРЕНКО
Черкаси 2025
2
482.ЧДТУ.52465-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.52465-01 12 01 Текст програми
ДОДАТОК Б
Засоби аналізу та захисту комп’ютерних мереж
Текс програми
482.ЧДТУ.52465-0112 01
Листів 26
Розробник _______________ Олексій ГУДЗЕНКО
Черкаси 2025
2
482.ЧДТУ.52465-0112 01
importjson
importcsv
fromscapy.allimportrdpcap, TCP, UDP, DNS, Raw, ICMP, ARP, IP
importtime
importpsutil
defdetect_signatures(pkt, packet_no, alerts_list,
http_get_counter, http_post_counter, syn_counter):
src = pkt[0][1].srcifpkt.haslayer('IP') else "unknown"
dst = pkt[0][1].dstifpkt.haslayer('IP') else "unknown"
# ===== RAW PAYLOAD =====
payload = b""
ifpkt.haslayer(Raw):
try:
payload = pkt[Raw].load.lower()
except:
payload = b""
# ----------- 1. SQL Injection -----------
ifany(x inpayloadfor x in [
b"select", b"union", b" or 1=1", b"droptable", b"'--", b"' or '1'='1"
]):
alerts_list.append((packet_no, src, dst, "SQL Injection"))
# ----------- 2. XSS Attempt -----------
elifany(x inpayloadfor x in [
b"<script>", b"javascript:", b"onerror=", b"alert("
]):
alerts_list.append((packet_no, src, dst, "XSS Attack"))
# ----------- 3. DirectoryTraversal -----------
elif b"../" inpayload:
alerts_list.append((packet_no, src, dst, "DirectoryTraversal"))
# ----------- 4. HTTP GET Flood -----------
elifpkt.haslayer(TCP) andpayload.startswith(b"get "):
http_get_counter[src] = http_get_counter.get(src, 0) + 1
ifhttp_get_counter[src] > 50:
alerts_list.append((packet_no, src, dst, "HTTP GET Flood"))
# ----------- 5. HTTP POST Flood -----------
elifpkt.haslayer(TCP) andpayload.startswith(b"post "):
http_post_counter[src] = http_post_counter.get(src, 0) + 1
ifhttp_post_counter[src] > 50:
alerts_list.append((packet_no, src, dst, "HTTP POST Flood"))
# ----------- 6. SYN Scan -----------
elifpkt.haslayer(TCP) andpkt[TCP].flags == "S":
syn_counter[src] = syn_counter.get(src, 0) + 1
3
482.ЧДТУ.52465-0112 01
ifsyn_counter[src] > 40:
alerts_list.append((packet_no, src, dst, "SYN Scan"))
# ----------- 7. PortScan -----------
elifpkt.haslayer(TCP) orpkt.haslayer(UDP):
ifpkt.haslayer(TCP):
dport = pkt[TCP].dport
else:
dport = pkt[UDP].dport
ifdportin [21, 22, 23, 80, 443, 3306]:
alerts_list.append((packet_no, src, dst, "PortScan"))
# ----------- 8. SSH BruteForce -----------
elifpkt.haslayer(TCP) andpkt[TCP].dport == 22:
ifb"password" inpayloadorb"login" inpayload:
alerts_list.append((packet_no, src, dst, "SSH BruteForce"))
# ----------- 9. FTP BruteForce -----------
elifpkt.haslayer(TCP) andpkt[TCP].dport == 21:
ifb"pass" inpayloadorb"user" inpayload:
alerts_list.append((packet_no, src, dst, "FTP BruteForce"))
# ----------- 10. ICMP Flood -----------
elifpkt.haslayer(ICMP):
alerts_list.append((packet_no, src, dst, "ICMP Flood"))
# ----------- 11. DNS Tunneling -----------
elifpkt.haslayer(DNS) andpkt[DNS].qd:
qname = pkt[DNS].qd.qname
iflen(qname) > 50:
alerts_list.append((packet_no, src, dst, "DNS Tunneling"))
# ----------- 12. ARP Spoof -----------
elifpkt.haslayer(ARP) andpkt[ARP].op == 2:
alerts_list.append((packet_no, src, dst, "ARP Spoofing"))
# ----------- 13. Heartbleed-like -----------
elifb"heartbleed" inpayloadorb"heartbeat" inpayload:
alerts_list.append((packet_no, src, dst, "HeartbleedPattern"))
# ----------- 14. SQL ErrorLeak -----------
elifb"sqlerror" inpayloadorb"mysql" inpayload:
alerts_list.append((packet_no, src, dst, "SQL ErrorLeakage"))
# ----------- 15. CommandInjection -----------
elifany(x inpayloadfor x in [b"; ls", b"; cat", b"; rm", b"&&"]):
alerts_list.append((packet_no, src, dst, "CommandInjection"))
# ----------- 16. Possible C2 Beacon -----------
elifb"keepalive" inpayloadorb"beacon" inpayload:
alerts_list.append((packet_no, src, dst, "C2 Beaconing"))
# ----------- 17. LargeDataExfiltration -----------
elifpkt.haslayer(Raw) andlen(pkt[Raw].load) > 5000:
4
482.ЧДТУ.52465-0112 01
alerts_list.append((packet_no, src, dst, "LargePayloadExfiltration"))
# ----------- 18. SuspiciousUser-Agent -----------
elifb"user-agent: curl" inpayload:
alerts_list.append((packet_no, src, dst, "SuspiciousUser-Agent"))
# ----------- 19. Admin Panel Access -----------
elif b"/admin" inpayload:
alerts_list.append((packet_no, src, dst, "Suspicious URI (Admin Access)"))
# ----------- 20. Tor / Proxy -----------
elifb"tor" inpayloadorb"proxy" inpayload:
alerts_list.append((packet_no, src, dst, "Tor/Proxy Traffic"))
# ----------- 21. RemoteFileInclusion -----------
elifb"http://" inpayloadand b"?file=" inpayload:
alerts_list.append((packet_no, src, dst, "RemoteFileInclusion"))
# ----------- 22. SMB Exploit -----------
elifb"smb" inpayloadorb"ntlm" inpayload:
alerts_list.append((packet_no, src, dst, "SMB Exploit"))
# ----------- 23. Metasploit -----------
elifb"metasploit" inpayloadorb"msf" inpayload:
alerts_list.append((packet_no, src, dst, "MetasploitActivity"))
# ----------- 24. DNS Amplification -----------
elifpkt.haslayer(UDP) andpkt[UDP].sport == 53 andlen(pkt) > 512:
alerts_list.append((packet_no, src, dst, "DNS Amplification"))
# ----------- 25. UDP Flood -----------
elifpkt.haslayer(UDP) andlen(pkt) > 800:
alerts_list.append((packet_no, src, dst, "UDP Flood"))
# ----------- 26. TLS SuspiciousVersion / Error -----------
elifb"ssl" inpayloador b"tlsv1" inpayload:
alerts_list.append((packet_no, src, dst, "Suspicious TLS Traffic"))
# ----------- 27. BruteForceLogin (Generic) -----------
elifany(x inpayloadfor x in [b"login", b"failed", b"unauthorized"]):
alerts_list.append((packet_no, src, dst, "GenericLoginBruteForce"))
# ----------- 28. SMTP SpamAttempt -----------
elifb"mailfrom:" inpayloadorb"rcptto:" inpayload:
alerts_list.append((packet_no, src, dst, "SMTP SpamAttempt"))
# ----------- 29. Base64 LargePayload (PossibleExfiltration) -----------
elif b"==" inpayloadandlen(payload) > 200:
alerts_list.append((packet_no, src, dst, "Base64 Exfiltration"))
# ----------- 30. ReverseShellAttempt -----------
elifany(x inpayloadfor x in [b"bash -i", b"nc -e", b"/bin/sh"]):
alerts_list.append((packet_no, src, dst, "ReverseShellAttempt"))
# ----------- 31. Windows CommandExecution -----------
elifany(x inpayloadfor x in [b"powershell", b"cmd.exe", b"whoami"]):
alerts_list.append((packet_no, src, dst, "Windows CommandExecution"))
# ----------- 32. LinuxPrivilegeEscalation -----------
5
482.ЧДТУ.52465-0112 01
elifany(x inpayloadfor x in [b"sudo", b"uid=0", b"chmod +s"]):
alerts_list.append((packet_no, src, dst, "PrivilegeEscalationAttempt"))
# ----------- 33. HTTP SensitiveKeywords -----------
elifany(x inpayloadfor x in [b"password", b"secret", b"token="]):
alerts_list.append((packet_no, src, dst, "SensitiveDataExposure"))
# ----------- 34. WordPressScan -----------
elifb"wp-admin" inpayloadorb"wp-login" inpayload:
alerts_list.append((packet_no, src, dst, "WordPressScan"))
# ----------- 35. Joomla/DrupalScan -----------
elifb"drupal" inpayloadorb"joomla" inpayload:
alerts_list.append((packet_no, src, dst, "CMS Scan"))
# ----------- 36. Nmap OS Fingerprint -----------
elifb"nmap" inpayloadorb"osscan" inpayload:
alerts_list.append((packet_no, src, dst, "NmapScanDetected"))
# ----------- 37. SlowlorisAttack -----------
elifpayload.startswith(b"get ") andb"keep-alive" inpayloadandlen(payload) < 50:
alerts_list.append((packet_no, src, dst, "SlowlorisAttack"))
# ----------- 38. MalwareUser-Agent -----------
elifany(x inpayloadfor x in [b"botnet", b"malware", b"wget"]):
alerts_list.append((packet_no, src, dst, "MalwareUser-Agent"))
# ----------- 39. PingofDeath -----------
elifpkt.haslayer(ICMP) andlen(pkt) > 1500:
alerts_list.append((packet_no, src, dst, "PingofDeath"))
# ----------- 40. TeardropAttack -----------
elifpkt.haslayer(IP) andpkt[IP].flags == 1: # morefragments
alerts_list.append((packet_no, src, dst, "IP FragmentationAttack"))
# ----------- 41. Suspicious DNS QueryTypes -----------
elifpkt.haslayer(DNS) andpkt[DNS].qdandpkt[DNS].opcode != 0:
alerts_list.append((packet_no, src, dst, "Suspicious DNS Opcode"))
# ----------- 42. DNS TXT LargePayload -----------
elifpkt.haslayer(DNS) andpkt[DNS].anandb"txt" inpayload.lower()
andlen(payload) > 300:
alerts_list.append((packet_no, src, dst, "Large DNS TXT Data (Possible
C2)"))
# ----------- 43. TLS CertificateAnomaly -----------
elifb"certificate" inpayloadandlen(payload) > 1000:
alerts_list.append((packet_no, src, dst, "Suspicious TLS Certificate"))
# ----------- 44. RDP BruteForce -----------
elifpkt.haslayer(TCP) andpkt[TCP].dport == 3389:
alerts_list.append((packet_no, src, dst, "RDP AttackAttempt"))
# ----------- 45. MSSQL Scan -----------
elifpkt.haslayer(UDP) andpkt[UDP].dport == 1434:
alerts_list.append((packet_no, src, dst, "MSSQL Scan"))
# ----------- 46. LDAP Injection -----------
6
482.ЧДТУ.52465-0112 01
elifany(x inpayloadfor x in [b"(|", b")|", b"(&"]):
alerts_list.append((packet_no, src, dst, "LDAP Injection"))
# ----------- 47. PathManipulation (.envorconfigleak) -----------
elifany(x inpayloadfor x in [b".env", b"config.php", b"database.yml"]):
alerts_list.append((packet_no, src, dst, "SensitiveFileExposureAttempt"))
# ----------- 48. Botnet C2 Keyword -----------
elifany(x inpayloadfor x in [b"miner", b"xmrig", b"payload"]):
alerts_list.append((packet_no, src, dst, "BotnetActivity"))
# ----------- 49. IPv6 Tunnelingin IPv4 -----------
elifpkt.haslayer(IP) and b"\x86\xdd" inpayload:
alerts_list.append((packet_no, src, dst, "IPv6-over-IPv4 Tunnel"))
# ----------- 50. SuspiciousHighEntropy (encryptedmalwaretraffic) -----------
eliflen(payload) > 200 andsum(payload.count(bytes([i])) for i inrange(256)) <
20:
alerts_list.append((packet_no, src, dst, "HighEntropyPayload"))
# ----------- 51. TLS Without SNI (possiblemalware) -----------
elif b"\x00\x00" inpayloadandb"server_name"
notinpayloadandpkt.haslayer(TCP) andpkt[TCP].dport == 443:
alerts_list.append((packet_no, src, dst, "TLS Without SNI"))
# ----------- 52. Suspicious HTTP Methods -----------
elifany(x inpayload.lower() for x in [b"put ", b"delete ", b"connect ", b"trace "]):
alerts_list.append((packet_no, src, dst, "Unusual HTTP Method"))
# ----------- 53. BruteforceviaMany TCP RST -----------
elifpkt.haslayer(TCP) andpkt[TCP].flags == "R":
alerts_list.append((packet_no, src, dst, "RST Storm (PossibleBruteForce)"))
# ----------- 54. TCP NullScan -----------
elifpkt.haslayer(TCP) andpkt[TCP].flags == 0:
alerts_list.append((packet_no, src, dst, "TCP NullScan"))
# ----------- 55. TCP XmasScan -----------
elifpkt.haslayer(TCP) andpkt[TCP].flags == 41: # FIN+PSH+URG
alerts_list.append((packet_no, src, dst, "TCP XmasScan"))
# ----------- 56. TCP FIN Scan -----------
elifpkt.haslayer(TCP) andpkt[TCP].flags == "F":
alerts_list.append((packet_no, src, dst, "TCP FIN Scan"))
# ----------- 57. Suspicious LARGE TTL -----------
elifpkt.haslayer(IP) andpkt[IP].ttl> 200:
alerts_list.append((packet_no, src, dst, "Suspicious TTL"))
# ----------- 58. SSH Key Exchange Anomaly -----------
elifb"ssh-dss" inpayloadorb"ssh-rsa" inpayloadandlen(payload) < 50:
alerts_list.append((packet_no, src, dst, "SSH Key Exchange Anomaly"))
# ----------- 59. IIS WebDAVExploitAttempt -----------
elifb"webdav" inpayloadorb"search-ms" inpayload:
alerts_list.append((packet_no, src, dst, "IIS WebDAVExploit"))
# ----------- 60. Log4Shell Pattern -----------
7
482.ЧДТУ.52465-0112 01
elif b"${jndi:" inpayload:
alerts_list.append((packet_no, src, dst, "Log4Shell Exploit"))
# ----------- 61. ShellshockPattern -----------
elif b"() {" inpayloadand b"/bin" inpayload:
alerts_list.append((packet_no, src, dst, "ShellshockExploit"))
# ----------- 62. PHP RemoteCodeExecution -----------
elifany(x inpayloadfor x in [b"system(", b"shell_exec(", b"phpinfo("]):
alerts_list.append((packet_no, src, dst, "PHP CodeExecution"))
# ----------- 63. ApacheStruts RCE -----------
elifb"Content-Type: %{(#" inpayload:
alerts_list.append((packet_no, src, dst, "Struts RCE"))
# ----------- 64. SuspiciousObfuscated JS -----------
elifb"eval(" inpayloadandb"String.fromCharCode" inpayload:
alerts_list.append((packet_no, src, dst, "ObfuscatedJavaScript"))
# ----------- 65. XOR PayloadSuspicion -----------
elifpayload.count(b"\x00") >len(payload) * 0.6:
alerts_list.append((packet_no, src, dst, "Possible XOR EncryptedPayload"))
# ----------- 66. Suspicious TOR TLS Fingerprint -----------
elifb"tor" inpayloadorb"obfs" inpayload:
alerts_list.append((packet_no, src, dst, "TOR ObfuscationTraffic"))
# ----------- 67. VPN Traffic on UnusualPorts -----------
elifany(protoinpayloadforprotoin [b"openvpn", b"wireguard"])
andpkt.haslayer(TCP):
alerts_list.append((packet_no, src, dst, "VPN onNon-Standard Port"))
# ----------- 68. PPTP / L2TP Anomaly -----------
elif b"l2tp" inpayloadorb"pptp" inpayload:
alerts_list.append((packet_no, src, dst, "TunnelingProtocolDetected"))
# ----------- 69. LDAP Enumeration -----------
elifb"objectClass=" inpayloadorb"ldapsearch" inpayload:
alerts_list.append((packet_no, src, dst, "LDAP Enumeration"))
# ----------- 70. SMTP CommandInjection -----------
elifany(x inpayloadfor x in [b"rcptto: root", b"vrfy", b"expn"]):
alerts_list.append((packet_no, src, dst, "SMTP Enumeration / Injection"))
# ----------- 71. SNMP Enumeration -----------
elifpkt.haslayer(UDP) andpkt[UDP].dport == 161:
alerts_list.append((packet_no, src, dst, "SNMP Scan / Enumeration"))
# ----------- 72. Attemptto Access HiddenFiles -----------
elifany(x inpayloadfor x in [b".git", b".svn", b".htaccess", b".bash_history"]):
alerts_list.append((packet_no, src, dst, "HiddenFile Access Attempt"))
# ----------- 73. SQL Injection (Advanced) -----------
elifany(x inpayloadfor x in [b"information_schema", b"benchmark(",
b"sleep("]):
alerts_list.append((packet_no, src, dst, "Advanced SQL Injection"))
# ----------- 74. UnsafeFileUpload -----------
8
482.ЧДТУ.52465-0112 01
elifany(x inpayloadfor x in [b"filename=", b"multipart/form-data"]):
alerts_list.append((packet_no, src, dst, "SuspiciousFileUpload"))
# ----------- 75. JavaDeserializationExploit -----------
elif b"rO0" inpayload:
alerts_list.append((packet_no, src, dst, "JavaDeserializationPayload"))
# ----------- 76. PythonPickle RCE -----------
elif b"c__builtin__" inpayloadorb"cposix\nsystem" inpayload:
alerts_list.append((packet_no, src, dst, "PythonPicklePayload"))
# ----------- 77. RansomwareNotePattern -----------
elifany(x inpayload.lower() for x in [b"decrypt", b"ransom", b"bitcoin"]):
alerts_list.append((packet_no, src, dst, "RansomwareIndicator"))
# ----------- 78. CryptocurrencyMinerTraffic -----------
elifany(x inpayloadfor x in [b"stratum", b"miner", b"hashrate"]):
alerts_list.append((packet_no, src, dst, "CryptoMiner C2"))
# ----------- 79. SuspiciousLong URI -----------
elifpkt.haslayer(Raw) andlen(payload) > 1500:
alerts_list.append((packet_no, src, dst, "VeryLong URI (PossibleAttack)"))
# ----------- 80. SuspiciousUnknownProtocol -----------
elifpkt.haslayer(UDP) andpkt[UDP].dport> 50000 andlen(payload) > 200:
alerts_list.append((packet_no, src, dst, "UnknownHigh-PortTraffic"))
# ----------- 81. PotentialWormPropagation -----------
elifany(x inpayloadfor x in [b"worm", b"autorun.inf", b"spread"]):
alerts_list.append((packet_no, src, dst, "WormPropagationAttempt"))
# ----------- 82. BufferOverflowPattern -----------
elifb"A" * 100 inpayloador b"\x90" * 20 inpayload:
alerts_list.append((packet_no, src, dst, "BufferOverflowPattern"))
# ----------- 83. LDAP Injection -----------
elifany(x inpayloadfor x in [b"(|", b"(&", b"(uid=", b"(cn="]):
alerts_list.append((packet_no, src, dst, "LDAP Injection"))
# ----------- 84. SMTP SpamBurst -----------
elifpkt.haslayer(TCP) andpkt[TCP].dport == 25 andb"subject" inpayload:
alerts_list.append((packet_no, src, dst, "SMTP Spam"))
# ----------- 85. Suspicious Base64 Blob -----------
elif b"==" inpayloadandlen(payload) > 300:
alerts_list.append((packet_no, src, dst, "Suspicious Base64 Payload"))
# ----------- 86. ShellshockPattern -----------
elif b"() {" inpayload:
alerts_list.append((packet_no, src, dst, "ShellshockExploit"))
# ----------- 87. PHP RemoteCodeExecution -----------
elifany(x inpayloadfor x in [b"phpinfo()", b"system(", b"exec("]):
alerts_list.append((packet_no, src, dst, "PHP RCE Pattern"))
# ----------- 88. PythonMalwareTraffic -----------
elifany(x inpayloadfor x in [b"python-requests", b"urllib", b"pyinstaller"]):
alerts_list.append((packet_no, src, dst, "PythonMalwareTraffic"))
9
482.ЧДТУ.52465-0112 01
# ----------- 89. JavaMalwareTraffic -----------
elifany(x inpayloadfor x in [b"java/", b"JAR", b".class"]):
alerts_list.append((packet_no, src, dst, "JavaMalwareIndicators"))
# ----------- 90. MaliciousPowerShellCommand -----------
elifany(x inpayloadfor x in [b"powershell", b"-nop", b"-w hidden", b"Invoke-"]):
alerts_list.append((packet_no, src, dst, "PowerShellAttackCommand"))
# ----------- 91. TorHiddenService Access -----------
elif b".onion" inpayload:
alerts_list.append((packet_no, src, dst, "TOR HiddenService Access"))
# ----------- 92. Bad ELF BinaryinTransit -----------
elif b"\x7fELF" inpayload:
alerts_list.append((packet_no, src, dst, "Suspicious ELF Binary"))
# ----------- 93. Bad PE Binary (EXE) -----------
elifb"MZ" inpayload[:2]:
alerts_list.append((packet_no, src, dst, "EXE FileinNetworkTraffic"))
# ----------- 94. HTTP Shell / WebShellPattern -----------
elifany(x inpayloadfor x in [b"cmd=", b"exec=", b"shell="]):
alerts_list.append((packet_no, src, dst, "WebShellActivity"))
# ----------- 95. JavaScriptObfuscation -----------
elifb"eval(" inpayloadandb"function(" inpayload:
alerts_list.append((packet_no, src, dst, "ObfuscatedJavaScript"))
# ----------- 96. Suspicious VPN Traffic -----------
elifany(x inpayloadfor x in [b"openvpn", b"ike", b"ipsec"]):
alerts_list.append((packet_no, src, dst, "VPN Traffic (PotentialEvasion)"))
# ----------- 97. LargeFragmented HTTP Body -----------
elifb"content-length" inpayloadandlen(payload) > 5000:
alerts_list.append((packet_no, src, dst, "Large HTTP Body
(PossibleExfiltration)"))
# ----------- 98. UnusuallyHigh TTL -----------
elifpkt.haslayer(IP) andpkt[IP].ttl> 200:
alerts_list.append((packet_no, src, dst, "SuspiciousHigh TTL"))
# ----------- 99. SuspiciousLow TTL -----------
elifpkt.haslayer(IP) andpkt[IP].ttl< 10:
alerts_list.append((packet_no, src, dst, "SuspiciousLow TTL"))
# ----------- 100. SSL/TLS Anomalies -----------
elifb"client_hello" inpayloadorb"server_hello" inpayload:
alerts_list.append((packet_no, src, dst, "TLS HandshakePattern"))
# ----------- 101. CleartextCredentials -----------
elifany(x inpayloadfor x in [b"password=", b"login=", b"user="]):
alerts_list.append((packet_no, src, dst, "CleartextCredentials"))
# ----------- 102. CloudProviderMetadata Access -----------
elifany(x inpayloadfor x in [b"169.254.169.254", b"/latest/meta-data"]):
alerts_list.append((packet_no, src, dst, "CloudMetadata Access Attempt"))
# ----------- 103. IoTMalwareSignature -----------
10
482.ЧДТУ.52465-0112 01
elifany(x inpayloadfor x in [b"mirai", b"gafgyt", b"mozi"]):
alerts_list.append((packet_no, src, dst, "IoTMalwareTraffic"))
# ----------- 104. ICS/SCADA Traffic -----------
elifany(x inpayloadfor x in [b"modbus", b"scada", b"ics"]):
alerts_list.append((packet_no, src, dst, "ICS/SCADA ProtocolDetected"))
# ----------- 105. VoIP / SIP BruteForce -----------
elifb"sip:" inpayloadandany(x inpayloadfor x in [b"401", b"403"]):
alerts_list.append((packet_no, src, dst, "VoIP/SIP BruteForce"))
# ----------- 106. SQLmapUser-Agent -----------
elifb"sqlmap" inpayload:
alerts_list.append((packet_no, src, dst, "SQLMapScannerDetected"))
# ----------- 107. NiktoScanner -----------
elifb"nikto" inpayload:
alerts_list.append((packet_no, src, dst, "NiktoScannerDetected"))
# ----------- 108. Brute-ForceDictionaryTerms -----------
elifany(x inpayloadfor x in [b"admin", b"root", b"123456", b"qwerty"]):
alerts_list.append((packet_no, src, dst,
"CommonPasswordDictionaryAttempt"))
# ----------- 109. CobaltStrikeBeacon -----------
elifany(x inpayloadfor x in [b"cs", b"cobalt", b"beacon"]):
alerts_list.append((packet_no, src, dst, "CobaltStrikeActivity"))
# ----------- 110. MalwareDownloader URL -----------
elifany(x inpayloadfor x in [b"payload.exe", b"update.exe", b"dropper"]):
alerts_list.append((packet_no, src, dst, "MalwareDownloader URL"))
# ----------- 111. DGA (DomainGenerationAlgorithm) Pattern -----------
elifpkt.haslayer(DNS) andpkt[DNS].qdandlen(pkt[DNS].qd.qname) > 40:
alerts_list.append((packet_no, src, dst, "DGA DomainQuery"))
# ----------- 112. HighEntropyPayload -----------
eliflen(payload) > 200 andsum(payload.count(bytes([i])) for i inrange(256)) <
10:
alerts_list.append((packet_no, src, dst, "HighEntropyPayload
(PossibleEncryption)"))
# ----------- 113. UnknownBinaryBlob -----------
elifpkt.haslayer(Raw) andany(x inpayload[:4] for x in [b"\x00\x01", b"\xff\xd8",
b"\x89PNG"]):
alerts_list.append((packet_no, src, dst, "UnknownBinaryObjectinPayload"))
defanalyze_pcap(file_path):
start_time = time.time()
packets = rdpcap(file_path)
alerts_list = []
http_get_counter = {}
http_post_counter = {}
11
482.ЧДТУ.52465-0112 01
syn_counter = {}
total_packets = 0
for i, pktinenumerate(packets):
total_packets += 1
detect_signatures(
pkt, i,
alerts_list,
http_get_counter, http_post_counter, syn_counter
)
normal_packets = total_packets - len(alerts_list)
print("\n" + "═" * 90)
print(" РЕЗУЛЬТАТИ РОБОТИ СИГНАТУРНОГО
ДЕТЕКТОРА".center(90))
print("═" * 90)
print(f"{'Всього пакетів':<30}: {total_packets:,}")
print(f"{'Нормальний трафік':<30}: {normal_packets:,}
({normal_packets/total_packets*100:6.2f}%)")
print(f"{'Загрозливий трафік':<30}: {len(alerts_list):,}
({len(alerts_list)/total_packets*100:6.2f}%)")
print(f"{'Час аналізу':<30}:ʼ {time.time() - start_time:.3f} сек")
print(f"{'Використана пам ять':<30}: {psutil.Process().memory_info().rss /
1024**2:.1f} МБ")
print("═" * 90)
iflen(alerts_list) == 0:
print("Загроз не виявлено — трафік чистий!")
else:
print(f"Знайдено {len(alerts_list)} загроз(и) — деталі збережено в
alerts.csv та alerts.json")
print("═" * 90)
print("================================")
# --------- SAVE CSV ---------
withopen("alerts.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["packet_no", "src", "dst", "attack"])
writer.writeheader()
forpkt_no, src, dst, attackinalerts_list:
writer.writerow({
"packet_no": pkt_no,
"src": src,
"dst": dst,
12
482.ЧДТУ.52465-0112 01
"attack": attack
})
print("[INFO] Alertssavedto alerts.csv")
# --------- SAVE JSON ---------
json_data = [
{"packet_no": pkt_no, "src": src, "dst": dst, "attack": attack}
forpkt_no, src, dst, attackinalerts_list
]
withopen("alerts.json", "w", encoding="utf-8") asjf:
json.dump(json_data, jf, indent=4, ensure_ascii=False)
print("[INFO] Alertssavedtoalerts.json")
importargparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--pcap", required=True, help="Pathtopcapfile")
args = parser.parse_args()
analyze_pcap(args.pcap)
importos
importpandasaspd
importnumpyasnp
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.preprocessingimportStandardScaler
fromsklearn.metricsimportaccuracy_score, f1_score, classification_report
importtensorflowastf
fromtensorflow.keras.modelsimportSequential
fromtensorflow.keras.layersimportDense, Dropout, Input, LSTM
fromtensorflow.keras.callbacksimportEarlyStopping, ReduceLROnPlateau
importjoblib
# --- Parameters ---
DATA_DIR = r"F:\Diplom"
FILES = ["UNSW_NB15_training-set.csv", "UNSW_NB15_testing-set.csv"]
RANDOM_STATE = 42
df = pd.concat([pd.read_csv(os.path.join(DATA_DIR, f), low_memory=False) for
f in FILES], ignore_index=True)
df = df.drop(columns=['id'], errors='ignore')
13
482.ЧДТУ.52465-0112 01
# --- Labelpreparation ---
if 'label' indf.columns:
y = df['label'].astype(int)
elif 'attack_cat' indf.columns:
y = df['attack_cat'].apply(lambda v: 0 ifstr(v).lower() in ['normal','normal.'] else
1).astype(int)
else:
raiseRuntimeError("Nolabelcolumnfound")
X = df.drop(columns=['label','attack_cat'], errors='ignore')
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=RANDOM_STATE, stratify=y
)
cat_cols = ['proto', 'service', 'state']
num_cols = [c for c inX_train.columnsif c notincat_cols]
X_train_cat = pd.get_dummies(X_train[cat_cols], dtype=float)
X_test_cat = pd.get_dummies(X_test[cat_cols], dtype=float)
all_cat_cols = X_train_cat.columns.union(X_test_cat.columns)
X_train_cat = X_train_cat.reindex(columns=all_cat_cols, fill_value=0)
X_test_cat = X_test_cat.reindex(columns=all_cat_cols, fill_value=0)
X_train_final = pd.concat([X_train[num_cols], X_train_cat], axis=1).fillna(0)
X_test_final = pd.concat([X_test[num_cols], X_test_cat], axis=1).fillna(0)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_final)
X_test_scaled = scaler.transform(X_test_final)
# --- Reshapefor LSTM input (samples, timesteps, features) ---
X_train_lstm = X_train_scaled.reshape((X_train_scaled.shape[0], 1,
X_train_scaled.shape[1]))
X_test_lstm = X_test_scaled.reshape((X_test_scaled.shape[0], 1,
X_test_scaled.shape[1]))
# --- Custom F1 metric ---
def f1_metric(y_true, y_pred):
y_true = tf.cast(y_true, tf.float32)
y_pred_bin = tf.cast(tf.greater(y_pred, 0.5), tf.float32)
tp = tf.reduce_sum(y_true * y_pred_bin)
14
482.ЧДТУ.52465-0112 01
fp = tf.reduce_sum((1 - y_true) * y_pred_bin)
fn = tf.reduce_sum(y_true * (1 - y_pred_bin))
f1 = 2 * tp / (2 * tp + fp + fn + 1e-7)
return f1
# --- LSTM modeldefinition ---
model = Sequential([
Input(shape=(X_train_lstm.shape[1], X_train_lstm.shape[2])),
LSTM(128, return_sequences=True),
Dropout(0.2),
LSTM(64),
Dropout(0.15),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy', f1_metric]
)
# --- Callbacks ---
early_stop = EarlyStopping(
monitor='val_f1_metric',
patience=15,
restore_best_weights=True,
mode='max'
)
reduce_lr = ReduceLROnPlateau(
monitor='val_f1_metric',
factor=0.5,
patience=10,
min_lr=1e-6,
mode='max'
)
# --- Modeltraining ---
history = model.fit(
X_train_lstm, y_train,
validation_data=(X_test_lstm, y_test),
epochs=150,
batch_size=256,
15
482.ЧДТУ.52465-0112 01
class_weight={0:2.6, 1:1},
callbacks=[early_stop, reduce_lr],
verbose=2
)
pred = (model.predict(X_test_lstm, batch_size=1024) > 0.5).astype(int).flatten()
print("="*70)
print(f"Accuracy : {accuracy_score(y_test, pred):.5f}")
print(f"F1-score : {f1_score(y_test, pred):.5f}")
print(classification_report(y_test, pred, target_names=['Normal','Attack']))
print("="*70)
# --- Savemodelandpreprocessingartifacts ---
model.save(os.path.join(DATA_DIR, "lstm_ids.keras"))
joblib.dump(scaler, os.path.join(DATA_DIR, "scaler.pkl"))
joblib.dump(X_train_final.columns.tolist(), os.path.join(DATA_DIR,
"features.pkl"))
print("Модель та скалери збережені успішно.")
importlogging
fromcollectionsimportCounter
importpandasaspd
importnumpyasnp
fromscapy.allimportrdpcap, TCP, UDP, IP, IPv6
# --- Loggingsetup ---
logging.basicConfig(
filename="extract_features.log",
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
# --- Globalflowtracker ---
flow_tracker = {}
# --- Fullone-hotlists ---
proto_list = [
'tcp','udp','icmp','ip','ipv6','proto_no'
]
service_list = [
'http','ssl','ftp','ftp-data','ssh','dns','dhcp','smtp','snmp','pop3','irc','-','service_-'
]
state_list = [
'SYN','SYN+ACK','ACK','FIN','RST','state_no'
16
482.ЧДТУ.52465-0112 01
]
# --- Utilityfunctions ---
defflow_key(pkt):
if IP inpkt:
ip_layer = pkt[IP]
elif IPv6 inpkt:
ip_layer = pkt[IPv6]
else:
returnNone
proto = 'other'
sport, dport = 0, 0
if TCP inpkt:
proto = 'tcp'
sport, dport = pkt[TCP].sport, pkt[TCP].dport
elif UDP inpkt:
proto = 'udp'
sport, dport = pkt[UDP].sport, pkt[UDP].dport
return (ip_layer.src, ip_layer.dst, sport, dport, proto)
definit_flow(pkt):
return {
'dur': 0, 'spkts':0, 'dpkts':0, 'sbytes':0, 'dbytes':0,
'rate':0, 'sttl':[], 'dttl':[], 'sinpkt':[], 'dinpkt':[],
'sjit':0, 'djit':0, 'swin':0, 'stcpb':0, 'dtcpb':0, 'dwin':0,
'tcprtt':0, 'synack':0, 'ackdat':0, 'smean':0, 'dmean':0,
'proto':'proto_no','service':'service_-','state':'state_no',
'first_ts': pkt.time, 'last_ts': pkt.time,
'src_ports': [], 'dst_ports': [],
'http_methods': Counter(), 'ftp_cmds': Counter()
}
defupdate_flow(pkt):
key = flow_key(pkt)
ifkeyisNone:
return
ifkeynotinflow_tracker:
flow_tracker[key] = init_flow(pkt)
flow = flow_tracker[key]
prev_ts = flow['last_ts']
flow['last_ts'] = pkt.time
17
482.ЧДТУ.52465-0112 01
flow['dur'] = flow['last_ts'] - flow['first_ts']
ip_src = pkt[IP].srcif IP inpktelsepkt[IPv6].src
pkt_len = len(pkt)
ifip_src == key[0]:
flow['spkts'] += 1
flow['sbytes'] += pkt_len
flow['sttl'].append(pkt[IP].ttlif IP inpktelsepkt[IPv6].hlim)
flow['sinpkt'].append(pkt_len)
flow['src_ports'].append(key[2])
ifprev_ts != flow['first_ts']:
flow['sjit'] += abs(pkt.time - prev_ts)
else:
flow['dpkts'] += 1
flow['dbytes'] += pkt_len
flow['dttl'].append(pkt[IP].ttlif IP inpktelsepkt[IPv6].hlim)
flow['dinpkt'].append(pkt_len)
flow['dst_ports'].append(key[3])
ifprev_ts != flow['first_ts']:
flow['djit'] += abs(pkt.time - prev_ts)
# TCP/UDP features
if TCP inpkt:
tcp = pkt[TCP]
flow['stcpb'] += pkt_len
flow['dwin'] += tcp.window
iftcp.flags& 0x02: flow['synack'] += 1
iftcp.flags& 0x10: flow['ackdat'] += 1
flow['tcprtt'] = pkt.time - flow['first_ts'] ifflow['first_ts'] else 0
if UDP inpkt:
udp = pkt[UDP]
flow['dwin'] += udp.lenifhasattr(udp,'len') else 0
flow['rate'] = (flow['sbytes'] + flow['dbytes']) / flow['dur'] ifflow['dur']>0 else 0
flow['smean'] = np.mean(flow['sinpkt']) ifflow['sinpkt'] else 0
flow['dmean'] = np.mean(flow['dinpkt']) ifflow['dinpkt'] else 0
detect_service(pkt, flow)
detect_state(pkt, flow)
defdetect_service(pkt, flow):
sport, dport = 0,0
if TCP inpkt:
sport, dport = pkt[TCP].sport, pkt[TCP].dport
18
482.ЧДТУ.52465-0112 01
elif UDP inpkt:
sport, dport = pkt[UDP].sport, pkt[UDP].dport
service_map = {80:'http',443:'ssl',21:'ftp',20:'ftp-data',22:'ssh',
25:'smtp',53:'dns',161:'snmp',110:'pop3',67:'dhcp',68:'dhcp'}
service = service_map.get(sport, service_map.get(dport,'-'))
flow['service'] = service
payload = bytes(pkt[TCP].payload) if TCP inpktelse b''
try: payload_str = payload.decode(errors='ignore')
except: payload_str = ''
ifservice=='http':
for m in
['GET','POST','HEAD','OPTIONS','PUT','DELETE','CONNECT','TRACE','PATC
H']:
if m inpayload_str: flow['http_methods'][m] += 1
ifservicein ['ftp','ftp-data']:
forcmdin ['USER','PASS','RETR','STOR','LIST','CWD','QUIT']:
ifcmdinpayload_str: flow['ftp_cmds'][cmd] += 1
defdetect_state(pkt, flow):
if TCP notinpkt:
flow['state'] = 'state_no'
return
flags = pkt[TCP].flags
states = []
ifflags& 0x01: states.append('FIN')
ifflags& 0x02: states.append('SYN')
ifflags& 0x10: states.append('ACK')
ifflags& 0x04: states.append('RST')
flow['state'] = '+'.join(states) ifstateselse 'state_no'
# --- Featurecomputation ---
features_base = [
'dur','spkts','dpkts','sbytes','dbytes','rate','swin','stcpb','dtcpb','dwin','tcprtt','synack'
,'ackdat',
'smean','dmean'
]
defcompute_port_ttl_stats(flow):
stats = {}
src_ports = flow.get('src_ports', [])
dst_ports = flow.get('dst_ports', [])
19
482.ЧДТУ.52465-0112 01
ttls = flow.get('sttl', []) + flow.get('dttl', [])
stats['src_port_min'] = np.min(src_ports) ifsrc_portselse 0
stats['src_port_max'] = np.max(src_ports) ifsrc_portselse 0
stats['src_port_mean'] = np.mean(src_ports) ifsrc_portselse 0
stats['src_port_var'] = np.var(src_ports) ifsrc_portselse 0
stats['dst_port_min'] = np.min(dst_ports) ifdst_portselse 0
stats['dst_port_max'] = np.max(dst_ports) ifdst_portselse 0
stats['dst_port_mean'] = np.mean(dst_ports) ifdst_portselse 0
stats['dst_port_var'] = np.var(dst_ports) ifdst_portselse 0
stats['ttl_min'] = np.min(ttls) ifttlselse 0
stats['ttl_max'] = np.max(ttls) ifttlselse 0
stats['ttl_mean'] = np.mean(ttls) ifttlselse 0
stats['ttl_var'] = np.var(ttls) ifttlselse 0
returnstats
defcompute_http_methods(flow):
return {f"http_{k}": flow['http_methods'].get(k,0) for k in
['GET','POST','PUT','DELETE','HEAD','OPTIONS','CONNECT','PATCH','TRAC
E']}
defcompute_ftp_commands(flow):
return {f"ftp_{k}": flow['ftp_cmds'].get(k,0) for k in
['USER','PASS','STOR','RETR','LIST','CWD','QUIT']}
defextract_features(pcap_path):
logging.info(f"Reading PCAP: {pcap_path}")
flow_tracker.clear()
packets = rdpcap(pcap_path)
logging.info(f"Loaded {len(packets)} packets")
forpktinpackets:
if IP inpktor IPv6 inpkt:
update_flow(pkt)
records = []
forkey, flowinflow_tracker.items():
rec = {}
rec.update({f:flow.get(f,0) for f infeatures_base})
rec.update(compute_port_ttl_stats(flow))
rec.update(compute_http_methods(flow))
rec.update(compute_ftp_commands(flow))
rec.update({p:1 ifflow['proto']==p else 0 for p inproto_list})
rec.update({s:1 ifflow['service']==s else 0 for s inservice_list})
rec.update({st:1 ifflow['state']==stelse 0 forstinstate_list})
20
482.ЧДТУ.52465-0112 01
records.append(rec)
df_feat = pd.DataFrame(records).fillna(0).astype(np.float32)
logging.info(f"Featureextractionfinished, {df_feat.shape[0]} flows")
returndf_feat
importtime
importpsutil
importos
importpandasaspd
fromscapy.allimportrdpcap
fromtensorflow.keras.modelsimportload_model
importjoblib
fromsklearn.metricsimportconfusion_matrix, precision_score, recall_score,
f1_score
fromextract_featuresimportextract_features
fromsignature_detectorimportanalyze_pcap
process = psutil.Process(os.getpid())
BASE_DIR = r"F:\Diplom"
PCAP_PATH = os.path.join(BASE_DIR, "1000.pcap")
LABELS_PATH = os.path.join(BASE_DIR, "1000_labels.csv")
# --- LSTM paths ---
MODEL_PATH = os.path.join(BASE_DIR, "lstm_ids.h5")
SCALER_PATH = os.path.join(BASE_DIR, "scaler.pkl")
FEATURES_PATH = os.path.join(BASE_DIR, "features.pkl")
# --- Loadpacketsandgroundtruthlabels ---
packets = rdpcap(PCAP_PATH)
labels_df = pd.read_csv(LABELS_PATH)
y_true = labels_df['label'].values
# --- Signature-basedanalysis ---
sig_start = time.time()
analyze_pcap(PCAP_PATH)
alerts_df = pd.read_csv("alerts.csv")
sig_pred = [1 if i+1 inalerts_df['packet_no'].valueselse 0 for i
inrange(len(packets))]
sig_time = time.time() - sig_start
sig_mem = process.memory_info().rss / (1024*1024)
# --- Load LSTM modelandpreprocessingobjects ---
model = load_model(MODEL_PATH)
21
482.ЧДТУ.52465-0112 01
scaler = joblib.load(SCALER_PATH)
feature_columns = joblib.load(FEATURES_PATH)
# --- Featureextraction ---
df_feat = extract_features(PCAP_PATH)
# --- Addmissingfeaturecolumns ---
missing_cols = [colforcolinfeature_columnsifcolnotindf_feat.columns]
ifmissing_cols:
df_feat = pd.concat([df_feat, pd.DataFrame(0, index=df_feat.index,
columns=missing_cols)], axis=1)
df_feat = df_feat[feature_columns].copy()
# --- Featurescalingandreshapefor LSTM ---
X_scaled = scaler.transform(df_feat)
X_lstm = X_scaled.reshape((X_scaled.shape[0], 1, X_scaled.shape[1]))
# --- ML prediction ---
start_time = time.time()
ml_pred_proba = model.predict(X_lstm, verbose=0)
ml_pred = (ml_pred_proba.flatten() > 0.5).astype(int)
ml_time = time.time() - start_time
ml_mem = process.memory_info().rss / (1024*1024)
# --- Hybriddecisionlogic ---
hybrid_pred = [1 if s == 1 or m == 1 else 0 for s, m inzip(sig_pred, ml_pred)]
# --- Metriccalculation ---
defmetrics(y_true, y_pred):
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
accuracy = (tp + tn) / len(y_true)
returntp, fp, fn, tn, precision, recall, f1, accuracy
total_packets = len(y_true)
normal_count = sum(y_true == 0)
threat_count = sum(y_true == 1)
normal_percent = normal_count / total_packets * 100
threat_percent = threat_count / total_packets * 100
tp_s, fp_s, fn_s, tn_s, prec_s, rec_s, f1_s, acc_s = metrics(y_true, sig_pred)
tp_m, fp_m, fn_m, tn_m, prec_m, rec_m, f1_m, acc_m = metrics(y_true, ml_pred)
22
482.ЧДТУ.52465-0112 01
tp_h, fp_h, fn_h, tn_h, prec_h, rec_h, f1_h, acc_h = metrics(y_true, hybrid_pred)
# --- Outputresults ---
print("\n" + "═" * 100)
print(f" ПОРІВНЯННЯ ЗАСОБІВ НА ТРАФІКУ
({os.path.basename(PCAP_PATH)})".center(100))
print("═" * 100)
print(f"{'Всього пакетів':<35} : {total_packets}")
print(f"{'Нормальний трафік':<35} : {normal_count} ({normal_percent:.2f}%)")
print(f"{'Загрозливий трафік':<35} : {threat_count} ({threat_percent:.2f}%)")
print("─" * 100)
print("\nЕфективність засобів".center(100))
print("─" * 100)
print(f"{'Засіб':<20} {'TP':<5} {'FP':<5} {'FN':<5} {'TN':<6} {'Precision':<10}
{'Recall':<10} {'F1-score':<10} {'Accuracy'}")
print("─" * 100)
print(f"{'Сигнатурний':<20} {tp_s:<5} {fp_s:<5} {fn_s:<5} {tn_s:<6}
{prec_s:.3f:<10} {rec_s:.3f:<10} {f1_s:.3f:<10} {acc_s:.3f}")
print(f"{'ML-модель':<20} {tp_m:<5} {fp_m:<5} {fn_m:<5} {tn_m:<6}
{prec_m:.3f:<10} {rec_m:.3f:<10} {f1_m:.3f:<10} {acc_m:.3f}")
print(f"{'Гібридний':<20} {tp_h:<5} {fp_h:<5} {fn_h:<5} {tn_h:<6}
{prec_h:.3f:<10} {rec_h:.3f:<10} {f1_h:.3f:<10} {acc_h:.3f}")
print("═" * 100)
print("\nПродуктивність")
print("─" * 100)
print(fʼ"{'Засіб':<25} {'Виявлено':<12} {'% від загроз':<15} {'Час (сек)':<12}
{'Пам ять (МБ)'}")
print("─" * 100)
sig_percent = tp_s / threat_count * 100
ml_percent = tp_m / threat_count * 100
hyb_percent = tp_h / threat_count * 100
print(f"{'Сигнатурний':<25} {tp_s:<12} {sig_percent:<15.2f} {'—':<12} {'—'}")
print(f"{'ML-модель':<25} {tp_m:<12} {ml_percent:<15.2f} {ml_time:<12.3f}
{ml_mem:.2f}")
print(f"{'Гібридний':<25} {tp_h:<12} {hyb_percent:<15.2f} {'—':<12} {'—'}")
print("═" * 100)
importos
importpandasaspd
fromscapy.allimportsniff, get_if_list, wrpcap
fromtensorflow.keras.modelsimportload_model
fromtensorflow.kerasimportbackendas K
23
482.ЧДТУ.52465-0112 01
importjoblib
fromsignature_detectorimportdetect_signatures
fromextract_featuresimportextract_features
importtempfile
importargparse
importcsv
importjson
BASE_DIR = r"F:\Diplom"
MODEL_PATH = os.path.join(BASE_DIR, "lstm_ids.keras")
SCALER_PATH = os.path.join(BASE_DIR, "scaler.pkl")
FEATURES_PATH = os.path.join(BASE_DIR, "features.pkl")
CSV_LOG_FILE = os.path.join(BASE_DIR, "ids_log.csv")
JSON_LOG_FILE = os.path.join(BASE_DIR, "ids_log.json")
def f1_metric(y_true, y_pred):
y_pred = K.round(y_pred)
tp = K.sum(K.cast(y_true * y_pred, 'float32'))
fp = K.sum(K.cast((1 - y_true) * y_pred, 'float32'))
fn = K.sum(K.cast(y_true * (1 - y_pred), 'float32'))
precision = tp / (tp + fp + K.epsilon())
recall = tp / (tp + fn + K.epsilon())
f1 = 2 * (precision * recall) / (precision + recall + K.epsilon())
return f1
model = load_model(MODEL_PATH, custom_objects={'f1_metric': f1_metric})
scaler = joblib.load(SCALER_PATH)
feature_columns = joblib.load(FEATURES_PATH)
threat_count = 0
sig_count = 0
ml_count = 0
packet_no = 0
ifnotos.path.exists(CSV_LOG_FILE):
withopen(CSV_LOG_FILE, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["№ загрози", "Час пакета", "Сигнатура", "ML"])
ifnotos.path.exists(JSON_LOG_FILE):
withopen(JSON_LOG_FILE, mode="w", encoding="utf-8") as f:
json.dump([], f, indent=4)
defpacket_to_features_live(pkt, feature_columns):
24
482.ЧДТУ.52465-0112 01
tmp_file = tempfile.NamedTemporaryFile(suffix=".pcap", delete=False)
try:
wrpcap(tmp_file.name, [pkt])
df_feat = extract_features(tmp_file.name)
finally:
tmp_file.close()
os.unlink(tmp_file.name)
missing_cols = [colforcolinfeature_columnsifcolnotindf_feat.columns]
ifmissing_cols:
df_feat = pd.concat([df_feat, pd.DataFrame(0, index=df_feat.index,
columns=missing_cols)], axis=1)
df_feat = df_feat[feature_columns]
returnscaler.transform(df_feat)
deflog_threat(threat_id, packet_no, is_sig_threat, ml_pred):
# --- CSV ---
withopen(CSV_LOG_FILE, mode="a", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([threat_id, packet_no, int(is_sig_threat), int(ml_pred)])
# --- JSON ---
withopen(JSON_LOG_FILE, "r+", encoding="utf-8") as f:
data = json.load(f)
data.append({
"threat_id": threat_id,
"packet_no": packet_no,
"signature": bool(is_sig_threat),
"ml": bool(ml_pred)
})
f.seek(0)
json.dump(data, f, indent=4)
defprocess_packet(pkt):
globalthreat_count, sig_count, ml_count, packet_no
packet_no += 1
# 1. Signature
alerts = []
detect_signatures(pkt, 0, alerts, {}, {}, {})
is_sig_threat = len(alerts) > 0
25
482.ЧДТУ.52465-0112 01
# 2. ML
try:
X = packet_to_features_live(pkt, feature_columns)
ml_pred = model.predict(X, verbose=0)[0][0] > 0.5
except:
ml_pred = False
# 3. Hybrid
ifis_sig_threatorml_pred:
threat_count += 1
ifis_sig_threat: sig_count += 1
ifml_pred: ml_count += 1
print(f"[ALERT] Загроза #{threat_count} | Пакет {packet_no}")
# --- Threatlogging ---
log_threat(threat_count, packet_no, is_sig_threat, ml_pred)
defmain():
parser = argparse.ArgumentParser(description="Гібридна IDS у реальному
часі")
parser.add_argument("--iface", type=str, help="Інтерфейс (наприклад:
Ethernet, Wi-Fi)")
args = parser.parse_args()
ifargs.iface:
iface = args.iface
else:
ifaces = get_if_list()
if not ifaces:
print("Не знайдено інтерфейсів!")
return
iface = ifaces[0]
print(f"Використовується перший інтерфейс: {iface}")
print(f"Запуск гібридної IDS на інтерфейсі: {iface}")
print("Для зупинки натиснути Ctrl+C\n")
try:
sniff(iface=iface, prn=process_packet, store=False)
exceptKeyboardInterrupt:
print("\n\n" + "="*80)
print(" ЗАВЕРШЕННЯ РОБОТИ ГІБРИДНОЇ IDS".center(80))
print("="*80)
26
482.ЧДТУ.52465-0112 01
print(f"Всього виявлено загроз: {threat_count}")
print(f" • Сигнатурним методом: {sig_count}")
print(f" • Нейронною мережею: {ml_count}")
print(f" • Гібридом (OR): {threat_count}")
print("="*80)
if __name__ == "__main__":
main()