你是否仍在为手机安全感到困扰?是否担心手机root之后会带来更大的安全隐患?SEAndroid会帮助你解决困扰!
SEAndroid基于NSA(美国国家安全局)开发的SELinux (Security-Enhanced Linux),NSA在Linux社区的帮助下开发了基于Linux的强制访问控制(MAC),在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件,从而从根源上限制了恶意程序的访问。
SEAndroid实现了强制访问控制,他可以针对特定的程序和文件资源来进行权限的控制,我们权限控制的主体不再是用户,而变成了进程、应用,并且每个进程不可以改变文件资源的访问权限,因为每个文件资源很对不同的进程主体设置了不同的访问权限。系统在编译时预设了访问策略,该策略中包含了很多规则,规则指定了进程主体访问文件资源的权限。在对文件资源访问进行控制的同时,Binder IPC、Socket、Properties的访问同样纳入到SEAndroid的控制中,这使得每个进程的活动空间就变小了,即使你拥有了root权限,在使用不同进程的时候也并不一定能取得root权限。
从下图我们可以看到,启动SEAndroid之后的系统,所有文件都包含了安全context:
# ls -Z
drwxrwx--- system cache u:object_r:cache_file:s0 cache
drwxrwx--x system system u:object_r:system_data_file:s0 data
drwxr-xr-x root root u:object_r:device:s0 dev
-rwxr-x--- root root u:object_r:rootfs:s0 init.rc
dr-xr-xr-x root root u:object_r:proc:s0 proc
…………
同样的下图是系统运行后的进程context,可以看出不同的进程可以属于各自的domain:
# ps -Z
u:r:init:s0 root 1 0 /init
u:r:kernel:s0 root 72 2 mmcqd/0
u:r:kernel:s0 root 2 0 kthreadd
u:r:servicemanager:s0 system 98 1 /system/bin/servicemanager
u:r:rild:s0 radio 104 1 /system/bin/rild
u:r:surfaceflinger:s0 system 105 1 /system/bin/surfaceflinger
…………
因此,通过规则的设定,可以限制每个domain的权限,下面列举了servicemanager的权限设置TE(type enforcement):
type servicemanager_exec, exec_type, file_type;
init_daemon_domain(servicemanager)
allow servicemanager self:binder set_context_mgr;
allow servicemanager domain:binder { receive transfer };
不仅系统进程进行了强制访问控制,不同的APP同样进行了权限的区分,根据签名的不同被分到不同的domain中。常见的domain如system_app、platform_app、media_app、untrusted_app等,尤其对于untrusted_app的应用访问的资源特别有限。
目前困扰用户最多的是病毒问题,一种典型的病毒就是通过进程注入关键进程(手机银行客户端等)的方式实现用户信息的监听、控制,给用户带来了极大的威胁。在启动了SEAndroid的系统中,此种病毒被多层次的拦截:1.root权限获取更加困难,shell权限很难将文件放入system_file类型目录下。2.ptrace的权限受到严格的控制,通过adb启动的进程更是无法实现注入,为了更加安全可以关闭ptrace功能。3.被注入的进程的权限被限定到规定的范围内,不能为所欲为。从而彻底的阻止了此类病毒带来的危害,给用户使用手机银行等应用带来了更高的可靠性。
由此可见,root用户不再是万能的,权限被进行了彻底的隔离,进程的权限被设定到了最小的范围内。关于SEAndroid技术的一些细节稍后继续分析。