# Руководство по тестированию ## Подготовка окружения Для тестирования нужны две машины в одной сети (или две VM), либо одна машина с loopback-интерфейсом. ``` [Машина A — NIDS] [Машина B — Атакующий] 192.168.1.100 192.168.1.200 sudo ./nids nmap / hping3 / hydra http://localhost:3000 ``` **Запуск системы перед каждым тестом:** ```bash # Терминал 1 — бэкенд sudo ./nids # Терминал 2 — фронтенд cd frontend && bun run dev # Открыть в браузере: http://localhost:3000 # Перейти на страницу «Захват» → выбрать интерфейс → «Начать захват» ``` --- ## Тест 1: Сканирование портов (Port Scan) **Инструмент:** `nmap` **Установка:** ```bash # Debian/Ubuntu sudo apt install nmap # Arch sudo pacman -S nmap ``` **Запуск атаки (с машины B):** ```bash # 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` **Установка:** ```bash # Debian/Ubuntu sudo apt install hydra # Arch sudo pacman -S hydra ``` **Требование:** на машине A должен быть запущен SSH-сервер: ```bash sudo systemctl start sshd ``` **Запуск атаки (с машины B):** ```bash # 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 ``` **Другие мониторируемые порты:** ```bash # 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` **Установка:** ```bash # Debian/Ubuntu sudo apt install hping3 # Arch sudo pacman -S hping3 ``` **Запуск атаки (с машины B):** ```bash # 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):** ```bash # Флуд на локальный интерфейс (lo) sudo hping3 -S --flood -V 127.0.0.1 # Бэкенд при этом нужно запустить с захватом на интерфейсе lo ``` **Порог срабатывания:** 1000 пакетов/сек от одного источника. --- ## Тест 4: ARP Spoofing **Инструмент:** `arpspoof` (пакет `dsniff`) или `ettercap` **Установка:** ```bash # Debian/Ubuntu sudo apt install dsniff # Arch sudo pacman -S dsniff ``` **Запуск атаки (с машины B):** ```bash # Подмена 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`:** ```bash # Отправить 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` или ручная генерация **Установка:** ```bash # Debian/Ubuntu sudo apt install iodine # Arch sudo pacman -S iodine ``` **Имитация туннелирования вручную (через `dig`):** ```bash # Запрос с очень длинной меткой (>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-скрипт ```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](https://wiki.wireshark.org/SampleCaptures) | Коллекция тестовых захватов | | [Malware Traffic Analysis](https://www.malware-traffic-analysis.net/) | Реальный вредоносный трафик | | [NETRESEC](https://www.netresec.com/?page=PcapFiles) | Тематические PCAP с атаками | | [CTF captures](https://github.com/ctfs) | Захваты с соревнований | **Скачать конкретные файлы:** ```bash # 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 ``` **Использование:** 1. Открыть `http://localhost:3000/capture` 2. Перейти на вкладку **PCAP файл** 3. Перетащить файл → нажать **Анализировать** 4. Алерты появятся в журнале через несколько секунд --- ## Проверка API напрямую (без браузера) ```bash # Список интерфейсов 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 сек |