WSS ટનલનું એન્ક્રિપ્શન એપમાં નહીં, TLS ટર્મિનેટર પર જ અટકે છે
એક wss:// URL એક હોપ પર TLS હોવાનું પ્રમાણ આપે છે. પેલોડનું પોતાનું એન્ક્રિપ્શન છે કે નહીં તે નિર્ભર છે ક્લાયન્ટ અંદર શું મૂકે છે અને એ TLS કોણ સમાપ્ત કરે છે તેના પર.
સુરક્ષિત WebSocketની અંદર વહન કરાયેલી ટનલમાં બરાબર એટલું જ એન્ક્રિપ્શન હોય છે જેટલું ક્લાયન્ટે તેમાં મૂક્યું હોય, વધુ નહીં. wss:// સ્કીમ કહે છે કે TLS એક હોપ પર એક જોડાણને સુરક્ષિત કરે છે. તે એ વિશે કંઈ કહેતું નથી કે WebSocket સંદેશાઓની અંદરના બાઇટ્સ અલગથી સુરક્ષિત છે કે નહીં, અને જ્યારે વચ્ચે કંઈક TLS સમાપ્ત કરે ત્યારે તમારો ટ્રાફિક કોણ વાંચી શકે તે આ ભેદ જ નક્કી કરે છે.
બે સ્તર જે એક જેવા દેખાય છે
સુરક્ષિત WebSocket એટલે TLS જેના પર WebSocket હેન્ડશેક થાય છે, જેમ RFC 6455 તેના જોડાણ અને સુરક્ષા વિભાગોમાં વર્ણવે છે. TLS સ્તર સર્વરને પ્રમાણિત કરે છે અને સ્ટ્રીમ એન્ક્રિપ્ટ કરે છે, પછી WebSocket સ્તર એપ્લિકેશન જે મોકલવાનું નક્કી કરે તેને ફ્રેમ કરે છે.
એ બે સ્વતંત્ર નિર્ણયો છે, અને આખા માર્ગ પર એક જ તાળું દોરતો નકશો બીજાને છુપાવે છે. પૂછો કે TLS જોડાણ કોણ સમાપ્ત કરે છે. પછી પૂછો કે ક્લાયન્ટ દરેક સંદેશની અંદર શું મૂકે છે. જમાવટ વિશે બાકીનું બધું આ બે જવાબોમાંથી આવે છે.
ડિઝાઇન A: પરિવહન જ એકમાત્ર એન્ક્રિપ્શન છે
સરળ ડિઝાઇનમાં, ક્લાયન્ટ કાચા IP પેકેટ લે છે અને તેમને WebSocket સંદેશાઓમાં લપેટે છે. અંદર કંઈ એન્ક્રિપ્ટ થતું નથી, તેથી TLS સત્ર ધરાવતો ઘટક સાદા લખાણવાળા પેલોડ વાંચે છે. જ્યારે એ ઘટક તમારો પોતાનો ટનલ સર્વર હોય, ત્યારે એ જ ઇચ્છિત અંતિમ બિંદુ છે અને ડિઝાઇન સુસંગત છે, કારણ કે સર્વર તો ટ્રાફિક જોવાનો જ હતો.
જ્યારે નિરીક્ષણ પ્રોક્સી માર્ગમાં બેસે અને ક્લાયન્ટ જે સર્ટિફિકેટ પર ભરોસો કરે તેની સાથે TLS સમાપ્ત કરે ત્યારે તે અલગ ગોઠવણ બને છે. એ પ્રોક્સી હવે સર્વર ધરાવતો હોત એ જ સાદું લખાણ ધરાવે છે, અને WebSocket ફ્રેમિંગનો કોઈ પ્રમાણ તેને બદલતો નથી. ક્લાયન્ટનું ભરોસા સંગ્રહસ્થાન આ પરિણામ ટનલ ખૂલ્યાં ઘણા પહેલાં જ નક્કી કરી ચૂક્યું હતું, કારણ કે તેણે એ નામ માટે એ સર્ટિફિકેટ સ્વીકારવાનું પસંદ કર્યું. પ્રોક્સી વિનંતી કરેલ હોસ્ટ અને દરેક સંદેશનું કદ પણ જુએ છે, જે વધુ કંઈ ડિક્રિપ્ટ કર્યા વિના ઘણી પ્રવૃત્તિની ફિંગરપ્રિન્ટ લેવા માટે પૂરતું છે.
ડિઝાઇન B: પેલોડ તેની પોતાની કી ધરાવે છે
બીજી ડિઝાઇનમાં, ક્લાયન્ટ તેના પેકેટને એવા VPN પ્રોટોકોલથી એન્ક્રિપ્ટ અને પ્રમાણિત કરે છે જેની પોતાની પીઅર ઓળખ અને કી વિનિમય હોય, પછી પરિણામ WebSocket સંદેશાઓની અંદર વહન કરે છે. અહીં બાહ્ય TLS સમાપ્ત કરવાથી સાઇફરટેક્સ્ટ ખુલ્લું થાય છે, ટ્રાફિક નહીં. પ્રોક્સી સંદેશના કદ અને સમય જોઈ શકે છે, અને પેલોડમાં બીજું કંઈ નહીં. તે ઘણો નાનો સંપર્ક છે, અને તેમ છતાં તે મેટાડેટા છે જે સમીક્ષામાં નામ આપવા લાયક છે, બાજુ પર ઢાંકી દેવા લાયક નહીં.
આંતરિક પ્રોટોકોલના પોતાના અંતિમ બિંદુઓ હજી પણ સાદું લખાણ જુએ છે, જે ગોઠવણનો હેતુ છે અને તેની મર્યાદા પણ. જો અંતિમ બિંદુ પરનો ઘટક એન્ક્રિપ્શન પહેલાં અથવા ડિક્રિપ્શન પછી ડેટા વાંચવા માટે અધિકૃત હોય, તો વધારાનું સ્તર તેને મર્યાદિત કરતું નથી. કી અને તેમને સંભાળતું સોફ્ટવેર મહત્વની સીમા બની રહે છે.
VPN લેબલ, પરિચિત ક્લાયન્ટ આઇકન અથવા માર્કેટિંગ પેજ એ આ ડિઝાઇન અસ્તિત્વમાં હોવાનો પુરાવો નથી. પેલોડ ફોર્મેટ વાંચવું પુરાવો છે.
સાદું લખાણ ખરેખર ક્યાં દેખાય છે તે શોધો
URL સ્કીમ તમને એક હકીકત આપે છે, તેથી બાકીનું ઇન્ટરફેસમાંથી લો. નીચેની તપાસો ક્રમમાં ચલાવો, કારણ કે દરેક આગલીને સાંકડી કરે છે:
ss -tnp | grep -E ':(443|8443)\b' ip -br link show type tun openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief tcpdump -ni tun0 -c 5 -X
બાહ્ય જોડાણથી શરૂ કરો. TLS પોર્ટ પર એક લાંબું ચાલતું TCP સત્ર એ WebSocket વાહક જેવું દેખાય છે, અને અસંબંધિત હોસ્ટ પરનું બીજું સત્ર વધુ ઊંડે જોતાં પહેલાં સમજૂતીને પાત્ર છે. પછી ક્લાયન્ટ પર ટનલ ઇન્ટરફેસ શોધો, કારણ કે tun અથવા tap ઉપકરણ તમને કહે છે કે ક્લાયન્ટ એક એપ્લિકેશન સ્ટ્રીમને પ્રોક્સી કરવાને બદલે IP પેકેટ સંભાળે છે.
ટનલ ઇન્ટરફેસ પરનું કેપ્ચર સામાન્ય રીતે પેલોડનો પ્રશ્ન હલ કરે છે. ત્યાં વાંચી શકાય તેવા હેડરનો અર્થ છે કે આંતરિક પેકેટ ક્યારેય અલગથી એન્ક્રિપ્ટ થયા ન હતા, જ્યારે ઊંચી એન્ટ્રોપીવાળા પેલોડનો અર્થ છે કે થયા હતા. બાહ્ય ઇન્ટરફેસ પર કેપ્ચર ફરીથી કરો અને બંનેની તુલના કરો: જો બંને અવ્યવસ્થિત દેખાય, તો આંતરિક સ્તર એ કામ કરે છે જે બાહ્ય સ્તર રદ કરી શકતું નથી.
તમે ખરેખર આપેલો ભરોસો સમીક્ષા કરો
સ્થાપિત કોર્પોરેટ રૂટ સર્ટિફિકેટ એ ક્લાયન્ટના ભરોસા સંગ્રહસ્થાન વિશેની હકીકત છે, કોઈ પણ પ્રોક્સી શું લોગ કરે અથવા નિરીક્ષણ કરે તે વિશેનું નિવેદન નહીં. CAની હાજરીમાંથી વર્તન અનુમાન કરવાને બદલે અમલમાં મૂકેલી નીતિ અને વાસ્તવિક જોડાણ માર્ગ સ્થાપિત કરો.
મેનેજ કરેલા સાધનો પર, વ્યવસ્થાપકને પૂછો કે કયો ઘટક TLS સમાપ્ત કરે છે, ક્લાયન્ટ પિન કરેલું સર્ટિફિકેટ ચકાસે છે કે જાહેર સર્ટિફિકેટ, અને પેલોડ ફોર્મેટ શું છે. એ ત્રણ જવાબો એવી શોધ આપે છે જેનો તમે પછી બચાવ કરી શકો.
પરિણામને ચુકાદા તરીકે નહીં, સીમા તરીકે લખો. "TLS નિરીક્ષણ પ્રોક્સી પર સમાપ્ત થાય છે, અને આંતરિક પેલોડ ફક્ત અંતિમ બિંદુઓ પાસેની કી સાથે અલગથી એન્ક્રિપ્ટ થયેલું છે" એ ચકાસી શકાય તેવું નિવેદન છે જે વિક્રેતા બદલાય તો પણ ટકે છે. "WebSockets સુરક્ષિત છે" ટકતું નથી.