背景:
本文于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具体的工作过程并没有看到。