15 December 2011

NAT не firewall, повторим еще разок

System administration


Посмотрите на рисунок. Вот так конфигурируется классический NAT на маршрутизаторе Cisco, допустим там больше ничего не сконфигурировано. А теперь ответьте сами себе на вопрос. Может ли при определенных условиях кто-либо обратиться извне на RDP порт (TCP 3389) супер секретного сервера 192.168.0.250 и попытаться подобать пароль к нему. Уточним, что сервер стоит одиноко в сети и никуда сам не обращается (имеется в виду, что на нем нет никаких троянов, автоматических обновлений и прочих прелестей).

Считаете — нет? Вспомним анекдот.

Лекция по филологии. Старый профессор рассказывает:

— В некоторых языках мира двойное отрицание означает согласие. В других, двойное отрицание так и остается отрицанием. Но, нет ни одного языка в мире, в котором двойное согласие означает отрицание. Голос с задней парты:

— Ну да, конечно, профессор.

Почему нет


Толковый сетевой инженер с уровнем CCNP сразу же ответит – нет, и обоснует это следующим образом. Для того, чтобы обмениваться данными с хостом за NAT необходимо чтобы в NAT создалась трансляция. Создание трансляции инициируется хостами из внутренней, с точки зрения NAT, сети. Серверное приложение на порту TCP 3389 само никуда не обратится, на то оно и серверное, поэтому трансляция не будет создана никогда, и никто во внутрь не пролезет. Инженер будет прав. Однако он не учитывает того, что обратиться к хосту за NAT извне при такой конфигурации можно, а уже после этого будет создана трансляция, через которую сервер будет передавать данные.

Почему да


Теоретически все просто. Задумайтесь, а что будет, если провайдер на своем маршрутизаторе B пропишет вот такой маршрут:
ip route 192.168.0.0 255.255.255.0 2.2.2.2
А будет следующее. Любой клиент провайдера может отправить TCP пакет на IP 192.168.0.250 порт 3389. Этот пакет, согласно таблицам маршрутизации провайдера будет доставлен на интерфейс FE0/0 марштрутизатора A. Что сделает с ним маршрутизатор A? То, для чего предназначены все маршрутизаторы — смаршрутизирует на хост 192.168.0.250. Сервер 192.168.0.250 в ответ пошлет пакет на IP адрес источника, пришедшего в изначальном пакете. Маршрутизатор A создаст трансляцию через которую будут передаваться данные к хосту источнику изначального пакета.

А вот тут возникают сложности. Они связаны с тем, что пакет уходит на IP адрес 192.168.0.250 порт 3389, а возвращаются с адреса 2.2.2.2 и порта не обязательно 3389. Вы можете мне не верить, но при наличии у атакующего FreeBSD с его divert socket-ами, perl-а, воображения и понимания как работают протоколы TCP/IP, нет ничего не возможного и можно получить доступ на терминал атакуемого сервера в течение одного дня.

Еще немного поговорим об этом


Когда я рассказывал о такой атаке знакомому, работающему у провайдера, он мне задал резонный вопрос — а вот ты мне назови хоть одного провайдера, который будет заниматься подобными вещами? Я сам раньше работал у провайдера и знаю, что никакой, но ответил вопросом – а ты знаешь, что такое маршрутизация от источника, и то, что по умолчанию она не отключена на маршрутизаторах Сisco? Ты ее отключаешь?
При использовании маршрутизации от источника атака не сильно усложняется, достаточно добавить, на сколько я помню, 5 байт в опциях IP пакета.

Заключение


Может быть, пост и провокационный, но я знаю, что большинство сетевиков не знают о подобной атаке и никогда не конфигурируют firewall в случае, когда используют NAT. Возможно, после прочтения этого поста кто-то и начнет следовать всем рекомендациям по защите сети, поверьте, они не просто так пишутся…
Tags:сетиnatfirewall
Hubs: System administration
+136
59.8k 470
Comments 55
Popular right now
Python для анализа данных
December 2, 202019,000 ₽SkillFactory
Профессия Product Manager
December 2, 2020108,500 ₽Нетология
Профессия Data Scientist
December 2, 2020135,000 ₽SkillFactory
Разработка приложений на Kotlin
December 2, 202020,900 ₽Нетология
Профессия Project Manager
December 2, 202098,000 ₽Нетология