Управление правами приложений андроид. Небезопасные разрешения в Android-приложениях

  • Перевод

Сегодня Android является одной из наиболее популярных мобильных платформ, используемой в смартфонах, планшетах, умных часах, телевизорах и даже автомобилях. Открытость платформы, широчайшее разнообразие используемых версий и реализаций выводит вопрос безопасности на первый план при создании Android-приложений.

Как известно, безопасность обеспечивается системой разрешений доступа на каждом конкретном Android-устройстве. Эта система призвана защищать важные данные и предотвращать несанкционированный доступ к информации или каналам связи.

По умолчанию ни у одного Android-приложения нет разрешения на проведение операций, которые могут повлиять на ОС, личные данные или другие приложения. Однако без подобного разрешения любое приложение станет бесполезным.

Разрешения являются своеобразным фильтром для функционала приложений, и только от пользователя зависит, давать ли доступ к данным во время инсталляции. Проблема в том, что пользователи обычно не читают, к чему именно хочет получить доступ приложение, и, не задумываясь, его разрешают. Такое поведение создаёт предпосылки для злоупотребления личными данными или даже модифицирования ядра.

Здесь мы рассмотрим существующую систему манифестов и разрешений в Android. Файл манифеста содержит информацию о пакете приложения, включая разрешения, поставщиков контента, сервисы, активности и широковещательных приёмников (broadcast receivers).

Пример общей структуры файла манифеста. Цветом выделены запросы на получение разрешений:

Самые опасные разрешения

Чтобы решить, к каким данным можно дать доступ, пользователь должен помнить о предназначении этого приложения. Например, «Зачем игре понадобился доступ к моей адресной книге или разрешение отправлять SMS?» Очевидно, что игры не предполагают отправки SMS. Подобные несоответствия функционала запросам доступа должны настораживать в первую очередь.

Разрешения, которые в будущем вы возможно захотите пересмотреть

Запрос разрешения на чтение и запись личных данных. Если вы хотите, чтобы пользователи не переживали за свои личные данные, то не используйте в манифесте подобные запросы:






Разрешения, связанные с финансовыми расходами. Некоторые разрешения, бездумно предоставленные пользователями, могут стоить им денег. Чаще всего это отправка SMS/MMS и совершение голосовых вызовов. Причём происходить это может в фоновом режиме, без вызова стандартного телефонного приложения.
Запрос на отправку сообщений:

Запрос на совершение звонков:

Простой пример отправки SMS:

String message = "Hello Android fans! "; String number = "xxxxxxxxxxxx"; //it is preferable to use a complete international number SmsManager.getDefault().sendTextMessage(number, null, message, null, null);
Обратите внимание, что данный код будет работать только в том случае, если соответствующий запрос содержится в файле манифеста:

Доступ к данным геолокации. Если пользователь разрешит, то приложение в любое время сможет получать информацию о:

  • примерном местоположении пользователя согласно данным базовых станций и точек Wi-Fi;
  • точном местоположении пользователя согласно данным GPS, базовых станций и Wi-Fi.
Запрос доступа к данным о примерном местоположении:

Запрос доступа к данным о точном местоположении:

Вот как осуществляется получение данных о точном местоположении:

Public class MainActivity extends Activity implements LocationListener { private LocationManager locationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this); } @Override public void onLocationChanged(Location location) { String myLocation ="Location changed...\n\nYou are located at: " + "\nLatitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude(); Toast.makeText(getApplicationContext(), myLocation, Toast.LENGTH_LONG).show(); } @Override public void onProviderDisabled(String provider) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); Toast.makeText(getApplicationContext(), "Gps is turned off... ", Toast.LENGTH_SHORT).show(); } @Override public void onProviderEnabled(String provider) { Toast.makeText(getApplicationContext(), "Gps is turned on... ", Toast.LENGTH_SHORT).show(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }
Не забывайте, что работоспособность данного кода зависит от наличия соответствующего запроса в файле манифеста.

Java-класс MainActivity внедряет LocationListener для получения нужных данных от устройства. Запрос текущего местоположения осуществляется вызовом requestLocationUpdates() в методе onCreate() . Когда местоположение изменяется, то для получения новых данных вызывается onLocationChanged() . Если GPS-данные недоступны, то вызывается метод onProviderDisabled(), передающий приложению информацию о местоположении.

Доступ к аудио- и видео. Если пользователь даёт такие разрешения, то он рискует тем, что его будут прослушивать или использовать камеру смартфона для слежки. Запросы доступа в файле манифеста:




Установка пакетов. Если дать такое разрешение, то приложение сможет устанавливать дополнительные пакеты без ведома пользователя.

Остановка фоновых процессов. Данное разрешение позволяет приложению вызывать killBackgroundProcesses(String), с чьей помощью оно может останавливать любые выполняющиеся в фоновом режиме процессы.

Android Marshmallow

В шестой версии Android, анонсированной в мае 2015 года, реализован новый механизм разрешений. Теперь они будут запрашиваться не во время установки приложения, а при первой попытке использования какой-либо функции. Будем надеяться, что это существенно облегчит жизнь как разработчикам, так и пользователям.

Пользователи, устройства которых работают управлением Android Marshmallow и Nougat, начали жаловаться на любопытную ошибку, которая иногда возникает при попытке установить разрешения для приложений. На экране возникает сообщение «Обнаружены наложения », в результате запустить нужную программу не удается, либо удается, но с существенно урезанным функционалом. До недавних пор причина появления ошибки была неизвестна, а с самой проблемой боролись, сбрасывая аппарат к заводским настройкам либо поочередно удаляя (или блокируя) все установленные приложения. К счастью, оказалось, что исправить ситуацию довольно просто.

Как выяснили специалисты, причина возникновения ошибки кроется в появлении в версиях ОС и новой функции, которая позволяет некоторым программам "проявляться" поверх других приложений. Например, у Facebook Messenger заголовки чата остаются на переднем плане - то есть, мессенджер использует функцию "поверх других приложений". Как вы понимаете, отсюда и обнаруживающиеся наложения. И это далеко не единственная программа, наделенная таким функционалом. Но проблема не в этом, а в том, что некоторые вновь запускаемые приложения, когда наложение активно работает, запрашивают для себя новое разрешение, а ОС Android не позволяет изменять параметры, что и приводит к ошибке "Обнаружены наложения".

Таким образом, если вы устанавливаете новое приложение и запускаете его в первый раз, одновременно ведя беседу в чате Facebook, то получите сообщение об ошибке, как только новое приложение попытается запросить установку разрешений. На приведенном ниже скрине используется приложение "WhatsApp ", который использует для своей работы функцию наложения экрана поверх других приложений. Работа данного приложения также вызывает появление ошибки "Обнаружены наложения".


На этом примере показано, что когда возникает ошибка "Обнаружены наложения", сообщение о ней включает в себя ссылку "Открыть настройки ", отправляющую пользователя непосредственно в меню программ "Наложение поверх других приложений". Вы можете попытаться вручную переключить приложения с помощью тумблера, заблокировав функцию "Разрешить появление поверх других окон", и вернуться обратно. Можно перебрать все имеющиеся в меню приложения последовательно, по одному. Но эти манипуляции могут занять очень много времени, особенно, если у вас на Android-устройстве установлены десятки приложений, обладающих функцией наложения. В идеале нужно знать, какое именно приложение вызвало конфликт, чтобы отключить только его.


Чтобы вычислить мешающее вам приложение, подумайте:

На рисунке вы видите список, показывающий все приложения, которые имеют разрешение проявляться поверх других. Но если вам удалось выяснить, какое именно из них задействовано, когда вы получаете эту ошибку, можете просто отключить это приложение и двигаться дальше.


Конечно, отключение одного приложения не является абсолютно надежным способом, потому что в некоторых случаях вызывать появление ошибки может больше, чем одно приложение. Порой выявить "виновника" невероятно сложно. В таких случаях проще продолжить работу с новым приложением, запретив все из них, а затем повторно активировать программы из списка по мере необходимости. Этот кардинальный метод сработает наверняка.

По умолчанию все приложения для Android работают в песочнице – изолированная среда . Если они хотят получить доступ к данным, находящихся за пределами песочницы, изменить их или удалить, то должны получить на это согласие системы.

Полномочия делятся на несколько категорий, но я расскажу только о двух из них: обычные и опасные . Для нормальных разрешений, например, доступ в интернет, создание иконки, подключение через Bluetooth и т.д., не требуется согласие пользователя.

Если приложение требует «опасного» разрешения, тогда система запрашивает согласие у пользователя. Почему некоторые полномочия считаются опасными? В каких случаях лучше запретить доступ?

Опасные разрешения для приложений

В категорию «опасно» можно отнести девять групп полномочий. Приложения, которые их требуют, каким-то образом влияют на частную жизнь или безопасность пользователя . В каждой группе есть такие полномочия, которых может потребовать какое-либо приложение.

Если пользователь одобрит какие-либо разрешения, приложение получает все разрешения из этой группы автоматически, без дополнительного подтверждения. Например, если приложение получает разрешение на чтение SMS-сообщений, то может также отправлять SMS-сообщения, просматривать MMS-сообщения и выполнять другие действия, относящиеся к этой группе.

Календарь

Возможности :

  • Просмотр событий, хранящихся в календаре (READ_CALENDAR).
  • Редактирование старых событий и создание новых (WRITE_CALENDAR).

Опасности : если вы активно используете календарь, приложение изучит вашу ежедневную рутину и, может быть, эти сведения передаст третьим лицам. Кроме того, из-за ошибки приложение может случайно удалить из календаря важную встречу.

Камера

Возможности :

Опасности : приложение будет знать, где вы находитесь, в любое время. Может, например, дать знать грабителям, когда Вас нет дома.

Микрофон

Возможности :

  • Запись звука с микрофона (RECORD_AUDIO).

Опасности : приложение может записывать всё, что происходит рядом с телефоном. Все разговоры. Не только тогда, когда Вы разговариваете по телефону, но и в течение всего дня.

Телефон

Возможности :

  • Чтение информации о телефоне (READ_PHONE_STATE) позволяет программе узнать номер телефона, текущей мобильной сети, состояние текущих соединений и т.д.
  • Совершать звонки (CALL_PHONE).
  • Просмотр списка вызовов (READ_CALL_LOG).
  • Изменение списка вызовов (WRITE_CALL_LOG).
  • Добавление почтового автоответчика (ADD_VOICEMAIL).
  • Использование VoIP (USE_SIP).
  • Обработка разрешений исходящих вызовов (PROCESS_OUTGOING_CALLS) дает приложению доступ к информации, кто звонит, и позволяет перенаправить его на другой номер.

Угрозы : когда Вы передаёте полномочия, связанные с телефоном, вы предоставляете приложениям выполнения практически любого действия, связанного с голосовой связью. Приложение будет знать, когда и кому Вы звоните, – и может само позвонить, в том числе на платные номера, за ваш счет.

Датчики тела

Возможности :

  • (BODY_SENSORS) – эти права обеспечивают доступ к данным, связанным со здоровьем, собираемым некоторыми датчики, такими как датчик сердечного ритма.

Опасности : если вы используете аксессуаров с датчиками тела (помимо встроенных в телефон датчиков движения), это приложение получает данные о том, что происходит с вашим телом.

SMS

Возможности :

  • Отправка SMS-сообщения (SEND_SMS).
  • Просмотр сохраненных сообщений (SMS READ_SMS).
  • Прием SMS-сообщений (RECEIVE_SMS).
  • Прием сообщений WAP Push (RECEIVE_WAP_PUSH).
  • Прием входящих MMS-сообщений (RECEIVE_MMS).

Угрозы : позволяет приложению принимать и читать входящие SMS-сообщения и отправлять их (разумеется, за ваш счет).

Память устройства

Возможности :

  • Чтение SD-карты или другого носителя памяти (READ_EXTERNAL_STORAGE).
  • Сохранение записей в памяти или на SD-карте (WRITE_EXTERNAL_STORAGE).

Опасности : приложение может считывать, изменять или удалять любые файлы, хранящиеся на вашем телефоне.

Как настроить разрешения для приложений

Если разрешения, которые запрашивает приложение, кажутся Вам подозрительными, не устанавливайте его – по крайней мере, не соглашайтесь на них.

В каждом случае предоставление полномочий следует тщательно обдумать. Например, если какая-то игра или инструмент для редактирования фотографий, пытается получить доступ к вашему текущему местоположению, это выглядит страно. Между тем, карты и навигаторы действительно нуждаются в GPS-данных – но им не зачем получать доступ к списку контактов или SMS.

В Android 6 и более поздней версии приложения спрашивают пользователей о разрешение всякий раз, когда требуется одно из опасных прав. Если вы не хотите их предоставлять, вы всегда можете отклонить запрос. Конечно, если приложение действительно нуждается в этом разрешении, оно будет отображать сообщение об ошибке и не будет правильно работать.

Вы также можете проверить список предоставленных разрешений и изменить их для любого приложения. Для этого выберите пункт Настройки Приложения (в зависимости от версии Android эти и другие элементы меню могут иметь разные названия).

Теперь у вас есть на выбор два пути. Вы можете проверить все разрешения, предоставленные приложениям. Для этого нажмите на название приложения и выберите Разрешения .

Другой способ – это просмотреть список всех приложений, которые уже требовали или могут не требовать одно из опасных прав. Например, хорошей идеей будет проверить, какие приложения хотят иметь доступ к списку контактов, и аннулировать разрешения в случае сомнений. Для этого щелкните Настройка приложения (значок шестеренки в правом верхнем углу) и выберите пункт Разрешения приложений .

Особые разрешения для приложений

Помимо опасных разрешений, приложение также может потребовать особых разрешений . В таком случае будьте осторожны: так часто поступают трояны.

Доступность

Это разрешение упрощает работу с приложениями и устройствами людям, имеющим проблемы со зрением и слухом. Этими функциями могут злоупотреблять вредоносные программы.

После получения таких разрешений доступа троянские программы могут извлекать данные из приложений (в том числе ввод текста – пароли). Кроме того, вредоносные программы могут приобретать приложения в магазине Google Play.

Стандартное приложение для общения

Банковские трояны хотят быть стандартными приложениями для обработки SMS, потому что таким образом они могут читать SMS-сообщения и скрывать их – даже в более поздних версиях Android.

Например, троянские программы могут использовать эту функцию для перехвата паролей, передаваемых банками в сообщениях SMS и для того чтобы подтвердить вредные операции без ведома пользователя (помните, что они могут скрывать SMS-сообщения).

Всегда сверху

Право наложения окна поверх других приложений позволяет троянам отображать фишинговые окна вместо интерфейса оригинальных приложений (обычно это относится к приложения мобильного банкинга или социальных сетей).

Жертва думает, что вводит свой пароль в форму реального приложения, но, на самом деле, всё происходит в ложном окне, открывающемся трояном, а конфиденциальные данные мигрируют к преступникам.

Права администратора устройства

Эти разрешения позволяют пользователям изменять пароль, блокировать камеру или удалять все данные с устройства. Вредоносные программы часто пытаются получить такие права, потому что их трудно потом удалить.

Права root

Это самое опасное разрешения. По умолчанию система Android никогда не дает их приложениям, но некоторые троянские программы могут использовать уязвимости в системе, чтобы получить root-права. Тогда все остальные защиты становятся бесполезными – вредоносная программа может использовать права root для выполнения всего, независимо от того, какие полномочия были одобрены или отклонены.

Стоит отметить, что даже новая система разрешений (в Android 6 и выше) не защищает полностью от вредных программ. Например, trojan-Gugi неоднократно заражает жертву, требуя (до получения результата) разрешения на внесение изменений в интерфейс. В конечном итоге, вредоносное приложение перекрывает все другие приложения до тех пор, пока не получит необходимых разрешений.

Выводы

Приложения не должны делать всё, что хотят на вашем телефоне, особенно, если они без причины хотят прав из категории опасных.

Однако, существуют приложения, которым действительно нужно много разрешений. Например, антивирусные программы для сканирования системы и защиты от угроз.

Прежде чем дать некоторые полномочия, подумайте о том, действительно ли приложение в них нуждается. Если вы не уверены, поищите эту информацию в интернете.

В конце надо добавить, что даже самый бдительный пользователь не защищен от вредоносных программ, использующим уязвимости системы. Поэтому так важно правильное управление разрешениями приложений (помогает защитить конфиденциальные данные от приложений-шпионов).

Permission Master - это специальный модуль для Xposed Framework, который предназначен для управления разрешениями любой установленной на вашем гаджете программы. Подробное описание этого проекта с пошаговыми инструкциями по установке Xposed и отдельных модулей для него я сделал в , поэтому не будем ещё раз повторяться, а перейдём непосредственно к работе Permission Master.

После установки модуля и перезагрузки устройства вы обнаружите в списке приложений новую иконку в виде зелёного щита с шестерёнкой. Запускаем программу и видим окно, разделённое на две вкладки. На первой содержатся названия всех имеющихся разрешений. Тап по любому названию в списке демонстрирует нам все программы, обладающие данным свойством. Ещё один тап, и название программы становится красного цвета и перечёркнутым - это значит, что соответствующее разрешение было отключено.

Примерно такой же алгоритм используется на второй вкладке, но здесь все разрешения сгруппированы по программам. Вы можете просмотреть список доступных действий для каждого приложения и одним тапом отключить ненужное. Обратите внимание, что если вы задержите палец на названии любого разрешения, то появится всплывающее окно с пояснением его свойств. Это очень пригодится тем, кто сомневается в необходимости и безопасности того или иного действия. А чтобы обезопасить себя от дополнительных проблем, не забудьте зайти в настройки Permission Master и отключить отображение системных программ.

Приложение Permission Master пригодится всем продвинутым пользователям Android, которые хотят иметь полный контроль над установленными приложениями. Теперь вы получите возможность отключить функции слежения, закрыть тем программам, которые в нём вообще не нуждаются, запретить свой смартфон и многое-многое другое, что недоступно простым пользователям Android.

В Android довольно гибкая система разрешений: при установке приложение запрашивает у операционной системы доступ к необходимым ему возможностям устройства. Правда, на этом этапе у пользователя всего два варианта действий: согласиться с условиями и установить приложение или отказаться и не устанавливать. В дальнейшем приложениям можно запретить выводить уведомления, если они злоупотребляют этой функцией, и на этом стандартные возможности управлять разрешениями заканчиваются. Остаются только нестандартные.

Для более гибкой настройки разрешений можно использовать скрытую функцию Android под названием AppOps. Доступ к ней осуществляет с помощью одноименного приложения из Google Play. Оно совместимо с устройствами на Android 4.3 и 4.4, root-доступ ему не требуется. Фактически, это просто ярлык, который открывает настройки разрешений.

В AppOps показан список всех установленных приложений и предоставленные им разрешения. При желании любое из разрешений можно отозвать: для этого нажмите на переключатель, чтобы он перешел в позицию OFF и стал серым.

Зачем Яндекс.Диску столько разрешений, которые все равно он никогда не использует? Отключаем. Но еще хуже, когда приложения используют разрешения, которые им не нужны: определяют местоположение, читают буфер обмена, обращаются к списку контактов и тому подобное. Это расходует процессорное время и негативно сказывается на времени автономной работы устройства. Отключаем.

К сожалению, AppOps не умеет запрещать приложениям использовать интернет. Для этого можно установить антивирус с фаерволом, как вариант — бесплатный Avast .

В настройках брандмауэра Avast! указываете, каким приложениям разрешено использовать интернет Wi-Fi, 3G и GPRS, все остальные соединения будут запрещены.

Брандмауэру Avast требуется root-доступ к файловой системе, на устройствах без него можно использовать, например, приложение «Фаервол без root-прав » или . Они работают по одному принципу: создают VPN-соединение, и при попытке какого-либо приложения обратиться в интернет спрашивают пользователя, можно ли это сделать. В настройках правил файервола у любого приложения можно отнять доступ к сети. История установленных соединений записывается в лог.

Читайте также: