У спільних сегментах локальних мереж Ethernet та Wi-Fi пристрої використовують шлюз за замовчуванням (default gateway) для надсилання пакетів до зовнішньої мережі. За нормальних умов комп'ютер надсилає пакети локальному маршрутизатору, який передає їх далі за призначенням. Проте в архітектурі стека IPv4 ще з 1981 року присутній діагностичний протокол керування: Internet Control Message Protocol (ICMP), стандартизований у RFC 792.

Окремим елементом RFC 792 є повідомлення ICMP Redirect (тип 5). Воно було створене для оптимізації маршрутів, щоб маршрутизатор міг повідомити хост про наявність більш прямого шляху. Якщо в одному широкомовному домені знаходиться зловмисник, цей механізм перетворюється на небезпечну атаку з отруєння таблиці маршрутизації (ICMP Route Poisoning).

Структура пакета ICMP Type 5 за стандартом RFC 792

Коли маршрутизатор отримує вхідний IP-пакет і виявляє, що для його передачі наступному вузлу пакет має вийти через той самий фізичний інтерфейс, такий шлях вважається неоптимальним. Маршрутизатор формує повідомлення ICMP Redirect і надсилає його назад пристрою-відправнику.

Двійкова структура кадру ICMP Redirect має наступний вигляд:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type (5)  |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Gateway Internet Address                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Internet Header + 64 bits of Original Data Datagram      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Основні параметри повідомлення:

  • Поле Type: Містить значення 5, що вказує на перенаправлення ICMP.
  • Поле Code: Визначає сферу дії директиви:
    • Code 0: Перенаправлення для всієї підмережі призначення.
    • Code 1: Перенаправлення для окремого вузла (Host Redirect).
    • Code 2: Перенаправлення з урахуванням типу обслуговування (ToS) для мережі.
    • Code 3: Перенаправлення з урахуванням ToS для окремого вузла.
  • Gateway Internet Address: 32-бітна IPv4-адреса рекомендованого шлюзу.
  • Корисне навантаження: Повний заголовок IPv4 та щонайменше 64 біти (8 байтів) початкових даних пакету, що спричинив перенаправлення.

Отримуючи пакет, ядро операційної системи жертви аналізує ці 64 біти. Якщо вони збігаються з активним сокетом підключення, система приймає повідомлення та оновлює таблицю пересилання (FIB).

Сценарій атаки "людина посередині" в локальній мережі

Вразливість пояснюється повною відсутністю криптографічної перевірки автентичності в RFC 792. Будь-який комп'ютер у спільному сегменті канального рівня L2 (наприклад, у публічній мережі Wi-Fi або некерованому комутаторі) може сформувати підроблений пакет ICMP Type 5.

Атака здійснюється у три послідовні кроки:

  1. Моніторинг мережі: Зловмисник перехоплює вихідні пакети жертви для визначення відкритих з'єднань.
  2. Генерація підробленого кадру: Створюється пакет ICMP Type 5 Code 1, де адресою нового шлюзу зазначається IP-адреса нападника, відправником вказується справжній маршрутизатор, а в навантаження додаються перехоплені заголовки жертви.
  3. Зміна системної маршрутизації: Операційна система жертви сприймає команду як надійну директиву обладнання і встановлює тимчасовий маршрут /32 на адресу нападника.
Етап атаки Дії нападника Реакція ядра системи жертви Стан мережевого з'єднання
Аналіз Перехоплення активної сесії Звичайна передача трафіку Визначено параметри з'єднання
Ін'єкція кадру Відправлення пакета ICMP Type 5 Перевірка 64-бітного фрагмента Збіг із параметрами сесії
Зміна таблиці Оголошення власної адреси шлюзом Встановлення маршруту /32 Трафік спрямовано на зловмисника
Перехоплення Отримання вихідних пакетів жертви Ретрансляція справжньому шлюзу Повний контроль сесії Man-in-the-Middle

Загрози для віртуальних приватних мереж (VPN)

VPN створює віртуальний мережевий адаптер (tun0 або wg0) для передачі даних через зашифрований тунель. Проте атаки з використанням ICMP Redirect становлять загрозу, якщо система не застосовує ізоляцію фізичних інтерфейсів:

1. Перенаправлення кінцевої точки туннелю

Для передачі зашифрованого трафіку клієнт надсилає пакети UDP через фізичний інтерфейс (eth0 або wlan0) до локального шлюзу. Якщо зловмисник надсилає ICMP Redirect для зовнішньої IP-адреси VPN-сервера, операційна система починає відправляти тунельні пакети через нападника. Хоча дані захищені протоколами шифрування на зразок ChaCha20-Poly1305, перехоплювач отримує можливість досліджувати характеристики трафіку або блокувати з'єднання.

2. Витік даних поза межі захищеного тунелю

У середовищах із роздільним тунелюванням або без суворої пріоритезації маршрутів підроблений маршрут до хоста /32 має більшу точність, ніж загальні маршрути на зразок 0.0.0.0/1. У результаті пакети до важливих ресурсів надсилаються відкритим текстом безпосередньо через фізичний адаптер.

Вимкнення обробки ICMP Redirect на рівні операційної системи

Сучасні локальні мережі не потребують коригування маршрутів кінцевими вузлами. Вимкнення обробки ICMP Redirect є надійною базовою рекомендацією відповідно до RFC 1122.

Налаштування ядра Linux за допомогою Sysctl

Перевірте поточні налаштування параметрів перенаправлення:

sysctl -a | grep -E "accept_redirects|send_redirects"

Для повного вимкнення прийому та відправлення повідомлень створіть файл /etc/sysctl.d/99-disable-icmp-redirects.conf:

# Вимкнення прийому ICMP Redirect для всіх інтерфейсів IPv4
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# Вимкнення відправлення повідомлень ICMP Redirect
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Вимкнення прийому повідомлень ICMPv6 Redirect (RFC 4861)
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

Застосуйте зміни без перезавантаження комп'ютера:

sudo sysctl --system

Налаштування в операційних системах macOS та BSD

У середовищах macOS та BSD параметри змінюються системною утилітою:

sudo sysctl -w net.inet.icmp.drop_redirect=1

Безпекові параметри в системі Windows

У середовищі Windows налаштування стека TCP/IP можна змінити в системному реєстрі за допомогою консолі PowerShell:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "EnableICMPRedirect" -Value 0 -Type DWord

Багаторівневий захист завдяки маршрутизації RiceGuard

Окрім налаштування параметрів операційної системи, архітектура RiceGuard у VPNRice гарантує захист мережевих потоків на рівні правил ядра:

  1. Ізольовані таблиці маршрутизації та мітки fwmark: Трафік застосунків позначається спеціальною міткою міжмережевого екрана. Правила політики маршрутизації ядра (ip rule) спрямовують ці пакети виключно до таблиці 51820, ізолюючи їх від маніпуляцій з основною таблицею.
  2. Фільтрація пакетів на фізичних портах: Правила nftables відкидають усі вхідні пакети ICMP Type 5 на фізичних адаптерах ще до того, як ядро системи почне їх аналізувати.
  3. Криптографічний захист від повторного відтворення: Протокол Noise IK та 64-бітний ковзний лічильник WireGuard надійно захищають зашифровані тунельні кадри від втручання в локальній мережі.

Комплексний підхід до налаштування системи та надійна маршрутизація Layer-3 у VPNRice гарантують стабільність і приватність зв'язку навіть у незахищених мережах загального користування.