Исследование поля Options заголовка TCP-пакета

Поле Options (опции) TCP-пакета является едва ли не самым важным каналом утечки информации от хоста относительно ОС, установленной на нем. Денное поле имеет некоторые особенности:

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

Таким образом, послав на сервер TCP-пакет с указанием следующего набора опций:

<WindowScale=10><NOOP><MaxSegmentSize=256><TimeStamp><EndOfOptions>

и получив от сервера ответ подобного рода

<NOOP><MaxSegmentSize=1024><NOOP><NOOP><EndOfOps>

можно сделать вывод о том, что ОС сервера поддерживает опцию MaxSegmentSize.

Некоторые ОС, например, новые версии FreeBSD и последние версии Linux 2.1.x , поддерживают все опции, другие (например Linux 2.0.x) - лишь небольшой набор опций.

Рассматривая приведенный выше пример, можно обратить внимание на то, что значение MaxSegmentSize (MSS) в запросе (256) отличается от значения ответа (1024). Поэтому, если несколько ОС поддерживают одинаковый набор опций, имеется возможность различения ОС по значению опций.

Кроме того, из примера видно, что опция MSS в ответе стоит на втором месте, а в запросе была указана на третьем месте. Эта особенность используется в случае, когда разные ОС имеют одинаковый набор опций с идентичными их значениями. При этом возможно различение ОС по порядку следования указанных в ответе опций.

Так, ОС Solaris возвращает:

<NOOP><NOOP><TimeStamp><NOOP><WindowScale><EchoedMSS>

или, кратко, NNTNWE. ОС Linux 2.1.122 возвращает MENNTNW. Одинаковый набор опций, одни и те же значения но - разный порядок их следования.

Back to Top