【问题标题】:Preventing untrusted_app from accessing database防止 untrusted_app 访问数据库
【发布时间】:2015-06-08 11:46:01
【问题描述】:

我在 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。

在 seaapp_contexts 中,已创建以下条目:-

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

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

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

感谢和问候, 苏维克

【问题讨论】:

  • 几个问题:1) 您是否确认正在运行的设备上的sepolicy 二进制文件反映了您的新域和上述规则?为了确定,我建议使用 adb 从正在运行的设备中提取它,然后将其加载到您的开发盒上的 apol 中。 2) 您是否尝试将neverallow 引入您的类型强制规则?在编译过程中,如果策略中存在不一致,这将导致错误并停止。如果出现错误,它应该可以帮助您找到允许untrusted_app 访问hm_phonebookaccess_appallow 规则。

标签: android selinux


【解决方案1】:

该用户点击了完整回答问题的 SE Android 邮件列表。他们没有在此描述的问题是,他们有一个 Web 套接字来处理数据库,而 untrusted_app 正在通过这个 Web 界面访问它。重要的是要注意,要阻止打开、读取和其他原始文件 io 访问该数据库,来自其他(源进程)进程的直接系统调用必须直接在数据库(目标文件)上发生。从内核的角度来看,它能够看到 untrusted_app 正在尝试打开/读取/写入 hm_phonebookaccess_data_file 类型的文件。

但是,(我在这里简化)内核使用网络套接字看到 untrusted_app 的 web 界面,然后是 hm_phonebook 读取数据库并写入套接字,这一切都可以。

使用 SE Linux 保护套接字的方法是通过标记网络,但是,我们认为这在 AOSP 上“不受支持”,因为不存在这样的说服机制。

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

在 SE Android 的现代版本中,不能简单地在 seaapp_contexts 中指定 name= name,因为这会导致构建错误。 NOT 指定 seinfo 时通常被认为是不安全的; seinfo + name 是安全的。

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多