WSS туннелінің шифрлауы қолданбада емес, TLS терминаторында бітеді
wss:// мекенжайы бір секірісте TLS бар екенін дәлелдейді. Пайдалы жүктеменің өз шифрлауы бар-жоғы клиенттің ішіне не салатынына және сол TLS-ті кім аяқтайтынына байланысты.
Қауіпсіз WebSocket ішінде тасымалданатын туннельде клиент салған дәл сонша шифрлау бар, одан артық емес. wss:// схемасы TLS бір секірісте бір қосылымды қорғайтынын айтады. Ол WebSocket хабарларының ішіндегі байттардың бөлек қорғалғаны туралы ештеңе айтпайды, және ортада бірдеңе TLS-ті аяқтағанда сіздің трафигіңізді кім оқи алатынын дәл осы айырмашылық шешеді.
Бір сияқты көрінетін екі қабат
Қауіпсіз WebSocket — үстінде WebSocket қол алысуы орындалатын TLS, 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 қауіпсіз" — олай емес.