CN107526966A - 一种Android平台的复合污点传播追踪方法 - Google Patents

一种Android平台的复合污点传播追踪方法 Download PDF

Info

Publication number
CN107526966A
CN107526966A CN201610453185.0A CN201610453185A CN107526966A CN 107526966 A CN107526966 A CN 107526966A CN 201610453185 A CN201610453185 A CN 201610453185A CN 107526966 A CN107526966 A CN 107526966A
Authority
CN
China
Prior art keywords
stain
data
tainting
code
layer
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.)
Granted
Application number
CN201610453185.0A
Other languages
English (en)
Other versions
CN107526966B (zh
Inventor
杨轶
黄桦烽
和亮
闫佳
苏璞睿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201610453185.0A priority Critical patent/CN107526966B/zh
Publication of CN107526966A publication Critical patent/CN107526966A/zh
Application granted granted Critical
Publication of CN107526966B publication Critical patent/CN107526966B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种Android平台的复合污点传播追踪方法。本方法为:1)修改虚拟机层,在基类中添加污点传播标记记录;生成平台的操作系统镜像;2)利用硬件模拟器启动该操作系统镜像,运行该恶意代码;3)CPU执行指令时,若操作系统内核出现新的task_struct节点,且其中的进程名与该恶意代码进程的进程名一致,则当执行该节点中的进程时,将该进程执行产生的数据标记为污点数据,采用污点传播规则计算;4)当该进程调用JNI接口时,如果该JNI接口的调用过程的JNI输入参数是污点,则在传入原生代码层时,将该JNI输入参数传入的数据区域标记为污点,之后根据原生代码层的污点传播规则计算。本发明追踪准确度高。

Description

一种Android平台的复合污点传播追踪方法
技术领域
本发明属于网络安全技术领域,具体涉及一种在Android系统上跨Dalvik虚拟机和Linux原生代码展开污点传播追踪的方法。
背景技术
随着社会的不断发展和进步,Android手机在社会各个领域的应用越来越广泛。由于软件的复杂性和用户安全意识的不足,带有恶意代码或恶意功能的软件大量传播,造成的破坏日益严重。目前针对这些软件进行分析主要采用污点传播方法,但传统的污点传播通常单独针对于Android平台上的Dalvik虚拟机或Android的Linux原生代码,很难追踪跨越Dalvik虚拟机和Linux原生代码传递的信息。因此,提高该情况下的污点传播分析能力十分必要。
Android系统从恶意代码数据流追踪需求的角度观察,主要关注Linux系统、Dalvik虚拟机两个层次,现有Android平台污点传播分析方法代表性工作TaintDroid系统、Panda平台、DECAF平台等,通常都是针对于单一的目标设计,TaintDroid系统针对于Dalvik层的污点传播,Panda、DACAF平台则针对于原生代码层的污点传播。在很多情况下,恶意代码同时包含Dalvik层的执行体和原生代码层的执行体,二者之间相互传递信息,现有的分析方法很难准确、稳定的实现对此类恶意代码的机理分析。
当前的Android平台污点传播分析技术,通常使用如下的几种方法:
1.修改Dalvik虚拟机代码,在基类中添加污点标记记录,追踪Dalvik层污点数据使用;
Dalvik虚拟机中运行的程序均由基类派生得到,因而在基类中添加污点标记记录,则所有在Dalvik虚拟机中运行的变量、类、成员函数等都具有污点记录能力,能够进行污点传播分析。
但目前针对于Dalvik虚拟机的污点传播方法,均将监控目标设定在Dalvik虚拟机层次内,未监控Dalvik虚拟机和Linux原生代码层之间的通信过程。
2.在原生代码层监控系统的执行指令,追踪原生代码层污点数据使用;
在原生代码层监控系统的执行指令,主要方式是使用调试器附加到目标进程上,或者使用虚拟机从虚拟CPU层面,监控程序执行的每一条Linux原生代码指令,分析指令的操作内容,对其进行污点传播分析。
原生代码层的污点传播分析能够较为完整的监控进程执行的指令,但该分析方法丢失了Dalvik层程序的原始语义,也忽略了对Dalvik虚拟机和原生代码通信接口的分析,因而基于原生代码污点传播的数据分析Dalvik和原生代码的通信过程十分困难。
综上,目前Android系统恶意代码污点传播分析方法的主要缺陷在于:采用针对Dalvik虚拟机污点传播的方法,则无法监控原生代码层的操作、无法监控原生代码与Dalvik虚拟机的信息交换;采用针对于原生代码层的污点传播分析方法,无法有效分析Dalvik虚拟机层指令语义,也忽略了两个层次之间交换的数据。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种Android平台的复合污点传播追踪方法,通过构建虚拟化分析环境、修改Dalvik代码,实现Android平台上程序Dalvik层、原生代码层、跨层数据交换的全范围监控。
一种针对Android平台的复合污点传播追踪方法,其步骤如下:
1)下载Android源码,修改Dalvik虚拟机,在基类中添加污点传播标记记录,编译Android源代码,生成Android系统镜像。
2)配置镜像路径、硬件模拟器(此处使用的硬件模拟器为Android源码中自带的Qemu,对Qemu添加了进程监控、指令监控、系统调用监控等模块)的模拟内存大小及模拟CPU的类型;硬件模拟器加载步骤1)中自行编译得到的Android操作系统镜像,并启动该Android操作系统镜像;
3)使用adb软件将要分析的恶意代码放入到该硬件模拟器Qemu加载的Android操作系统镜像中,启动恶意代码进程并配置恶意代码进程的进程名作为监控启动条件;
4)该硬件模拟器的CPU执行指令时,查找Android底层Linux系统内核中的task_struct链表(该链表是Linux内核记录进程信息的结构,由task_struct节点组成,包含进程名、进程内存、句柄等相关信息的描述),检测其中是否出现新的task_struct节点,若出现新task_struct节点,则检测其中的进程名,若与要监控的进程一致,则当硬件模拟器的CPU上执行该task_struct对应的进程时,开始监控该进程执行的指令和系统调用;
5)监控恶意代码进程执行的读取通讯录、读取短信、接收网络数据等敏感操作的系统调用返回数据,将相关数据标记为污点,当恶意代码进程的后续操作中引用或修改了污点数据,则根据指令和系统调用的不同,采用不同的污点传播规则进行计算。
6)对于被监控进程在Dalvik层的数据操作都是基于java类实现的,由于在第一步在基类里已经添加了污点传播标记,可通过检测数据中的污点传播标记计算污点状态;
7)对于被监控进程在原生代码层的数据操作,通过分析每一条指令的源操作数和目的操作数计算污点状态;
8)判断被监控的进程在Dalvik层是否调用了JNI(Java Native Interface,Java原生程序接口)接口,如果调用了JNI接口,则拦截该接口的调用过程,提取JNI调用的参数和返回值;
9)分析JNI输入参数的污点状态(Dalvik层),如果是污点数据,则该JNI输入参数在传入原生代码层时,将该JNI输入参数传入的数据区域标记为污点,之后根据原生代码层的污点传播规则进行计算。
10)污点传播最终得到的结果包括:恶意代码程序中所有引用或操作了污点数据的指令与系统调用序列,该序列中包括每一条指令或系统调用引用或修改的污点数据地址和内容。
在Android系统中,如果程序有Dalvik和Linux原生代码两个部分,数据在Dalvik代码中表现为带有污点标记的对象,而在原生代码中表现为内存中的一个区域,因而针对原生代码需要自定义一个数据结构,与内存地址对应起来记录污点状态。该数据结构包括污点状态字段、污点数据地址字段和上一次修改污点数据的指令地址,其描述如下:
本发明的优点和积极效果如下:
本发明能够监控Dalvik虚拟机通过JNI向原生代码的通信过程,因而可以分析同时具有Dalvik层代码和原生层代码的程序,能够完整的监控数据在程序中的处理过程,具有更高的准确度和更好的分析能力。
附图说明
图1为本发明Android平台的复合污点传播分析方法流程图。
具体实施方式
下面结合附图详细说明本发明的技术方案:
如图1所示,一种Android平台的复合污点传播分析方法,包括步骤:
1、创建目标文件运行所需的操作系统镜像
本发明采用修改Dalvik虚拟机源代码的方式,在Dalvik虚拟机使用的java基类中加入污点标记(整型变量isTaint),如该数据为污点,isTaint设置为1,如果不是污点时isTaint设置为0。加入该标记后,当任意对象被从基类派生出来时,都会带有该污点标记。针对原生代码的内存,创建影子污点传播记录,记录每一个拜特Byte的污点状态。
2、配置并启动硬件模拟器
配置镜像路径,获取实际运行的操作系统镜像所在位置;配置硬件模拟器的模拟内存大小、系统启动时间及模拟CPU的类型。完成虚拟内存的初始化后,硬件模拟器加载上述操作系统镜像,并启动该操作系统。
3、虚拟CPU执行指令,并分析系统中运行的进程
每个进程在Android内核中都由一个task_struct块来表示,task_struct块中不仅包含了进程的PID、加载地址、进程名称等信息,还有很多指向其他相关结构数据结构的指针。在实际的执行过程中,对系统中的task_struct状态不断进行检查,若发现链表中出现新的task_struct,则分析其中的进程名,如果进程名与要监控的进程一致,则监控该进程执行的所有指令。
4、监控目标进程执行的JNI调用
Dalvik层的代码通过调用JNI接口来向原生代码层传递数据,本实例使用地址比较的方法识别JNI调用。在Android系统中,JNI接口以.so形式动态库提供的导出函数实现,在进程载入.so动态库时,系统自动分析该动态库的导出表,根据导出函数所对应的JNI接口识别要监控的函数。当函数被调用时,分析其传入参数,如果传入参数对应的java对象中isTaint标记为1,则将该传入参数对应的内存区域标记为污点,追踪后续原生代码展开污点传播计算。
本发明提出的针对Android平台的复合污点传播分析方法,对于本领域的技术人员而言,可以根据需要自己配置所要监控的接口,从而全面分析恶意代码的数据处理过程。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (10)

1.一种Android平台的复合污点传播追踪方法,其步骤为:
1)修改Android平台的虚拟机层,在基类中添加污点传播标记记录;生成该Android平台的Android操作系统镜像;
2)利用硬件模拟器加载并启动该Android操作系统镜像;
3)将恶意代码放入该硬件模拟器加载的Android操作系统镜像中,启动恶意代码进程运行该恶意代码;
4)该硬件模拟器的CPU执行指令时,查找Android操作系统内核中是否出现新的记录进程信息的task_struct节点;若出现新的task_struct节点,且其中的进程名与该恶意代码进程的进程名一致,则当硬件模拟器的CPU上执行该task_struct节点中的进程时,将该进程执行产生的数据标记为污点数据,当该进程对该污点数据在虚拟机层、原生代码层进行操作时采用污点传播规则进行计算,分别得到对应的虚拟机层的污点状态、原生代码层的污点状态;
5)当该进程在虚拟机层调用JNI接口时,拦截该JNI接口的调用过程,提取JNI调用的参数和返回值;如果JNI输入参数的污点状态是污点数据,则该JNI输入参数在传入原生代码层时,将该JNI输入参数传入的数据区域标记为污点,之后根据原生代码层的污点传播规则进行计算;最终得到该恶意代码中所有引用或操作了污点数据的指令与系统调用序列。
2.如权利要求1所述的方法,其特征在于,该系统调用序列中包括每一条指令引用或修改的污点数据地址和内容;每一系统调用引用或修改的污点数据地址和内容。
3.如权利要求1所述的方法,其特征在于,在该原生代码层中设置一用于记录污点状态的数据结构,其中,每一污点数据采用一该数据结构进行记录;该数据结构包括:污点状态字段、污点数据地址字段和上一次修改污点数据的指令地址。
4.如权利要求1或2或3所述的方法,其特征在于,使用adb软件将一恶意代码放入到该硬件模拟器加载的Android操作系统镜像中。
5.如权利要求1或2或3所述的方法,其特征在于,步骤3)中,启动该恶意代码进程并将其进程名作为监控启动条件。
6.如权利要求1或2或3所述的方法,其特征在于,步骤4)中,该进程执行产生的数据包括:该进程读取通讯录返回的数据、读取短信返回的数据以及接收网络数据操作返回的数据。
7.如权利要求1所述的方法,其特征在于,得到虚拟机层的污点状态的方法为:对于该进程对该污点数据在虚拟机层的数据操作,通过检测数据中的污点传播标记计算污点状态。
8.如权利要求1所述的方法,其特征在于,得到原生代码层的污点状态的方法为:对于该进程对污点数据在原生代码层的数据操作,通过分析每一条指令的源操作数和目的操作数计算污点状态。
9.如权利要求1或7或8所述的方法,其特征在于,所述数据操作包括引用污点数据、修改污点数据。
10.如权利要求1或2或3所述的方法,其特征在于,该task_struct节点包含的信息包括:进程名、进程内存、句柄。
CN201610453185.0A 2016-06-21 2016-06-21 一种Android平台的复合污点传播追踪方法 Active CN107526966B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610453185.0A CN107526966B (zh) 2016-06-21 2016-06-21 一种Android平台的复合污点传播追踪方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610453185.0A CN107526966B (zh) 2016-06-21 2016-06-21 一种Android平台的复合污点传播追踪方法

Publications (2)

Publication Number Publication Date
CN107526966A true CN107526966A (zh) 2017-12-29
CN107526966B CN107526966B (zh) 2020-03-13

Family

ID=60735135

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610453185.0A Active CN107526966B (zh) 2016-06-21 2016-06-21 一种Android平台的复合污点传播追踪方法

Country Status (1)

Country Link
CN (1) CN107526966B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108229172A (zh) * 2018-02-13 2018-06-29 国家计算机网络与信息安全管理中心 基于windows平台的跨层次数据流追踪方法
CN112632547A (zh) * 2020-12-31 2021-04-09 中国农业银行股份有限公司 一种数据处理方法和相关装置
CN112988563A (zh) * 2019-12-18 2021-06-18 中国电信股份有限公司 污点动态分析方法和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102592078A (zh) * 2011-12-23 2012-07-18 中国人民解放军国防科学技术大学 一种提取函数调用序列特征识别恶意软件自主传播的方法
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法
CN103729595A (zh) * 2014-01-02 2014-04-16 东南大学 一种Android应用程序隐私数据泄露离线检测方法
US20150264065A1 (en) * 2009-12-15 2015-09-17 Intel Corporation Sensitive data tracking using dynamic taint analysis
CN105279091A (zh) * 2015-11-19 2016-01-27 中国人民大学 一种基于动态污点分析的按需跟踪方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150264065A1 (en) * 2009-12-15 2015-09-17 Intel Corporation Sensitive data tracking using dynamic taint analysis
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法
CN102592078A (zh) * 2011-12-23 2012-07-18 中国人民解放军国防科学技术大学 一种提取函数调用序列特征识别恶意软件自主传播的方法
CN103729595A (zh) * 2014-01-02 2014-04-16 东南大学 一种Android应用程序隐私数据泄露离线检测方法
CN105279091A (zh) * 2015-11-19 2016-01-27 中国人民大学 一种基于动态污点分析的按需跟踪方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108229172A (zh) * 2018-02-13 2018-06-29 国家计算机网络与信息安全管理中心 基于windows平台的跨层次数据流追踪方法
CN112988563A (zh) * 2019-12-18 2021-06-18 中国电信股份有限公司 污点动态分析方法和装置
CN112632547A (zh) * 2020-12-31 2021-04-09 中国农业银行股份有限公司 一种数据处理方法和相关装置

Also Published As

Publication number Publication date
CN107526966B (zh) 2020-03-13

Similar Documents

Publication Publication Date Title
Feist et al. Statically detecting use after free on binary code
Lin et al. Benchmark dalvik and native code for android system
CN102622536B (zh) 一种恶意代码捕获方法
CN102243608B (zh) 基于全局数据结构描述的软件安全测试方法
Griebe et al. A model-based approach to test automation for context-aware mobile applications
CN105550594A (zh) 安卓应用文件的安全性检测方法
CN103559123B (zh) 基于VxWorks操作系统的函数调用栈分析方法及装置
CN100492387C (zh) 基于Keil C51的软件保护开发的方法和系统
CN110837472B (zh) 一种浏览器测试方法、装置及计算机设备
CN107526966A (zh) 一种Android平台的复合污点传播追踪方法
Craig et al. PyPANDA: taming the pandamonium of whole system dynamic analysis
US8412744B2 (en) Visualization of runtime analysis across dynamic boundaries
Singh et al. Parallel chopped symbolic execution
Suri et al. Cross-platform empirical analysis of mobile application development frameworks: Kotlin, react native and flutter
Chen et al. Test generation for embedded executables via concolic execution in a real environment
US20110265050A1 (en) Representing binary code as a circuit
CN107729747A (zh) 一种面向二进制程序的堆溢出检测方法
WO2023206873A1 (zh) 基于抽象语法树的代码检测方法、装置、设备及存储介质
CN110688198A (zh) 系统调用方法、装置和电子设备
Singh et al. Detecting intelligent malware on dynamic Android analysis environments
CN113378182B (zh) 一种提权漏洞检测方法、装置、设备及介质
US11886589B2 (en) Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method
CN108229172A (zh) 基于windows平台的跨层次数据流追踪方法
CN111796911B (zh) 一种面向云平台虚拟设备的攻击检测方法及电子装置
Kashima et al. Comparison of backward slicing techniques for java

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