TLS 1.3 server nomini hali ham ochiq matnda yuboradi
TLS 1.3 qo’l siqishni shifrlaydi, lekin SNI ni emas. ClientHello ni o’qing, haqiqiy ECH qabulini tekshiring va kuzatuvchi hali nima ko’rishini qayd eting.
Tinglovchini TLS 1.3 ga ko’tarish kuzatuvchi o’qiy oladigan narsani o’zgartiradi, lekin versiya raqami ishora qilgandek emas. ClientHello hali ham har qanday shifrlash kelishilishidan oldin yo’lga chiqadi va oddiy ulanishda talab qilingan server nomi u yerda ochiq matnda turadi. Encrypted Client Hello uni yashiradigan mexanizm bo’lib, o’z shartlariga ega alohida joylashtirishdir. Ikki xatti-harakatdan birini taxmin qiladigan siyosat yozishdan oldin bu to’rt qadamni bajaring.
Qo’l siqish aslida nimani ochib beradi
TLS 1.3 server sertifikatini va ServerHello dan keyin keladigan qo’l siqishning katta qismini shifrlaydi. Mijoz birinchi bo’lib yuboradigan hamma narsa bu himoyadan tashqarida, chunki kalitlar hali mavjud emas. Server nomi ko’rsatkichi shu birinchi parvozning qismidir, shuning uchun passiv kuzatuvchi hech narsani buzmasdan uni hali ham o’qiy oladi.
ECH spetsifikatsiyasi, RFC 9849, buni hamkorlik qiluvchi server uchun ichki ClientHello ni shifrlash orqali o’zgartiradi. Tashqi qo’l siqish qoladi va tarmoq ko’ra oladigan ommaviy nomni olib yuradi, shuning uchun joylashtirish hali ham vositachilar uchun mantiqiy bo’lgan tashqi identifikatsiyaga muhtoj. O’sha tashqi nom odamlar ulanish anonim bo’lishini kutganda o’tkazib yuboradigan qismdir. Bu qoplama nomi, yashirin nom emas va u boshqalar kabi hal qilinishi va autentifikatsiya qilinishi kerak.
Bularning hech biri yetkazib berish yo’lini yashirmaydi. Manba va manzil manzillari, portlar, paket o’lchamlari va vaqt kuzatilishi mumkin bo’lib qoladi va ular ko’pincha nomdan ko’ra kim gapirayotgani haqida ko’proq gapiradi. Nomlarni hal qilish va amaliyot darajasidagi munosabatlar yana bir qatlam bo’lib, har biri o’z ko’rinishiga ega.
Taxmin qilish o’rniga ClientHello ni o’qing
ServerHello dagi versiya mijoz nima yuborganini aytmaydi. Birinchi parvozga to’g’ridan-to’g’ri qarang, sizga muhim bo’lgan kuzatuvchini ifodalovchi pozitsiyadan.
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
Birinchi buyruq qo’l siqishni bajaradi va kelishilgan parametrlarni ko’rsatadi, jumladan protokol versiyasi va siz talab qilgan nom. Ikkinchisi haqiqiy ulanishning birinchi paketlarini ushlaydi, uchinchisi esa o’sha ushlashdan SNI maydonini chiqaradi. Agar maydon to’ldirilgan bo’lsa, siz taqlid qilgan kuzatuvchi uni o’qiy oladi.
Ikkisi mos kelmasa, mijoz tomonida va yo’lda alohida ushlang, chunki mahalliy ushlash keyinchalik middlebox qayta yozadigan yoki tashlab yuboradigan nomni ko’rsatishi mumkin. TLS ni o’zi tugatmaydigan xostdan ham ushlang, chunki tugatuvchi proksi ochiq matnni dizayni bo’yicha ko’radi va tarmoq nimani ko’rishini hech narsa isbotlamaydi.
ECH kengaytmasiga da’vo sifatida qarang, dalil sifatida emas
ClientHello da ECH kengaytmasini ko’rish ulanish ECH ishlatganini anglatmaydi. Mijozlar foydalanish mumkin bo’lgan konfiguratsiya bo’lmasa GREASE ECH yuboradi, aynan qo’l siqishlari bir xil ko’rinishi uchun. Kengaytma mavjud, ichki hello o’lja va haqiqiy nom hali ham o’qiladi.
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'
Birinchi buyruq manbaning ECH konfiguratsiya parametri bilan HTTPS resurs yozuvini e’lon qiladimi-yo’qmi ko’rsatadi va mijozlar kalitni shu tarzda o’rganadi. Ikkinchisi qo’l siqish holati ma’lumotini qidiradi, garchi mijozning muvaffaqiyat xabari kuchliroq dalil bo’lsa ham. Qabul muhim: mos kaliti bo’lmagan server ichki helloni shifrini ocholmaydi va ulanish orqaga qaytadi.
Mijozni ham tekshiring, chunki brauzer qo’llab-quvvatlashi va konfiguratsiya versiya va platformaga qarab farq qiladi. „Zamonaviy brauzerlar ECH ishlatadi“ ga asoslangan siyosat flot haqidagi taxmin, sizning flotingiz haqidagi fakt emas. Haqiqatan ulanadigan versiyalarni inventarizatsiya qiling, keyin har biridan bittasini sinab ko’ring. Joriy ish stoli brauzeridan ishlaydigan o’sha sahifa bir xil tarmoqdagi eskiroq mijozdan hech narsani yashirmasligi mumkin.
Kuzatuvchining qamrovini siyosatga yozing
Nazorat nimaga tayanishi mumkinligini hal qilishdan oldin kuzatuvchi qayerda o’tirishini va o’sha nuqtada nima ko’rinishini ayting. Brauzerning sayt bilan ulanishi, tashqi VPN transporti va TLS ni tugatuvchi proksi har biri boshqa faktlar to’plamini ochib beradi va bir pozitsiya uchun yozilgan qoida boshqasiga kamdan-kam toza o’tadi.
Agar nazorat SNI o’qishga bog’liq bo’lsa, joylashtirilgan mijozlar ECH mavjud bo’lganda va bo’lmaganda qanday tutishini sinab ko’ring. Keyin muvofiqlik oqibatini qayd eting, chunki jimgina mos kelishni to’xtatadigan filtr hech qachon joylashtirilmaganidan yomonroq.
Nihoyat, noaniqlikni yozuvda saqlang. Eski umumiy da’voni yangiroq bilan almashtirish xuddi shu bo’shliqni boshqa protokol nomi ostida qoldiradi va keyingi taqrizchi unga xuddi shunday qat’iy ishonadi.