11 KiB
Руководство по тестированию
Подготовка окружения
Для тестирования нужны две машины в одной сети (или две VM), либо одна машина с loopback-интерфейсом.
[Машина A — NIDS] [Машина B — Атакующий]
192.168.1.100 192.168.1.200
sudo ./nids nmap / hping3 / hydra
http://localhost:3000
Запуск системы перед каждым тестом:
# Терминал 1 — бэкенд
sudo ./nids
# Терминал 2 — фронтенд
cd frontend && bun run dev
# Открыть в браузере: http://localhost:3000
# Перейти на страницу «Захват» → выбрать интерфейс → «Начать захват»
Тест 1: Сканирование портов (Port Scan)
Инструмент: nmap
Установка:
# Debian/Ubuntu
sudo apt install nmap
# Arch
sudo pacman -S nmap
Запуск атаки (с машины B):
# SYN-scan — самый распространённый метод сканирования
sudo nmap -sS 192.168.1.100
# Агрессивное сканирование всех портов
sudo nmap -sS -p- --min-rate 1000 192.168.1.100
# Сканирование конкретного диапазона
sudo nmap -sS -p 1-1000 192.168.1.100
Ожидаемый результат:
Тип алерта: port_scan
Критичность: high
Описание: Port scan detected: 15 unique ports probed in 10s window
SrcIP: 192.168.1.200
Что проверить:
- Алерт появляется в журнале (~10 секунд после начала сканирования)
- SrcIP совпадает с адресом машины B
- Счётчик
Countотражает количество уникальных портов
Порог срабатывания: 15 уникальных портов за 10 секунд (настраивается в config.yaml).
Тест 2: Перебор паролей (Brute Force)
Инструмент: hydra или medusa
Установка:
# Debian/Ubuntu
sudo apt install hydra
# Arch
sudo pacman -S hydra
Требование: на машине A должен быть запущен SSH-сервер:
sudo systemctl start sshd
Запуск атаки (с машины B):
# Brute-force SSH с небольшим словарём
hydra -l root -P /usr/share/wordlists/rockyou.txt \
-t 4 -V ssh://192.168.1.100
# Быстрый тест с inline паролями
hydra -l admin -p pass1,pass2,pass3,pass4,pass5,pass6,pass7,pass8,pass9,pass10,pass11 \
ssh://192.168.1.100
# Только SYN-флуд на порт 22 (без hydra)
sudo hping3 -S -p 22 --flood 192.168.1.100
Ожидаемый результат:
Тип алерта: brute_force
Критичность: critical
Описание: Brute-force detected on port 22: 10 connection attempts in 30s
SrcIP: 192.168.1.200
DstPort: 22
Другие мониторируемые порты:
# FTP (21)
hydra -l admin -P wordlist.txt ftp://192.168.1.100
# RDP (3389) — если запущен xrdp
hydra -l administrator -P wordlist.txt rdp://192.168.1.100
# Telnet (23)
hydra -l root -P wordlist.txt telnet://192.168.1.100
Порог срабатывания: 10 попыток за 30 секунд на один порт.
Тест 3: DoS / DDoS атака
Инструмент: hping3
Установка:
# Debian/Ubuntu
sudo apt install hping3
# Arch
sudo pacman -S hping3
Запуск атаки (с машины B):
# SYN flood — классический DoS
sudo hping3 -S --flood -V -p 80 192.168.1.100
# ICMP flood
sudo hping3 --icmp --flood 192.168.1.100
# UDP flood
sudo hping3 --udp --flood -p 53 192.168.1.100
# С заданной скоростью (1500 пакетов/сек)
sudo hping3 -S -p 80 --faster -c 10000 192.168.1.100
Ожидаемый результат:
Тип алерта: dos
Критичность: critical
Описание: DoS attack detected from 192.168.1.200: 1234 pkt/s (threshold: 1000)
SrcIP: 192.168.1.200
Count: 1234
Проверка без второй машины (loopback):
# Флуд на локальный интерфейс (lo)
sudo hping3 -S --flood -V 127.0.0.1
# Бэкенд при этом нужно запустить с захватом на интерфейсе lo
Порог срабатывания: 1000 пакетов/сек от одного источника.
Тест 4: ARP Spoofing
Инструмент: arpspoof (пакет dsniff) или ettercap
Установка:
# Debian/Ubuntu
sudo apt install dsniff
# Arch
sudo pacman -S dsniff
Запуск атаки (с машины B):
# Подмена ARP: сообщаем машине A, что мы — шлюз (192.168.1.1)
sudo arpspoof -i eth0 -t 192.168.1.100 192.168.1.1
# Двусторонняя подмена (полный MITM)
# Терминал 1:
sudo arpspoof -i eth0 -t 192.168.1.100 192.168.1.1
# Терминал 2:
sudo arpspoof -i eth0 -t 192.168.1.1 192.168.1.100
Альтернатива — вручную через arping:
# Отправить ARP Reply с поддельным MAC
sudo arping -c 5 -A -I eth0 192.168.1.100
Ожидаемый результат:
Тип алерта: arp_spoof
Критичность: critical
Описание: ARP spoofing: IP 192.168.1.1 changed MAC from aa:bb:cc:dd:ee:ff to 11:22:33:44:55:66
SrcIP: 192.168.1.1
Protocol: ARP
Важно: детектор срабатывает только если IP уже известен из предыдущих ARP-пакетов. Первая запись в таблицу — штатная, второй пакет с другим MAC — алерт.
Тест 5: DNS Аномалии
5A. DNS-туннелирование
Инструмент: iodine или ручная генерация
Установка:
# Debian/Ubuntu
sudo apt install iodine
# Arch
sudo pacman -S iodine
Имитация туннелирования вручную (через dig):
# Запрос с очень длинной меткой (>50 символов) — триггер детектора
dig "aGVsbG8td29ybGQtdGhpcy1pcy1hLXZlcnktbG9uZy1zdWJkb21haW4.example.com" @8.8.8.8
# Скрипт для многократной отправки
for i in $(seq 1 20); do
dig "$(head -c 60 /dev/urandom | base64 | tr -d '\n/' | head -c 55).test.local" &
done
Ожидаемый результат:
Тип алерта: dns_anomaly
Критичность: medium
Описание: DNS tunneling suspected: label length 55 in query 'aGVsbG8t...test.local'
5B. Высокая частота DNS-запросов
Инструмент: dnsperf или bash-скрипт
# Установка dnsperf
sudo apt install dnsperf # Debian/Ubuntu
# Генерация файла запросов
for i in $(seq 1 500); do
echo "host$i.example.com A"
done > /tmp/dns-queries.txt
# Flood (200+ запросов за 60 секунд)
dnsperf -s 8.8.8.8 -d /tmp/dns-queries.txt -Q 50 -l 30
# Простой bash-вариант без dnsperf
for i in $(seq 1 250); do
dig "sub$i.example.com" @8.8.8.8 +short &
done
Ожидаемый результат:
Тип алерта: dns_anomaly
Критичность: medium
Описание: High DNS query rate from 192.168.1.200: 200 queries in 60s
Тест через готовые PCAP файлы (без второй машины)
Это самый простой способ протестировать все детекторы одновременно.
Рекомендуемые источники PCAP:
| Источник | Описание |
|---|---|
| Wireshark Sample Captures | Коллекция тестовых захватов |
| Malware Traffic Analysis | Реальный вредоносный трафик |
| NETRESEC | Тематические PCAP с атаками |
| CTF captures | Захваты с соревнований |
Скачать конкретные файлы:
# Nmap scan capture
wget https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=nmap.pcap \
-O test-portscan.pcap
# ARP примеры
wget https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=arp-storm.pcap \
-O test-arp.pcap
Использование:
- Открыть
http://localhost:3000/capture - Перейти на вкладку PCAP файл
- Перетащить файл → нажать Анализировать
- Алерты появятся в журнале через несколько секунд
Проверка API напрямую (без браузера)
# Список интерфейсов
curl http://localhost:8080/api/capture/interfaces
# Статус захвата
curl http://localhost:8080/api/capture/status
# Начать захват на eth0
curl -X POST http://localhost:8080/api/capture/start \
-H "Content-Type: application/json" \
-d '{"interface": "eth0"}'
# Все алерты
curl http://localhost:8080/api/alerts | python3 -m json.tool
# Алерты по типу
curl "http://localhost:8080/api/alerts?type=port_scan&page_size=10"
# Сводка статистики
curl http://localhost:8080/api/stats/summary | python3 -m json.tool
# Остановить захват
curl -X POST http://localhost:8080/api/capture/stop
# Скачать PDF отчёт
curl http://localhost:8080/api/reports/generate -o report.pdf
Таблица ожидаемых результатов
| Тест | Инструмент | Алерт | Критичность | Время до срабатывания |
|---|---|---|---|---|
| Port Scan | nmap -sS |
port_scan |
high | ~10 сек |
| Brute Force SSH | hydra |
brute_force |
critical | ~30 сек |
| SYN Flood | hping3 --flood |
dos |
critical | ~1 сек |
| ARP Spoof | arpspoof |
arp_spoof |
critical | мгновенно |
| DNS Tunnel | dig длинный |
dns_anomaly |
medium | мгновенно |
| DNS Flood | dnsperf |
dns_anomaly |
medium | ~60 сек |