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

Случайная метка времени при первой синхронизации при обратной петле

Предисловие

Мы тестируем IPS на базе хоста. В этом тестовом примере наше приложение прослушивает обратную петлю, и приложение получает трафик в виде открытого текста. Мы используем либо nginx, либо haproxy для завершения TLS в общедоступном интерфейсе. Наш IDP будет отслеживать петлю, чтобы видеть незашифрованный трафик.

Наш IDP видел искаженные / неправильные даты, поэтому мы начали копать глубже.

[Обновление 2] Как упоминал @kasperd, tcpdump получает временные метки из ОС. Тем не менее, оказывается, эта ошибка фактически вызывает отключение IDP в дополнение к tcpdump. Он видит connection_established, но не может увидеть действительный сеанс http, так как syn-ack недействителен.

Ошибка была зарегистрирована на redhat.com и centos.org.

Наблюдение

Первая синхронизация по шлейфу всегда имеет дату, близкую к началу эпохи, или в пределах 2 лет от нее на виртуальных машинах. Это сильно отличается от Декабрь 1970 г. к Февраль 1973 г. на виртуальных машинах и далеко в будущем на голых железных серверах Xeon. NTP правильный на всех наших виртуальных машинах и серверах без операционной системы дрейф менее 50 мс.

Это происходит только на кольцевой проверке. Мы никогда не видим этого на bond0 на серверах или eth0 на виртуальных машинах.

Тестовые серверы и ноутбуки

ОПЕРАЦИОННЫЕ СИСТЕМЫ: CentOS 7

Платформы:

Серверы Dell 20 Core Xeon (ОС без операционной системы)

Серверы HP 20 Core Xeon (ОС без операционной системы)

VirtualBox в MacOS

Hyper-V в Windows 10 Enterprise на Lenovo P50 с 6 виртуальными ядрами.

Один роутер на базе Celeron 4 Core 1,6 ГГц (не воспроизводится на Celeron)

Действия по воспроизведению

На каждой платформе мы запускаем веб-прослушиватель на 80-м порту петли.

./simple_python 127.0.0.1 &

Код выше Вот

Затем запускаем tcpdump

tcpdump -p -NNnn -XXxx -tttt -vv -s0 -c2 -i lo &

Затем скручиваем на localhost

curl -s -o /dev/null http://127.0.0.1/

Вывод

2018-04-10 21:05:30.087769 IP (tos 0x0, ttl 127, id 49233, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.25134 > 127.0.0.1.80: Flags [S], cksum 0xfe30 (incorrect -> 0xce27), seq 4053136920, win 65495, options [mss 65495,sackOK,TS val 22951497 ecr 0,nop,wscale 13], length 0
    0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
    0x0010:  003c c051 4000 7f06 3d68 7f00 0001 7f00  .<.Q@...=h......
    0x0020:  0001 622e 0050 f195 f618 0000 0000 a002  ..b..P..........
    0x0030:  ffd7 fe30 0000 0204 ffd7 0402 080a 015e  ...0...........^
    0x0040:  3649 0000 0000 0103 030d                 6I........
1973-02-14 22:12:10.785902 IP (tos 0x0, ttl 127, id 0, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.80 > 127.0.0.1.25134: Flags [S.], cksum 0xfe30 (incorrect -> 0x2f28), seq 3928063281, ack 4053136921, win 65483, options [mss 65495,sackOK,TS val 22951497 ecr 22951497,nop,wscale 13], length 0
    0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
    0x0010:  003c 0000 4000 7f06 fdb9 7f00 0001 7f00  .<..@...........
    0x0020:  0001 0050 622e ea21 7d31 f195 f619 a012  ...Pb..!}1......
    0x0030:  ffcb fe30 0000 0204 ffd7 0402 080a 015e  ...0...........^
    0x0040:  3649 015e 3649 0103 030d                 6I.^6I....

В любом случае синхронизация всегда происходит между 1970 и 1973 годами на виртуальных машинах и в будущем на Xeon.

Что еще я пытался избавить от этого?

Что я не пробовал

Есть мысли о том, где в коде Linux это может происходить? Я не решаюсь копаться в glibc, поскольку я не разработчик C.

[Обновить] Кажется @jackthecoiner нашел где-то еще тоже сталкивается с этой проблемой и пока не получал никаких отзывов на сайте Redhat.

Я подал это в Отслеживание ошибок CentOS где это было быстро подтверждено, и они предложили мне переместить его в Ошибка ядра Redhat трекер

Оттуда разработчики Redhat указали, что эта ошибка была обманом bz1473533, что было исправлено в ядро-3.10.0-703.el7. Для CentOS это было подтверждено что это исправлено в бета-версии ядра 7.5 (830.el7).