背景:
这篇论文发表在2016年的IEEE Symposium on Security & Privacy会议上,该会议是信息安全界最顶级的会议。该文章使用庞大的样本数据量进行测试,又使用大量人工分析,对第三方库进行了详尽的分析。但个人认为其中还有一些可以改进的地方。
出处:
the 36th IEEE Symposium on Security and Privacy
作者:
Kai Chen, Xueqiang Wang, Yi Chen, Peng Wan2, Yeonjoon Lee, XiaoFeng WangBin Ma, Aohui Wang, Yingjun Zhang, Wei Zou
概述:
该文章主要针对于android及iOS应用程序中的第三方库中的潜在问题进行研究。 通过对大量android平台的app的第三方库进行深入的分析(实用工具,研究行为等)并通过android与iOS中第三方库的某些关系,在iOS应用中找到对应的库,并用以判断是否有潜在危害。
研究意义:
通过对合法的第三方库进行重打包用以传播恶意软件的行为广泛存在。目前针对这一违法行为的应对手段比较少。在iOS系统中没有公开的用来检测该种行为的系统(anti-virus System in android)。并且由于iOS文件本身的特性,对其使用的lib进行分析非常困难。
理论基础:
有很多跨平台的第三方库,比如iOS的库存在其android版本,通过对这些库在android环境下的行为分析,可以对其iOS版本有进一步的认识(据观察,大部分的有害行为在两种环境下都存在)。
研究难点:
1)PhaLib (potential-harmful app library)的分析
2)跨平台的研究(把两个环境下的库联系起来)
主要成果:
通过对大量的(unprecedented?)样本(android,iOS平台)进行分析,对Phalib有了系统的研究。对Phaselib有了新的理解(iOS中新的可疑行为,如何潜伏等等)。
方法模型:
主流程图:
主要模块:
1.提取android库文件并进行分类
2.对android库进行潜在危害的检测
3.关联android Phalib 与其在iOS中的对应lib
4.对关联的lib对儿进行可疑行为分析
具体步骤及问题解决
(一)android平台上的库分析
1.包分组(group)
将大量的app反编译,获得android文件包(package),通过名称进行分类。所有同组的包都有大段的相同代码(使用LibFinder工具对反编译的app进行自动化分析)。
此外,该文使用Root Zone Database对分类的包进行检验(是否正确分类)。之后的步骤会对group中的包进行聚类。
2.寻找android库
使用 PSD算法(package similarity degree)对group中的包进行聚类。PSD在包层面进行分析,公式如下:
PSD(p1, p2) = n(p1 ∩ p2)/n(p1 ∪ p2) (method交集/method并集)
LibFinder在方法(method)层面进行分析:通过计算方法的几何中心(矩心)距离来比较方法的相似度。
3.检测Phalib
使用VirusTotal工具进行检测。
(二)iOS平台的库分析
主要思路:将在android中已确认的Phalib在iOS平台上找映射。
1.寻找跨平台的不变量(invariants)
通过不同的输入进行多次试验,记录程序中变化的值用以推导出不变量。本文关注一些特殊的程序点 program point(program entry, program exit and loop header. )并以class为单位进行分析。
该文首先在android和iOS的官方网站上下载20个lib,对这20个lib中的class进行手动配对(根据各class实现的功能)并根据candidate invariants 对class对中的程序点进行检查,手工建立字典用来对跨平台的指令及API进行转译(不是很懂这一步)。该文章还尝试使用构建控制流图的方式来寻找一致的程序点(class construction, class destruction, view appear, view disappear, or methods with sensitive events )。
通过实验发现一些特定的字符串(或子串)在两个平台中均有出现,以下是文中给出的共有字符串:
通过实验证明,当匹配字符串(length>=5,且来自不同程序点)多于8个时,可判定两个class相匹配,当有三个以上class匹配时,可判断两个library匹配。
2.寻找其他的lib成员
以相互配对的library中的class(anchor)只是library中的一部分成员(member),所以需要更多的类成员用以分析iOS lib的行为。由于iOS中method是混杂在一起的,想要寻找出lib比较困难,所以本文通过静态分析类之间的调用关系来寻找lib。
文中使用3种类关系,如下所示:
A →Call B:a method in Class A calls a method in Class B
A →Inherit B :A is inherited from B
A →Ref B :an object of B is used inside A
文中定义了两种规则来发现新的类成员:
1)对于任何class A,当初向上述关系且class B不是框架类时,B与A在同一lib中
2)对于anchor class,class A、B有上述关系且在其对应平台中有A′ 和B′ 有相同关系,并且B和B′ 有不少于k个共有字符串(上一节中的),则A和B在同一lib中。
3.潜在危害行为分析
主要思路:程序的行为可通过API序列来描述。
存在的问题:iOS与android中的API序列存在不一致,以adwo为例,如下图:
解决方案:将API进行分类,用其分类进行表示,并将连续相同的分类进行压缩。
在android平台中,通过class使用的权限(permission)对其进行分类,分类链接如下:
https://bdsec.soic.indiana.edu:8080
在iOS平台中,通过对Class语义的人工分析进行分类。文中将API分成19类。
该文通过从lib中的独立方法(没被任何其他类调用,entry points, event handler等)开始,进行标准静态跨平台分析 (参考.E. M. Myers, “A precise inter-procedural data flow algorithm,” in Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. ACM, 1981, pp. 219–230. ),建立 invariant-API-sequence(IAC)。
通过比较IAC(相似度大于80%)来判断lib在两个平台中是否有相同的行为。
创新点:
通过android-iOS共有库的分析,对iOS的lib库进行分析。
在iOS平台上寻找lib成员(通过类之间的关系)。
根据语义对API进行分类。
总结:
优点:使用大量的样本进行测试和库分析,大量的人工分析。
不足:大量的人工分析。只能检测iOS中与android相匹配的库。
在实验过程中,只对android中的Phalib进行其iOS平台的检测,但是同样存在一些lib在android端没问题但在iOS中有问题的情况。
可能这中间有一些理解不对的地方,欢迎同样读过该论文的朋友来讨论。