ભૂલ સાથે પૂરો થતો હેન્ડશેક ત્યાં સુધી હુમલા જેવો લાગે જ્યાં સુધી તમે સંદેશ ન જુઓ, અને મોટે ભાગે તે ગણિત છે: કોઈ સામાન્ય સૂચન નહીં, સમાપ્ત થયેલું પ્રમાણપત્ર, અથવા એવું પેકેટ જે કદી પહોંચ્યું જ નહીં. ડાઉનગ્રેડ હુમલો એક ચોક્કસ વસ્તુ છે: હુમલાખોર બંને છેડાને તેમણે પસંદ કર્યું હોત તેના કરતાં નબળા વર્તન તરફ ધકેલે છે, અને તે અલગ પુરાવા છોડે છે. દરેક નિષ્ફળતાને દુર્ભાવના ગણવાથી તમે એવા ભોગવિલ શોધવા જાઓ છો જે કદાચ અસ્તિત્વમાં નથી, જ્યારે સાચા ડાઉનગ્રેડને કન્ફિગરેશન ભૂલ ગણવાથી નબળું પરિણામ જ્યાં છે ત્યાં જ રહે છે. બંને ભૂલોની કિંમત અલગ છે, અને ફક્ત એક જ સસ્તી રીતે સુધારી શકાય છે.

ડાઉનગ્રેડ હુમલો ખરેખર શું બદલે છે

હેતુ સાઇફર તોડવાનો નથી અને કી અનુમાન કરવાનો પણ નથી. હેતુ વાટાઘાટ પર એવી અસર કરવાનો છે કે બંને પક્ષ જૂના સંસ્કરણ કે નબળા અલ્ગોરિધમ પર સ્થિર થાય જે હુમલાખોર સંભાળી શકે, અથવા એક પક્ષ માને કે બીજો પક્ષ ફક્ત તે જ સમર્થન કરે છે.

જે બદલાય છે તે કરાર છે, પ્રમાણીકરણ નહીં. જો હુમલાખોર પકડાયા વિના ઓફર બદલી શકે, તો પીઅર હજી પણ હેન્ડશેક પૂરો કરી શકે છે અને એકબીજાનું પ્રમાણીકરણ કરી શકે છે, પણ હુમલાખોરને ગમતા પેરામીટર સાથે. એટલે જ રસપ્રદ પ્રશ્ન એ છે કે વાટાઘાટ પોતે અખંડિતતા સુરક્ષાથી આવરી લેવાયેલી છે કે નહીં.

વાટાઘાટનું પોતાનું પ્રમાણીકરણ કેમ જરૂરી છે

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

પરિણામને તમે ઇચ્છેલા કન્ફિગરેશન સાથે સરખાવો, હવે જે જોડાય છે તેની સાથે નહીં. જો પસંદ કરેલું સંસ્કરણ માન્ય ન્યૂનતમ કરતાં જૂનું હોય, તો પ્રોફાઇલ કે ફોલબેક યાદી તપાસવાની જગ્યા છે, અને જવાબ એ યાદી સુધારવો છે, હુમલો જાહેર કરીને આસપાસનું બધું ફરી બાંધવું નહીં.

સંબંધિત લેખો