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-ийн аюулгүй байдлын тохиргооны гарын авлага платформын анхдагч утгууд болон аль бүрэлдэхүүн бодлогыг дагаж мөрддөгийг жагсаасан бөгөөд таны тохиргоо ерөөсөө ямар нэгэн зүйл хийж байгаа эсэхийг яг энэ хэсэг шийддэг.