Подтвердить что ты не робот

Изменения в файловой системе в Android Nougat

С момента первой версии предварительного просмотра разработчика Android N я получаю ошибки "отклонения разрешений" при попытке перечислить корневой каталог или другие системные каталоги. Разрешения на эти каталоги, похоже, не менялись (насколько я могу судить).

Вопрос:

Какие изменения в Android N вызвали отклонение этих разрешений?


Как реплицировать:

В оболочке ADB запустите следующие команды:

run-as com.debuggable.packagename
ls /

Это дает разрешение на отклонения ошибок на Android N.


Зачем перечислять системные каталоги:

Я заметил это поведение на Android N с несколькими файловыми менеджерами. Они больше не могли перечислить корневой каталог или другие системные файлы. Это также ограничивает вывод работы ps в оболочке. Изменения также заставили эту библиотеку перестать работать на Android N.

4b9b3361

Ответ 1

Было две группы изменений, уменьшающих доступ к /proc.

Файловая система procfs теперь монтируется с помощью hidepid = 2, исключая доступ к каталогам /proc/PID других пользователей. Это изменение было реализовано в CopperheadOS и затем было принято на его основе вверх. Там есть группа для исключения, но она не раскрывается в качестве разрешения. Он используется только для исключения некоторых процессов в базовой системе. Он может быть выставлен как "опасное" разрешение, и я ожидал, что Google закончит работу, но они решили, что пользователи не поймут его последствий.

https://android-review.googlesource.com/#/c/181345/

Политика SELinux также стала намного более строгой. Для приложений базового доступа к /proc вообще нет, хотя это относится только к файлам, отличным от каталогов /proc/PID. Там по-прежнему есть доступ к нескольким файлам с ярлыками, которые не подпадают под общую политику proc, но в основном ушли. Это было постепенным, и есть много соответствующих коммитов. Один из больших:

https://android-review.googlesource.com/#/c/105337/

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

Политика SELinux также стала намного более строгой с течением времени. Вы можете увидеть остальную часть этого в репозитории platform/system/sepolicy. Обратите внимание, что он был в platform/external/sepolicy в течение длительного времени, но недавно был перенесен.

Ответ 2

Это было сделано для соображений безопасности и конфиденциальности. Из отчета об ошибке:

В случае файловых систем root (/) и /sys список каталогов невозможен.

Официальный ответ Google:

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

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