Надграждането на слушател до TLS 1.3 променя това, което наблюдателят може да прочете, но не толкова, колкото подсказва номерът на версията. ClientHello все още пътува, преди да бъде договорено каквото и да е шифроване, и при обикновена връзка поисканото име на сървъра стои там в обикновен текст. Encrypted Client Hello е механизмът, който го скрива, и това е отделно внедряване със свои предпоставки. Изпълнете тези четири стъпки, преди да напишете политика, която предполага едно от двете поведения.

Какво всъщност разкрива ръкостискането

TLS 1.3 шифрова сертификата на сървъра и по-голямата част от ръкостискането, което следва ServerHello. Всичко, което клиентът изпраща първо, остава извън тази защита, защото ключовете още не съществуват. Указанието за име на сървър е част от този първи полет, затова пасивен наблюдател все още може да го прочете, без да разбива нищо.

Спецификацията ECH, RFC 9849, променя това, като шифрова вътрешен ClientHello за сътрудничещ сървър. Външното ръкостискане остава и носи публично име, което мрежата може да види, така че внедряването все още се нуждае от външна идентичност, която има смисъл за посредниците. Това външно име е частта, която хората пропускат, когато очакват връзката да стане анонимна. То е прикриващо име, а не скрито, и трябва да се разрешава и удостоверява като всяко друго.

Нищо от това не скрива пътя за доставка. Адресите на източника и местоназначението, портовете, размерите на пакетите и времената остават наблюдаеми, и те често казват повече за това кой говори, отколкото името. Разрешаването на имена и връзките на ниво приложение са още един слой, всеки със своята видимост.

Прочетете ClientHello вместо да предполагате

Версията в ServerHello не ви казва какво е изпратил клиентът. Погледнете първия полет директно, от позиция, която представлява наблюдателя, който ви интересува.

openssl s_client -connect app.plant.example:443 -servername app.plant.example -tls1_3 </dev/null> 2>/dev/null | head -20
sudo tcpdump -ni eth0 -c 40 'tcp port 443' -w /tmp/tls.pcap
tshark -r /tmp/tls.pcap -Y 'tls.handshake.extensions_server_name' -T fields -e tls.handshake.extensions_server_name

Първата команда извършва ръкостискане и показва договорените параметри, включително версията на протокола и името, което поискахте. Втората улавя първите пакети на реална връзка, а третата извлича полето SNI от това улавяне. Ако полето е попълнено, емулираният от вас наблюдател може да го прочете.

Улавяйте отделно от страна на клиента и по пътя, когато двете не съвпадат, защото локално улавяне може да покаже име, което междинно устройство по-късно пренапише или изхвърли. Улавяйте също от хост, който сам не завършва TLS, тъй като завършващ прокси вижда обикновен текст по своя замисъл и не доказва нищо за това какво вижда мрежата.

Отнасяйте се към разширението ECH като към твърдение, не като към доказателство

Да видите разширение ECH в ClientHello не означава, че връзката е използвала ECH. Клиентите изпращат GREASE ECH, когато нямат използваема конфигурация, точно за да изглеждат ръкостисканията им еднакви. Разширението е налице, вътрешният hello е примамка, а истинското име все още се чете.

dig +short HTTPS app.plant.example
openssl s_client -connect app.plant.example:443 -tls1_3 -status </dev/null> 2>/dev/null | grep -i -E 'ech|status_request'

Първата команда показва дали източникът публикува запис за ресурс HTTPS с параметър за конфигурация ECH, и така клиентите научават ключа. Втората търси информация за състоянието на ръкостискането, макар че съобщението за успех на клиента е по-силното доказателство. Приемането е това, което има значение: сървър без съответния ключ не може да дешифрира вътрешния hello и връзката се отдръпва.

Проверете и клиента, тъй като поддръжката на браузърите и конфигурацията се различават според версията и платформата. Политика, изградена върху „съвременните браузъри използват ECH“, е догадка за парк, а не факт за вашия парк. Направете инвентаризация на версиите, които действително се свързват, и след това тествайте по една от всяка. Същата страница, която работи от актуален настолен браузър, може да не скрие нищо от по-стар клиент в същата мрежа.

Запишете обхвата на наблюдателя в политиката

Посочете къде се намира наблюдателят и какво е видимо в тази точка, преди да решите на какво може да разчита контролът. Връзката на браузър със сайт, външен VPN транспорт и прокси, което завършва TLS, разкриват всяко различен набор от факти, и правило, написано за една позиция, рядко се пренася чисто на друга.

Ако контролът зависи от четенето на SNI, тествайте как се държат внедрените клиенти, когато ECH е наличен и когато не е. След това запишете последствието за съвместимостта, защото филтър, който тихо спира да съвпада, е по-лош от такъв, който никога не е бил внедрен.

Накрая, запазете несигурността в записа. Замяната на старо универсално твърдение с по-ново оставя същата празнина под друго име на протокол и следващият рецензент ще повярва също толкова твърдо.

Подобни статии