Защита межсетевого экрана от фрагментационных атак (RFC 1858)
- Атаки обхода межсетевого экрана путем разбивки TCP-заголовка на мелкие смещения (Tiny Fragment Attack).
- Атаки перезаписи заголовков смежными фрагментами данных (Overlapping / Teardrop / Ping of Death).
- Зависание или повышенный расход памяти пула реассемблирования IP-фрагментов ядра.
- Обход L4-фильтров пакетами с флагом
More Fragments (MF=1)и ненулевым смещениемFragment Offset.
1. Анатомия атак на базе фрагментации (RFC 1858 / RFC 3128)
Злоумышленник намеренно делит исходный IP-пакет так, чтобы первый фрагмент содержал только часть заголовка (без портов назначения TCP/UDP), а второй фрагмент перезаписывал данные при реассемблировании на целевом хосте, минуя правила фаервола.
2. Защита в Linux Iptables / Nftables
Принудительная проверка целостности фрагментов и дроп аномалий:
# Блокировка пакетов со смещением заголовка менее стандартного размера (Tiny Fragments)
iptables -A INPUT -f -p tcp --tcp-flags ALL NONE -j DROP
iptables -A FORWARD -f -m length --length 0:67 -j DROP
# Принудительная сборка и валидация фрагментов модулем conntrack
iptables -A PREROUTING -t raw -m rpfilter --invert -j DROP
# Nftables: Запрет некорректных смещений и мелких фрагментов
nft add rule inet filter forward ip frag-off & 0x1fff != 0 ip hdrlength < 5 drop3. Защита в MikroTik RouterOS
/ip firewall filter
# Дроп недействительных фрагментированных пакетов
add chain=forward action=drop connection-state=invalid comment="Drop Invalid Fragmented Frames"
# Защита от перегрузки сборки фрагментов
/ip settings set ip-defrag=yes4. Тюнинг параметров фрагментации ядра Linux через sysctl
Отредактируйте /etc/sysctl.d/99-fragmentation.conf:
# Максимальный объем памяти под фрагменты (байт)
net.ipv4.ipfrag_high_thresh = 4194304
net.ipv4.ipfrag_low_thresh = 3145728
# Время удержания несобранного фрагмента в памяти (секунды)
net.ipv4.ipfrag_time = 15sysctl --system Частые вопросы (FAQ)
Что такое Tiny Fragment Attack?
Это метод атаки, при котором первый фрагмент IP-пакета делается настолько малым (например, 68 байт), что поле L4-портов TCP/UDP попадает во второй фрагмент. Stateless-фаервол пропускает первый фрагмент как безобидный, а целевой сервер собирает опасный пакет.
Помогает ли включение Stateful Firewall (Connection Tracking) от этих атак?
Да. Полноценный Stateful фаервол выполняет полную дефрагментацию (IP Reassembly) пакета в памяти перед тем, как передать его цепочкам фильтрации, автоматически отсекая перекрывающиеся смещения.
Чем опасна атака Teardrop?
В Teardrop смещения фрагментов (Offset + Length) накладываются друг на друга. Уязвимые ОС выделяют некорректный буфер памяти при копировании пейлоада, что приводит к Kernel Panic или BSoD.
Можно ли полностью заблокировать все фрагментированные пакеты?
Блокировка всех фрагментов нарушит работу сервисов с большими пакетами UDP (например, DNS-ответы EDNS0, NFS, видеоконференции). Блокировать следует только аномальные фрагменты и мелкие TCP-сегменты.