Stay in Your Cage! A Sound Sandbox for Third-Party Libraries on Android

背景:

本文于2016年9月发表在期刊Computer Security-ESORICS 2016上,文中主要介绍了一种自主研发的沙箱工具,该工具对app中的第三方库分别建立沙箱,对app的权限使用及文件空间的访问提供保证。

出处:

Computer Security – ESORICS 2016

Volume 9878 of the seriesLecture Notes in Computer Sciencepp 458-476

作者:

Fabo Wang, Yuqing Zhang, Kai Wang, Peng Liu, Wenjie Wang


概述及主要成果:

本文通过对app中的第三方库分别建立沙箱对app的权限使用及文件空间的访问进行保证。开发一款对开发者友好的工具LibCage。该工具禁止权限滥用,保护用户隐私且没有改写Android framework或是库文件(之前的研究对文件进行改写,适用性差)。

实现方法:

LibCage 对app中的LibFinder分别建立沙箱。每个沙箱被分配一个权限集合,该集合由开发者制定。此外,LibCage还关注一些比较危险的权限,对使用这些权限的API进行监控。

在每个app中安置permission checker,当app中的LibFinder尝试进行一些敏感操作时,对其权限进行验证。permission checker 还对文件的访问是否合法进行判断。

设置Controller(monitoring proxy)监测第三方库的行为。通过干预lib对敏感方法的调用,将这些调用重定向到Controller,进而对这些调用进行监控(基于系统调用中断,system call interception),该方法对java lib和native lib都有效。

具体流程:

Controller监控一些有敏感权限的API的lib,并对其函数调用,文件访问进行监控,在函数或方法调用过程中将其截获,之后checker对其进行检查,如果判断该调用合法,则将该调用指向原被调用函数,否则该调用被阻断。Figure 4和Figure 5分别表示了LibCage对java lib及对native lib的处理:


checker对权限的检查依据用户指定的权限策略,该策略规则存在Policy.xml文件中,在LibCage初始化时由用户定义。该文件定义了一些方法和函数与权限的映射,并决定对内部文件的访问是否合法。下图展示了Policy.xml的部分设置:


如上图所示,文件定义了java lib lib.package.name和native lib nativelib.so的权限。


总结

优点:

通过对每一个lib分别建立沙箱来防止越权问题和文件非法访问,对函数和方法的调用进行拦截并检测其安全性。在文章的evaluation部分提到这种拦截行为对用户是透明的,在实际应用中不会对程序运行有影响(合法的程序)。

缺点:

对每一个沙箱所具有的权限进行人工定义,适用性较差。对函数的拦截等可能是用hook技术实现的,想要实现这一步可能需要对用户机进行root。


由于该文章的查阅是付费的,所以只能看到文章的一部分章节,关于Controller和checker具体的工作过程并没有看到。

推荐阅读更多精彩内容