Два диалога в Android постоянно се бъркат: подканата за съгласие с VPN и исканията за разрешения, които едно приложение отправя към данните ви. Първата отстъпва мрежова позиция, мястото, където пакетите могат да се четат и пренаписват. Втората отстъпва съхранено съдържание, което Android пази приложение по приложение. Да ги третирате като едно и също или преувеличава това, което тунелът може да види, или силно подценява това, което едно упорито приложение ще поиска след това.

Какво всъщност отстъпва диалогът за съгласие

Приложение, което реализира VpnService и декларира BIND_VPN_SERVICE, иска от системата да стане VPN на устройството. След одобрение рамката създава интерфейс tun и дава на приложението файлов дескриптор за него. Всичко, което приложението прави после, минава през този дескриптор: то чете IP пакети оттам, решава какво да прави с тях и записва пакети обратно.

Обхватът на този интерфейс е изричен. Маршрутите решават кои дестинации се прихващат, а addAllowedApplication или addDisallowedApplication решава кои приложения го захранват. VPN за отделни приложения, който изброява две приложения, не вижда останалата част от устройството.

Това е разрешение на ниво пакет, а не на ниво данни. Услугата вижда байтовете, които приложението предава на мрежовия стек, адресирани до дестинация. Тя не получава достъп до частното хранилище на изпращащото приложение, до файловете на базата му данни или до дешифрираната му памет. Файловете, които приложението е запазило в собствения си пясъчник, остават точно толкова трудни за четене, колкото и преди.

Къде спира изгледът на пакетите

TLS все още си върши работата вътре в тунела, защото ръкостискането тече между приложението и сървъра, а не между приложението и VPN. VPN препраща шифрован текст, който не може да дешифрира без ключовете на сесията. Затова един тунел сам по себе си не разкрива съдържанието на HTTPS страница или на защитена пощенска сесия.

Метаданните около шифрования текст са друга история и именно тук повечето уверени твърдения се разпадат. IP адресът на дестинацията, портът, размерите на пакетите и времето са видими, плюс името на сървъра в TLS ClientHello, което обикновено се изпраща в открит вид дори при TLS 1.3. Encrypted Client Hello променя това, но не е универсално. Обикновеният DNS издава имена също толкова лесно, когато заявките излизат нешифровани.

По-стари или зле конфигурирани протоколи отстъпват повече. Обикновеният HTTP, IMAP без TLS и редица игрови и IoT протоколи излагат полезния си товар на всичко, което държи дескриптора tun.

Разрешенията, които никога не идват с него

Одобряването на VPN не одобрява контакти, SMS, снимки или медийното хранилище. Това са отделни разрешения по време на изпълнение, всяко със свой диалог и свой път за отнемане в страницата с настройки на приложението. VPN клиент, който иска историята на разговорите ви, трябва да я поиска като всяко друго приложение, а вие можете да откажете, като запазите тунела.

Инсталирането на сертификат е това, за което трябва да внимавате, защото изглежда като част от настройката на VPN, а не е. Инсталирането на потребителски CA в хранилището на удостоверенията променя кои сертификати Android ще приема, а от Android 7.0 приложение, насочено към API 24 или по-нов, игнорира добавените от потребителя CA, освен ако мрежовата му конфигурация за сигурност не се включи с доверен котвен център на потребителя. Клиент, който настоява за CA, може да извършва законно корпоративно прихващане, а може и да иска нещо, което диалогът за VPN никога не е споменавал.

Достъпът за специални възможности стои още по-далеч. Услуга с включени специални възможности може да чете съдържанието на екрана на други приложения, което никоя позиция на ниво пакет не дава.

Локален филтър или отдалечен шлюз

Същият API покрива два продукта, които заслужават различно ниво на доверие. Локална защитна стена или блокер за реклами взема дескриптора tun и отговаря на трафика локално, без никога да го изпраща към сървър, който сам управлява. Истинският тунел препраща тези пакети към шлюз някъде другаде и този оператор вижда същите метаданни от другия край, а също решава какво се връща.

Практичен начин да ги различите е да проверите публичния си адрес с включен и изключен VPN и да видите дали известието назовава отдалечена крайна точка. Ако адресът никога не се променя, трафикът вероятно се върти на самото устройство.

И двата случая са все още позиция на ниво пакет. Разликата е кой друг стои на изхода.

Одитирайте какво сте одобрили

Отворете Настройки, после Мрежа и интернет, после VPN и четете записа, а не иконата в лентата за състояние. Постоянен VPN и Блокиране на връзки без VPN са настройки на устройството, които държат интерфейса жив и отрязват изтичания; те не разширяват нищо. От същия екран можете да забравите профила и да отнемете разрешението.

След това прегледайте другите разрешения. Информацията за приложението показва какви разрешения по време на изпълнение държи клиентът, а настройките за сигурност показват дали по същото време е инсталиран потребителски сертификат. Всяко от двете може да бъде премахнато независимо.

Въпросът, на който си струва да се отговори, е тесен: кои пакети влизат в тази услуга, накъде отиват и какво запазва реализацията. Всичко останало в диалога е шум. Справочникът за VpnService е авторитетният списък на това, което интерфейсът разкрива.

Подобни статии