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 өргөтгөлийг нотолгоо биш, мэдэгдэл гэж үзээрэй
ClientHello дотор ECH өргөтгөл харагдах нь холболт 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'
Эхний команд нь эх сурвалж ECH тохиргооны параметртэй HTTPS нөөцийн бичлэг нийтэлж байгаа эсэхийг харуулах ба клиентүүд түлхүүрийг ингэж мэддэг. Хоёр дахь нь гар барилтын төлөвийн мэдээллийг хайдаг, гэхдээ клиентийн амжилтын мессеж нь илүү хүчтэй нотолгоо юм. Хүлээн авалт нь чухал: тохирох түлхүүргүй сервер дотоод hellог тайлж чадахгүй бөгөөд холболт буцаж унана.
Клиентийг ч шалгаарай, учир нь хөтчийн дэмжлэг болон тохиргоо хувилбар, платформоос хамаарч өөр өөр байдаг. „Орчин үеийн хөтчүүд ECH ашигладаг“ гэсэн дээр бүтээсэн бодлого нь флотын тухай таамаг, таны флотын тухай баримт биш. Бодитоор холбогддог хувилбаруудыг бүртгэж, дараа нь тус бүрээс нэгийг туршаад үзээрэй. Одоогийн ширээний хөтчөөс ажилладаг ижил хуудас нь ижил сүлжээн дэх хуучин клиентээс юу ч нуухгүй байж болно.
Ажиглагчийн хамрах хүрээг бодлогод бичээрэй
Хяналт юунд тулгуурлаж болохыг шийдэхээс өмнө ажиглагч хаана сууж байгаа, тэр цэгт юу харагдаж байгааг зааж өгнө үү. Хөтчийн сайттай холболт, гадаад VPN тээвэр, TLS-ийг дуусгагч прокси нь тус бүр өөр өөр баримтын багцыг илчилдэг бөгөөд нэг байрлалд бичсэн дүрэм нөгөөд цэвэрхэн шилжих нь ховор.
Хэрэв хяналт SNI уншихаас хамаардаг бол ECH боломжтой үед болон боломжгүй үед байршуулсан клиентүүд хэрхэн ажиллахыг туршаад үзээрэй. Дараа нь нийцтэй байдлын үр дагаврыг тэмдэглээрэй, учир нь чимээгүйгээр тохирохоо болих шүүлтүүр нь хэзээ ч байршуулаагүйгээс дор юм.
Эцэст нь тодорхойгүй байдлыг бичлэгт хадгалаарай. Хуучин түгээмэл мэдэгдлийг шинээр солих нь ижил цоорхойг өөр протоколын нэрэн дор үлдээдэг бөгөөд дараагийн шүүмжлэгч мөн адил гуйвшгүй итгэх болно.