Назад | Перейти на главную страницу

Если я использую iptables, чтобы разрешить TCP-соединения только с определенного IP-адреса, можно ли его подделать?

Правило iptables на моем сервере базы данных:

-A INPUT -p tcp --dport 6432 -s 10.115.0.150 -j ACCEPT

У меня есть другие правила (loopback и т. Д.), Но мне интересно, можно ли «взломать» это конкретное правило. Может ли кто-нибудь просто «подделать» IP-адрес (даже если это адрес частной сети - кроме того, было бы иначе, если бы это был публичный адрес)? Что-то другое?

Ответ Иана в целом правильно, но требует небольшого пояснения Зачем атаку будет сложно осуществить.

TCP использует комбинацию битовых флагов и 32-битных счетчиков, называемых порядковыми номерами и номерами подтверждения, для управления конечным автоматом, отслеживающим прогресс TCP-соединения на протяжении его жизни. Понимание того, как эти два 32-битных счетчика участвуют в трехстороннем рукопожатии, которое предшествует передаче данных полезной нагрузки в каждом TCP-соединении, сделает невозможным проведение атак с использованием поддельных IP-адресов источника.

Когда клиент инициирует TCP-соединение с удаленным сервером, он отправляет TCP-сегмент с установленным битом SYN и случайно выбранным начальным порядковым номером. Удаленный сервер отвечает сегментом TCP с установленными битами SYN и ACK, случайно выбранным начальным порядковым номером и номером подтверждения, равным начальному порядковому номеру клиента плюс 1. Наконец, клиент отвечает сегментом TCP с Установлен бит ACK, порядковый номер, равный исходному порядковому номеру, который он отправляет, плюс 1, и номер подтверждения, равный начальному порядковому номеру удаленного сервера плюс 1.

Когда злоумышленник подделывает дейтаграммы IP с исходного IP-адреса другого хоста, как правило, злоумышленник не получает ответов на какие-либо пакеты, которые он может отправить. В таком сценарии злоумышленник фактически имеет односторонний канал связи с удаленным сервером. Глядя на поток пакетов в TCP-рукопожатии, злоумышленнику будет необходимо предсказать начальный порядковый номер, который удаленный сервер будет генерировать в своем ответе SYN / ACK, чтобы ответить соответствующим номером подтверждения в ответе ACK. для завершения трехстороннего рукопожатия. Злоумышленнику необходимо правильно угадать 32-битное число, чтобы атака сработала.

На сегодняшний день такой вид атаки совершенно непрактичен. Однако в прошлом некоторые громкие атаки использовал именно этот метод. Это стало возможным, потому что в прошлом некоторые операционные системы имели очень предсказуемые начальные порядковые номера. (Вы можете найти статью Михала Залевски Странные аттракторы и анализ порядковых номеров TCP / IP - год спустя интересное чтение с точки зрения описания предсказуемости начальных порядковых номеров различных операционных систем.)

Не при нормальных обстоятельствах.

Протокол TCP имеет трехстороннее рукопожатие для установки соединения.

Host A sends a SYN packet to Host B
Host B sends a SYN ACK packet to host A
Host A sends an ACK packet to host B 

и соединение установлено

Теперь, если мы представим хост C, который подделывает адрес хоста A

Host C sends a spoofed SYN packet to Host B
Host B sends a SYN ACK packet to Host A 

Хост A не ожидает SYN ACK, поэтому просто игнорирует его.