SELinux在系统级增加了强制访问控制,每个VFS node均在Security Server的控制之中。IPC是系统的重要功能,未经授权的使用均会给系统带来安全隐患,所以本文重点对SEAndroid在IPC中安全功能进行分析,作为Android的主要通信工具socket和binder,在SEAndroid均增加了权限的控制,下面分别对两个进行简要的分析。
一、binder
为了增加binder的权限控制,首先在kernel的policy中增加一个class,并且增加了几个方法,
{ "binder", { "impersonate", "call", "set_context_mgr", "transfer", "receive"} },
Impersonate:该进程是否可以代表另一个进程使用binder
Call:该进程是否可以调用另一个进程
Set_context_mgr:是否可以将自己注册成Context Manager
Transfer:是否可以传递某类型的binder引用到其他进程
Receive:是否可以接收某类型binder引用
对binder调用规则的配置有些繁琐,所以在TE中使用宏进行配置binder_use、binder_call、binder_transfer、binder_service。相应的功能介绍在代码里已经注释的比较清晰,如:
# binder_call(clientdomain, serverdomain)
# Allow clientdomain to perform binder IPC to serverdomain.
define(`binder_call', `
# First we receive a Binder ref to the server, then we call it.
allow $1 $2:binder { receive call };
# Receive and use open files from the server.
allow $1 $2:fd use;')
对于TE文件只需简单配置即可,例如servicemanager:
allow servicemanager self:binder set_context_mgr;
allow servicemanager domain:binder { receive transfer };
配置表示了servicemanager可以将自己设置为context manager,并且它可以对所有domain执行receive和transfer的操作。
下面看一下驱动的实现流程。首先在security_ops中增加了4个操作函数
.binder_set_context_mgr =selinux_binder_set_context_mgr,
.binder_transaction = selinux_binder_transaction,
.binder_transfer_binder =selinux_binder_transfer_binder,
.binder_transfer_file = selinux_binder_transfer_file,
首先看一下第一个函数,其的实现原理就是去AVC中查询当前的sid是否设置了context_mgr的权限,如果未经授权,则禁止此次操作。
static int selinux_binder_set_context_mgr(struct task_struct *mgr)
{
u32 mysid = current_sid();
u32 mgrsid = task_sid(mgr);
return avc_has_perm(mysid, mgrsid, SECCLASS_BINDER, BINDER__SET_CONTEXT_MGR, NULL);
}
对于transaction的控制也是类似,在binder_transaction中增加hook,用来检查本次调用的权限,其中也是同样在AVC中查询权限。
static void binder_transaction(struct binder_proc *proc,
struct binder_thread *thread,
struct binder_transaction_data *tr, int reply)
……
if (security_binder_transaction(proc->tsk, target_proc->tsk) < 0) {
return_error = BR_FAILED_REPLY;
goto err_invalid_target_handle;
}
……
static int selinux_binder_transaction(struct task_struct *from, struct task_struct *to)
{
u32 mysid = current_sid();
u32 fromsid = task_sid(from);
u32 tosid = task_sid(to);
int rc;
if (mysid != fromsid) {
rc = avc_has_perm(mysid, fromsid, SECCLASS_BINDER, BINDER__IMPERSONATE, NULL);
if (rc)
return rc;
}
return avc_has_perm(fromsid, tosid, SECCLASS_BINDER, BINDER__CALL, NULL);
}
调用AVC进行权限查询和其他hook是一致的,基本原理如下图所示,如果cache中未能查到,就会去security server中查询policy,并且cache起来。
二、socket
在SEAndroid中service sockets的权限同样受到管理。Init进程在创建service附属socket的同时,根据file_contexts查询当前socket的权限,并将信息加入到socket的security context中,启动后的权限如下所示:
srw------- system system u:object_r:installd_socket:s0 installd
srw-rw-rw- root root u:object_r:keystore_socket:s0 keystore
srw-rw---- root system u:object_r:netd_socket:s0 netd
srw-rw-rw- root root u:object_r:property_socket:s0 property_service
srw-rw---- root radio u:object_r:rild_socket:s0 rild
……
关于socket使用权限的配置可以简单的使用两个宏定义unix_socket_connect、unix_socket_send,他们分别对应着TCP和UDP类型的socket访问。
# unix_socket_connect(clientdomain, socket, serverdomain)
# Allow a local socket connection from clientdomain via
# socket to serverdomain.
define(`unix_socket_connect', `
allow $1 $2_socket:sock_file write;
allow $1 $3:unix_stream_socket connectto;
')
对于规则的配置只需如下,他表示了adbd domain的subject可以通过vold_socket类型的socket访问vold的domain。
unix_socket_connect(adbd, vold, vold)
更多内容请关注http://blog.sina.com.cn/u/3194858670以及sina微博@安卓安全小分队
相关推荐
标题中的“20cn扫描之IPC扫描”指的是一个专门针对IPC(Inter-Process Communication,进程间通信)进行安全扫描的工具或程序。在IT行业中,IPC是操作系统提供的一种机制,允许不同进程之间交换数据和控制信息。这个...
20CN扫描之ipc 1.1 20CN扫描之ipc 1.1
标题中的“IPC种植者”可能是指“工业个人计算机(Industrial Personal Computer)”在农业或园艺领域的应用,而“ipcscan”可能是一个相关的工具或软件。在这个上下文中,IPC通常指的是专为恶劣环境设计的坚固型...
傻瓜扫描之IPC 绝对可用 从《黑客工具全程解密》教材上下载的 由于软件本身即为IPC破解工具 所以会被查杀 属正常现象 绝对可用
* 修改接口:tuya_ipc_upgrade_progress_report、tuya_ipc_ss_donwload_pre、tuya_ipc_ss_download_set_status、tuya_ipc_ai_detect_storage_pause、tuya_ipc_ai_detect_storage_resume、tuya_ipc_notify_with_event...
在Android系统中,IPC(Inter-Process Communication,进程间通信)是不同应用程序之间进行数据交换的重要机制。Android作为一款多任务、多应用的操作系统,各应用程序运行在各自的进程中,为了实现功能交互,就需要...
根据提供的文件信息,标题与描述均为“IPC标准树 _ IPC”,这表明该文档主要讨论的是IPC(Institute of Printed Circuits或现在更名后的IPC – Association Connecting Electronics Industries)所制定的标准体系,...
`IPC::Cmd`是Perl的一个模块,它提供了一种简单且灵活的方式来执行外部命令并获取其输出。在没有互联网连接的情况下,离线安装Perl模块可能会变得有些复杂,但通过以下步骤,我们可以实现对`perl-IPC-Cmd`模块的离线...
"CAM350 在 IPC 网表对比中的应用" CAM350 是一种功能强大且流行的 PCB 设计和manufacturing 工具,它可以帮助设计师和制造商快速、准确地进行 PCB 设计和制造。在 IPC 网表对比中,CAM350 播放着举足轻重的角色。...
### IPC技术应用详解 #### IPC概念与特性 IPC,全称Inter-Process Communication,即进程间通信,是在计算机科学领域中一种重要的通信机制,用于在不同的进程之间传递数据和同步进程状态。IPC技术使得不同进程能够...
标题中的“IPCSDK”指的是“Internet Protocol Camera Software Development Kit”,它是科达公司为开发者提供的一套用于集成和控制科达网络摄像头的软件开发工具包。科达是一家知名的安防监控设备制造商,其产品...
IPC$共享原理分析 IPC$共享是Windows NT及以上系统中的远程网络登陆功能,其主要功能是为了方便管理员进行远程管理和查看共享资源。IPC$共享的原理是基于命名管道的资源共享,通过验证用户名和密码可以获得相应的...
"IPC6012 规范中文版" 本资源摘要信息涵盖了 IPC6012 规范中文版的主要内容,涉及到刚性印制板的资格认证和性能规范。该规范旨在提供刚性印制板性能判据的详细资料,是对 IPC-RB-276 的补充,并作为对该文件的修订...
IPC模拟器是一款强大的工具,主要用于测试和开发视频监控系统,特别是针对网络摄像机(IPC,Internet Protocol Camera)的集成和调试。本压缩包中的“IPC模拟器”是基于EasyIPCamera构建的,它允许用户模拟多路RTSP...
IPC标准列表大全详细说明 IPC(Institute for Interconnecting and Packaging Electronic Circuits)是一个行业协会,旨在制定和维护电子行业的标准。以下是IPC标准列表大全的详细说明: 1. IPC J-STD-001F ★ ...
在嵌入式系统中,IPC(Inter-Process Communication,进程间通信)是一种关键的技术,它允许不同进程之间共享数据和协调工作。对于TI的C6678处理器来说,这是一项重要的功能,因为它是一个多核处理器,具备强大的...
焊接是电子产品组装过程中最关键也是最容易出问题的环节之一。因此,通过IPC-7351B标准进行PCB封装设计,可以有效提升产品的可焊性和可靠性。 本文详细介绍了如何依据IPC-7351B标准,通过计算标准封装的SMD焊盘尺寸...
标题中的“PCB Matrix IPC-7351 LP viewer”是一款专用于查看和分析印制电路板(Printed Circuit Board, PCB)设计的工具。该软件遵循IPC-7351标准,这是一个由国际电子互连工业协会(IPC)制定的关于电子组件封装...