TLS 1.3 уште го испраќа името на серверот во чист текст
TLS 1.3 го шифрира ракувањето, но не и SNI. Прочитајте го ClientHello, проверете вистинско прифаќање на ECH и забележете што уште може да види набљудувач.
Надградувањето на слушател на 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 е достапен и кога не е. Потоа забележете ја последицата за компатибилноста, бидејќи филтер што тивко престанува да се совпаѓа е полош од оној што никогаш не бил распореден.
На крајот, задржете ја неизвесноста во записот. Замената на старо универзално тврдење со поново ја остава истата празнина под друго име на протокол, и следниот рецензент ќе ѝ верува исто толку цврсто.