Вопрос: Почему фальсификация TTL IP опасна?


Я читал man-страницу iptables (легкое чтение сном), и я наткнулся на цель «TTL», но он предупреждает:

Установка или увеличение поля TTL потенциально может быть очень опасным

а также

Никогда не устанавливайте и не увеличивайте значение пакетов, выходящих из локальной сети!

Я вижу, как, возможно, уменьшение или установка более низкого уровня TTL может привести к отбрасыванию пакетов до достижения адресата, но какой эффект может увеличиться?


50
2018-05-22 15:31


Источник




Ответы:


TTL получает декремент, когда он проходит через маршрутизатор. Это гарантирует, что если пакет будет перемещаться по кругу, он в конечном итоге умрет.

Поле TTL пакета IP v4 представляет собой 8-битовое поле (255 знаков после запятой). Поэтому, ставя его с самого начала, это не имеет большого значения, поскольку на самом деле он не может быть таким большим в хорошо сформированном пакете (хотя некоторые могут принимать неверные IP-пакеты).

Однако, если что-то увеличивает его, а шаг инкремента - часть цикла, пакет может продолжаться в кругах, не достигая нуля. Со временем (может быть очень коротким или постепенной утечкой) пакеты могут накапливаться в системе, содержащей этот цикл, заставляя его перегружать.


66
2018-05-22 16:05





TTL на пакетах сохраняет маршрутизацию в основном. Если пакет должен был иметь очень большой TTL и по какой-то причине был пойман в круговом маршруте, это могло бы вызвать тонну трафика (называемую «штормом пакетов») и помешать нормальным операциям. Слишком низкий TTL приведет к потере соединения, поскольку вы потеряете пакет до того, как он достигнет места назначения.


19
2018-05-22 15:39



Это больше о истечении срока действия TTL, но в деталях вы узнаете, что вы говорите: cisco.com/web/about/security/intelligence/ttl-expiry.html - NickW


Есть один момент, по которому ответы, по-видимому, пропущены, но которые были бы чисто академическими (из-за того, сколько хопов требуется в Интернете): если пакет, как правило, не смог добраться до места назначения из-за истечения срока действия TTL, а затем увеличить его позволит пакету достигнуть своего назначения, но не повлияет на возвращаемые пакеты, и они истекут до достижения вашей сети.

ОБНОВЛЕНИЕ: Согласно Эта страница в Википедии:

Теоретически, в соответствии с IPv4 время жизни измеряется в секундах, хотя каждый хост, который передает дейтаграмму, должен уменьшить TTL по меньшей мере на одну единицу. На практике поле TTL уменьшается на один на каждом прыжке. Чтобы отразить эту практику, поле переименовано в предел прыжка в IPv6.

ОБНОВЛЕНИЕ 2: Когда кто-то обновил мой пост и ссылался на Википедию, я подумал, что лучше всего обратиться к самому RFC - http://www.ietf.org/rfc/rfc791.txt - Просто найдите TTL там, и это неплохо объясняет это:

Это поле указывает максимальное время, в течение которого дейтаграмма может оставаться в интернет-системе ... каждый модуль, который обрабатывает дейтаграмму, должен уменьшать TTL по меньшей мере на один, даже если он обрабатывает дейтаграмму менее чем за секунду

5
2018-05-22 17:17



Однако, если вы увеличили количество пакетов, созданных в вашей сети, до значения, которое они имели бы, если бы они возникли на вашем маршрутизаторе, тогда возвращаемые пакеты достигнут вашего маршрутизатора (и затем вы можете увеличить их при отправке его клиенту в локальная сеть) - Random832
Мне нравится новый взгляд на подход, и вы получаете мое преимущество за это. Однако изначально планировалось, что TTL будет уменьшаться раз в секунду на каждый пакет, потраченный в сети, а также на каждый прыжок. Это историческое определение в настоящее время в значительной степени игнорируется - однако никогда нельзя предполагать, что путь между двумя узлами является симметричным или даже одним и тем же от передачи одного пакета другому. - PP.
Правда. Вы можете получить очень нечетные результаты, используя tracert, иногда, если пакет x принимает другой маршрут из пакета y! Также спасибо за информацию об этом времени отслеживания, я не знал этого (хотя, если пакеты не отмечены timestamped, которые могут быть уменьшены только в том случае, если маршрутизатор, удерживаемый на нем, не мог?) - Matthew Steeples
@PP. У вас есть ссылка на утверждение о том, что TTL изначально предполагалось декрементировать один раз в секунду? Без высокоточных синхронизированных часов, которые, конечно же, не были обычным явлением в ранние дни Интернета (не говоря уже о том, что многие хосты обрабатывали только локальное время), я не вижу, как это можно было бы надежно выполнить. - Michael Kjörling
@ MichaelKjörling Он определен как таковой в RFC 791, который определяет IPv4. - Michael Hampton♦


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


3
2018-05-22 15:52



(Большинство реализаций) traceroute также полагаются на ICMP Время превышено сообщения, чтобы определить, достиг ли пункт назначения или нет. В качестве сторонних сообщений Time Exceeded один причина, по которой прямое блокирование ICMP - очень плохая идея. - Michael Kjörling


Каждый маршрутизатор, который обрабатывает пакет, уменьшает значение TTL, пока пакет не достигнет своего места назначения, или TTL не достигнет нуля и не умрет.

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

Если вы уверены, что маршрутизатор не находится в цикле (подобная дереву топология), вы можете теоретически безопасно увеличить значение TTL. Сказав это, разрешение большего количества переходов, чем стандартное, может сделать перегрузку более вероятным во внешней сети. Если у вас есть длинная цепочка маршрутизаторов между внутренней и внешней сетью, пока нет цикла, большее значение TTL может помочь. Сказав это, для кого-то может быть довольно легко добавить ребро в сеть и создать цикл, поэтому, начиная с большего значения TTL, когда пакет, возникший в первую очередь, намного безопаснее.


0
2018-05-24 13:02