VPN-ге сүйенбей Android қолданбаларында ашық мәтінді блоктаңыз
Жүктемедегі ашық мәтін мен жолдағы ашық мәтін екі түрлі мәселе. Біріншісін қолданбада, екіншісін туннель немесе құрылғы саясатымен шешіңіз.
Android-те ашық мәтінді блоктау деп екі мүлде басқа нәрсені атайды. Бірі — қолданба ішіндегі өз желілік стекіне кәдімгі HTTP-ны қабылдамауды бұйыратын саясат. Екіншісі — телефондағы барлығын бірден қорғауға тырысатын құрылғы деңгейіндегі реттеу, әдетте трафикті VPN арқылы өткізу. Олар әртүрлі мәселелерді шешеді, ал екіншісі біріншіні түзете алмайды: туннель телефон мен шығыс арасындағы бөлікті қорғайды, ал HTTP сөйлейтін қолданба сол шығыстың арғы жағындағының бәрімен әлі де HTTP сөйлейді.
Бір атау астындағы екі мәселе
Бірінші мәселе — жүктеме: қолданба тіркелгі деректерін немесе токендерді шетінен шетіне шифрланбаған сұранысқа жазады, сондықтан оны көре алатын әрбір секіріс оқи алады. Екіншісі — жол: қолданба мүлде дұрыс болуы мүмкін, бірақ сіз жергілікті Wi-Fi операторы қайда қосылатыны туралы ештеңе білмеуін қалайсыз. VPN екіншісін шешеді және тек екіншісін.
Бұл айырмашылық түзетудің иесін анықтайды. Жүктеме қолданбаны тарататынға тиесілі, өйткені қай URL шақырылатынын және сертификат тексерілетінін тек сол код шешеді. Жол құрылғыға немесе желіге тиесілі, өйткені сөз пакеттердің қайда баратыны туралы, олардың не қамтитыны туралы емес.
Бірінші жол: сіз басқаратын қолданба
Егер қолданбаны сіз таратсаңыз, түзету — тасымалдау шешімі және оны орындататын саясат. Әрбір соңғы нүктені HTTPS-ке бағыттаңыз, хост атауы мен сертификатты тексеруді қосулы ұстаңыз және кәдімгі HTTP-ға қайта оралу жолын бір конфигурация жалаушасы қашықтықта қалдырудың орнына жойыңыз. Қайта бағыттау мұнда көмектеспейді: 301 алатын HTTP сұранысы тақырыптары мен денесін әлдеқашан ашық жіберген, сондықтан тіркелгі деректері қайта бағыттау оларды қорғайды деген болжаммен ешқашан жүрмеуі керек.
Android 7.0 және одан кейінгі нұсқаларда саясатты Network Security Configuration білдіреді. Төмендегі файл — ең кішкентай пайдалы нұсқа: ол доменге тән ерекшелік басқаша демесе, барлық жерде ашық мәтінді қабылдамайды.
<network-security-config>
<base-config cleartextTrafficPermitted="false" />
</network-security-config>Манифестен сол ресурсқа сілтеме жасаңыз, содан кейін тарату алдында бұрыннан бар ерекшеліктерді оқыңыз. Ескі жөндеу домені немесе төлем провайдерінің SDK жазбасы қорғауға тырысқан хост үшін ашық мәтінді үнсіз қайта рұқсат етуі мүмкін.
Нұсқаның екі бөлшегін білген жөн. API 28 немесе одан жаңасын нысанаға алған қолданбалар ашық мәтінді әдепкі бойынша қабылдамайды, сондықтан әлі кәдімгі HTTP сөйлейтін қолданба не ескі API деңгейін нысанаға алады, не бір жерде ерекшелігі бар. Ал желілік қауіпсіздік конфигурациясы болған кезде ескі android:usesCleartextTraffic манифест атрибуты бұл мәселені енді шешпейді, сондықтан сол жалаушаны өзгерту кейде ештеңе істемейтін сияқты көрінеді.
Екінші жол: сіз басқармайтын қолданба
Орнатылған үшінші тарап қолданбасының қауіпсіздік конфигурациясын пайдаланушы параметрімен қайта жаза алмайсыз. Шынайы нұсқалар — өнімнің өз қауіпсіз қосылым басқарулары, әлдеқашан TLS қолданатын қолдаулы балама, немесе құрылғының нені іске қоса алатынын шектейтін басқарылатын құрылғы саясаты. Бұлар әртүрлі міндеттемелер, және тек үшіншісі құрылғы паркіне таралады.
Желі ережелері көрінгенінен әлсіз баламалар. Тек 443 портына рұқсат беру аутентификацияланған TLS-ті талап етпейді, өйткені көптеген ашық мәтін протоколдарын сол портқа көшіруге болады, ал 80 портын блоктау басқа порттардағы ашық мәтінді қамтымайды. Браузердің тек-HTTPS режимі де сол браузермен шектеледі, сол телефондағы бөлек пошта немесе чат қолданбасына емес.
Трафик шифрланған болып көрінуі үшін аралық сертификат орнату — сенім өзгерісі, түзету емес. Ол қолданбаның сервер аутентификациясын сіздікімен алмастырады, ал басынан сертификаттарды тексермеген қолданба бұнымен түзелмейді; сіз тек ағынды кім оқи алатынын жылжыттыңыз.
VPN қайда көмектеседі, қайда көмектеспейді
Туннель — жергілікті желі қосылым туралы ештеңе білмеуі талап етілгенде, немесе қолданба өзге жолмен жете алмайтын жеке қызметке жетуі қажет болғанда дұрыс құрал. Ол HTTP клиентін HTTPS сөйлету үшін қате құрал, өйткені сұраныс туннельден кірген күйінде шығады.
Android практикалық шектеу қосады: платформа бір уақытта бір ғана VPN қызметін іске қосады. Сол орынды алатын жергілікті сүзгі қолданбасы сізге шынымен қажет қашықтағы туннельмен бәсекелеседі, ал олардың арасында ауысу — қолданба емес, құрылғы деңгейіндегі әрекет. Сол бір орын жүктеме саясатын қолданбада ұстап, туннельді жол үшін сақтауға жақсы себеп.
Екеуі қабаттасатын жалғыз жағдай — өзіңіз де басқаратын жеке сервер. Онда туннель протокол әлі ашық мәтін болса да жолды жеке ете алады, бұл әсерді азайтады, бірақ жүктеменің не екенін өзгертпейді. Мұны тәуекелді азайту деп қараңыз, деректерді шифрлау деп емес.
Блокталды деп атамас бұрын нені тексеру керек
Адамдарды таңдандыратын әдепкіден бастаңыз: API 28 немесе одан жаңасын нысанаға алған қолданба ашық мәтінді әлдеқашан қабылдамауы керек, сондықтан әдепкіні қайталайтын конфигурация қоспас бұрын нысана деңгейін тексеріңіз. Сосын сәтсіздік жағдайын әдейі тексеріңіз: кәдімгі HTTP хостқа сұраныс қосалқы жолмен үнсіз сәтті болудың орнына сәтсіз болуы керек.
adb shell dumpsys package com.example.app | grep -E 'targetSdk|versionName'
adb logcat | grep -i cleartextСәттілік жағдайы үшін HTTPS шақыруы нақты сертификаттар тізбегін тексеретінін және сенімсіз сертификаты бар проксидің төзімділікке емес, қабылдамауға ұшырайтынын растаңыз. Кез келген сертификатпен сәтті болатын қол алысу тасымалдау қауіпсіздігі туралы ештеңе дәлелдеген жоқ.
Үшінші тарап қолданбасы үшін шынымен орындай алатын шекараны жазыңыз — басқарылатын құрылғы саясаты, желі ережесі немесе ештеңе — және оны қабылдау өлшемдерінде айтыңыз. Android қауіпсіздік конфигурациясының нұсқаулығы платформаның әдепкілерін және қай компоненттер саясатты сақтайтынын тізімдейді, ал конфигурацияңыздың жалпы бірдеңе істейтінін дәл осы бөлік шешеді.