CN108710798B - 一种Android第三方库间共谋行为检测方法 - Google Patents
一种Android第三方库间共谋行为检测方法 Download PDFInfo
- Publication number
- CN108710798B CN108710798B CN201810482478.0A CN201810482478A CN108710798B CN 108710798 B CN108710798 B CN 108710798B CN 201810482478 A CN201810482478 A CN 201810482478A CN 108710798 B CN108710798 B CN 108710798B
- Authority
- CN
- China
- Prior art keywords
- android
- information
- function
- class
- party
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Android第三方库间共谋行为检测方法,包括:获得分析模式和用于保存待检测的Android第三方库的库文件,并对库文件进行预处理,得到第三方库的基础信息;根据分析模式以及基础信息,构建伪主函数;根据伪主函数构建调用流图,并解析调用流图;根据伪主函数构建数据流图,并解析数据流图;根据解析调用流图得到的信息和解析数据流图得到的信息进行匹配分析,得到第三方库间共谋行为的检测结果。本发明能够实现对Android第三方库间共谋行为的检测和对Android第三方库的数据流分析,并能根据需求实现快速分析检测和深度分析检测,而且检测速度快,对不同格式的库文件都能进行检测。
Description
技术领域
本发明属于移动安全领域,更具体地,涉及一种Android第三方库间共谋行为检测方法。
背景技术
Android生态的开放性和模块化开发导致应用程序内普遍使用了第三方库,这种第三方库可以减少开发时间,给应用提供多样化的功能提高开发者效率。但是,由于主程序和第三方库可能属于不同利益体,第三方库在带来好处的同时,也会为用户带来一定的安全风险。
共谋攻击是一种将敏感权限组合和恶意行为拆分到了不同应用中的攻击行为,就单个应用来看,参与共谋的应用通常都是常规应用,但通过应用间的通信后就会触发恶意行为的攻击,可能会造成权限提升、隐私泄露等重大危害。这样做的原因一方面是为了规避应用市场的安全性检测,因为目前的检测都是针对单个应用进行的;另一方面是这种协作的攻击方式可以获取更多的隐私信息,带来更大的危害。目前对应用共谋的研究主要是针对基于Android特有的组件间通信方式产生的共谋行为,Android第三方库作为应用中的一部分,当应用运行时,第三方代码中的组件成为应用的一部分,并借由应用的运行上下文运行,与应用本身的组件没有太大的区别,所以从理论上而言,应用中的共谋行为可能产生于其所使用的第三方库中。不仅如此,如果第三方库中存在共谋行为,当这些库被大量应用所使用,将会带来更加严重的影响。
另外,由于对应用共谋进行分析时,大多数分析对象是成对的应用,这样对应用进行两两组队进行检测的时间复杂度是O(n2),检测速度慢。
总的来说,目前还没有面向Android应用第三方库间的共谋行为检测的研究,现有的研究更多的是针对应用共谋的研究与检测,风险已经在应用中存在,但是这些已有技术并不能解决Android第三方库中的共谋问题,也不能在风险引入到应用中之前进行检测,同时,还存在检测速度慢的问题。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种Android第三方库间共谋行为检测方法,其目的在于,基于静态数据流分析技术与组件信息解析技术,直接对第三方库进行共谋行为静态源代码的检测,从而更加精确地追责,提高开发者使用第三方库的安全性,并在应用开发前杜绝风险的引入。
为实现上述目的,本发明提供了一种Android第三方库间共谋行为检测方法,包括如下步骤:
(1)获得分析模式和用于保存待检测的Android第三方库的库文件,并对库文件进行预处理,得到第三方库的基础信息;分析模式为快速分析模式或深度分析模式;基础信息包括Android组件类、java类以及java类中可调用方法集合;
(2)根据分析模式以及基础信息,构建伪主函数;
(3)根据伪主函数,获得第一判定信息;第一判定信息包括:第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在第三方库代码中注册的IntentFilter对象信息;
(4)根据伪主函数,获得第二判定信息;第二判定信息包括:第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径,以及多条输出路径中每一条输出路径所对应的用于传输敏感信息的传输函数和多条输入路径中每一条输出路径所对应的用于收敏感信息的Android组件类;其中,输出路径为发送方中获取并发送敏感数据的路径,输入路径为接收并使用发送方数据的路径;
(5)根据第一判定信息和第二判定信息进行匹配分析,得到共谋行为检测结果。
进一步地,步骤(1)中的预处理包括如下步骤:
(11)分析库文件的文件格式,若为aar文件,则转入步骤(12);若为jar文件,则转入步骤(13);
(12)解压库文件,得到classes.jar文件,并转入步骤(13);
(13)解析jar文件,得到第三方库的基础信息,包括Android组件类、java类以及java类中可调用方法集合;jar文件为库文件或由库文件解压得到的classes.jar文件。
进一步地,步骤(2)包括如下步骤:
(21)判断分析模式的类型,若为快速分析模式,则转入步骤(22);若为深度分析模式,则转入步骤(23);
(22)对于Android组件类,生成伪主函数dummyMainA,然后依次对Android组件类生命周期中各个回调函数进行建模,然后插入到伪主函数dummyMainA中;对于java类,生成伪主函数dummyMainJ,然后遍历java类中的函数,并依次将遍历到的函数插入到伪主函数dummyMainJ中;伪主函数构建完成;
(23)对于Android组件类,生成伪主函数dummyMainA,然后依次对Android组件类生命周期中各个回调函数进行建模,并插入到伪主函数dummyMainA中;对于java类中可调用方法集合,生成伪主函数dummyMainM,然后将java类中可调用方法集合中的方法依次插入到伪主函数dummyMainM中;伪主函数构建完成。
进一步地,步骤(3)包括如下步骤:
(31)对每一个伪主函数,分别利用其作为入口构建对应的调用流图;
(32)分别利用每一个调用流图,提取如下信息:第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在第三方库代码中注册的IntentFilter对象信息。
优选地,步骤(32)中,利用调用流图提取信息所使用的算法为IC3算法,以提取更多的Intent对象信息,从而提高检测准确度。
进一步地,步骤(4)包括如下步骤:
(41)对每一个伪主函数,分别利用其作为入口构建对应的数据流图;
(42)分别对每一个数据流图进行污点分析,提取第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径;
(43)分别解析多条输出路径中的每一条输出路径,得到对应的用于传输敏感信息的传输函数;分别解析多条输入路径中的每一条输入路径,得到对应的用于接收敏感信息的Android组件类。
进一步地,步骤(5)包括如下步骤:
(51)从第二判定信息中,选定一条未处理的输入路径Entrypath,判断输入路径Entrypath所对应的用于接收敏感信息的Android组件类R的组件类型,若为Activity、Service或BroadcastReceiver,则转入步骤(52);若为Content Provider,则转入步骤(56);
(52)从第二判定信息中,选定一条未与输入路径Entrypath进行匹配分析的输出路径Exitpath;若第一判定信息中,存在与输出路径Exitpath所对应的传输函数T相等的发送函数S,则利用发送函数S所使用的Intent对象信息对传输函数T中的Intent对象进行赋值,并转入步骤(53);否则,转入步骤(55);其中,传输函数T和发送函数S相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(53)获得Android组件类R的IntentFilter信息,得到对应的IntentFilter对象;
(54)判断传输函数T中的Intent对象与Android组件类R所对应的IntentFilter对象是否匹配,记录匹配结果,并转入步骤(55);
(55)若第二判定信息中,还存在未与输入路径Entrypath进行匹配分析的输出路径,则转入步骤(52);否则,转入步骤(510);
(56)从第二判定信息中,选定一条未与输入路径Entrypath进行匹配分析的输出路径Exitpath;若第一判定信息中,存在与输出路径Exitpath所对应的传输函数T相等的数据操作函数F,则利用数据操作函数F所使用的Uri对象信息对传输函数T中的Uri对象进行赋值,并转入步骤(57);否则,转入步骤(59);其中,传输函数T和数据操作函F数相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(57)获得Android组件类R的Uri信息,得到对应的Uri对象;
(58)判断传输函数T中的Uri对象与Android组件类R所对应的Uri对象是否匹配,记录匹配结果,并转入步骤(59);
(59)若第二判定信息中,还存在未与输入路径Entrypath进行匹配分析的输出路径,则转入步骤(56);否则,转入步骤(510);
(510)若第二判定信息中,还存在未处理的输入路径,则转入步骤(51);否则,转入步骤(511);
(511)若存在匹配成功的匹配结果,则第三方库间存在共谋行为;否则,第三方库间不存在共谋行为;检测结束。
更进一步地,步骤(53)中获取Android组件类R的IntentFilter信息,包括如下步骤:
(531)判定库文件的类型,若为aar文件,则转入步骤(532);否则,转入步骤(534);
(532)解压库文件,得到AndroidManifest.xml文件,然后从AndroidManifest.xml文件中提取Android组件类R的IntentFilter信息;
(533)若第一判定信息中,存在与Android组件类R相匹配的Android组件类G,则进一步从Android组件类G所使用的IntentFilter对象信息中提取Android组件类R的IntentFilter信息;转入步骤(535);其中,Android组件类R和Android组件类G相等,是指两个Android组件类所在的包名和类名均相同;
(534)若第一判定信息中,存在与Android组件类R相等的Android组件类G,则从Android组件类G所使用的IntentFilter对象信息中提取Android组件类R的IntentFilter信息;转入步骤(535);其中,Android组件类R和Android组件类G相等,是指两个Android组件类所在的包名和类名均相同;
(535)Android组件类R的IntentFilter信息提取完成。
更进一步地,步骤(57)获得Android组件类R的Uri信息,其方法为:若库文件为aar文件,则解压库文件,得到AndroidManifest.xml文件,然后从AndroidManifest.xml文件和第三方库的代码中获取Android组件类R的Uri信息;若库文件为jar文件,则直接从第三方库的代码中获取Android组件类R的Uri信息。
更进一步地,步骤(54)中判断传输函数T中的Intent对象与Android组件类R所对应的IntentFilter对象是否匹配,其方法为:若Intent对象的action成员等于IntentFilter对象的action成员、Intent对象的data成员等于IntentFilter对象的data成员,并且IntentFilter对象的category成员满足Intent对象的category成员的要求,则匹配;否则,不匹配。
更进一步地,步骤(58)中判断传输函数T中的Uri对象与Android组件类R所对应的Uri对象是否匹配,其方法为:若两个Uri对象相等,则匹配;否则,不匹配。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明所提供的Android第三方库间共谋行为检测方法,通过对库文件进行预处理,得到第三方库的基础信息,包括Android组件类、java类以及java类中可调用方法集合,然后利用第三方库的基础信息构建伪主函数,并进一步通过构建相应的调用流图和数据流图,完成信息的解析和提取,最终通过匹配分析得到检测结果。通过上述静态数据流分析技术与组件信息解析技术,本发明所提供的检测方法实现了对第三方库文件间共谋行为的检测。
(2)本发明所提供的Android第三方库间共谋行为检测方法,能够支持两种分析模式,从而能够针对不同的需求进行不同程度的分析;在快速分析模式下,针对Android组件类和java类构建相应的伪主函数,能够直接快速地分析库中存在的敏感路径;在深度分析模式下,针对Android组件类和java类中可调用方法集合构建相应的伪主函数,因而不仅能分析库中存在的敏感路径,还能够分析出是库中哪一个具体的可调用API触发了敏感行为。
(3)本发明所提供的Android第三方库间共谋行为检测方法,利用构建的伪主函数构建相应的数据流图,并通过对数据流图进行污点分析,提取第三方库中利用组件间通信传输敏感信息的风险通信路径,以及通过对风险通信路径的解析,提取到用于传输敏感信息的传输函数和用于接收敏感信息的Android组件类,实现了对Android第三方库的数据流分析,弥补了现有检测方法在这方面的缺失。
(4)本发明所提供的Android第三方库间共谋行为检测方法,不采用成对分析的方法,而是对每个Android第三方库单独进行分析,提取单个分析结果中的共谋行为特征,并通过关联分析,实现对共谋行为的连接匹配,因此,检测速度快。
(5)本发明所提供的Android第三方库间共谋行为检测方法,在对库文件进行预处理,以及提取Android组件类的Intent信息和Uri信息时,都会针对不同的文件格式采取不同的处理方式,因此对不同格式的库文件都能进行检测。
附图说明
图1为本发明实施例提供的Android第三方库间共谋行为检测方法框图;
图2为本发明实施例提供的Android第三方库间共谋行为检测方法流程图;
图3为本发明实施例提供的对库文件进行预处理的流程图;
图4为本发明实施例提供的构建伪主函数的流程图;
图5为本发明实施例提供的构建调用流图并提取信息的流程图;
图6为本发明实施例提供的构建数据流图并提取信息的流程图;
图7为本发明实施例提供的通过匹配分析得到检测结果的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在描述本发明的技术方案之前,先对相关的技术术语进行简单解释:
Android:基于Linux内核的移动操作系统,以其开放的特性在移动操作系统市场上拥有较高的占有率;
Android应用:运行在Android系统中的应用程序,主要由Java语言开发;
组件模型:Android应用程序逻辑结构模型,即Android应用程序主体上均由Activity、Service、Broadcast Receiver和Content Provider四类组件组成;
第三方库:应用程序开发者为引入某一功能模块而引用的第三方开发单位提供的代码库;
jar文件:Java Archive,即java归档文件;java文件编译后的class文件压缩包,不包含资源文件;用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用;开发者可以引入jar文件,调用里面封装好的功能;
aar文件:Android Archive,Android归档文件;Android特有的库项目的二进制归档文件,aar文件中包含所有资源,class、AndroidManifest文件以及res资源文件;
敏感数据:用户存储在系统中的个人数据,在移动设备中主要包括联系人信息、通话记录、地理位置信息和设备相关信息等;
应用程序编程接口(ApplicationProgramming Interface,API):指一些预先定义的函数,其主要目的是让应用程序开发人员调用一组例程功能,而无须考虑其底层的源代码或理解其内部工作机制的细节;
组件间通信:Android中特有的一种通信方式,利用Android的四种组件进行通信;
共谋:恶意行为拆分到了不同应用中,通过协作实现某种目的;
敏感路径:构成敏感信息通信的路径;
Exitpath:表示发送方中获取并发送敏感数据的输出路径;
Entrypath:表示接收并使用发送方的数据的输入路径;
Source点:发送方中的Source点指获取敏感信息的点,主要是敏感权限类的api,例如获取设备ID getDeviceId()、获取手机号getLine1Number()等;接收方中的Source点指接收exitpoint发送的消息的API,有时候也叫做entry point(并不是数据流分析的入口);
Sink点:发送方中的Sink点指敏感信息的发送点,使用sendBroadcast()等函数将source点获得的敏感信息发送出去,有时候也叫做exit point;接收方中的Sink点指从entry point接收到的消息的使用点,例如写入文件write()、发送消息sendTextMessage()等;
IC3算法:一种可以提取Android代码中使用到的Intent类、Uri类的各个属性值的算法;
Soot;一种java优化框架,可以将java、Android字节码代码转化成Baf、Jimple、Grimpe、Shimple等中间表示语言。
以下结合附图及实施例,对本发明进行进一步详细说明。
如图1、2所示,本发明提供的Android第三方库间共谋行为检测方法,包括如下步骤:
(1)获得分析模式和用于保存待检测的Android第三方库的库文件,并对库文件进行预处理,得到第三方库的基础信息;分析模式为快速分析模式或深度分析模式;基础信息包括Android组件类、java类以及java类中可调用方法集合;
如图3所示,对库文件进行预处理,包括如下步骤:
(11)输入待检测的文件,选择检测模式;
(12)分析待检测文件的文件类型,若为aar文件,则转入步骤(13);若为jar文件,则转入步骤(15)
(13)解压待检测文件至文件夹,包含classes.jar文件、res文件夹、AndroidManifest.xml文件等;
(14)利用aapt命令将解压后生成的res文件夹打包成resources.arsc文件;
(15)利用Soot工具将jar文件中的class文件代码转化成Jimple语言代码;jar文件为jar格式的库文件或由aar文件解压得到的classes.jar文件;
(16)解析Jimple代码,根据类所继承的父类获得Android组件类信息、java类信息,并根据权限等条件对类与方法进行筛选,筛选规则为:当类是Abstract或者Interface时删除;当类不是public权限,删除;当public类中的方法不是public权限,删除;因为具备这些特征的类或方法都不可能被开发者调用,不可能成为数据流的入口;最终得到第三方库的基础信息,包括Android组件类、java类以及java类中可调用方法集合;
(2)根据分析模式以及基础信息,构建伪主函数;
如图4所示,具体包括如下步骤:
(21)判断库文件的格式,如果是aar文件,则转入步骤(22);否则,转入步骤(24);
(22)对AndroidManifest.xml文件进行解析,提取文件中声明的组件信息;
(23)对resources.arsc文件进行解析,提取回调函数信息;
(24)判断分析模式类型,若为快速分析模式,则转入步骤(25);若为深度分析模式,则转入步骤(26);
(25)对于Android组件类,生成伪主函数dummyMainA,然后依次对Android组件类生命周期中各个回调函数进行建模,然后插入到伪主函数dummyMainA中;对于java类,生成伪主函数dummyMainJ,然后遍历java类中的函数,并依次将遍历到的函数插入到伪主函数dummyMainJ中;伪主函数构建完成;
(26)对于Android组件类,生成伪主函数dummyMainA,然后依次对Android组件类生命周期中各个回调函数进行建模,并插入到伪主函数dummyMainA中;对于java类中可调用方法集合,生成伪主函数dummyMainM,然后将java类中可调用方法集合中的方法依次插入到伪主函数dummyMainM中;伪主函数构建完成;
(3)根据伪主函数,获得第一判定信息;第一判定信息包括:第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在第三方库代码中注册的IntentFilter对象信息;
如图5所示,具体包括如下步骤:
(31)获取步骤(2)中构建的伪主函数;
(32)利用伪主函数构建待测文件的调用流图;
(33)利用每一个调用流图,通过IC3算法提取如下信息:第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在第三方库代码中注册的IntentFilter对象信息;
(35)存储解析到的信息;
(4)根据伪主函数,获得第二判定信息;第二判定信息包括:第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径,以及多条输出路径中每一条输出路径所对应的用于传输敏感信息的传输函数和多条输入路径中每一条输出路径所对应的用于收敏感信息的Android组件类;其中,输出路径为发送方中获取并发送敏感数据的路径,输入路径为接收并使用发送方数据的路径;
如图6所示,具体包括如下步骤:
(41)判断分析模式类型,若为快速分析模式,则转入步骤(42);若为深度分析模式,则转入步骤(43);
(42)获取步骤(2)中所构建的Android组件类和java类构建的伪主函数;
(43)获取步骤(2)中所构建的Android组件类和java类中可调用方法集合构建的伪主函数;
(44)对每一个伪主函数,分别利用其作为入口构建对应的数据流图;
(45)分别对每一个数据流图进行污点分析,提取第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径;
(46)分别解析多条输出路径中的每一条输出路径,得到对应的用于传输敏感信息的传输函数;分别解析多条输入路径中的每一条输入路径,得到对应的用于接收敏感信息的Android组件类;
(47)利用图算法,找到数据流图中输出路径的Source点和Sink点,以及输入路径的Source点和Sink点;
(48)利用向前溯源,分别找到输出路径Exitpath的Source点和Sink点之间的连接路径以及输入路径Entrypath的Source点和Sink点之间的连接路径;
(5)根据第一判定信息和第二判定信息进行匹配分析,得到共谋行为检测结果;
如图7所示,具体包括如下步骤:
(51)从第二判定信息中,选定一条未处理的输入路径Entrypath,判断输入路径Entrypath所对应的用于接收敏感信息的Android组件类R的组件类型,若为Activity、Service或BroadcastReceiver,则转入步骤(52);若为Content Provider,则转入步骤(56);
(52)从第二判定信息中,选定一条未与输入路径Entrypath进行匹配分析的输出路径Exitpath;若第一判定信息中,存在与输出路径Exitpath所对应的传输函数T相等的发送函数S,则利用发送函数S所使用的Intent对象信息对传输函数T中的Intent对象进行赋值,并转入步骤(53);否则,转入步骤(55);其中,传输函数T和发送函数S相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(53)获得Android组件类R的IntentFilter信息,得到对应的IntentFilter对象;
获得获得Android组件类R的IntentFilter信息,包括如下步骤:
(531)判定库文件的类型,若为aar文件,则转入步骤(532);否则,转入步骤(534);
(532)解压库文件,得到AndroidManifest.xml文件,然后从AndroidManifest.xml文件中提取Android组件类R的IntentFilter信息;
(533)若第一判定信息中,存在与Android组件类R相匹配的Android组件类G,则进一步从Android组件类G所使用的IntentFilter对象信息中提取Android组件类R的IntentFilter信息;转入步骤(535);其中,Android组件类R和Android组件类G相等,是指两个Android组件类所在的包名和类名均相同;
(534)若第一判定信息中,存在与Android组件类R相等的Android组件类G,则从Android组件类G所使用的IntentFilter对象信息中提取Android组件类R的IntentFilter信息;转入步骤(535);其中,Android组件类R和Android组件类G相等,是指两个Android组件类所在的包名和类名均相同;
(535)Android组件类R的IntentFilter信息提取完成
(54)判断传输函数T中的Intent对象与Android组件类R所对应的IntentFilter对象是否匹配,记录匹配结果,并转入步骤(55);
判断传输函数T中的Intent对象与Android组件类R所对应的IntentFilter对象是否匹配,其方法为:若Intent对象的action成员等于IntentFilter对象的action成员、Intent对象的data成员等于IntentFilter对象的data成员,并且IntentFilter对象的category成员满足Intent对象的category成员的要求,则匹配;否则,不匹配;
(55)若第二判定信息中,还存在未与输入路径Entrypath进行匹配分析的输出路径,则转入步骤(52);否则,转入步骤(510);
(56)从第二判定信息中,选定一条未与输入路径Entrypath进行匹配分析的输出路径Exitpath;若第一判定信息中,存在与输出路径Exitpath所对应的传输函数T相等的数据操作函数F,则利用数据操作函数F所使用的Uri对象信息对传输函数T中的Uri对象进行赋值,并转入步骤(57);否则,转入步骤(59);其中,传输函数T和数据操作函F数相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(57)获得Android组件类R的Uri信息,得到对应的Uri对象;
获得Android组件类R的Uri信息,其方法为:若库文件为aar文件,则解压库文件,得到AndroidManifest.xml文件,然后从AndroidManifest.xml文件和第三方库的代码中获取Android组件类R的Uri信息;若库文件为jar文件,则直接从第三方库的代码中获取Android组件类R的Uri信息;
(58)判断传输函数T中的Uri对象与Android组件类R所对应的Uri对象是否匹配,记录匹配结果,并转入步骤(59);
判断传输函数T中的Uri对象与Android组件类R所对应的Uri对象是否匹配,其方法为:若两个Uri对象相等,则匹配;否则,不匹配;
(59)若第二判定信息中,还存在未与输入路径Entrypath进行匹配分析的输出路径,则转入步骤(56);否则,转入步骤(510);
(510)若第二判定信息中,还存在未处理的输入路径,则转入步骤(51);否则,转入步骤(511);
(511)若存在匹配成功的匹配结果,则第三方库间存在共谋行为;否则,第三方库间不存在共谋行为;检测结束。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种Android第三方库间共谋行为检测方法,其特征在于,包括如下步骤:
(1)获得分析模式和用于保存待检测的Android第三方库的库文件,并对所述库文件进行预处理,得到所述第三方库的基础信息;所述分析模式为快速分析模式或深度分析模式;所述基础信息包括Android组件类、java类以及java类中可调用方法集合;
(2)根据所述分析模式以及所述基础信息,构建伪主函数;
(3)根据所述伪主函数,获得第一判定信息;所述第一判定信息包括:所述第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,所述第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及所述第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在所述第三方库代码中注册的IntentFilter对象信息;
(4)根据所述伪主函数,获得第二判定信息;所述第二判定信息包括:所述第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径,以及所述多条输出路径中每一条输出路径所对应的用于传输敏感信息的传输函数和所述多条输入路径中每一条输出路径所对应的用于收敏感信息的Android组件类;其中,所述输出路径为发送方中获取并发送敏感数据的路径,所述输入路径为接收并使用发送方数据的路径;
(5)根据所述第一判定信息和所述第二判定信息进行匹配分析,得到共谋行为检测结果。
2.如权利要求1所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(1)中的预处理包括如下步骤:
(11)分析所述库文件的文件格式,若为aar文件,则转入步骤(12);若为jar文件,则转入步骤(13);
(12)解压所述库文件,得到classes.jar文件,并转入步骤(13);
(13)解析jar文件,得到所述第三方库的基础信息,包括Android组件类、java类以及java类中可调用方法集合;所述jar文件为所述库文件或由所述库文件解压得到的classes.jar文件。
3.如权利要求1所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(2)包括如下步骤:
(21)判断所述分析模式的类型,若为快速分析模式,则转入步骤(22);若为深度分析模式,则转入步骤(23);
(22)对于Android组件类,生成伪主函数dummyMainA,然后依次对所述Android组件类生命周期中各个回调函数进行建模,然后插入到所述伪主函数dummyMainA中;对于所述java类,生成伪主函数dummyMainJ,然后遍历所述java类中的函数,并依次将遍历到的函数插入到所述伪主函数dummyMainJ中;伪主函数构建完成;
(23)对于Android组件类,生成伪主函数dummyMainA,然后依次对所述Android组件类生命周期中各个回调函数进行建模,并插入到所述伪主函数dummyMainA中;对于所述java类中可调用方法集合,生成伪主函数dummyMainM,然后将所述java类中可调用方法集合中的方法依次插入到所述伪主函数dummyMainM中;伪主函数构建完成。
4.如权利要求1所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(3)包括如下步骤:
(31)对每一个伪主函数,分别利用其作为入口构建对应的调用流图;
(32)分别利用每一个调用流图,提取如下信息:所述第三方库中使用Intent对象信息的发送函数和其中每一个发送函数所使用的Intent对象信息,所述第三方库中使用Uri对象信息的数据操作函数和其中每一个数据操作函数所使用的Uri对象信息,以及所述第三方库代码中使用IntentFilter对象信息的Android组件类和其中每一个Android组件类所使用的在所述第三方库代码中注册的IntentFilter对象信息。
5.如权利要求1所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(4)包括如下步骤:
(41)对每一个伪主函数,分别利用其作为入口构建对应的数据流图;
(42)分别对每一个数据流图进行污点分析,提取所述第三方库中利用组件间通信传输敏感信息的多条输出路径和多条输入路径;
(43)分别解析所述多条输出路径中的每一条输出路径,得到对应的用于传输敏感信息的传输函数;分别解析所述多条输入路径中的每一条输入路径,得到对应的用于接收敏感信息的Android组件类。
6.如权利要求1所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(5)包括如下步骤:
(51)从所述第二判定信息中,选定一条未处理的输入路径Entrypath,判断所述输入路径Entrypath所对应的用于接收敏感信息的Android组件类R的组件类型,若为Activity、Service或BroadcastReceiver,则转入步骤(52);若为Content Provider,则转入步骤(56);
(52)从所述第二判定信息中,选定一条未与所述输入路径Entrypath进行匹配分析的输出路径Exitpath;若所述第一判定信息中,存在与所述输出路径Exitpath所对应的传输函数T相等的发送函数S,则利用所述发送函数S所使用的Intent对象信息对所述传输函数T中的Intent对象进行赋值,并转入步骤(53);否则,转入步骤(55);其中,所述传输函数T和所述发送函数S相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(53)获得所述Android组件类R的IntentFilter信息,得到对应的IntentFilter对象;
(54)判断所述传输函数T中的Intent对象与所述Android组件类R所对应的IntentFilter对象是否匹配,记录匹配结果,并转入步骤(55);
(55)若所述第二判定信息中,还存在未与所述输入路径Entrypath进行匹配分析的输出路径,则转入步骤(52);否则,转入步骤(510);
(56)从所述第二判定信息中,选定一条未与所述输入路径Entrypath进行匹配分析的输出路径Exitpath;若所述第一判定信息中,存在与所述输出路径Exitpath所对应的传输函数T相等的数据操作函数F,则利用所述数据操作函数F所使用的Uri对象信息对所述传输函数T中的Uri对象进行赋值,并转入步骤(57);否则,转入步骤(59);其中,所述传输函数T和所述数据操作函数F相等,是指两个函数的程序语句、所在包名和所在类名均相同,且相同的程序语句所在的行号也相同;
(57)获得所述Android组件类R的Uri信息,得到对应的Uri对象;
(58)判断所述传输函数T中的Uri对象与所述Android组件类R所对应的Uri对象是否匹配,记录匹配结果,并转入步骤(59);
(59)若所述第二判定信息中,还存在未与所述输入路径Entrypath进行匹配分析的输出路径,则转入步骤(56);否则,转入步骤(510);
(510)若所述第二判定信息中,还存在未处理的输入路径,则转入步骤(51);否则,转入步骤(511);
(511)若存在匹配成功的匹配结果,则第三方库间存在共谋行为;否则,第三方库间不存在共谋行为;检测结束。
7.如权利要求6所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(53)中获取所述Android组件类R的IntentFilter信息,包括如下步骤:
(531)判定所述库文件的类型,若为aar文件,则转入步骤(532);否则,转入步骤(534);
(532)解压所述库文件,得到AndroidManifest.xml文件,然后从所述AndroidManifest.xml文件中提取所述Android组件类R的IntentFilter信息;
(533)若所述第一判定信息中,存在与所述Android组件类R相匹配的Android组件类G,则进一步从所述Android组件类G所使用的IntentFilter对象信息中提取所述Android组件类R的IntentFilter信息;转入步骤(535);其中,所述Android组件类R和所述Android组件类G相等,是指两个Android组件类所在的包名和类名均相同
(534)若所述第一判定信息中,存在与所述Android组件类R相等的Android组件类G,则从所述Android组件类G所使用的IntentFilter对象信息中提取所述Android组件类R的IntentFilter信息;转入步骤(535);其中,所述Android组件类R和所述Android组件类G相等,是指两个Android组件类所在的包名和类名均相同;
(535)所述Android组件类R的IntentFilter信息提取完成。
8.如权利要求6所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(57)获得所述Android组件类R的Uri信息,其方法为:若所述库文件为aar文件,则解压所述库文件,得到AndroidManifest.xml文件,然后从所述AndroidManifest.xml文件和所述第三方库的代码中获取所述Android组件类R的Uri信息;若所述库文件为jar文件,则直接从所述第三方库的代码中获取所述Android组件类R的Uri信息。
9.如权利要求6所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(54)中判断所述传输函数T中的Intent对象与所述Android组件类R所对应的IntentFilter对象是否匹配,其方法为:若Intent对象的action成员等于IntentFilter对象的action成员、Intent对象的data成员等于IntentFilter对象的data成员,并且IntentFilter对象的category成员满足Intent对象的category成员的要求,则匹配;否则,不匹配。
10.如权利要求6所述的Android第三方库间共谋行为检测方法,其特征在于,所述步骤(58)中判断所述传输函数T中的Uri对象与所述Android组件类R所对应的Uri对象是否匹配,其方法为:若两个Uri对象相等,则匹配;否则,不匹配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810482478.0A CN108710798B (zh) | 2018-05-18 | 2018-05-18 | 一种Android第三方库间共谋行为检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810482478.0A CN108710798B (zh) | 2018-05-18 | 2018-05-18 | 一种Android第三方库间共谋行为检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108710798A CN108710798A (zh) | 2018-10-26 |
CN108710798B true CN108710798B (zh) | 2020-05-19 |
Family
ID=63868299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810482478.0A Active CN108710798B (zh) | 2018-05-18 | 2018-05-18 | 一种Android第三方库间共谋行为检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108710798B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114491553B (zh) * | 2022-01-02 | 2024-05-14 | 西安电子科技大学 | 基于多粒度匹配的Android第三方功能库检测方法 |
CN114091028B (zh) * | 2022-01-19 | 2022-04-19 | 南京明博互联网安全创新研究院有限公司 | 一种基于数据流的Android应用信息泄露检测方法 |
CN114792006B (zh) * | 2022-03-29 | 2024-06-14 | 西安电子科技大学 | 基于lstm的安卓跨应用程序共谋安全分析方法及系统 |
CN116561808B (zh) * | 2023-07-05 | 2023-09-15 | 北京瑞莱智慧科技有限公司 | 安全多方计算的安全性确定方法、装置、设备和介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8726294B2 (en) * | 2010-10-01 | 2014-05-13 | Z124 | Cross-environment communication using application space API |
US9047463B2 (en) * | 2012-06-29 | 2015-06-02 | Sri International | Method and system for protecting data flow at a mobile device |
CN104252596B (zh) * | 2013-06-28 | 2019-01-25 | 贝壳网际(北京)安全技术有限公司 | 一种脚本病毒的监控方法及装置 |
CN104778408B (zh) * | 2015-04-15 | 2017-12-29 | 华中科技大学 | 一种基于Android的隐蔽通道攻击审计与侦测方法 |
CN106570399B (zh) * | 2016-09-30 | 2019-07-12 | 西北大学 | 一种跨App组件间隐私泄露的检测方法 |
CN107463847B (zh) * | 2017-09-18 | 2021-07-13 | 中国民航大学 | 一种Android系统下的权限共谋攻击检测方法 |
-
2018
- 2018-05-18 CN CN201810482478.0A patent/CN108710798B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108710798A (zh) | 2018-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108710798B (zh) | 一种Android第三方库间共谋行为检测方法 | |
CN110737899B (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN109753800B (zh) | 融合频繁项集与随机森林算法的Android恶意应用检测方法及系统 | |
CN106203113B (zh) | 安卓应用文件的隐私泄露监控方法 | |
CN105956474B (zh) | Android平台软件异常行为检测系统 | |
CN106161381B (zh) | 用于去混淆脚本化语言的设备和方法以及计算机可读介质 | |
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN107194251B (zh) | Android平台恶意应用检测方法及装置 | |
CN112688966A (zh) | webshell检测方法、装置、介质和设备 | |
CN113468524B (zh) | 基于rasp的机器学习模型安全检测方法 | |
CN111488573A (zh) | 链接库检测方法、装置、电子设备和计算机可读存储介质 | |
CN114328208A (zh) | 代码检测方法及装置、电子设备、存储介质 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
Rathi et al. | Droidmark: A tool for android malware detection using taint analysis and bayesian network | |
CN110727952A (zh) | 一种移动应用程序第三方库隐私收集辨识方法 | |
Lubuva et al. | A review of static malware detection for Android apps permission based on deep learning | |
CN106845235B (zh) | 一种基于机器学习方法的安卓平台回调函数检测方法 | |
CN108932199B (zh) | 一种基于用户界面分析的自动化污点分析系统 | |
CN114036526A (zh) | 漏洞测试方法、装置、计算机设备和存储介质 | |
Senanayake et al. | Labelled Vulnerability Dataset on Android source code (LVDAndro) to develop AI-based code vulnerability detection models. | |
CN116450533B (zh) | 用于应用程序的安全检测方法、装置、电子设备和介质 | |
CN116305120A (zh) | 一种双重验证的安卓恶意软件混合检测系统及方法 | |
CN110069926B (zh) | Android重打包应用的恶意代码定位方法、存储介质和终端 | |
CN114491530A (zh) | 基于抽象流图和图神经网络的安卓应用程序分类方法 | |
Zhan et al. | DroidExaminer: An Android Malware Hybrid Detection System Based on Ensemble Learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |