Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

FireDroid: Hardening Security in Almost-Stock Android

论文下载

Abstract

firedroid是一个基于策略的安全框架,主要是利用进程的系统调用。他不改系统不改app,来实施安全策略,来做第三方和预装app以及native code的安全检查。他设计了个可以对任何从zygote出来的进程进行attach,identify,monitor和enforce polices。能被用来在patch出来前block系统和app的漏洞,实验证明overhead非常小。

Introduction

说了firedroid不需要该系统不要反编译apk,也不需要用户输入和干预,利用system call做到对每个进程的全面,从bytecode到native都可以。只要配置好策略就能防止malware攻击,还能阻止对系统和app的漏洞利用。

System Design

所有高权限操作都与sysetm call有关,所以firedroid做法是控制system call。由于在如此底层的角度定义安全策略比较难,所以他们设计了一种策略语言来做一个高层策略到底层system call的映射。firedroid使用ptrace,一个进程起来,FDAM(FireDroid Application Monitor)就用ptrace attach上去,这样进程一旦有system call,内核就会有个中断并且通知FDAM。 PEP(Policy Enforcement Point)是用来获取system call的一些额外信息,例如参数等。然后把这些信息传递给PDP(Policy Decision Point),他会从PR(Policy Repository)那里获得相关的对每个进程定义好的策略,根据这些策略,PDP来决定是allow,deny还是kill掉这个进程。另外他可以负责交给FDS,来让用户决议。这个FDS就是个app,他提供PAP(Policy Administration Point)来定义策略,用户可以开启关闭这些策略,如果是企业级的话,用户就不能自定义,而是被远程管理。RPM(Remote Policy Manager)来接受远程通过短信或蓝牙之类的更新和编辑策略的请求,通过证书公钥的方式验证合法性后,把policy放在GPR(Global Policy Repository),然后再放到FDAM里的PR里。

Fig

Implementation

实现一个monitor process叫FDMM(FireDroid Main Monitor)来监控Zygote的fork调用。为了attach到Zygote里,他们改了init.rc,因为Zygote是从boot的时候就起来了。FDMM起来后,调用ptrace去attach到Zygote,从一开始就控制Zygote的执行。对init.rc的修改不需要重新编译系统,使用这个机制可以实现自动化的attach,不要用户的任何干预。但修改init.rc需要用到设备镜像,因此他们推荐firedroid作为一个企业环境使用,比如由运营商或者任何能够部署设备镜像的源头的那些来做这个事情,来做一些BYOD的事情。另外init.rc可以在root后的设备上通过提取boot分区来进行修改,他们做了一些脚本来自动在root设备上提取init.rc,修改加入firedroid,重新刷入。另外OTA升级会带来兼容性问题,另外如果要搞掉firedroid,要么修改init.rc,要么禁用ptrace,前者OTA做不到,后者不太可能。

Firedroid Policy

policy语法如下:

Fig

outcome就是allow,deny,kill和ask。do action可以包括改operation返回值,发送信息,与组件交互,log等等。Requester和Target是app或者系统服务,target还能是系统资源,文件或者content provider。

Security Validation

人工测试,对malware,先跑一遍,不做任何policy,这样会记录下一些行为,然后对这些记录审查,建立一些policy去阻止和限制危险system call,然后再真正部署使用。

收费相关

例如偷偷发短信,用了如下policy

Fig

还有针对后台拦截短信的policy

Fig

信息窃取

对于获取一些设备信息的等等

Fig

Fig

系统漏洞

例如RATC的root漏洞利用fork的数量极限来导致adbd无法降级,exploid漏洞利用NETLINK消息等。

Fig

另外CVE-2013-2094的内核漏洞可以bypass selinux,这个漏洞也可以用相应的policy检测预防

Fig

Performance Evaluation

用CTS测试

Fig

benchmark结果

Fig

app交互的结果

Fig

电量影响大概3.3%,总结下来就是I/O相关的性能会比较差,因为文件打开关闭还有ptrace会有上下文切换什么的。

Future

用ptrace到zygote以后,去改got表,这样就不用每次都ptrace中断,导致性能差了。