2015-04-03 4 views
3

Я бегу на Android 4.4.4 и имею два процесса. Контекст безопасности обоих процессов являются: -Предотвращение untrusted_app от доступа к базе данных

com.example.contentproviderexample having security context --> u:r:hm_phonebookaccess_app:s0 
com.example.contentprovideruser having security context --> u:r:untrusted_app:s0   

com.example.contentproviderexample является поставщиком контента и базу данных, которая имеет контекст безопасности, как -

mydb --> u:object_r:hm_phonebookaccess_data_file:s0 
mydb-journal --> u:object_r:hm_phonebookaccess_data_file:s0 

выше контекст безопасности был установлен с помощью следующее правило -

type hm_phonebookaccess_app, domain; 
app_domain(hm_phonebookaccess_app) 
allow hm_phonebookaccess_app dalvikcache_data_file:file { write setattr }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file { read getattr open }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir setattr; 
allow hm_phonebookaccess_app zygote:unix_stream_socket { getopt getattr }; 
allow hm_phonebookaccess_app apk_data_file:dir getattr; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir { write create add_name }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file { write create setattr }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir search; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir { read open }; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file lock; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:dir remove_name; 
allow hm_phonebookaccess_app hm_phonebookaccess_data_file:file unlink; 
allow installd hm_phonebookaccess_data_file:lnk_file create; 

Во время выполнения я делаю setenforce как 1.

Моя цель - предотвратить любой процесс, который принадлежит домену -> untrusted_app, от доступа к базе данных, принадлежащей домену. U: r: hm_phonebookaccess_app: s0

ПРИМЕЧАНИЕ. Поставщик контента экспортируется как истинный.

В seapp_contexts, следующая запись была сделана: -

user=_app domain=hm_phonebookaccess_app name=com.example.contentproviderexample type=hm_phonebookaccess_data_file 

Мое наблюдение состоит в том, что в режиме соблюдения, процесс «com.example.contentprovideruser» может получить доступ к базе данных.

Есть ли способ предотвратить доступ домена «untrusted_app» к этой базе данных?

Спасибо и наилучшие пожелания, Souvik

+0

Несколько вопросов: 1) подтвердили ли вы, что двоичный файл 'sepolicy' на запущенном устройстве отражает ваш новый домен и правила, как указано выше? Чтобы убедиться в этом, я рекомендую выталкивать его из работающего устройства с помощью 'adb' и загружать его в' apol' в вашем блоке dev. 2) Пробовали ли вы вводить 'neverallow' в свои правила принудительного применения? Во время компиляции это вызовет ошибку и остановится, если в политике будут несогласованности. При ошибке он должен помочь вам найти правило 'allow', которое позволяет' untrusted_app' обращаться к 'hm_phonebookaccess_app'. –

ответ

0

Этого пользователь попали в список рассылки SE Android, где вопрос был дан в полном объеме. Проблема, о которой они не смогли описать здесь, заключалась в том, что у них был веб-сокет, разбросанный по базе данных, и untrusted_app обращался к нему через этот веб-интерфейс. Важно отметить, что для блокирования открытых, прочитанных и других необработанных файлов io доступа к этой базе данных, прямой прямой вызов из другого (исходного процесса) должен происходить непосредственно в базе данных (целевой файл). С точки зрения ядра его можно увидеть, что untrusted_app пытается открыть/прочитать/записать файл типа hm_phonebookaccess_data_file.

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

Способ защиты сокетов с помощью SE Linux связан с сетью с метками, однако мы считаем это «неподдерживаемым» на AOSP, поскольку никаких механизмов убеждения для этого не существует.

http://www.mail-archive.com/seandroid-list%40tycho.nsa.gov/msg02073.html

В современных версиях SE Android, один не сможет просто указать имя = имя в seapp_contexts как это приведет к ошибке сборки. Обычно считается небезопасным, когда NOT указание seinfo; seinfo + имя безопасно.

Смежные вопросы