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 коопсуздук конфигурациясынын жол көрсөткүчү платформанын демейкилерин жана кайсы компоненттер саясатты сыйлаарын тизмелейт, жана конфигурацияңыз жалпы бир нерсе кыларын дал ушул бөлүк чечет.

Тектеш макалалар