Какой протокол более безопасен с точки зрения возможной поверхности атаки: TCP или UDP?

«Какой протокол более безопасен с точки зрения возможной поверхности атаки: TCP или UDP?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TCP имеет меньшую поверхность атаки по сравнению с UDP благодаря встроенным механизмам установления и контроля соединения. Однако оба протокола требуют дополнительных мер защиты на уровне приложения или транспорта.

Уязвимости UDP:

  • Спуфинг (Spoofing): Отсутствие handshake позволяет легко подделать IP-адрес отправителя для амплификационных DDoS-атак (например, через DNS или NTP).
  • Отсутствие контроля перегрузки: Легко использовать для flood-атак, истощающих полосу пропускания.
  • Отсутствие гарантий доставки и порядка пакетов: Усложняет построение защищённых протоколов поверх UDP.

Пример настройки iptables для ограничения UDP-трафика (защита от flood):

# Ограничение новых UDP-соединений
iptables -A INPUT -p udp -m state --state NEW -m limit --limit 100/second --limit-burst 200 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -j DROP

# Защита конкретного сервиса (DNS)
iptables -A INPUT -p udp --dport 53 -m recent --name dnsflood --set
iptables -A INPUT -p udp --dport 53 -m recent --name dnsflood --update --seconds 60 --hitcount 50 -j DROP

Преимущества TCP для безопасности:

  1. Трёхстороннее рукопожатие (SYN, SYN-ACK, ACK): Затрудняет спуфинг, так как атакующий должен получить и подделать ответный пакет.
  2. Последовательные номера пакетов: Защищает от подмены данных внутри установленного соединения.
  3. Встроенный контроль перегрузки: Снижает эффективность flood-атак.

Ключевой вывод: Безопасность определяется не только протоколом, но и его реализацией и конфигурацией. Для защиты критичных данных поверх TCP или UDP необходимо использовать криптографию (TLS для TCP, DTLS для UDP) и корректно настроенные сетевые экраны (stateful для TCP, rate-limiting для UDP).