Исследование поля 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. Одинаковый набор опций, одни и те же значения но - разный порядок их следования.