Проблемы безопасности обхода NAT (NAT-T)

Опубликовано: 12 Апреля, 2023

Преобразование сетевых адресов (NAT) — это технология, которая произвела небольшую революцию в интернет-коммуникациях. NAT позволяет нескольким компьютерам в локальной сети использовать один общедоступный IP-адрес для доступа в Интернет. Без него ограниченное количество доступных адресов протокола IPv4 было бы доведено до предела. NAT также обеспечивает некоторую меру «маскировки» внутренних компьютеров, поскольку они «скрыты» от внешних (Интернет) компьютеров, которые могут «видеть» только устройство NAT, через которое они подключаются.


Однако NAT традиционно страдал большим недостатком. Он несовместим с протоколом безопасности Интернета (IPSec), который становится все более популярным способом защиты конфиденциальности и целостности данных при их передаче по IP-сети. Решение — NAT Traversal или NAT-T. Однако есть проблемы с безопасностью, связанные с NAT-T — или есть? Microsoft рекомендует не использовать IPSec/NAT-T для подключения клиента Windows XP к серверам Windows VPN, которые находятся за устройствами NAT, а XP Service Pack 2 изменяет поведение по умолчанию, чтобы предотвратить связывание безопасности IPSec/NAT-T с серверами за НАТ. Однако некоторые эксперты по безопасности говорят, что это слишком осторожно, а угроза скорее теоретическая, чем реальная.


Проблема с NAT и IPSec


Почему NAT не работает с IPSec? Помните, что цель IPSec не только в защите конфиденциальности данных, но и в обеспечении подлинности отправителя и целостности данных (чтобы они не были изменены при передаче). Проблема с NAT очевидна: NAT должен изменять информацию в заголовках пакетов, чтобы выполнять свою работу.


Первая проблема заключается в том, что NAT изменяет IP-адрес внутреннего компьютера на адрес устройства NAT. Протокол Internet Key Exchange (IKE), используемый IPSec, встраивает IP-адрес компьютера-отправителя в свою полезную нагрузку, и этот встроенный адрес не соответствует исходному адресу пакета IKE (то есть адресу устройства NAT). Если эти адреса не совпадают, принимающий компьютер отбрасывает пакет.


Другая проблема заключается в том, что контрольные суммы TCP (и, возможно, контрольные суммы UDP) используются для проверки пакетов. Контрольная сумма находится в заголовке TCP и содержит IP-адреса отправляющего и принимающего компьютеров, а также номера портов, используемых для связи. При обычном соединении NAT это не проблема, поскольку устройство NAT обновляет заголовки, чтобы показать свой собственный IP-адрес и порт вместо отправляющего компьютера. Однако IPSec шифрует заголовки с помощью протокола Encapsulating Security Payload (ESP). Поскольку заголовок зашифрован, NAT не может его изменить. Это означает, что контрольная сумма недействительна, поэтому принимающий компьютер отклоняет пакет.


Кроме того, NAT не может использовать номера портов в заголовках TCP и UDP для мультиплексирования пакетов на несколько внутренних компьютеров, если эти заголовки были зашифрованы ESP.


НАТ-Т: как это работает


Рабочая группа IPSec IEEE создала стандарты для NAT-T, определенные в RFC 3947 и 3948. NAT-T предназначен для решения проблем, присущих использованию IPSec с NAT.


NAT-T добавляет заголовок UDP, который инкапсулирует заголовок ESP (он находится между заголовком ESP и внешним заголовком IP). Это дает устройству NAT заголовок UDP, содержащий порты UDP, которые можно использовать для мультиплексирования потоков данных IPSec. NAT-T также помещает исходный IP-адрес отправляющего компьютера в полезную нагрузку NAT-OA (исходный адрес). Это дает принимающему компьютеру доступ к этой информации, чтобы можно было проверить исходный и конечный IP-адреса и порты, а также проверить контрольную сумму. Это также решает проблему встроенного IP-адреса источника, не совпадающего с адресом источника в пакете.



Примечание:
Это очень упрощенное описание того, как NAT-T позволяет IPSec и NAT работать вместе. Для получения более подробной информации см. RFC 3947 по адресу http://www.ietf.org/rfc/rfc3947.txt и RFC 3948 по адресу http://www.ietf.org/rfc/rfc3948.txt.


Проблемы безопасности IPSec/NAT-T


IPSec — это протокол безопасности. Когда вы обходите его нормальное поведение, например, делая доступной информацию заголовка, которую он обычно шифрует, имеет смысл, что уровень безопасности, который он обеспечивает, может быть скомпрометирован.


Microsoft недавно сообщила, что то, как работают IPSec и NAT-T, может создать угрозу безопасности, когда трафик IPSec, предназначенный для одного компьютера, может быть направлен не на тот компьютер, если существуют определенные критерии. Дополнительные сведения см. в статье 885348 базы знаний.


Чтобы предотвратить эту проблему, Microsoft рекомендует в упомянутой выше статье базы знаний не использовать IPSec/NAT-T, если у вас есть VPN-серверы Windows Server 2003 за устройством NAT. И чтобы предотвратить это, поведение Windows XP SP2 по умолчанию не позволяет компьютеру XP установить безопасную ассоциацию IPSec/NAT-T с сервером, находящимся за NAT.


Это перебор? В самой статье базы знаний говорится, что описанная ситуация является необычной, и несколько экспертов по безопасности сообщили, что не могут воспроизвести проблему. Они также отмечают, что, убивая возможность XP подключаться к серверам за NAT, вы вынуждаете клиентов XP использовать PPTP вместо L2TP для VPN-подключений к таким серверам, тем самым жертвуя преимуществами безопасности L2TP.


Изменение XP SP2 для поддержки IPSec/NAT-T


Вы сами должны оценить свою собственную сетевую инфраструктуру и потребности в безопасности и решить, перевешивает ли угроза безопасности, исходящая от соединений IPSec/NAT-T, угрозу безопасности от использования PPTP вместо L2TP.


Если вы решите, что вам нужен L2TP, у вас есть два варианта. Microsoft рекомендует предоставлять своим VPN-серверам общедоступные IP-адреса, чтобы клиенты могли подключаться к ним напрямую, а не через NAT. Конечно, это связано с собственными проблемами безопасности. Кроме того, вы можете отредактировать реестр в Windows XP, чтобы восстановить возможность подключения к серверам за NAT с помощью IPSec/NAT-T. Вот как:



  1. Перейдите к следующему разделу реестра: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesIPsec.
  2. Создайте значение DWORD с именем: AssumeUDPEncapsulationContextOnSendRule.
  3. Установите для данных значение 2, чтобы позволить клиентам (независимо от того, имеют ли они общедоступные IP-адреса или проходят через NAT) подключаться к серверу, находящемуся за NAT.


Примечание:
Вы можете разрешить только клиентам с общедоступными IP-адресами подключаться к серверам за NAT, установив значение 1. Вы можете восстановить поведение по умолчанию SP2 (запретить всем клиентам подключаться к серверам за NAT), установив значение 0.


Резюме


Существуют некоторые разногласия по поводу того, является ли значительным риск безопасности при использовании клиентов Windows XP для подключения к серверам за NAT через IPSec/NAT-T, и не создает ли поведение по умолчанию, введенное XP SP2, которое предотвращает это, больше проблем, чем решает.. Если после оценки доступной информации и потребностей безопасности вашей собственной сети вы хотите разрешить такие соединения, вы можете сделать это, просто отредактировав реестр на клиентских компьютерах XP.