Перейти к содержанию

Виртуальная лаборатория "Защита от DDOS атак"#

В нашей виртуальной лаборатории присутствует топология, с настроенным МСЭ и атакующим устройством. В ней можно посмотреть как работают запрещающие правила при разных видах атак, доступность веб-интерфейса внутри сети и через МСЭ снаружи.

3

Схема сети

Для проверки блокировки каждого типа атаки можно использовать несколько инструментов, таких как hping3, nmap, и fping.

В тестовой лаборатории используются следующие устройства:

Имя Ноды IP Адрес Описание
Client 1.2.3.20 Debian с GUI для доступка к веб-интерфейсу при DDoS.
DDoS_node 1.2.3.30 Debian с CLI для симуляции атак.
Server 1.2.3.40 Debian с CLI для тестирования ssh доступа.
Internet 1.2.3.200 Debian с CLI с адресами DNS на lo-интерфейсах.
WEB-Server 192.168.10.200 NumaEdge с настроенным доступом к веб-интерфейсу, используется для примера как внутренний сервис.
LocalWebClient 192.168.10.33 Debian с GUI для проверки работы веб-интерфейса внутри сети.
DDoS_node 1.2.3.30 Debian с CLI для симуляции атак.

Ниже пошаговые инструкции по созданию симуляций атак и проверке работы правил.

Проверка блокировки TCP-флуд атаки#

Проверка на запрет новых соединений не имеющих флаг SYN по 80 порту с флагом ASK, проверка на стандартной скорости.

hping3 -A -p 80 -d 220 1.2.3.4 --flood

Результат#

Блокируемые пакеты с флагом ACK попадают под запрет 10 правила TCP-Flood_1.

admin@edge-fw:~$ policy show firewall WAN-IN
Политика МЭ IPv4 WAN-IN:

 Политика задействована для интерфейсов (eth1: in)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      Bogon
110       0         0         DROP      UncomMSS
120       0         0         ACCEPT    SYN-Flood_1
130       966.33K   251.24M   DROP      TCP-Flood_1
140       0         0         DROP      TCP-Flood_2
150       0         0         ACCEPT    TCP-Flood_3
160       8         536       ACCEPT    UDP-flood_1
170       0         0         DROP      HTTP-flood
500       0         0         ACCEPT    WEB-SERV
default   0         0         ACCEPT

Для более подробного анализа правила, где сразу видно условия фильтра, можно использовать следующую команду policy show firewall WAN-IN rule 130 filter detail.

admin@edge-fw# run policy show firewall WAN-IN rule 130 filter detail
Фильтр IPv4 TCP-Flood_1:

 Фильтр задействован для политик МЭ: (WAN-IN: 130) (WAN-LOCAL: 180)


rule      pkts      bytes     source              destination         proto     state
----      ----      -----     ------              -----------         -----     -----
10        3.94M     1.02G     0.0.0.0/0           0.0.0.0/0           tcp       N
    state NEW tcp flags:0x02/0x00

[edit]

Проверка на запрет количества соединений для одного источника, со скоростью 100 пакетов в секунду, на HTTP сервер (SYN-flood)#

hping3 -S -p 80 -d 120 --faster 1.2.3.4

Результат#

Трафик ограничивается несколькими правилами для TCP, пакеты не попадающие под скоростные ограничения проходят дальше по цепочке.

admin@edge-fw:~$ policy show firewall WAN-IN
Политика МЭ IPv4 WAN-IN:

 Политика задействована для интерфейсов (eth1: in)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      Bogon
110       0         0         DROP      UncomMSS
120       125       20.00K    ACCEPT    SYN-Flood_1
130       0         0         DROP      TCP-Flood_1
140       37.09K    5.90M     DROP      TCP-Flood_2
150       39        1.56K     ACCEPT    TCP-Flood_3
160       4         268       ACCEPT    UDP-flood_1
170       67        10.72K    DROP      HTTP-flood
500       57        9.12K     ACCEPT    WEB-SERV
default   0         0         ACCEPT

Проверка UDP-флуд атаки с помощью hping3#

Запуск атаки#

hping3 --faster --rand-source -2 -p 80 1.2.3.4

Поток ограничивается правилом для UDP, остальной трафик проходит дальше.

Результат#

admin@edge-fw:~$ policy show firewall WAN-IN
Политика МЭ IPv4 WAN-IN:

 Политика задействована для интерфейсов (eth1: in)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       23.34K    653.66K   DROP      Bogon
110       0         0         DROP      UncomMSS
120       0         0         ACCEPT    SYN-Flood_1
130       0         0         DROP      TCP-Flood_1
140       0         0         DROP      TCP-Flood_2
150       0         0         ACCEPT    TCP-Flood_3
160       85.90K    2.41M     ACCEPT    UDP-flood_1
170       0         0         DROP      HTTP-flood
500       264.47K   7.41M     ACCEPT    WEB-SERV
default   6         402       ACCEPT

Проверка ICMP-флуд атаки с помощью hping3#

Запуск атаки#

hping3 --icmp --data 64400 1.2.3.4

Такая атака попадает под фильтр ограничения ICMP пакетов.

Результат#

admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

Политика задействована для интерфейсов (eth1: local)

rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      SSH-flood
110       0         0         DROP      Bogon
120       0         0         DROP      DNS_flood_1
130       0         0         ACCEPT    DNS_flood_2
140       0         0         DROP      UncomMSS
150       0         0         DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       0         0         ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       7         451.00K   DROP      ICMP_1
210       0         0         ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   0         0         DROP

Запуск атаки#

hping3 --icmp 1.2.3.4 --flood

Такая атака попадает под фильтр ограничения скорости ICMP пакетов, пинг проходит только в ограниченном, разрешённом количестве, остальной поток отсекается действием по умолчанию.

Результат#

admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

 Политика задействована для интерфейсов (eth1: local)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      SSH-flood
110       6         1.97K     DROP      Bogon
120       0         0         DROP      DNS_flood_1
130       0         0         ACCEPT    DNS_flood_2
140       0         0         DROP      UncomMSS
150       0         0         DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       0         0         ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       0         0         DROP      ICMP_1
210       2.16K     61.49K    ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   4.22M     118.29M   DROP

Проверка HTTP-флуд атаки с помощью hping3#

Запуск атаки#

Используйте hping3 для отправки множества SYN-запросов от множества адресов, а второй командой от одного адреса:

hping3 -S -p 443 --flood --rand-source 1.2.3.4
hping3 -S -p 443 --flood 1.2.3.4

Результат#

При такой атаке пакеты попадают под ограничение передачи пакетов по нескольким фильтрам которые постепенно отсеивают трафик на веб-сервер.

admin@edge-fw:~$ policy show firewall WAN-IN
Политика МЭ IPv4 WAN-IN:

 Политика задействована для интерфейсов (eth1: in)

rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       61.58K    2.46M     DROP      Bogon
110       0         0         DROP      UncomMSS
120       628       25.12K    ACCEPT    SYN-Flood_1
130       0         0         DROP      TCP-Flood_1
140       1.64M     65.50M    DROP      TCP-Flood_2
150       1         40        ACCEPT    TCP-Flood_3
160       14        938       ACCEPT    UDP-flood_1
170       163.36K   6.53M     DROP      HTTP-flood
500       520       20.80K    ACCEPT    WEB-SERV
default   0         0         ACCEPT

Проверка DNS атаки с помощью Scapy#

Запуск атаки#

С помощью scapy симулируем две разных атаки, пакеты с недоверенного сервера в первой, пакеты с большой скоростью с доверенного адреса.

scapy
#Для проверки 10 правила по DNS, посылаем DNS-трафик от адреса не попадающего в список доверенных адресов.
from scapy.all import *

dns_response = IP(src="8.8.8.8", dst="1.2.3.4")/UDP(sport=53, dport=12345)/DNS(
    id=100, aa=1, qr=1, qdcount=1, ancount=1,
    qd=DNSQR(qname="example.com"),
    an=DNSRR(rrname="example.com", ttl=10, rdata="1.2.3.200")
)

send(dns_response*10000)

#Для проверки 20 правила мы
from scapy.all import *

dns_response = IP(src="77.88.8.8", dst="1.2.3.4")/UDP(sport=53, dport=12345)/DNS(
    id=100, aa=1, qr=1, qdcount=1, ancount=1,
    qd=DNSQR(qname="example.com"),
    an=DNSRR(rrname="example.com", ttl=10, rdata="1.2.3.200")
)
#Отсылаем собранный пакет со скоростью 300 пакетов/секунду
send(dns_response, count=10000, inter=1./300)

Результат#

Благодаря настроенному правилу 10 мы отсекаем трафик от IP-адресов которые выходят из списка доверенных DNS-серверов который определили в фильтре, а 20 правило отсекает флуд, если атака будет содержать адреса, которые мы выбрали доверенными.

admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

 Политика задействована для интерфейсов (eth1: local)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      SSH-flood
110       0         0         DROP      Bogon
120       7.20K     604.46K   DROP      DNS_flood_1
130       37        3.11K     ACCEPT    DNS_flood_2
140       0         0         DROP      UncomMSS
150       934       78.46K    DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       0         0         ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       0         0         DROP      ICMP_1
210       0         0         ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   0         0         DROP

Проверка атаки с Bogon адресов с помощью hping3#

Поскольку мы уже атаковали с адресов непригодных для маршрутизации на счётчике правила по блокированию таких пакетов уже могут быть некоторые значения. Для прямой проверки используем следующую команду.

hping3 -a 172.16.10.66 -p 80 1.2.3.4 --faster

Результат#

Значительный рост счётчика числа пакетов у фильтра Bogon.

admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

 Политика задействована для интерфейсов (eth1: local)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      SSH-flood
110       50.04K    2.00M     DROP      Bogon
120       0         0         DROP      DNS_flood_1
130       0         0         ACCEPT    DNS_flood_2
140       0         0         DROP      UncomMSS
150       0         0         DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       0         0         ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       0         0         DROP      ICMP_1
210       0         0         ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   0         0         DROP

В итоге любые пакеты пришедшие на внешний интерфейс с адресов которые не должны маршрутизироваться (входящие в список Bogon, который мы определили) будут отброшены.

Отправка TCP пакетов с малым значением MSS для проверки фильтрации пакетов с уязвимым MSS#

hping3 --tcp-mss 400 -p 80 --syn 1.2.3.4 --faster
hping3 --tcp-mss 400 --syn 1.2.3.4 --faster

Результат#

Пакеты успешно блокируются на обоих направлениях трафика.

admin@edge-fw:~$ policy show firewall WAN-IN
Политика МЭ IPv4 WAN-IN:

 Политика задействована для интерфейсов (eth1: in)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      Bogon
110       78.94K    3.47M     DROP      UncomMSS
120       0         0         ACCEPT    SYN-Flood_1
130       0         0         DROP      TCP-Flood_1
140       0         0         DROP      TCP-Flood_2
150       0         0         ACCEPT    TCP-Flood_3
160       4         268       ACCEPT    UDP-flood_1
170       0         0         DROP      HTTP-flood
500       0         0         ACCEPT    WEB-SERV
default   0         0         ACCEPT


admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

 Политика задействована для интерфейсов (eth1: local)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       0         0         DROP      SSH-flood
110       0         0         DROP      Bogon
120       0         0         DROP      DNS_flood_1
130       0         0         ACCEPT    DNS_flood_2
140       65.69K    2.89M     DROP      UncomMSS
150       0         0         DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       0         0         ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       0         0         DROP      ICMP_1
210       0         0         ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   0         0         DROP

Логирование DDoS#

Настройка логирования на правиле по отбросу TCP пакетов при превышении количества передаваемых пакетов с флагом SYN.

set filter SYN-Flood_1 rule 10 log 'enable'

Запуск атаки#

debian@debian:~$ sudo hping3 -S -p 80 -d 120 --faster 1.2.3.4

Пример записей в журнал#

2024-11-14 15:47:15 kernel    kern   warnin 0 [163897.234682] [SYN-Flood_1-10] IN=eth1 OUT=eth2 MAC=0c:78:b6:66:00:01:0c:c7:e6:cb:00:00:08:00 SRC=1.2.3.3 DST=192.168.10.200 LEN=160 TOS=0x00 PREC=0x00 TTL=63 ID=26192 PROTO=TCP SPT=10630 DPT=80 WINDOW=512 RES=0x00 SYN URGP=0
2024-11-14 15:47:16 kernel    kern   warnin 0 [163897.286672] [SYN-Flood_1-10] IN=eth1 OUT=eth2 MAC=0c:78:b6:66:00:01:0c:c7:e6:cb:00:00:08:00 SRC=1.2.3.3 DST=192.168.10.200 LEN=160 TOS=0x00 PREC=0x00 TTL=63 ID=52005 PROTO=TCP SPT=12910 DPT=80 WINDOW=512 RES=0x00 SYN URGP=0

SSH атака#

Попытка множественных подключений к SSH

hping3 -S -a 1.2.3.40 -p 22 --flood --rand-source 1.2.3.4

Результат#

admin@edge-fw:~$ policy show firewall WAN-LOCAL
Политика МЭ IPv4 WAN-LOCAL:

 Политика задействована для интерфейсов (eth1: local)


rule      pkts      bytes     target    filter
----      ----      -----     ------    ------
100       1.49M     59.53M    DROP      SSH-flood
110       0         0         DROP      Bogon
120       0         0         DROP      DNS_flood_1
130       0         0         ACCEPT    DNS_flood_2
140       0         0         DROP      UncomMSS
150       0         0         DROP      UnusedPorts
160       0         0         DROP      SSH-flood
170       5         200       ACCEPT    SYN-Flood_1
180       0         0         DROP      TCP-Flood_1
190       0         0         ACCEPT    UDP-flood_1
200       0         0         DROP      ICMP_1
210       0         0         ACCEPT    ICMP_2
500       0         0         ACCEPT    SSH
default   0         0         DROP