Initial commit

This commit is contained in:
kilyabin
2026-04-12 22:26:26 +04:00
commit 68f9a01ed5
44 changed files with 7134 additions and 0 deletions
+356
View File
@@ -0,0 +1,356 @@
# Руководство по тестированию
## Подготовка окружения
Для тестирования нужны две машины в одной сети (или две 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 сек |