- Краткое руководство по VPN для смартфонов
- VPN для смартфонов: что нужно знать
- Что такое VPN?
- Как работает VPN?
- Преимущества использования VPN
- Когда стоит использовать VPN
- VPN для смартфонов
- Как использовать VPN для смартфонов
- Разработка VPN-клиента под Android (Часть 1)
- Немного об используемых технологиях
- «Фичи» VpnService API
- Немного о NinePatch
- Заключение
Краткое руководство по VPN для смартфонов
VPN для смартфонов: что нужно знать
Виртуальная частная сеть (VPN) для смартфона – это надежный способ защитить себя в интернете. Пользуясь телефоном, вы каждый раз передаете огромный объем данных о себе, который привлекает внимание преступников. Через смартфон, подключенный к сотовой или Wi-Fi-сети, они могут похитить ваши персональные данные или совершить другие киберпреступления. Чтобы избежать этого, изучите возможности VPN.
Заходя в интернет, вы каждый раз подвергаетесь риску всевозможных киберугроз. Может показаться, что полная безопасность недостижима, но, по счастью, есть технологии, которые значительно повышают уровень защищенности. VPN – одна из них.
Что такое VPN?
Виртуальная частная сеть (VPN) скрывает данные, передаваемые и получаемые вашим устройством через интернет.
Программное обеспечение для VPN устанавливается на устройство, которое нужно защитить – компьютер, планшет или смартфон. Оно позволяет пересылать данные в зашифрованном формате (почитайте подробнее о шифровании), чтобы лица, которые могут их перехватить, не сумели их прочитать.
Зачем нужно шифрование? Вы передаете через интернет массу личной информации, часто даже не зная об этом. Это могут быть:
- Письма с важными личными данными
- Учетные данные аккаунтов и сообщения в социальных сетях
- Банковские данные (номера карт и счетов)
- Всевозможные пароли
Кроме того, вместе с вашими данными передается и другая информация: уникальный идентификатор устройства, сведения о вашем местоположении и многое другое.
Использовать VPN важно потому, что эти данные легко перехватить, обладая минимальными познаниями в технологиях. Независимо от того, используете ли вы беспроводное или проводное соединение, ваши данные могут быть видны другим пользователям той же сети. Это означает, что даже защищенная паролем сеть Wi-Fi представляет потенциальную опасность для вас и вашей личной информации. Скрыв передаваемые данные, вы можете сохранить приватность независимо от того, как вы используете интернет.
Как работает VPN?
Чтобы обеспечить анонимность и защиту данных, технология VPN использует несколько методов:
На этапе шифрования данные преобразуются в формат, который сможет прочитать только получатель. Затем используются протоколы туннелирования, которые создают зашифрованные туннели в используемой вами сотовой или Wi-Fi-сети. Они защищают ваши данные, изолируя их и скрывая от остальных пользователей, находящихся в сети. Эти меры полезно использовать как в защищенных, так и в незащищенных сетях.
По туннелю ваши зашифрованные данные попадают на удаленные серверы. Чтобы анонимизировать вашу личность, данные отправляются на VPN-серверы, расположенные в других странах. Оттуда они передаются получателю, который видит информацию о местоположении удаленного сервера, но не о вашем. VPN-серверы играют роль посредника, защищающего данные от перехвата.
Эти базовые методы, используемые совместно, не дают преступникам проанализировать и похитить вашу личную информацию. Результат – более высокий уровень кибербезопасности и конфиденциальности и меньше поводов для беспокойства.
Преимущества использования VPN
Основное преимущество технологии VPN состоит в том, что она обеспечивает конфиденциальность, но у нее есть и другие плюсы.
Ваш интернет-трафик защищен от перехвата. Незашифрованные данные могут быть прочитаны всеми, у кого есть доступ к сети и желание их увидеть. VPN не дает киберпреступникам это сделать. Чтобы прочесть ваше сообщение, им понадобится ключ шифрования – его можно подобрать брутфорсом с помощью компьютера, но на это уйдут миллиарды лет. Лишив киберпреступников доступа к данным, вы надежно скроете свои действия даже в публичных сетях.
Конфиденциальность местоположения – другое следствие того, что вашим «представителем» в интернете выступают VPN-серверы. Поскольку данные о местоположении поступают с сервера в другой стране, невозможно определить, где вы находитесь на самом деле. Кроме того, большинство VPN-серверов не ведут журнал действий пользователей. Поэтому никто не сможет узнать, что вы ими пользовались.
Просмотр контента, доступ к которому ограничен в тех или иных регионах. Некоторые сервисы и сайты делают свой контент доступным только в определенных странах и регионах. При соединении с интернетом местоположение пользователя по умолчанию определяется по используемым локальным серверам. Из-за этого вы на время поездок лишаетесь доступа к контенту, предназначенному для вашей страны, или, находясь дома, не можете просматривать часть контента, открытого для пользователей из других стран. VPN как бы подменяет ваше местоположение местоположением промежуточного сервера, находящегося в другой стране.
Меньшая опасность для корпоративных данных при удаленной работе. Когда вы работаете вне внутренней сети своей компании, вам может потребоваться доступ к важной информации. Это подразумевает использование безопасного соединения – без него многие работодатели не разрешают сотрудникам работать удаленно. VPN-решения подключаются к частным серверам и используют шифрование для предотвращения любых утечек данных.
Когда стоит использовать VPN
С VPN у вас есть и другие возможности сделать жизнь намного проще и безопаснее. Вот лишь некоторые из них:
Доступ к контенту стриминговых видеосервисов, показ которого в ряде регионов ограничен. Когда вы подменяете свое местоположение с помощью VPN, стриминговый сервис считает, что вы находитесь в другой стране, и вы можете смотреть фильмы и телепередачи, недоступные в вашем регионе.
Отображение «настоящих» цен при бронировании. Авиакомпании и отели отслеживают просмотренные вами билеты и места размещения с помощью файлов cookie. Идентифицировав вас как пользователя, проявившего интерес к определенным предложениям, они могут искусственно завысить цены на них. Эту хитрость применяют, чтобы заставить вас поспешить с покупкой. VPN позволяет избежать накруток, анонимизировав ваши действия.
Уход от отслеживания интернет-провайдером и другими организациями. Известно, что компании используют демографические данные (возраст, пол, местоположение и т. п.) при разработке услуг и маркетинговых кампаний. Не всегда эти действия злонамеренны, но, возможно, вы предпочтете не раскрывать эту информацию. Некоторые сервисы собирают ваши данные для продажи сторонним компаниям, которые могут пренебрегать их защитой. Чем больше лиц располагает данными о вас, тем выше вероятность утечки. VPN скрывает демографические данные, когда вы находитесь в интернете, поэтому вас нельзя отследить.
VPN для смартфонов
Современные пользователи постоянно используют смартфоны для доступа в интернет, особенно когда находятся не дома. Поэтому стоит установить VPN и на телефон, а не только на ноутбук или стационарный компьютер.
Вот лишь часть защитных функций, которые обеспечивает VPN для смартфонов:
Безопасность при использовании публичных сетей Wi-Fi. Смартфоны часто используются для подключения к публичным сетям Wi-Fi. Даже если соединение защищено паролем, другие пользователи сети видят вас, ведь они (в том числе злоумышленники) заходят в сеть под тем же паролем. Используя VPN, вы защитите свою информацию с помощью шифрования и анонимизации.
Шифрование финансовых данных.Приложения для онлайн-банкинга на смартфонах весьма популярны, но при их использовании вы отправляете свою финансовую информацию через интернет. Не менее рискованно совершать покупки онлайн в приложениях типа Amazon и Groupon. Эти приложения могут использовать собственное шифрование, но VPN служит дополнительной гарантией сохранности ваших данных.
Шифрование данных в видеочатах и голосовых чатах. Все ваши разговоры в приложениях FaceTime, Skype, Google Hangouts и даже звонки по Wi-Fi могут подслушать чужие уши. Если они будут зашифрованы, никакие злоумышленники или другие организации не смогут подключиться к звонку и записать его без вашего разрешения.
Как использовать VPN для смартфонов
Выбирая VPN для Android или другой операционной системы, нужно понимать, как им пользоваться. К счастью, VPN-решения для смартфонов очень просты в работе. Стандартные шаги описаны ниже.
Для установки VPN достаточно загрузить приложение из магазина App Store или Google Play. Надежные решения обычно требуют платной подписки.
Настройка тоже не требует больших усилий. Для рядового пользователя вполне подходят настройки по умолчанию. В большинстве приложений достаточно войти в свою учетную запись, а затем выполнить основные действия по настройке, которые предложит программа.
Включить VPN во многих мобильных приложениях не сложнее, чем зажечь свет. Скорее всего, переключатель будет на главном экране.
Сменить сервер, если вам нужно скрыть свое местоположение, можно вручную. Достаточно просмотреть меню и выбрать страну, в которой вы якобы будете находиться. Укажите ее, и ваши данные пойдут через соответствующий сервер.
Расширенные настройки предусмотрены для более искушенных пользователей. Некоторые VPN-решения могут предлагать различные протоколы шифрования и содержать ряд дополнительных функций, например возможность диагностики соединения. Обязательно изучите эти функции перед покупкой подписки, чтобы найти VPN-решение, которое подходит именно вам.
Освоив приложение, не забывайте включать его каждый раз, когда собираетесь передавать данные.
Соблюдайте эти базовые советы, но не пренебрегайте правилами безопасности при использовании VPN.
Помните, что шифруются только данные, передаваемые через интернет. Если соединение не использует сотовую сеть для передачи данных или Wi-Fi, то информация передается вне интернета. VPN-приложение не шифрует обычные голосовые звонки или текстовые сообщения. Чтобы зашифровать голосовое сообщение, используйте передачу речи по протоколу IP (VoIP). Это не относится к звонкам по Wi-Fi и таким сервисам, как, например, Skype и LINE, – они используют для звонков интернет-соединение. Чтобы зашифровать сообщения, воспользуйтесь функциями iMessage для Apple или RCS для Android. Можно также использовать другие сторонние сервисы, например WhatsApp или Facebook Messenger.
Выберите VPN-решение, которому можно доверять. Безопасность VPN определяется политикой соответствующего провайдера в отношении использования и хранения данных. Помните, что VPN направляет ваши данные на свои серверы, которые совершают действия в интернете от вашего имени. Если на этих серверах хранятся журналы регистрации данных, выясните, каким образом они используются. Надежные VPN-провайдеры обычно ставят на первое место конфиденциальность ваших данных. Поэтому стоит выбрать VPN-решение с хорошей репутацией, например Kaspersky Secure Connection.
Источник
Разработка VPN-клиента под Android (Часть 1)
Всем привет! Поводом к написанию данной статьи стало осознание того факта, что при наличии большого количества статей и обзоров про приложения VPN-клиенты для Android, нет ни одной нормальной статьи описывающей проблемы разработки с использованием VpnService API. Причём, в большинстве случаев вы, как разработчик приложения, не сможете ничего сделать с этими проблемами.
Начнём с самого начала. Некоторое время назад наша компания, на основе проводимых исследований в области безопасности мобильных устройств, решила выпустить небольшое приложение (WebGuard) под Android для блокировки всем уже надоевшей рекламы, а так же защиты от слежки и вирусов при работе из любого браузера. Чтобы реализовать данный функционал нам потребовалось решить множество задач, самой трудоёмкой из которых оказалась задача по перехвату и обработке трафика приложений. Для перехвата и фильтрации соединений браузеров было решено использовать VpnService API, которое появилось в Android с версии 4.0.3 и предоставляет всю нужную функциональность (правда, временами эта функциональность просто не работает по куче разных причин, но выяснилось это несколько позже).
Немного об используемых технологиях
Тут стоит рассказать подробнее, почему было выбрано данное API и какие вообще способы существуют для перехвата сетевого трафика приложений другим приложением на «нерутованном» android-устройстве. Собственно способов всего три (не считая различных уязвимостей) и знать о них будет полезно разработчикам приложений с различными механизмами внутриигровых покупок. Т. к. многие из них считают, что подмена сетевого трафика приложения возможно только на «рутованном» устройстве и «не заморачиваются» с защитой передаваемых данных, хотя есть вероятность (и довольно большая) появления «читерских» приложений вносящих изменения в передаваемые данные.
Итак, первый способ — это установка локального прокси-сервера. Этим способом пользуется большинство антивирусов под Android. Приложению для перехвата трафика достаточно реализовать поддержку HTTP-прокси описанную в стандарте RFC 2068 и установить в настройках WiFi сети прокси-сервер или APN в настройках мобильной сети. В этом случае передача данных будет происходить как на схеме ниже.
Но у этого способа есть куча серьёзных проблем:
- установить WiFi прокси или APN для мобильной сети программно можно только с использование скрытого API (например скрытые методы в WifiManager);
нужно следить за появлением новых WiFi или мобильных сетей устанавливая прокси (APN) и для них;
данный способ работает только для соединений созданных с помощью класса Http(s)URLConnection и то, если явно не будет указано не использовать прокси (например url.openConnection(Proxy.NO_PROXY)). Есть ещё приложения, которые проверяют наличие прокси-сервера и используют его (или наоборот не используют);
если пользователь удалит или просто не запустит приложение с прокси-сервером, то остальные приложения не смогут соединиться ни с одним сервером т. к. в настройках сети все ещё будет указан прокси и пользователю нужно будет самому удалить его из настроек (например);
Эти все проблемы, кроме последней, успешно решаются вторым способом — написанием приложения VPN-клиента использующего классы VpnService и VpnService.Builder. Приложению достаточно вызвать пару функций (в коде опущены обязательные проверки):
, и весь TCP/IP трафик всех приложений (даже запущенных под root’ом) будет перенаправлен на TUN интерфейс, который создаст Android, а вашему приложению будет доступен на чтение/запись файл устройства /dev/tun (или /dev/tun0, /dev/tun1 и т. п.), откуда можно вычитывать исходящие сетевые пакеты, передавать их на обработку на удалённый VPN-сервер (обычно через шифрованное соединение) и затем записывать входящие сетевые пакеты. Для того, что бы соединения самого VPN-клиента не «заворачивались» в TUN, используется метод VpnService.protect на TCP или UDP сокетах созданных приложением.
Схема, представленная выше, в данном случае будет выглядеть следующим образом:
У этого способа есть две особенности:
- Приложению нужно обязательно получить права на использование VpnService через вызов startActivityForResult, при этом система покажет пользователю такой вот диалог:
Причём, Android запоминает, что выдал права приложению, только до перезагрузки устройства, поэтому после перезагрузки права нужно запрашивать снова. Как выяснилось (мы этого даже не ожидали) есть пользователи («да их тут сотни» ), которые любят перезагружать свой телефон каждые 10 минут и им это окно мешает, за что они в маркете могут оценить приложение в 1 балл;
«Печалька» чуть побольше предыдущей. Android после включения VPN, в обязательном порядке, отображает иконку уведомления в виде ключика и собственно неубираемое уведомление, нажав на которое можно посмотреть небольшую статистику:
Тут недовольство пользователей было ожидаемо, т. к. многие нынешние приложения просто обожают «вешать» уведомления (иногда сразу по несколько) и статус-бар превращается в новогоднюю гирлянду:
Так же, если пользователь нажмёт кнопку «Разъединить» Android отключит VPN и заберёт права у приложения, после чего для активации VPN придётся заново просить права через вызов startActivityForResult.
Есть в этом способе и небольшая дополнительная проблема (не считая «фич» о которых ниже) — для его работы нужен удалённый сервер.
Проблема с наличием сервера решается третьим способом (несколько изменённый способ №2) — приложение VPN-клиент содержит ещё и стек TCP/IP (можно взять готовый или написать самому из-за наличия недостатков в готовых) для разбора трафика из приложений и обработки соединений почти как прокси-сервер. Тогда схема обработки трафика приложений несколько изменится и будет выглядеть следующим образом:
Именно этот способ мы используем в WebGuard. Из недостатков, по сравнению с предыдущим способом, можно отметить только один — это невозможность нормальной обработки протоколов отличных от TCP или UDP (или протоколов «поверх» них), потому что приложению нужно будет создавать «сырые» сокеты для чего обычно нужны права root’а. Чтобы было понятно, о чём идёт речь, возьмём простой пример: пользователь запускает шелл через ADB и выполняет команду «ping www.ya.ru», которая отправляет ICMP эхо-запрос. Далее, приложение VPN-клиент читает из /dev/tun IP пакет, разбирает его, и выясняет что пакет содержит ICMP эхо-запрос к некоему серверу. А так как приложение не может передать запрос далее в сеть, то вариантов у него всего два: игнорировать пакет или эмулировать ping попытавшись установить соединение с нужным сервером и в случае успеха записать поддельный ICMP эхо-ответ в /dev/tun.
«Фичи» VpnService API
В процессе разработки приложения, тестирования и использования первых версий пользователями, мы столкнулись с большим количеством ошибок или недоработок связанных с VpnService API. Часть из них удалось исправить, т. к. по сути это были недоработки наших программистов (о чем мы честно написали и попали на bash.org.ru), а с оставшейся частью сделать что либо довольно сложно или невозможно:
- Нет поддержки TUN интерфейса в ядре linux, соответственно VPN не заработает. В основном эта проблема встречается на самосборных прошивках на основе проектов CyanogenMod, AOSP и др. Авторы сборок либо вообще убирают поддержку из ядра, либо забывают положить модуль tun.ko в прошивку. Такое ощущение, что авторы руководствуются принципом «не знаю что это такое, поэтому не нужно»;
Нет файла VpnDialogs.apk который содержит диалоги запроса прав и статистики, VPN опять же не заработает. Как ни странно, эта ошибка чаще всего случается на официальных сборках от производителей телефонов (и у Google в том числе);
«Зависание» GUI на некоторых телефонах Samsung с официальной прошивкой, если в VPN-клиенте произойдёт необработанное исключение (при этом шелл через ADB вполне рабочий, но переподключается каждые 1-2 минуты). Вообще производители телефонов с Android, иногда собирают к ним «замечательные» прошивки, забыв проверить часть «редко используемого» функционала. Наш коллектив разработчиков в этом плане просто «обожает» Samsung и считает, что для тестирования приложений под Android обязательно нужно иметь несколько телефонов от разных производителей и несколько разных телефонов от Samsung;
Благодаря вот этому изменению пользователь не сможет поставить галочку «я доверяю этому приложению» в диалоге VPN, если его перекрывает другая activity пропускающая нажатия пользователя. Сделано это для того, что бы нельзя было нарисовать сверху другой диалог и обманом заставить пользователя поставить галочку. Проблема в том, что обычно так делают (и уже давно) различные утилиты, лаунчеры и некоторые программы (например «Читай! Бесплатно»), создавая прозрачную activity. В результате некоторые пользователи могут подумать что над ними издеваются;
Если пользователь включит ограничение трафика для фоновых процессов, то «под раздачу» попадёт и работающий VPN-клиент (при отправке данных через сокет будет исключение SecurityException c Permission denied), соответственно кинаинтернета не будет;
В Linux есть такой замечательный механизм, как OOM Killer, и если вдруг пользователь запустит приложение, которое будет «пожирать» большое количество оперативной памяти устройства (для экспериментов можно взять Firefox, вот уж кому памяти всегда мало), OOM Killer начнёт «валить» все подряд пользовательские процессы кроме, как водится, виновника торжества (точнее его убьют последним). Исключений для нужных процессов (лаунчер или VPN-клиент) естественно не предусмотрено, поэтому нужно быть готовыми постоянно перезапускать свой сервис;
После некорректного завершения работы VPN-клиента (даже если он потом перезапустится), в редких случаях, может понадобится перезагрузить устройство т. к. Android неправильно перенастроит маршруты передачи пакетов и пакеты от приложений будут уходить в /dev/null;
Если пользователь включит раздачу мобильного интернета через WiFi одновременно с VPN-клиентом, то на большинстве прошивок, как и в случае выше, Android неправильно настроит маршрутизацию пакетов;
Вот так прочитаешь этот список и подумаешь — а может ну его этот VPN? К сожалению, другого способа перехватывать весь трафик на «нерутованном» телефоне с Android пока что нет.
Немного о NinePatch
В список выше, не попала ещё одна проблема, последствия решения которой были для нас весьма неожиданны (и не только для нас). Поэтому мы решили рассказать о последствиях поподробнее. Началось все с того, что в какой то момент нужно было сделать самую важную часть приложения — нескучную иконку. Сказано — сделано. Красивая круглая иконка нарисована и мы радостно тестируем предрелизную версию, как вдруг:
Выяснилось, что на части телефонов иконка приложения в уведомлении о VPN может очень странно отображаться (неправильная цветность, размеры или ещё что-нибудь). После экспериментов и недолгого, но жаркого обсуждения
, было приказанорешено сделать иконку приложения в формате nine-patch, благо официальная документация по этому поводу ничего не говорит (т. е. не запрещает) и яйцеобразная проблема решается. Но, после выхода релиза очень быстро появились «пострадавшие». Это были как приложения под Android, так и различные онлайн сервисы работающие с apk-файлами, и не ожидающие получить иконку приложения в формате nine-patch. Самых примечательных мы решили расположить на пьедестале из трёх мест:
    3. Различные лаунчеры, которые падали при попытке отобразить иконку (например LauncherPro).
    2. Магазины Android приложений от Samsung и Yandex. При попытке загрузить приложение в Yandex.Store выдавалось вполне понятное описание ошибки: «Не удалось извлечь из APK иконку приложения». C Samsung Apps оказалось веселее. Так как компания высокотехнологичная, то и результаты проверки при добавлении приложения приходят в соответствующем виде — письмо с ссылкой на видео в котором записан процесс тестирования приложения и должно быть видно (по идее) ошибку. Получилось, правда, все как обычно, пришло письмо с ссылкой по которой видео не было.
    1. Ну а почётное первое место, по праву, занимает компания Sony с телефоном Xperia. Через какое то время после выхода релиза, владельцы Xperia L начали присылать сообщения о том, что WebGuard «убил» им телефон (пример). Оказалось, что падает PackageManagerService при попытке обработать иконку приложения во время установки, после чего телефон автоматически перезагружается и идёт бесконечная загрузка:
В итоге, с версии 1.3 было решено использовать иконку без nine-patch, тем более что его использование всех проблем с отображением иконки не решило:
        Уведомление о включении VPN на Ainol Novo10 Hero
Заключение
Нам не хотелось делать слишком большой пост, поэтому было решено разбить статью на несколько частей. В следующей части мы расскажем почему приложения под Android, фильтрующие трафик, потребляют так много заряда аккумулятора (по мнению андроида) и напомним, на примере одного теста производительности, что DalvikVM != JavaVM.
Надеемся наша статья кому-нибудь поможет в написании интересного приложения под Android. Удачной разработки!
Источник