একটি লিসেনারকে 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 ফিল্ড বের করে। ফিল্ডটি পূর্ণ হলে, যে পর্যবেক্ষকের অনুকরণ করেছেন সে এটি পড়তে পারে।

দুটি মিলে না গেলে ক্লায়েন্ট পাশে এবং পথে আলাদাভাবে ক্যাপচার করুন, কারণ স্থানীয় ক্যাপচার এমন নাম দেখাতে পারে যা middlebox পরে আবার লেখে বা ফেলে দেয়। এমন হোস্ট থেকেও ক্যাপচার করুন যা নিজে 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 রিসোর্স রেকর্ড প্রকাশ করে কি না, এবং এভাবেই ক্লায়েন্টরা কী শেখে। দ্বিতীয়টি হ্যান্ডশেকের স্থিতি তথ্য খোঁজে, যদিও ক্লায়েন্টের সফলতার বার্তা বেশি জোরালো প্রমাণ। গ্রহণযোগ্যতাই গুরুত্বপূর্ণ: যে সার্ভারের মিলে যাওয়া কী নেই সে ভেতরের hello ডিক্রিপ্ট করতে পারে না, এবং সংযোগটি পিছিয়ে যায়।

ক্লায়েন্টও যাচাই করুন, কারণ ব্রাউজার সমর্থন এবং কনফিগারেশন ভার্সন ও প্ল্যাটফর্ম অনুযায়ী ভিন্ন। „আধুনিক ব্রাউজার ECH ব্যবহার করে“-এর উপর নির্মিত নীতি একটি বহরের বিষয়ে অনুমান, আপনার বহরের বিষয়ে সত্য নয়। যে ভার্সনগুলো সত্যিই সংযোগ করে সেগুলো তালিকাভুক্ত করুন, তারপর প্রতিটি থেকে একটি পরীক্ষা করুন। যে পৃষ্ঠাটি বর্তমান ডেস্কটপ ব্রাউজার থেকে কাজ করে সেটি একই নেটওয়ার্কে পুরোনো ক্লায়েন্ট থেকে কিছুই লুকাতে নাও পারে।

পর্যবেক্ষকের পরিধি নীতিতে লিখুন

কোন নিয়ন্ত্রণ কিসের উপর নির্ভর করতে পারে তা ঠিক করার আগে বলুন পর্যবেক্ষক কোথায় বসে এবং সেই বিন্দুতে কী দৃশ্যমান। ব্রাউজারের একটি সাইটের সাথে সংযোগ, বাহ্যিক VPN পরিবহন এবং TLS শেষ করা প্রক্সি — প্রত্যেকে আলাদা তথ্যসমষ্টি প্রকাশ করে, এবং এক অবস্থানের জন্য লেখা নিয়ম অন্য অবস্থানে খুব কমই পরিষ্কারভাবে স্থানান্তরিত হয়।

যদি কোনো নিয়ন্ত্রণ SNI পড়ার উপর নির্ভর করে, তবে পরীক্ষা করুন স্থাপিত ক্লায়েন্টরা ECH উপলব্ধ থাকলে এবং না থাকলে কেমন আচরণ করে। তারপর সামঞ্জস্যের পরিণতি রেকর্ড করুন, কারণ চুপচাপ মেলা বন্ধ করা ফিল্টার কখনও স্থাপিত না হওয়া ফিল্টারের চেয়ে খারাপ।

শেষে, অনিশ্চয়তা রেকর্ডে রাখুন। পুরোনো সার্বজনীন দাবি নতুন দিয়ে প্রতিস্থাপন করলে একই শূন্যতা অন্য প্রোটোকল নামের অধীনে থেকে যায়, এবং পরবর্তী পর্যালোচক সমান দৃঢ়তায় তা বিশ্বাস করবে।

সম্পর্কিত নিবন্ধ