防止untrusted_app访问数据库

时间:2015-04-03 11:23:29

标签: android selinux

我在Android 4.4.4上运行并且有两个进程。这两个过程的安全上下文是: -

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

注意:内容提供商导出为true。

在seapp_contexts中,输入以下内容: -

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

我的观察是在强制模式下,过程" com.example.contentprovideruser"能够访问数据库。

有什么方法可以阻止" untrusted_app"域访问该数据库?

谢谢和问候, Souvik

1 个答案:

答案 0 :(得分:0)

此用户点击SE Android邮件列表,完整地回答了问题。他们在这里没有描述的问题是,他们有一个Web套接字在数据库中乱码,而untrusted_app正在通过这个Web界面访问它。重要的是要注意阻止打开,读取和其他原始文件访问该数据库,直接系统调用来自另一个(源进程)进程必须直接在数据库上发生(目标文件)。从内核的角度来看,它能够看到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中简单地指定name = name,因为它会导致构建错误。当 NOT 指定seinfo时,通常认为它不安全; seinfo +名称是安全的。