ব্যর্থ VPN হ্যান্ডশেক কি সত্যিই ডাউনগ্রেড আক্রমণ?
ডাউনগ্রেড আক্রমণ আছে, কিন্তু বেশিরভাগ ব্যর্থ হ্যান্ডশেক প্রস্তাবের অমিল, খারাপ রুট বা মেয়াদোত্তীর্ণ প্রোফাইল। আগে দেখুন কী নিয়ে সমঝোতা হয়েছে।
ত্রুটি দিয়ে শেষ হওয়া একটি হ্যান্ডশেক তখন পর্যন্ত আক্রমণের মতো মনে হয় যতক্ষণ না আপনি বার্তাটি দেখেন, আর বেশিরভাগ সময় এটি গণিত: কোনো সাধারণ প্রস্তাব নেই, মেয়াদোত্তীর্ণ সার্টিফিকেট, বা এমন প্যাকেট যা কখনো পৌঁছায়নি। ডাউনগ্রেড আক্রমণ একটি নির্দিষ্ট জিনিস: একজন প্রতিপক্ষ দুই প্রান্তকে তাদের পছন্দের চেয়ে দুর্বল আচরণের দিকে ঠেলে দেয়, আর এটি ভিন্ন প্রমাণ রেখে যায়। প্রতিটি ব্যর্থতাকে দুরভিসন্ধি হিসেবে দেখলে আপনি এমন ভুক্তভোগী খুঁজতে যান যার অস্তিত্বই নেই, আর সত্যিকারের ডাউনগ্রেডকে কনফিগারেশন ত্রুটি ভাবলে দুর্বল ফলাফলটাই জায়গায় থেকে যায়। দুটি ভুলের দাম আলাদা, এবং একটি মাত্রই সস্তায় সংশোধনযোগ্য।
ডাউনগ্রেড আক্রমণ আসলে কী বদলায়
লক্ষ্য সাইফার ভাঙা নয়, কী অনুমান করাও নয়। লক্ষ্য হলো সমঝোতাকে এমনভাবে প্রভাবিত করা যাতে দুই পক্ষ পুরোনো সংস্করণ বা দুর্বল অ্যালগরিদমে থেমে যায় যা আক্রমণকারী সামলাতে পারে, অথবা এক পক্ষ বিশ্বাস করে অন্য পক্ষ শুধু সেটাই সমর্থন করে।
যা বদলায় তা হলো চুক্তি, প্রমাণীকরণ নয়। আক্রমণকারী যদি ধরা না পড়ে অফারটি বদলাতে পারে, তাহলে দুই পক্ষ এখনও হ্যান্ডশেক সম্পন্ন করতে পারে এবং একে অপরকে প্রমাণীকরণ করতে পারে, তবে আক্রমণকারীর পছন্দের প্যারামিটার দিয়ে। সে কারণেই আকর্ষণীয় প্রশ্ন হলো সমঝোতাটি নিজেই অখণ্ডতা সুরক্ষায় ঢাকা কি না।
কেন সমঝোতাটি নিজেই প্রমাণীকৃত হতে হবে
TLS 1.3 ওই সুরক্ষাকে স্পষ্ট করে। যে ক্লায়েন্ট নতুন সংস্করণ প্রস্তাব করেছে সে নীরবে পিছিয়ে যাওয়া সার্ভার শনাক্ত করতে পারে, কারণ সার্ভারের র্যান্ডম মান 1.2 বা নিচে সমঝোতা করলে একটি নির্দিষ্ট প্যাটার্ন বহন করে, এবং ক্লায়েন্ট তা দেখলে বন্ধ করতে বাধ্য। সম্পূর্ণ ট্রান্সক্রিপ্টও সমাপ্তি বার্তায় ঢাকা, তাই সমঝোতার যেকোনো জায়গায় সম্পাদনা পরে ব্যর্থ হয়, চুপচাপ পার হয় না।
পুরোনো প্রোটোকল সংস্করণের গল্প দুর্বল ছিল, ঠিক সে কারণেই ফলব্যাক নিয়মগুলো গুরুত্বপূর্ণ। একই কনফিগারেশনে TLS 1.0 এন্ডপয়েন্ট ডাউনগ্রেড আক্রমণ নয়; এটি অনুমোদিত ফলাফল যা আপনি নিজে অনুমতি দিতে বেছেছেন। পার্থক্য হলো দুর্বল ফলাফলটি সুরক্ষিত সিদ্ধান্ত থেকে এসেছে, না কি অনিরাপদ পথ থেকে যা কোনো মধ্যস্থতা প্রভাবিত করতে পারত। একবার এভাবে বললে বেশিরভাগ ঘটনা কনফিগারেশন প্রশ্নে নেমে আসে।
IKEv2 ভিন্নভাবে আচরণ করে কিন্তু একই ধারণার উপর দাঁড়ায়। প্রস্তাবটি এমন একটি বিনিময়ে বহন করা হয় যা পরে দুই প্রান্তকে প্রমাণীকরণ করে, তাই অ্যালগরিদম পুনর্লিখন করা মিডলবক্স প্রমাণীকরণ ভাঙে, পরিচালনা করে না। OpenVPN-এর নিয়ন্ত্রণ চ্যানেল TLS দিয়ে তার সমঝোতা সুরক্ষিত করে, তারপর সেই চ্যানেল দিয়ে ডেটা চ্যানেলের সাইফার ঠিক করে, সে কারণেই নিয়ন্ত্রণ চ্যানেলের লগ লাইনটি আকর্ষণীয়।
কনফিগার করা সামঞ্জস্য আক্রমণ নয়
একজন প্রশাসক নথিভুক্ত ক্লায়েন্ট সমর্থন করতে সচেতনভাবে পুরোনো বিকল্প অনুমোদন করতে পারেন, আর সেই সিদ্ধান্ত কনফিগারেশনে দৃশ্যমান। আক্রমণকারী সেই কনফিগারেশন তৈরি করতে পারে না; তারা কেবল এমন পথ ব্যবহার করতে পারে যা অফার প্রভাবিত করতে দেয়।
বিপজ্জনক মেরামত হলো সেটি যা পার্থক্যের প্রমাণ মুছে দেয়। প্রতিটি পুরোনো বিকল্প চালু করা, সার্টিফিকেট যাচাই বন্ধ করা বা ত্রুটি সরাতে যেকোনো সাইফার গ্রহণ করা এন্ডপয়েন্ট যা মেনে নেবে তা প্রসারিত করে, আর যে পরীক্ষাগুলো দুর্বল ফলাফল জানাত সেগুলো সরিয়ে দেয়।
যদি একটি পুরোনো বিকল্প রাখতেই হয়, কনফিগারেশন মন্তব্যে কারণ ও ক্লায়েন্টের নাম লিখুন, তারপর বিকল্পটি তার প্রয়োজনীয় প্রোফাইলে সীমিত করুন। একটি লিসেনারে সীমিত সামঞ্জস্য ব্যতিক্রম নিরীক্ষাযোগ্য; সবখানে প্রয়োগ করা ব্যতিক্রম শুধু দুর্বল ডিফল্ট যা কেউ মনে রাখে না যে বেছেছিল।
কারণ নাম দেওয়ার আগে ব্যর্থতাটি পড়ুন
যেকোনো পরিবর্তনের আগে সঠিক ত্রুটি স্ট্রিং, ক্লায়েন্ট ও সার্ভার সংস্করণ এবং সময় সংরক্ষণ করুন। তারপর শ্রেণিবদ্ধ করুন: দুই পক্ষ প্রস্তাব নিয়ে একমত হয়নি, প্যাকেট পথ ব্যর্থ হয়েছে, নাকি এক পক্ষ এমন প্যারামিটার প্রত্যাখ্যান করেছে যা একসময় গ্রহণ করত?
প্রস্তাবের অমিল সাধারণত দোষী সংস্করণ বা অ্যালগরিদমের নাম বলে এবং প্রতিবার একই বিন্দুতে ব্যর্থ হয়। রাউটিং বা MTU সমস্যা আটকে যায় বা সময় শেষ হয়, আর এটি প্রায়ই নেটওয়ার্ক অনুযায়ী বদলায়। মেয়াদোত্তীর্ণ সার্টিফিকেট সমঝোতার নয়, যাচাইয়ের ত্রুটি দেয়।
এর কোনোটিই আক্রমণকারীর প্রমাণ নয়। প্রথম ব্যর্থতাতেই দুরভিসন্ধিমূলক কারণ ধরে নেওয়াই ভুল, কারণ এটি সেই নির্ধারিত বাগ লুকিয়ে রাখে যা কাল আবার ব্যর্থ হবে।
আসলে কী বাছা হয়েছে তা নিশ্চিত করুন
যেকোনো সংশোধনের পর সংযোগ উঠেছে বলে ভরসা না করে সমঝোতাকৃত ফলাফল পড়ুন। যাচাই সরিয়ে দেওয়ার কারণে সফল হওয়া সংযোগই সেই ফল যা আপনি এড়াতে চেয়েছিলেন। নিচের দুই কমান্ড TLS-সম্মুখ এন্ডপয়েন্টের নির্বাচিত সংস্করণ ও সাইফার, এবং একটি OpenVPN সার্ভার লগের নিয়ন্ত্রণ চ্যানেল লাইন দেখায়।
openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5ফলাফলটি আপনার উদ্দেশ্য করা কনফিগারেশনের সঙ্গে তুলনা করুন, এখন যা সংযোগ করে তার সঙ্গে নয়। নির্বাচিত সংস্করণ অনুমোদিত ন্যূনতমের চেয়ে পুরোনো হলে প্রোফাইল বা ফলব্যাক তালিকা দেখার জায়গা, আর উত্তর হলো সেই তালিকা ঠিক করা, আক্রমণ ঘোষণা করে চারপাশের সবকিছু নতুন করে গড়া নয়।