Вопрос по android – Как проверяются разрешения безопасности Android во время выполнения?

5

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

В среде разработки создаются исключения, когда приложение пытается сделать что-то, для чего требуются разрешения, не объявленные в AndroidManifest.xml. Так как же система во время выполнения реализует проверку во время выполнения?

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

Я тоже искал тот же ответ. Наконец-то нашел в книге очень хорошее объяснение: Android Security Internals: Shop.oreilly.com / продукт / 9781593275815.do Пройдите главу Управление разрешениями. Ankur Bhatia

Ваш Ответ

2   ответа
14

Особенно когда речь идет об аппаратных ограничениях.

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

Если ты попросишьWRITE_EXTERNAL_STORAGE в манифесте ваше приложение также станет членом группы (Linux-) (называемойsdcard_rw) у которого есть права на запись в это хранилище. Разрешения на файловую систему применяются только для разрешения записи вsystem пользователь (= владелец) иsdcard_rw группа, любой другой (= другой) может только читать. Смотрите также Google блокирует записи приложений на SD-карты

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

Список разрешений <> групповые сопоставления: Platform.xml

Существуют также некоторые ограничения (программное обеспечение Android), которые основаны либо на подписи вашего приложения и / или на простом поиске разрешений, запрошенных вашим приложением: например, ContextImpl # checkPermission () - но эти разрешения необходимо проверять на каждой точке входа для кода, который разрешает ограниченные действия.

Время от времени люди находят способы, например, включите GPS программно, потому что такая проверка где-то отсутствует.

Благодарность! Что касается последнего абзаца о пропущенных проверках, есть ли у вас ссылки на эти открытия (например, сообщения на форуме или сообщения об ошибках в AOSP)? dacongy
Не извините, но, возможно, B.android.com где-то есть отчет об ошибке zapl
@ AdiGuN Извините, я не понимаю, что вы говорите, можете ли вы перефразировать это? zapl
@ zapl Извини. Мой плохой твой ответ казался подходящим, я был смущен, когда я написал комментарий. : D Adi GuN
4

«исключения» - это ошибки времени выполнения. Разрешения не применяются во время сборки, только во время выполнения.

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

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

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

Похожие вопросы