357 lines
11 KiB
Markdown
357 lines
11 KiB
Markdown
# Руководство по тестированию
|
|
|
|
## Подготовка окружения
|
|
|
|
Для тестирования нужны две машины в одной сети (или две 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 сек |
|