Android [Android L]SEAndroid增强Androd安全性背景概要及带来的

1 SEAndroid背景

Android对于操作系统安全性方面的增强一直沿用Linux内核所提供的MAC强制访问控制套件SELinux,对权限进行了更为深度的管理,有效地控制着进程对资源的访问。2012年才问世的SE Android将SELinux移植到Android平台上,以降低恶意应用程序攻击带来的损害,提供Android系统的防御能力。

SE Android(Secutity-Enhanced Android)是Android与SE Linux的结合,由美国NSA在2012年推出的Android操作系统的安全强化套件,以支持在Android平台上使用SE Linux。SE Android 将原来应用在Linux操作系统上的MAC强制访问控制套件SELinux移植到Android平台上,其目的在于降低恶意应用程序攻击带来的损害。然而SE Android的范畴并不局限于SELinux,它通过强化Android操作系统对应用程序的访问控制,增强应用程序之间的隔离效果,确保每个应用程序之间的独立运作,建立类似于沙盒的隔离效果,从而阻止恶意应用程序对系统或其他应用程序的攻击。

Android是建立在标准的Linux Kernel 基础上, 自然也可以开启SELinux, 通常在通用移动平台上, 很少开启这样的安全服务, Google 为了进一步增强Android 的安全性, 经过长期的准备,目前已经在Android 5.0(L) 上完整的开启SELinux, 并对SELinux 进行深入整合形成了SEAndroid.

2 SEAndroid安全策略概述

SE Android的策略源码位置在external/sepolicy,其中包含用来生成SELinux内核策略文件的源代码。以下是Android 5.1的策略文件结构树:

external/sepolicy

|.

├── access_vectors├── adbd.te├── Android.mk├── app.te├── attributes├── binderservicedomain.te├── bluetooth.te├── bootanim.te├── clatd.te├── debuggerd.te├── device.te├── dex2oat.te├── dhcp.te├── dnsmasq.te├── domain.te├── drmserver.te├── dumpstate.te├── file_contexts├── file.te├── fs_use├── genfs_contexts├── global_macros├── gpsd.te├── hci_attach.te├── healthd.te├── hostapd.te├── initial_sid_contexts├── initial_sids├── init_shell.te├── init.te├── inputflinger.te├── installd.te├── install_recovery.te├── isolated_app.te├── kernel.te├── keys.conf├── keystore.te├── lmkd.te├── logd.te├── mac_permissions.xml├── mdnsd.te├── mediaserver.te├── mls├── mls_macros├── mtp.te├── netd.te├── net.te├── nfc.te├── NOTICE├── platform_app.te├── policy_capabilities├── port_contexts├── ppp.te├── property_contexts├── property.te├── racoon.te├── radio.te├── README├── recovery.te├── rild.te├── roles├── runas.te├── sdcardd.te├── seapp_contexts├── security_classes├── selinux-network.sh├── service_contexts├── servicemanager.te├── service.te├── shared_relro.te├── shell.te├── surfaceflinger.te├── su.te├── system_app.te├── system_server.te├── tee.te├── te_macros├── tools│ ├── Android.mk│ ├── checkfc.c│ ├── check_seapp.c│ ├── insertkeys.py│ ├── post_process_mac_perms│ ├── README│ ├── sepolicy-analyze│ │ ├── Android.mk│ │ ├── dups.c│ │ ├── dups.h│ │ ├── neverallow.c│ │ ├── neverallow.h│ │ ├── perm.c│ │ ├── perm.h│ │ ├── README│ │ ├── sepolicy-analyze.c│ │ ├── typecmp.c│ │ ├── typecmp.h│ │ ├── utils.c│ │ └── utils.h│ └── sepolicy-check.c├── ueventd.te├── unconfined.te├── uncrypt.te├── untrusted_app.te├── users├── vdc.te├── vold.te├── watchdogd.te├── wpa.te└── zygote.te

SELinux内核策略文件包含file_contexts配置文件、genfs_contexts配置文件、property_contexts配置文件、seapp_contexts配置文件和mac_permissions.xml配置文件,SE Android项目的开发人员仍然在对Android系统安全进行深入的研究,因此这些策略配置也处在随时变化中。其中genfs_contexts配置文件、property_contexts配置文件和seapp_contexts配置文件是专门为SE Android系统创建的,因此不属于传统SELinux策略

这些策略文件是在Android系统编译过程中产生并且被添加到ramdisk镜像当中,因此可以保证这些策略在系统启动的初期,映射系统分区之前,最先被加载。一旦数据分区被加载后,可以将策略文件放置在/data/system目录下并且将selinux.reload_policy属性置为1(使用setpropselinux.reload_policy 1 命令),之后重新加载/data/system目录下的策略文件,这种设置将会触发系统的init进程重新加载策略,同时重新启动ueventd和installd进程以保证它们可以重新加载与这两个服务相关的策略。需要注意的是,对于内核策略,需要在主机的编译环境中,重新编译sepolicy(make policy),并且更新到/data/system中,如果希望每次设备启动时都会自动加载/data/system下的策略文件,需要将setprop命令添加到init.rc(system/core/rootdir/init.rc)中。

2.1seapp_contexts配置文件

Android L(5.1)seapp_contexts文件内容

“但行好事,莫问前程”,往往成功的几率反而更大些;

Android [Android L]SEAndroid增强Androd安全性背景概要及带来的

相关文章:

你感兴趣的文章:

标签云: