Компьютерщик Hacker: снятие отпечатков ОС с размерами окон TTL и TCP

Знаете ли вы, что вы можете узнать, в какой операционной системе работает сетевое устройство, просто взглянув на то, как оно взаимодействует в сети? Давайте посмотрим, как мы можем узнать, на какой операционной системе работают наши устройства.
Зачем ты это делаешь?
Определение операционной системы, на которой работает машина или устройство, может быть полезным по многим причинам. Сначала давайте взглянем на повседневную жизнь. Представьте, что вы хотите переключиться на нового интернет-провайдера, который предлагает безлимитный интернет за 50 долларов в месяц, чтобы вы могли попробовать их сервис. Используя дактилоскопию ОС, вы скоро обнаружите, что они имеют мусорные маршрутизаторы и предлагают услугу PPPoE, предлагаемую на множестве компьютеров с Windows Server 2003. Разве это не так уж хорошо, а?
Другое использование для этого, хотя и не столь этичного, — факт, что дыры в безопасности являются специфическими для ОС. Например, вы выполняете сканирование портов и обнаруживаете, что порт 53 открыт, и на компьютере установлена устаревшая и уязвимая версия Bind, у вас есть ОДИН шанс получить возможность использовать дыру в безопасности, поскольку неудачная попытка может привести к сбою демона.
Как работает фингерпринтинг ОС?
При пассивном анализе текущего трафика или даже при просмотре захвата старых пакетов один из самых простых и эффективных способов сделать отпечатки пальцев ОС — просто посмотреть на размер окна TCP и время жизни (TTL) в заголовке IP первого пакет в сеансе TCP.
Вот значения для более популярных операционных систем:
| Операционная система | Время жить | Размер окна TCP |
| Linux (ядро 2.4 и 2.6) | 64 | 5840 |
| Google Linux | 64 | 5720 |
| FreeBSD | 64 | 65535 |
| Windows XP | 128 | 65535 |
| Windows Vista и 7 (Server 2008) | 128 | 8192 |
| iOS 12.4 (маршрутизаторы Cisco) | 255 | 4128 |
Основная причина того, что операционные системы имеют разные значения, связана с тем, что в RFC для TCP / IP не предусмотрены значения по умолчанию. Другая важная вещь, которую следует помнить, это то, что значение TTL не всегда будет соответствовать одному в таблице, даже если ваше устройство работает под управлением одной из перечисленных операционных систем, вы видите, когда вы отправляете IP-пакет по сети, операционная система отправляющего устройства устанавливает TTL в значение TTL по умолчанию для этой ОС, но по мере прохождения пакетов маршрутизаторами TTL уменьшается на 1. Поэтому, если вы видите TTL 117, можно ожидать, что это будет пакет, который был отправлен с TTL 128 и прошел 11 роутеров, прежде чем был захвачен.
Использование tshark.exe — это самый простой способ увидеть значения, поэтому после получения пакета перехвата убедитесь, что у вас установлен Wireshark, и перейдите к:
Теперь, удерживая кнопку Shift, щелкните правой кнопкой мыши папку Wireshark и выберите здесь открыть командное окно из контекстного меню.
Как только вы нажмете Enter, вам будут показаны все пакеты SYN из вашего захвата в более удобном для чтения формате
Теперь это случайный захват пакетов, который я сделал, подключившись к сайту How-To Geek, и среди всего остального, что делает Windows, я могу точно сказать вам две вещи:
- Моя локальная сеть 192.168.0.0/24
- Я на Windows 7 коробке
Если вы посмотрите на первую строку таблицы, то увидите, что я не вру, мой IP-адрес — 192.168.0.84, мой TTL — 128, а размер окна TCP — 8192, что соответствует значениям для Windows 7.
Следующее, что я вижу, это адрес 74.125.233.24 с TTL 44 и размером окна TCP 5720. Если я посмотрю на мою таблицу, то не будет ОС с TTL 44, однако там будет сказано, что Linux — это серверы Google. Запустите окно TCP размером 5720. После быстрого поиска по IP-адресу в Интернете вы увидите, что это на самом деле сервер Google.
Для чего еще вы используете tshark.exe, сообщите нам в комментариях.
Что такое время жизни пакета (TTL)

Вероятно, многие из нас обращали внимание на параметр TTL в запущенной команде ping. Расшифровывается TTL как Time to live.
Время жизни пакета это предельное число итераций, которое пакет данных может совершить до своего исчезновения. Выражаясь не так официально, TTL — это число «прыжков» от устройства к устройству, которое может совершить пакет.

Строго говоря, TTL это не только про пакеты данных. Время жизни имеют и другие вещи, например, DNS-записи на серверах. Поэтому не связывайте понятие TTL только с пакетами данных.
Возвращаясь к теме статьи, объясним предназначение времени жизни пакета. Дело в том, что данные в сети имеют свойство зацикливаться, что создаёт своего рода «мусорный» трафик. Поскольку количество «прыжков» между узлами у пакетов ограничено, они не смогут «бродить» по сети вечно.
На самом деле, изначально предполагалось, что TTL пакетов будет измеряться в секундах. Так что это должно было быть время в буквальном смысле слова. Однако позже от этой концепции отказались в пользу простого числа «прыжков» или хопов (hop). На каждом промежуточном узле это число уменьшается на единицу (по умолчанию, хотя настройки можно выставить иначе). Если число «прыжков» у пакета истекло, а адресата он так и не достиг, этот пакет уничтожается, а адресату направляется сообщение о необходимости повторной отправки данных (Time Exceeded). Учтите, что коммутаторы оставшееся число «прыжков» не изменяют, так как действуют на канальном уровне (более низком) модели OSI, а не сетевом.
Время жизни пакета задаётся в соответствующем поле в заголовке IPv4-пакета. В стандарте IPv6 используется уже другое поле Hop Limit. Максимально возможное значение TTL равно 255. В большинстве популярных операционных систем (macOS, Linux, Android, iOS и т.д.) TTL=64. В Windows по умолчанию TTL=128.
TTL и интернет-провайдеры
Достаточно интересно используют TTL пакетов интернет провайдеры для обнаружения несанкционированного подключения устройств. Способ массово стал использоваться со временем распространения мобильного интернета и устройств, которые могут этот интернет не только потреблять, но и раздавать другим (смартфоны, планшеты).
Как это выглядит на практике? Если Вы пользуетесь мобильным интернетом со смартфона, то тот отправляет TTL=64, но, если раздать с него Wi-Fi, то TTL подключенных устройств будет изменяться на единицу. Нагляднее это можно проследить на схеме ниже.

Таким образом, оператор видит, что TTL «прыгает» с 64 до 63, а то и до 127 (если это ноутбук с Windows), и делает вывод, что в сеть выходит не одно устройство, а больше. В зависимости от условий предоставления связи, это может привести к блокировке.
Мы не будем в этой статье рассматривать способы обхода блокировок. Скажем лишь, что значение TTL по умолчанию можно изменить. Возьмём для примера Windows. Если вы запустите ping localhost, то увидите, что, как и говорилось ранее, TTL=128.

Для изменения установленного по умолчанию значения TTL нам нужно открыть редактор реестра, пройти в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters и отредактировать (или создать, если его нет) параметр DefaultTTL. Если у вас 64-битная версия ОС, то тип параметра будет QWORD (64 бита), если 32-битная версия ОС, то тип DWORD (32 бита). Система исчисления — десятичная, а значение можете задать от 1 до 255. Например, 65. Тогда пакеты данных, пройдя через раздающий Wi-Fi смартфон, будут выдавать TTL=64.

После этого перезагрузите компьютер. Снова запустив ping localhost, можно увидеть, что значение TTL изменилось.

Отдельно стоит упомянуть протокол IPv6. Если вы его используете, то нужная вам в реестре ветка: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters.
О том, как провернуть подобную настройку в Ubuntu, читайте в статье по этой ссылке.
Как по ping узнать операционную систему хоста


Добрый день уважаемые читатели блога, сегодня я хочу вас спросить, а умеете ли вы по команде пинг определить какое устройство или операционная система вам отвечает, если нет, то вы пришли по адресу и я вам расскажу еще одно назначение утилиты ping. Думаю данный материал, будет полезен как новичкам, так и продвинутым пользователям, особенно когда вы ищите причину неисправности в сети или сервисе, встречал много раз, что вы думаете, что вам отвечает один сервер, а на самом деле это другой, так как кто то, что то поменял и не задокументировал.
Значение ttl
Ранее я вам рассказывал про модель OSI, и там у сетевого пакета, есть такое значение TTL (Time To Life), если перевести, то это время жизни пакета. TTL это некий счетчик, который уменьшается на единицу, при прохождении сетевого пакета или как его еще называют, кадра через маршрутизатор, делается это для того, чтобы он, при невозможности найти пункт назначения, вечно не бегал по роутерам, создавая нагрузку и паразитный трафик.
Именно время жизни пакета (TTL) нам и поможет, определить кто там с другой стороны. У каждой операционной системы этот показатель свой, так например
- Cisco TTL > равен 255
- ttl windows > равен 128
- Unix ttl > равен 64
- Android и IOS Apple> 65
- Lumia > 130
Пишем ping 10.152.1.1 (у вас может быть другой адрес)
Как видите значение ttl тут 255, что и показывает, что отвечает вам IOS у устройства Cisco, как видите команда ping отлично узнала операционную систему хоста с другой стороны.

Попробуем пропинговать unix систему, у меня например в локальной сети шлюзом выступает Kerio Control, на linux версии. Пингуем.
Пишем ping 192.168.5.1 (у вас может быть другой адрес)
Как видите тут значение ttl равно 64, что означает unix платформу, так могут отвечать различные D-link устройства и другие домашние роутеры.

Давайте еще проверим Windows платформы, например у меня есть Windows 8.1 в локальной сети, сделаем пинг. И видите, что оно равно 128, как я и говорил.

Вот вам. тогда загадка, пингуем Windows Server 2012 R2, на нем есть веб сайт relay.aetp.ru. Что вы видите, а то что значение ttl равно 120, но в Windows же 128 по умолчанию идет, не стыковка

tracert relay.aetp.ru
Как видите сетевой пакет проходит не один хо до нужного адреса, и на определенных этапах он теряет от ttl по единичке. Все теперь вы знаете как узнать ttl windows.

Как изменить ttl windows
Давайте рассмотрим ситуацию, что вам нужно изменить ttl windows, поверьте бывают такие ситуации в жизни, примером может быть компания Yota, с ее дурацкой политикой ограничений Yota на раздачу Wi-Fi. Представим ситуацию, что взяли себе оператора Yota на телефон и решили раздать Wifi на ноутбук, но вы даже не знали подводных камней. в плане фильтрации пакетов со стороны Yota. Она жестко режет скорость, и режет она посредством значения ttl, оно должно быть 64, а если у вас дополнительное устройство, то это лишний хоп и значит ttl меньше, вот для обхода этой подставы с раздачей Wifi на ноутбук от Yota, мы и изменим ttl. Менять ttl мы будем в Windows 10, но данные действия подойдут и для Windows 7 и 8.1.
Нажимаем Win+R и вводим regedit
В итоге у вас откроется редактор реестра Windows. Вам нужно перейти в ветку реестра
HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\Tcpip\Parameters
В разделе вам нужно создать значение, все зависит от разрядности Windows, если 32 битная, то создаем параметр DWORD (32 бита), если 64 битная, то QWORD (64 бита). Я создаю QWORD.

Задаем ему имя DefaultTTL и значение и устанавливаем его значение 65 для Android и iOS или 130 — Lumia, Nokia, Microsoft Phone и обязательно перезагружаемся .
эта лишняя единица, как раз и пойдет на лишний скачок через ваш телефон с ноутбука и Yota ничего не увидит, как видите изменить ttl windows 10, очень просто.

Как изменить ttl Ubuntu, Debian
И так с Windows мы уже научились, менять ttl, но не у всех стоит именно он, есть люди с Ubuntu например, давайте учиться как обойти ограничение на раздачу интернета через телефон на компьютер с Ubuntu на борту, в случае, если ваш оператор Йота, вы должны сделать несколько простых вещей.
1) Нажать одновременно Ctrl+Alt+T. Так вы вызовете терминал.
2) Ввести первую команду:
sudo vi /etc/init.d/local.autostart
Нажать Enter.
3) Попросит ваш пароль, вводим, жмем Enter, далее жмем i — это введет редактор vi в режим редактирования.
4) Вводим сам скрипт фиксирования TTL Ubuntu на значении 65, если у вас Android или iOS (у них стандартный TTL=64), если вы обладатель Люмии, где стандартный TTL равен 128, вам вместо 65 нужно прописать 129. Все это по простейшей формуле, ttl на компе должен быть на 1 больше, чем ttl на телефоне, с которого вы раздаете. Теорию я вам рассказал, а теперь сам скрипт:
#!/bin/bash
sudo iptables -t mangle -A POSTROUTING -j TTL —ttl-set 65 (вот это значение меняйте сами, теория выше в помощь)
5) Далее, для окончания редактирования жмем Esc. Потом сохраняем файл, зажимая Shift+ZZ.
6) Теперь необходимо проставить скрипту права на запуск:
sudo chmod +x /etc/init.d/local.autostart
Нажимаем Enter.
7) Теперь последнее, добавляем все это дело в автозапуск:
sudo update-rc.d local.autostart defaults 80
8) Нажимаем Enter. Все будет делаться автоматически и без вашего участия.
Как изменить ttl MacOS
Ну и конечно, нельзя обижать яблочников Для изменения ttl на mac делаем следующее
Идем в /Library/StartupItems. Открываем терминал и прописываем: ~> cd /Library/StartupItems/
Создаем там папку (например, это будет yota). В терминале пишем: /Library/StartupItems> sudo mkdir yota
Идем туда. В терминал вставляем: /Library/StartupItems> cd yota/
4) Создаем там скрипт (он должен называться так же как и папка), который хотим выполнять.
Для создания скрипта в терминал вбиваем:
/Library/StartupItems/yota> sudo vim yota
И тут откроется редактор Vim! Сюда копируем сам скрипт:
# Скрипт смены ttl на Mac OS X:
#!/bin/sh
sudo sysctl -w net.inet.ip.ttl=65
И закрываем Vim с сохранением результата, вводим в виме (редакторе): yota
5) Создаем файл параметров StartupParameters.plist.
/Library/StartupItems/yota> sudo vim StartupParameters.plist
И тут опять откроется редактор Vim! Сюда копируем содержание файла параметров:
Самое главное, чтобы в строчке Provides было прописано то же имя, что и название скрипта и название папки:
<
Description = ‘Add static routing tables’;
Provides = (‘yota’);
Requires = (‘Network’);
OrderPreference = ‘None’;
>
И опять закрываем Vim с сохранением результата, для этого вводим: w! StartupParameters.plist
6) Выставляем права на выполнение нашему скрипту.
/Library/StartupItems/fuckingyota> sudo chmod 755 yota
7) в итоге получаем: /Library/StartupItems/yota> ll
9) А сейчас, мы не будем перезагружать комп, а просто стартанем скрипт, чтобы убедиться в его работоспособности:
/Library/StartupItems/yota> sudo SystemStarter start fyota
Резюмируя мы с вами рассмотрели какие значения ttl у каждой операционной системы, рассмотрели для чего они. Мы научились менять ttl на самых распространенных системах, если есть вопросы пишите их в комментариях.
Популярные Похожие записи:
Ошибка Запуск этого устройства невозможен (код 10) в Windows 7
Поиск mac-адреса на DHCP с помощью PowerShell
Как отключить автоматический Chkdsk в отказоустойчивом кластере Windows- Настройка сети в CentOS 8, за минуту
- Словарь системного администратора
- Как узнать версию php онлайн
TTL – что это такое и зачем его менять

Раз вы сюда попали, скорее всего вам нужно поменять TTL для обхода ограничений мобильного оператора на раздачу трафика, но вы не понимаете, что такое TTL, и зачем его менять. Постараюсь объяснить.
Понятие TTL
В интернете все передается пакетами – маленькими порциями данных. Они ходят от маршрутизатора к маршрутизатору (то же самое, что от роутера к роутеру) по узлам сети. Например, ваш мобильный телефон тоже может стать роутером, если его использовать для раздачи данных на компьютер и другие устройства.
TTL расшифровывается как Time To Live, то есть время жизни пакета данных в секундах. При прохождении пакета через очередной роутер TTL уменьшается на единицу. Нужно это для того, чтобы пакет бесконечно не гулял по сети, если не сможет дойти до адресата. Роутер, при попадании в который пакет исчерпал свое значение TTL, посылает отправителю сообщение ICMP о том, что данный пакет превысил максимально допустимое время своего пребывания в сети. Максимальное значение TTL=255. Причем разные операционные системы генерируют пакеты с разным TTL.
Если говорить совсем простыми словами…
Представьте себе, что вам 5 лет и вы хотите кушать (вы — пакет). Вы идете к папе и говорите: «Папа, я хочу кушать». Ваш папа смотрит телевизор, согласно таблице маршрутизации о посылает вас к маме. Вы идете к ней и просите «Мамааа, я хочу кушать». Мама болтает с подругой по телефону и согласно своей таблице маршрутизации посылает вас к папе. И так вы ходите как дурак от папы к маме и обратно, туда-сюда, туда-сюда, а все потому что криворукие админы (родители папы и мамы) неправильно настроили таблицу маршрутизации. Чтобы защититься от таких ситуаций придумали понятие TTL (Time To Live), что применительно к нашей ситуации означает количество терпения у мальчика, пока он не скажет «достало» и не упадет перед ногами мамы или папы в беспомощном состоянии. Последний, по правилам (стандарты – это «так заведено в семье»), обязан послать короткий нелестный отзыв адрес того, кто послал мальчика кушать. Это так называемый ICMP-пакет «мальчик сдох»
Ок, так при чем тут операторы? Дело в том, что по полученным от абонента TTL оператор узнает, раздается интернет или нет.
Как операторы узнают, что трафик раздается
Потому что ему от абонента начинают приходить пакеты с разными значениями TTL. На это есть две причины:
- Во-первых, у разных устройств TTL может быть разным. А при раздаче интернета появляется ведь второе устройство – то, на которое мы раздаем интернет. Так у телефона на iOS или Android значение TTL равно 64, а у компьютера на Windows – 128. И при раздаче интернета с телефона на компьютер появится два разных значения TTL: 64 и 128. Оператору уходят пакеты и с TTL=64, и TTL=127 (при отправке пакета с компьютера через раздающий телефон-роутер значение 128 уменьшается на единицу).
- Во-вторых, даже если TTL устройств одинаков (с телефона на телефон), раздающий телефон опять же уменьшает TTL на 1 как всякий нормальный роутер. И оператору уходят пакеты с разными значениями TTL=64 (если это пакет с раздающего телефона) и TTL=63 (пакет с потребляющего телефона).
Итак оператор получает пакеты с разными значениями:
- TTL пакета с самого телефона.
- TTL пакета с потребляющего трафик устройства, уменьшенное на единицу при проходе через телефон-роутер.
На всякий случай прикладываю картинки.
Это работа без интернета. Телефон передает оператору только пакеты с TTL=64.

А при раздаче интернета телефон передает оператору пакеты с тремя разными значениями TTL: 64 от себя, 127 от компьютера и 63 от потребляющего телефона.

Оператор замечает такую ситуацию разброса значений TTL, делает вывод, что происходит раздача трафика и принимает карательные меры в отношении абонента-нарушителя, желающего поживиться безлимитным интернетом на полную катушку, раздав его куда хочется. Как же скрыть раздачу от оператора? Очевидно, надо сравнять TTL – привести их всех к одному значению. Для этого можно
- Либо поменять TTL на потребляющем устройстве,
- Либо на раздающем телефоне сделать так, чтобы пакеты к оператору шли всегда с одним значением TTL.
Приведение TTL к единому значению для обхода ограничений оператора
- Можно привести TTL к единому значению 63, поменяв его на раздающем телефоне и на принимающем компьютере. Это изменение TTL без фиксации.

- Можно ничего не менять на принимающих устройствах, но «заставить» раздающий телефон всегда отправлять оператору пакеты с TTL=63, независимо от того, откуда они: с самого раздающего телефона или с принимающего устройства (компьютера или телефона). Это фиксация TTL.

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