Опасные разрешения
Описание
Разрешения, или Permissions, в официальной документации — это механизмы разграничения доступа к различным функциям на устройстве. Они служат для обеспечения конфиденциальности пользователей, чтобы последние понимали, к каким данным и действиям имеет доступ приложение и что оно может делать.
Разрешения защищают доступ к:
-
данным с ограниченным правом на использование, таким как состояние системы и контактная информация пользователей;
-
запрещенным действиям, среди которых — подключение к сопряженному устройству и запись звука.
Многие механизмы безопасности Android основаны на принципах классических Linux-систем и способы работы с разрешениями — не исключение. Каждое приложение, установленное на устройстве, имеет собственного пользователя и группу в Linux. На этой особенности реализован механизм песочницы. То есть никто, кроме этого пользователя, не имеет права доступа к директории приложения.
Общие положения Android-разрешений
Существует несколько типов разрешений:
Install-time permissions — предоставляются автоматически при установке приложения. Разрешения во время загрузки дают приложению неполный доступ к данным или позволяют ему выполнять ограниченные действия, которые минимально влияют на систему или другие программные продукты. Android включает несколько install-time permissions: normal permissions и signature permissions, которые отличаются уровнем защиты (normal и signature).
Runtime permissions (dangerous permissions) — требуют, чтобы приложение запросило разрешение во время выполнения. Предоставляет продукту дополнительный доступ к данным с ограниченными правами или разрешает ему выполнять некоторые действия, которые существенно влияют на систему и другие приложения. Этим permissions система присваивает dangerous уровень защиты.
Special permissions — соответствуют конкретным операциям приложения. Только Android-платформа и OEM (оригинальный производитель оборудования) могут определять специальные разрешения в тех случаях, когда хотят защитить доступ к особенно мощным действиям, таким как отрисовка поверх других приложений. Этим разрешениям система присваивает appop уровень защиты. В отличие от runtime permissions, здесь пользователь должен предоставить специальные разрешения на странице «Доступ к специальному приложению» в системных настройках. Приложения могут отправлять туда пользователей с помощью Intent, который приостанавливает ПО и запускает соответствующую страницу настроек для данного специального разрешения. После того, как пользователь вернется в приложение, оно может проверить, предоставлено ли разрешение в функции onResume()
.
Разрешения используются, чтобы понять, имеет ли приложение права доступа к чувствительным данным или право на выполнение определенных операций (действий). Например, если программный продукт хочет получить доступ к контактам, то разработчику необходимо объявить разрешение в файле AndroidManifest.xml:
Это встроенное разрешение, которое имеет уровень защиты (protectionLevel) — dangerous. При установке приложения с данным разрешением Android ОС спросит пользователя, хочет ли он предоставить доступ к данным своих контактов.
Разработчики могут создать свои разрешения. Для этого их нужно прописать в файле AndroidManifest.xml:
<permission android:name="com.mycoolcam.USE_COOL_CAMERA"
android:protectionLevel="dangerous" />
<activity android:name=".CoolCamActivity" android:exported="true" android:permission="com.mycoolcam.USE_COOL_CAMERA">
<intent-filter>
<action android:name="com.mycoolcam.LAUNCH_COOL_CAM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Если какое-то стороннее приложение захочет использовать данные Activity, то разрешения необходимо также прописать в файле AndroidManifest.xml этого продукта:
И тогда при установке приложения ОС Android спросит пользователя, давать ли доступ приложению к камере или нет.
Уровни разрешений
-
normal — пользователь не знает, что приложение запрашивает доступ к этому ресурсу, потому что права предоставляются автоматически при установке;
-
dangerous — этот уровень требует, чтобы пользователь подтвердил, может ли приложение получить доступ к определенному ресурсу;
-
signature — приложение, использующее этот уровень разрешений, должно быть подписано тем же сертификатом, что и продукт, объявивший его. Это не позволяет злоумышленнику прописать
<uses-permission>
с этим разрешением в файле AndroidManifest.xml, потому что Android не даст установить приложение; -
Есть несколько других уровней, таких как system, installer, privileged, appop и т. д., которые используются системными приложениями. Их следует рассматривать как уровень signature с точки зрения злоумышленника, т. е. разрешения, использующие этот уровень защиты, не могут быть объявлены в
<uses-permission>
.
Некоторые разрешения, такие как CAMERA, позволяют вашему приложению получать доступ к аппаратным частям, которые есть только у некоторых устройств Android. Если ваше приложение объявляет одно из этих hardware-associated permissions, подумайте, сможет ли оно работать на устройстве, не имеющем этого оборудования. В большинстве случаев оборудование является необязательным, поэтому лучше и назвать его таковым, задав для android:required
значение false
в объявлении <uses-feature>
, как показано в следующем фрагменте кода из файла AndroidManifest.xml:
Если вы не установите для android:required
значение false
в объявлении <uses-feature>
, Android предположит, что для запуска вашего приложения требуется аппаратное обеспечение. Система запретит некоторым устройствам устанавливать ваше приложение.
Тэг <uses-permission
указывает системное разрешение, которое пользователь должен предоставить для правильной работы приложения.
Существует ряд опасных разрешений, которые требуются для предоставления доступа к чувствительным данным пользователя.
Пример опасных разрешений:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.WRITE_CONTACTS
android.permission.WRITE_CALL_LOG
android.permission.WRITE_CALENDAR
android.permission.UWB_RANGING
android.permission.USE_SIP
android.permission.SEND_SMS ...
Например, разрешение android.permission.SEND_SMS — позволяет приложению отправлять SMS-сообщения.
Пример объявления опасного разрешения:
Проблема
В случае объявления опасных системных разрешений в файле AndroidManifest.xml, по ошибке может быть дан доступ к чувствительным данным пользователя.
Рекомендации
Необходимо убедиться в необходимости использования опасных системных разрешений.
Плохо | Хорошо |
---|---|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |
Убедиться в необходимости запроса опасных системных разрешений |