त्रुटिसँग अन्त्य हुने ह्यान्डशेक सन्देश नहेर्दासम्म आक्रमणजस्तो लाग्छ, र अधिकांश समय यो गणित हो: साझा प्रस्ताव छैन, म्याद सकिएको प्रमाणपत्र, वा कहिल्यै नआएको प्याकेट। डाउनग्रेड आक्रमण एक विशिष्ट कुरा हो: आक्रमणकारी दुवै छेउलाई उनीहरूले रोजेको भन्दा कमजोर व्यवहारतिर धकेल्छ, र यसले फरक प्रमाण छोड्छ। हरेक असफलतालाई दुर्भावना मान्दा तपाईं अस्तित्वमा नहुन पनि सक्ने पीडित खोज्न जानुहुन्छ, तर साँचो डाउनग्रेडलाई कन्फिगरेसन बग मान्दा कमजोर नतिजा यथावत् रहन्छ। दुवै गल्तीको मूल्य फरक छ, र एउटा मात्र सस्तोमा सुधार्न सकिन्छ।

डाउनग्रेड आक्रमणले वास्तवमा के बदल्छ

लक्ष्य साइफर तोड्नु होइन र कुञ्जी अनुमान गर्नु पनि होइन। लक्ष्य वार्तामा यसरी प्रभाव पार्नु हो कि दुवै पक्ष आक्रमणकारीले सामना गर्न सक्ने पुरानो संस्करण वा कमजोर एल्गोरिदममा रोकिऊन्, वा एउटा पक्षले अर्कोले त्यही मात्र समर्थन गर्छ भनी विश्वास गरोस्।

बदलिने कुरा सम्झौता हो, प्रमाणीकरण होइन। यदि आक्रमणकारीले पत्ता नलागी प्रस्ताव बदल्न सक्छ भने, पक्षहरूले अझै ह्यान्डशेक पूरा गर्न र एकअर्कालाई प्रमाणित गर्न सक्छन्, तर आक्रमणकारीलाई मन पर्ने प्यारामिटरसँग। त्यसैले रोचक प्रश्न यो हो कि वार्ता आफैं अखण्डता सुरक्षाभित्र छ कि छैन।

वार्ता आफैं प्रमाणित हुनु किन आवश्यक छ

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

नतिजालाई तपाईंले चाहेको कन्फिगरेसनसँग तुलना गर्नुहोस्, अहिले जोडिनेसँग होइन। यदि रोजिएको संस्करण अनुमत न्यूनतमभन्दा पुरानो छ भने, प्रोफाइल वा फलब्याक सूची हेर्ने ठाउँ हो, र उत्तर त्यो सूची सुधार्नु हो, आक्रमण घोषणा गरेर वरपरको सबै फेरि बनाउनु होइन।

सम्बन्धित लेखहरू