Автоматизированный анализ угроз на основе сетевых логов и данных об уязвимостях.
Учебный проект на Python, который демонстрирует базовый процесс Threat Intelligence и реагирования на инциденты:
- сбор данных из нескольких источников
- анализ потенциальных угроз
- имитация реагирования
- формирование отчётов
- визуализация результатов
Скрипт выполняет следующие задачи:
-
Получает данные из нескольких источников
- Vulners API (уязвимости CVE)
- логи системы обнаружения вторжений Suricata
-
Анализирует данные
- ищет уязвимости с высоким CVSS
- выявляет подозрительные IP-адреса
-
Реагирует на угрозы
- выводит предупреждение
- имитирует блокировку IP
-
Формирует отчёты
- CSV
- JSON
-
Создаёт визуализацию
- распределение CVSS
- топ IP
- Python 3.8+
- requests
- pandas
- matplotlib
- pytest
- python-dotenv
Проект использует два источника данных:
Используется для получения информации об уязвимостях:
- CVE
- CVSS score
- описание уязвимости
Используются события IDS/IPS.
Программа умеет читать два формата логов:
- JSON
alerts-only.json
- JSON Lines (EVE format)
suricata_sample.json
threat-analyzer/
│
├── analyzer.py
├── api_client.py
├── config.py
├── log_parser.py
├── main.py
├── reporter.py
├── responder.py
├── visualizer.py
├── email_sender.py
│
├── threat_analyzer.log # Лог файл (создаётся при запуске)
├── blocked_ips.log # Лог заблокированных IP (создаётся при запуске)
│
├── requirements.txt
├── README.md
│
├── .gitignore
├── .env # Файл с переменными окружения (API ключ)
│
├── logs/ # Папка для логов Suricata
│ ├── alerts-only.json
│ └── suricata_sample.json
│
├── reports/ # Папка для отчётов (создаётся автоматически)
│ ├── critical_cves.csv
│ ├── cvss_distribution.png
│ ├── summary.json
│ ├── threat_analysis.png
│ └── top_ips.csv
│
└── tests/
├── test_analyzer.py
├── test_api_client.py
├── test_log_parser.py
├── test_reporter.py
├── test_responder.py
├── test_main.py
├── test_config.py
└── test_visualizer.py
Главная точка входа приложения.
Выполняет:
- загрузку логов
- запрос к Vulners API
- анализ данных
- реагирование
- создание отчётов и графиков
Парсит логи Suricata.
Поддерживает:
- JSON
- JSON Lines (EVE format)
Клиент для работы с Vulners API.
Получает:
- список CVE
- CVSS score
Анализирует данные:
- выделяет критические уязвимости
- определяет топ IP-адресов
- рассчитывает статистику CVSS
Модуль реагирования.
При обнаружении угроз:
- выводит предупреждение
- имитирует блокировку IP
Формирует отчёты:
- CSV
- JSON
Создаёт визуализации:
- распределение CVSS
- топ IP
Если запустить модуль отдельно, он дополнительно создаёт 2 тестовых PNG-графика.
git clone https://github.com/irvik00/HW14.git
cd HW14Linux / macOS
python -m venv venv
source venv/bin/activateWindows
python -m venv venv
venv\Scripts\activatepip install -r requirements.txtПолучите API ключ Vulners:
Скопируйте файл .env.example в .env в корень проекта:
cp .env.example .envОтредактируйте .env, подставив свои реальные данные:
-
VULNERS_API_KEY- ваш ключ от Vulners -
SENDER_EMAILиSENDER_PASSWORD- данные для email (для Gmail нужен пароль приложения)
Поместите логи Suricata в папку:
logs/
Или используйте существующие:
alerts-only.json
suricata_sample.json
python main.pyЗапуск с параметрами
usage: main.py [-h] [--log-file LOG_FILE] [--vuln-limit VULN_LIMIT] [--threshold THRESHOLD] [--block-threshold BLOCK_THRESHOLD] [--top-n TOP_N] [--no-block] [--skip-vulns] [--skip-logs] [--test-mode] [--verbose]
Автоматизированный мониторинг и реагирование на угрозы
options:
-h, --help show this help message and exit
--log-file LOG_FILE Путь к файлу логов Suricata
--vuln-limit VULN_LIMIT
Количество уязвимостей для загрузки
--threshold THRESHOLD
Порог CVSS для критичности
--block-threshold BLOCK_THRESHOLD
Порог событий для блокировки IP
--top-n TOP_N Количество IP в топе
--no-block Отключить имитацию блокировки IP
--skip-vulns Пропустить загрузку уязвимостей (только логи)
--skip-logs Пропустить загрузку логов (только уязвимости)
--test-mode Тестовый режим (использует тестовые данные)
--verbose, -v Подробный вывод (уровень DEBUG)
Примеры использования:
python main.py --log-file logs/eve.json --vuln-limit 50
python main.py --no-block --threshold 8.0
python main.py --skip-vulns --skip-logs --test-modeПосле выполнения будут созданы отчёты в папке:
reports/
| Файл | Описание |
|---|---|
| critical_cves.csv | список критических уязвимостей |
| top_ips.csv | топ IP по количеству событий |
| summary.json | краткая статистика |
| cvss_distribution.png | распределение CVSS |
| threat_analysis.png | топ IP в виде графика |
Можно отдельно протестировать визуализацию:
python visualizer.pyЭто создаст дополнительные тестовые графики PNG.
Проект использует pytest.
Запуск всех тестов:
pytest tests/ -vЗапуск конкретного теста:
pytest tests/test_api_client.py -vПосле запуска скрипта:
- Загружаются логи Suricata
- Выполняется запрос к Vulners API
- Анализируются CVE и сетевые события
- Выявляются угрозы
- Имитируется реагирование
- Формируются отчёты и графики
=== КРИТИЧЕСКИЕ УЯЗВИМОСТИ (CVSS >= 7.0) ===
CVE-2026-3826 | CVSS: 9.8 | IFTOP developed by WellChoose has a Local File Inclusion vulnerability, allowing unauthenticated rem...
...
Всего критических уязвимостей: 8
Средний CVSS: 8.23
Максимальный CVSS: 9.8
=============================================
[2026-03-11 14:08:03] SIMULATED BLOCK: IP 192.168.1.10 blocked. Reason: Более 3 событий
============================================================
ИТОГОВАЯ СВОДКА АНАЛИЗА УГРОЗ
============================================================
Источники данных:
• Уязвимости: 29
• Alert-события: 9
Результаты анализа:
• Критические CVE: 8
• Уникальных IP в логах: 5
Реагирование:
• Заблокировано IP: 1
• Список: 192.168.1.10
Сохранённые файлы:
• cve: reports\critical_cves.csv
• ip: reports\top_ips.csv
• summary: reports\summary.json
📈 Графики:
• ips: reports\threat_analysis.png
• cvss: reports\cvss_distribution.png
============================================================
✅ Анализ успешно завершён!
============================================================
Проект поддерживает отправку email-уведомлений при обнаружении угроз.
Если обнаружены:
- критические CVE
- подозрительные IP
скрипт может отправить уведомление на указанный email.
Для этого используется модуль:
email_sender.py
Добавьте в файл .env:
EMAIL_ENABLED=true
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SENDER_EMAIL=your_email@gmail.com
SENDER_PASSWORD=your_app_password
RECIPIENT_EMAIL=recipient@gmail.comДля Gmail необходимо использовать пароль приложения, а не обычный пароль.
Инструкция: https://support.google.com/accounts/answer/185833
КРИТИЧЕСКИЕ УГРОЗЫ ОБНАРУЖЕНЫ!
📊 Статистика:
- Критических CVE: 8
- Подозрительных IP: 1
🕐 Время: 2026-03-11 14:08:03
📁 Отчёты сохранены в папке reports/
Если email-уведомления отключены (EMAIL_ENABLED=false), скрипт продолжит работу без отправки сообщений.
Проект демонстрирует базовый workflow аналитика безопасности:
- сбор данных
- корреляция событий
- выявление угроз
- реагирование
- отчётность
- визуализация
