Files
2026-04-12 22:26:26 +04:00

195 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Алгоритмы обнаружения угроз
## Общие принципы
Все детекторы реализуют **сигнатурный метод** обнаружения на основе скользящего временного окна (sliding window). Каждый детектор:
- Потокобезопасен (`sync.Mutex` на внутреннее состояние)
- Поддерживает дедупликацию — повторный алерт от одного источника не генерируется чаще заданного интервала
- Настраивается через `configs/config.yaml` без перекомпиляции
---
## 1. Port Scan (Сканирование портов)
### Метод обнаружения
Злоумышленник обычно последовательно обращается к множеству портов на одном или нескольких хостах для выявления открытых сервисов. Детектор отслеживает количество **уникальных портов назначения**, к которым обращается один источник за фиксированное время.
### Алгоритм
```
Для каждого TCP SYN-пакета (SYN=1, ACK=0):
key = srcIP
ports[key][dstPort] += timestamp
Удалить записи старше window_seconds
uniquePorts = count(ports[key])
if uniquePorts >= threshold:
если последний алерт был > 30 сек назад:
создать Alert(type=port_scan, severity=high)
```
### Параметры
| Параметр | По умолчанию | Описание |
|----------|-------------|----------|
| `threshold` | 15 | Уникальных портов за период |
| `window_seconds` | 10 | Длина окна в секундах |
### Пример (Nmap):
```
Nmap SYN scan (-sS) → пакеты SYN к портам 22, 80, 443, 3389...
После 15-го уникального порта за 10 секунд → алерт
```
---
## 2. Brute Force (Перебор паролей)
### Метод обнаружения
При переборе паролей атакующий многократно устанавливает TCP-соединение на один и тот же порт аутентификации. Детектор считает количество SYN-пакетов от одного источника к одному порту/хосту назначения.
### Мониторируемые порты
| Порт | Сервис |
|------|--------|
| 22 | SSH |
| 21 | FTP |
| 23 | Telnet |
| 3389 | RDP (Windows Remote Desktop) |
| 5900 | VNC |
| 25 | SMTP |
| 110 | POP3 |
| 143 | IMAP |
### Алгоритм
```
Для каждого TCP SYN-пакета на порт из списка:
key = srcIP + ":" + dstIP + ":" + dstPort
timestamps[key] += now
Удалить записи старше window_seconds
count = len(timestamps[key])
if count >= threshold:
если последний алерт был > 30 сек назад:
создать Alert(type=brute_force, severity=critical)
```
### Параметры
| Параметр | По умолчанию | Описание |
|----------|-------------|----------|
| `threshold` | 10 | Попыток подключения за период |
| `window_seconds` | 30 | Длина окна в секундах |
---
## 3. DoS / DDoS
### Метод обнаружения
Атака отказа в обслуживании характеризуется аномально высоким потоком пакетов от одного (DoS) или множества (DDoS) источников. Детектор измеряет скорость пакетов (PPS — Packets Per Second) от каждого IP в скользящем окне.
### Алгоритм
```
Для каждого IP-пакета:
timestamps[srcIP] += now
Удалить записи старше window_seconds (1 сек по умолчанию)
pps = len(timestamps[srcIP]) / window_seconds
if pps >= pps_threshold:
если последний алерт был > 10 сек назад:
создать Alert(type=dos, severity=critical)
```
### Параметры
| Параметр | По умолчанию | Описание |
|----------|-------------|----------|
| `pps_threshold` | 1000 | Пакетов в секунду |
| `window_seconds` | 1 | Длина окна измерения |
### Ограничение
Детектор срабатывает на отдельные источники. Для распределённого DDoS с тысячами источников необходим дополнительный анализ суммарного трафика к жертве (не реализован в текущей версии).
---
## 4. ARP Spoofing (Подмена ARP)
### Метод обнаружения
Протокол ARP не предусматривает аутентификации, что позволяет злоумышленнику отправить поддельные ARP Reply и связать чужой IP с собственным MAC-адресом (Man-in-the-Middle атака).
Детектор ведёт доверенную таблицу соответствия `IP → MAC`. При получении ARP Reply проверяется, не изменился ли MAC для уже известного IP.
### Алгоритм
```
Для каждого ARP Reply (operation=2):
srcIP = arp.SourceProtAddress
srcMAC = arp.SourceHwAddress
if srcIP in table:
if table[srcIP] != srcMAC:
создать Alert(type=arp_spoof, severity=critical,
desc="IP X сменил MAC с A на B")
table[srcIP] = srcMAC // обновляем
else:
table[srcIP] = srcMAC // первичная запись
```
### Ограничения
- Таблица очищается при `Reset()` (смене сессии). При долгом мониторинге DHCP-обновления MAC не вызывают ложных срабатываний только если DHCP lease истёк.
- Не различает легитимное изменение MAC (замена сетевой карты) от атаки.
---
## 5. DNS Anomaly (Аномалии DNS)
### Сценарий A: DNS-туннелирование
DNS-туннелирование — метод передачи данных через DNS-запросы для обхода фаерволов. Данные кодируются в имени запроса, что приводит к аномально длинным меткам.
Нормальная метка (label): `www`, `mail`, `api` — 315 символов.
Подозрительная метка: `aGVsbG8gd29ybGQhIHRoaXMgaXMgYSB0ZXN0` — 38+ символов (base64-данные).
```
Для каждого DNS запроса (QR=0):
for label in split(queryName, "."):
if len(label) > max_label_length (50):
создать Alert(type=dns_anomaly, desc="DNS tunneling: label length N")
```
### Сценарий B: Высокая частота запросов
Аномально высокое число DNS-запросов от одного хоста может указывать на:
- DNS-туннелирование с разбивкой данных на короткие запросы
- Активность вредоносного ПО (C2 beacon через DNS)
- DGA (Domain Generation Algorithm) — малварь генерирует случайные домены
```
Для каждого DNS запроса:
timestamps[srcIP] += now
Удалить записи старше window_seconds
if len(timestamps[srcIP]) >= query_threshold:
создать Alert(type=dns_anomaly, desc="High DNS query rate: N queries/Xs")
```
### Параметры
| Параметр | По умолчанию | Описание |
|----------|-------------|----------|
| `max_label_length` | 50 | Максимальная длина DNS-метки |
| `query_threshold` | 200 | Запросов за период |
| `window_seconds` | 60 | Длина окна |
---
## Сводная таблица детекторов
| Детектор | Протокол | Метод | Ключ дедупл. | Severity |
|----------|----------|-------|--------------|----------|
| Port Scan | TCP | Sliding window, уникальные порты | srcIP | high |
| Brute Force | TCP | Sliding window, частота SYN | srcIP:dstIP:dstPort | critical |
| DoS | IP | Sliding window, PPS | srcIP | critical |
| ARP Spoof | ARP | Таблица IP→MAC | srcIP | critical |
| DNS Anomaly | DNS/UDP | Длина метки + частота | srcIP | medium |