CN107330345B - 一种检测隐私数据泄露的方法和装置 - Google Patents
一种检测隐私数据泄露的方法和装置 Download PDFInfo
- Publication number
- CN107330345B CN107330345B CN201710543518.3A CN201710543518A CN107330345B CN 107330345 B CN107330345 B CN 107330345B CN 201710543518 A CN201710543518 A CN 201710543518A CN 107330345 B CN107330345 B CN 107330345B
- Authority
- CN
- China
- Prior art keywords
- taint
- variable
- data
- private data
- mark
- 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/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- 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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Bioethics (AREA)
- Databases & Information Systems (AREA)
- Medical Informatics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种检测隐私数据泄露的方法和装置,应用于Android移动终端中,包括:为Android移动终端中隐私数据生成的变量添加对应的污点标记,将变量及其污点标记保存到根据变量的类型对应分配的存储空间中;按照对包含控制信息的控制流分析后设定的污点传播规则,追踪变量对应的污点标记的传播;在预设的汇集点检测传输的数据是否带有污点标记,是则确定应用存在泄漏隐私数据的行为,否则确定应用不存在泄漏隐私数据的行为。本发明实施例的检测隐私数据泄露的方法和装置,提高了隐私数据泄露检测的准确性,保证了用户的信息安全。
Description
技术领域
本发明涉及信息安全技术领域,具体涉及一种检测隐私数据泄露的方法和装置。
背景技术
随着移动信息技术的发展,Android用户数量和Android应用的数量也随之迅猛增长,在这些Android应用中,有些应用是通过获取用户的隐私数据来获利的恶意应用。而且,用户的安全意识较为薄弱,例如大多数用户会将自己的隐私数据存放在智能手机中,有数据显示,90%以上的Android应用都会去获取用户的隐私数据,有些即便是非恶意的Android应用但也并不代表一定是安全的。另外,Android应用本身存在着很多漏洞,也为不法分子获取用户的隐私数据提供了可乘之机。以上种种原因导致了目前用户隐私数据泄露现象较为严重,因此有必要提出一种对Android应用隐私数据泄露行为进行检测的技术方案。
发明内容
本发明提供了一种检测隐私数据泄露的方法和装置,提高隐私数据检测的准确性,保障信息安全。
根据本发明的一个方面,提供了一种检测隐私数据泄露的方法,应用于Android移动终端中,包括:
为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
按照对包含控制信息的控制流分析后制定的污点传播规则,追踪所述变量对应的污点标记的传播;
在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为。
根据本发明的另一个方面,提供了一种检测隐私数据泄露的装置,应用于Android移动终端中,包括:
标记添加模块,用于为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
存储模块,用于将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
传播模块,用于按照对包含控制信息的控制流分析后制定的污点传播规则,追踪所述变量对应的污点标记的传播;
检测模块,用于在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为。
本发明的有益效果是:本发明实施例的检测隐私数据泄露的方法和装置,为Android移动终端中的隐私数据生成的变量添加污点标记,根据本实施例设定的污点传播规则,追踪变量的传播,最后在汇集点检测是否存在带有污点标记的数据,如果存在则说明Android移动终端中的应用泄露了隐私数据,如此,实现了在变量层次对Android移动终端中的应用的隐私数据泄露行为的检测,并根据控制流攻击的特点预设污点传播规则,提高了隐私数据泄露检测的准确性,防止应用绕过污点追踪而将隐私数据泄露出去,保证了用户的信息安全。
附图说明
图1是本发明一个实施例的检测隐私数据泄露的方法的流程图;
图2是本发明另一个实施例的检测隐私数据泄露的方法的流程示意图;
图3是一种控制流攻击的控制流程图;
图4是另一种控制流攻击的控制流程图;
图5是又一种控制流攻击的控制流程图;
图6是本发明一个实施例的检测隐私数据泄露的装置的框图。
具体实施方式
本发明针对现有Android应用泄露用户隐私数据的问题,提供了一种对隐私数据泄露行为进行检测的技术方案,以提高信息安全。本发明实施例的技术方案基于污点分析技术,具体的是基于动态污点分析技术。
为便于理解,这里先对本发明实施例中出现的技术名词进行简要解释说明。
污点分析:污点分析是一种追踪并分析污点信息在应用程序中流动的技术。它的主要原理是将来自于网络、文件等非信任渠道的数据标记为“被污染的”,则作用在这些数据上的一系列算术和逻辑操作而新生成的数据也会继承源数据的“被污染的”属性。通过对这些数据属性进行分析,便能得出应用程序的某些特性。根据污点分析时是否运行程序,可以将其分为静态污点分析和动态污点分析。
静态污点分析:静态污点分析是在不运行程序的情况下,通过变量的数据依赖关系分析污染数据是否能传播到污点汇集点。静态污点分析能快速定位污点在程序中的所有出现情况,但是其缺点是精度较低,因此需要人工对分析结果进行复查确认。此外,静态污点分析存在数据流传播中断,数据流传递困难等问题。
动态污点分析:动态污点分析是近年来逐渐流行的一种污点分析技术。该分析技术是在程序运行的基础上,对数据流或控制流进行监控,从而实现对数据在内存中的显式传播、数据误用等的追踪和检测。动态污点分析可以从流和使用范围两个方面来分类。根据流的不同,可以分为基于数据流的分析和基于控制流的分析,或者分为基于显式流的分析和基于隐式流的分析。在分析程序中的信息流时,通常将通过数据依赖传播的信息流称为显式流,将通过控制依赖传播的信息流称为隐式流。因此,隐式流分析即是对控制依赖条件下的控制流分析,显式流分析即是对数据依赖条件下的数据流分析。
根据使用范围的不同,可以分为用户进程级的动态污点分析和全系统级的动态污点分析。
欠污染:欠污染是指由于没有对隐式流污点传播进行适当的处理,导致本应被标记的变量没有被标记。
过污染:过污染是指所标记的污点数量过多而导致污点变量大量扩散。
与静态污点分析相比,动态污点分析因其具有程序动态运行时的信息,所以其精度较高。但是动态污点分析也存在一些不足,本申请的发明人发现动态污点分析大多只考虑数据流,未考虑控制流的影响,存在欠污染和过污染的问题;而且,动态污点分析大多无法检测控制流攻击,导致攻击者可以通过控制流攻击来绕过污点的传播和监控,从而窃取用户的隐私数据。
对此,本发明一个实施例提供了一种检测隐私数据泄露的方法,该方法的技术构思在于:首先为隐私数据添加污点标记,然后在应用程序运行的过程中,对污染数据进行污点传播。经过一系列污染处理后,最终到达汇集点,当污点传播到汇集点后,在汇集点对数据进行检测,如果发现有污染数据,则表示有污染数据发送出去了,说明此应用程序存在隐私泄露问题;反之,则说明此应用程序不存在隐私泄露的问题。
参见图1,本实施例的检测隐私数据泄露的方法应用于Android移动终端(即安装了Android操作系统的移动终端,例如,智能手机等)中,包括如下步骤:
步骤S101,为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
步骤S102,将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
步骤S103,按照对包含控制信息的控制流分析后制定的污点传播规则,追踪所述变量对应的污点标记的传播;
步骤S104,在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为。
由图1所示可知,本实施例的方法是通过分析控制流攻击的特点预先制定污点传播规则,并实现污点传播规则,监控控制流攻击,解决了Android应用通过控制流攻击泄露用户隐私数据的问题,提高了信息安全。
本实施例的方法主要包括三个部分,分别为:污点标记、污点传播,污点汇集。图2是本发明另一个实施例的检测隐私数据泄露的方法的流程示意图,本实施例的检测隐私数据泄露的方法是在TaintDroid工具的基础上实现的,TaintDroid工具提供了四层污点追踪机制且这四层污点追踪机制实现逻辑相对独立,从上至下分别为:消息级的污点追踪、变量级的污点追踪、方法级的污点追踪和文件级的污点追踪。由于本实施例主要解决的是控制流的攻击可能绕过污点的传播和监控,从而窃取用户的隐私数据的问题,而控制流的攻击发生在变量级,因此,这里以变量级的污点追踪即在DVM层次的污点传播和追踪为例进行说明。
具体的,本实施例的方法的实现框架是在Android的虚拟机DVM(Dalvik VirtualMachine)上添加控制流追踪功能,以实现对控制流的追踪。通过制定污点传播规则,实现DVM解释器的修改,完成污点的传播追踪。追踪的具体方法是,对隐私数据进行声明,获取声明的污点信息,然后通过修改DVM帧栈将污点信息存储在分配的存储空间,最后按照制定的污点传播规则进行污点传播。传播完成之后DVM层次的污点传播就完成了,由上可知,本发明实施例的检测隐私数据泄露的方法是在DVM层的控制流追踪的动态污点分析方法。
参见图2,流程开始,检测隐私数据泄露的方法先执行步骤S201,
步骤S201,污点标记:为移动终端中的隐私数据添加污点标记;然后执行步骤S202。
为了对Android移动终端中的应用程序进行监控,首先,需要添加污点标记,污点标记是污点传播的前提,对隐私数据的标记决定了污点传播的粒度,并且污染源选取和污点标记添加的方法影响着整个污点传播的过程。由于系统、编程语言以及信息类型不同,隐私数据泄露的检测方式不同进而污点标记方法也不同。
污点标记方法主要包括三种,第一种是使用启发式的策略进行标记。即,把来自程序外部输入的数据统称为“污点”数据,保守地认为这些数据有可能包含恶意的攻击数据。第二种是手动添加,即根据具体应用程序调用的API或者重要的数据类型,手动标记数据源和汇集点,这种方式可以根据检测的类型自由添加,对Android应用的监控比较灵活。第三种是自动添加,使用统计或机器学习技术自动地识别和标记数据源及汇集点。为了灵活的监控用户的隐私数据,本实施例采用第二种添加污点标记的方法,即,根据具体应用程序调用的API或者重要的数据类型,手动标记数据源和汇集点。
为了将污点来源添加至Android框架,将对存储用户隐私数据的信息数据库或网络出口等存储着用户隐私数据的地方添加污点标记。
本实施例中,对用户隐私数据添加污点标记的具体实现是:通过修改隐私数据调用的API(Application Programming Interface,应用程序编程接口)来添加,即,在API中调用添加污点标记的方法,从而实现隐私数据污点标记的添加。实际应用中,用户隐私数据多种多样,例如,用户的电话号码,GPS(Global Positioning System,全球定位系统)定位信息,相机,计算器,信息,IMEI(International Mobile Equipment Identity,国际移动设备身份码),IMSI(International Mobile Subscriber Identification Number,国际移动用户识别码)等,为了对不同类型的隐私数据进行标记,本实施例为各种类型(包括整型,浮点型,字符串型以及数组)的隐私数据提供了对应的添加污点标记的方法。当隐私数据被Android移动终端中的应用程序获取时,隐私数据的API会被调用,从而修改过的API就会调用相应类型的添加污点标记的方法,为隐私数据添加污点标记。由于本实施例是在变量层次对污点传播的分析,因此这里具体是对Android移动终端中应用调用的隐私数据生成的变量添加对应的污点标记,得到污点变量。
在追踪污点的传播过程中,需要对添加污点标记的污点信息进行存储。本实施例中根据污点变量的类型进行存储。DVM提供了五种类型的变量,分别为:数组,类的静态变量,类的字段,局部变量和方法的参数。
(1)对于数组类型的变量,考虑资源消耗,本实施例采用粗粒度的污点存储方式,即,为每个数组只存储一个污点标记,以提高运行的效率,降低Android的资源消耗。
(2)对于局部变量类型的污点变量,局部变量在DVM上是通过DVM的寄存器来存储的。为了存储局部变量的污点标记,本实施例对DVM的结构进行修改,以进行存储空间的倍增,然后按照交叉存储污点变量的值和污点标记的信息的方式进行存储。
Out 0 |
VM goop |
v0=local0 |
v0taint tag |
v1=local1 |
v1taint tag |
v2=local2 |
v2taint tag |
表1
表1是污点变量为局部变量类型时的存储示意表,在局部变量这一类型分配到的存储空间中将变量(例如v0)的值(local0)和污点标记v0taint tag交叉存储(一个变量的值和对应的污点标记存储在一块,然后存储下一个变量的值和对应的污点标记)。
(3)对于类字段这一类型的污点变量,根据类的数据结构,也采用存储空间倍增的方式进行存储,将类字段的变量的值和污点标记进行交叉存储(先存储一个变量的值和所对应的污点标记,再存储下一个变量的值和所对应的污点标记),实现类字段的污点标记的存储。
(4)对于类的静态变量这一类型的污点变量,存储方式和前述(3)中类字段的污点变量的存储方式相同,不再重复。
(5)对于方法的参数的污点变量,为了实现对方法的参数的污点标记的存储,本实施例采用存储空间倍增的方式,将方法的参数(即变量的值)和污点的标记进行相邻的存储(各个变量的值存储在一块,各个变量的污点标记存储在另一块)。
Out 0 |
VM goop |
v0=local0 |
v1=local1 |
v2=local2 |
v0taint tag |
v1taint tag |
v2taint tag |
表2
表2是污点变量为方法的参数时的存储示意表,在方法的参数这一类型分配到的存储空间中将变量(例如v0)的值(local0)和污点标记v0taint tag相邻存储(各个变量的值存储在一块,各个变量的污点标记存储在另一块)。
以上是各种类型污点变量的存储方式。需要说明的是,为了实现污点变量及其污点标记的存储,本实施例对DVM的结构进行修改,实现DVM帧栈的倍增,最终完成污点标记的存储。
步骤S202,污点传播,制定污点传播规则,对污点变量进行追踪和传播,然后执行步骤S203,
污点传播是动态污点分析中最重要的一环,污点传播的好坏决定着污点分析的准确性进而影响着隐私数据泄露检测的精度。污点的传播主要有两个处理,污染处理和去污染处理。当污染数据(即,前述污点变量以及与前述污点变量进行逻辑运算的数据)进行传递的时候,符合污点传播规则就进行污染处理,如果污染数据进行了一些安全处理(例如进行了数据加密处理),可以被应用程序使用,则进行去污染处理。在污点传播的过程中,根据污染处理的不同会对污点数据的污点标记的值进行对应修改。另外,污点处理要依据污点的传播规则进行,污点的传播规则决定了污点分析技术的有效性。但是目前多数动态污点分析技术,没有考虑控制流的影响,只是针对于数据流的污点传播制定了传播规则,所以当遇到控制流攻击时,动态污点分析技术无法检测到,造成了欠污染的问题。
为了解决这一问题,本实施例针对控制流攻击制定污点传播规则,通过该污点传播规则来追踪污点传播过程中的控制流的攻击,解决由控制流攻击绕过污点追踪导致的欠污染的问题。
具体的,步骤S202可以细分为两个子步骤,分别为:步骤S2021,控制流分析和步骤S2022,制定污点传播规则,以下具体说明。
步骤S2021控制流分析包括控制流攻击方式分析和污染情况分析。
为了制定合理的污点传播规则,首先要对控制流攻击进行分析,通过对控制流攻击的分析得到其攻击方式,然后分析其污点传播情况,从中发现其污点传播规则的不足之处。最后根据其不足之处,建立污点传播模型,制定合理的污点传播规则,完成对控制流攻击的追踪。
控制流攻击是指利用存在预期外的控制流而使得预设的安全机制被绕过,以窃取用户的隐私数据,导致用户隐私泄露的攻击方式。如果能找到程序某个入口点和敏感API调用点之间存在控制流上的可达路径,那么就可以利用此控制流来绕过安全机制以窃取隐私数据。在Android应用中这是很常见的一种攻击方式。本申请的发明人发现:面对这类控制流攻击,如果未考虑控制流的动态污点分析是无法进行污点追踪的,而目前很多工具都存在此问题,例如,TaintDroid工具。为了解决该问题需要考虑控制流的影响,并对控制流攻击进行分析。但是,由于控制流攻击多种多样,考虑到效率和性能,本发明实施例对三种常用的控制流攻击进行了分析,并基于对这三种常用的控制流攻击的分析制定污点传播规则。
第一种控制流攻击的分析与污染分析
第一种控制流攻击的逻辑是:变量A中保存着隐私数据,攻击者通过n与a的对比来获取隐私数据A中的值,其中,a是属于A中的一个元素,n是攻击者选择的测试值。通过循环的比较得到并保存A的值,然后将包含隐私数据的B发送出去,从而达到控制流攻击的目的。
参见图3,在这种控制流攻击中,变量A包含私有数据(即隐私数据)。攻击者试图通过比较来获得A的每个字符,具体的,攻击者通过对比一个n与a的值可以获取a的值,并将n的值保存在B。在循环的最后,攻击者成功知道了A中正确的值。最后将B发送出去,B中存储着私有数据,这就造成了隐私数据的泄露。
污染分析如下:由于A为污点变量,即A是污染的,A→a,A的数据流流向a,则a为污染的,根据循环体的条件分支(即控制信息):“if(n==a)”,虽然n同a进行了比较,但是由于两者不存在数据流的传递,所以n是未污染的,进一步则B是未污染的,B+n是未污染的,最后得出B是未污染的结论。如此,攻击者通过控制流的攻击逃过了污点的追踪,造成了隐私数据的泄露。
由上可知,在这种控制流攻击方式中,虽然n和a之间没有进行数据的显式传递,但是通过比较进行了隐式的数据流传递,导致了隐私数据被窃取。这种攻击方式绕过污点追踪的方法就是通过条件分支的控制依赖,绕过污点的追踪,进而获取了用户的隐私数据。
第二种控制流攻击分析与污染分析
第二种控制流攻击的逻辑是:隐私数据保存在变量A中。对A中的字符a,攻击者将其转换为整数。在下一个循环中,攻击者试图通过递增来得到整数的值,然后将整数转换为字符并连接到字符串B中。B中的所有字符连接起来能求出A的值,因此,B包含隐私数据。然后B被发送出去了,这就造成了隐私数据的泄露。
参见图4,在这种控制流攻击中,变量A保存着隐私数据,字符a属于A,则a也保存着隐私数据,将a的类型转化成int(整数)类型保存在i中,通过循环比较b获取i的值,将整数类型的b转换为char(字符)类型,并连接到字符串B保存,最后将B发送出去。由于B包含了隐私数据,而B被发送出去了,所以造成了隐私数据的泄露。
参见图4,这种控制流攻击的污染分析如下:A为污染的,A的数据流流向a,即A→a,a为污染的,a的数据流流向i,即a→i,则i为污染的,b与a之间没有数据流传递则b是未污染的,对于循环“for j=0to i do b←b+1”,虽然循环的判断条件中(即控制信息)含有污染数据,但是循环体中没有进行污染数据的传递,所以b是未污染的,进一步则IntToChar(b)是未污染的,B+IntToChar(b)是未污染的,最后得出B是未污染的结论。如此,攻击者通过控制流的攻击逃过了污点的追踪,造成了隐私数据的泄露。
根据污染情况分析和控制流程图4可知,在进行循环条件判断时,虽然两个变量b和a没有进行数据流的显式传递,但是通过比较进行了隐式的数据流传递,导致了隐私数据被窃取。这种攻击方式绕过污点追踪的方法就是通过循环的判断条件的控制依赖,绕过污点的追踪,来获取用户隐私数据。
第三种控制流攻击分析与污染分析
第三种控制流攻击的逻辑和第二种控制流攻击的逻辑类似,也是通过将变量A中的隐私数据的值a转化为char类型,并通过每次与b比较,将A的值转化为B表示的字符串,然后再将B发送出去。由于B中包含了隐私数据,而B被发送出去了,因此造成了隐私数据的泄露。
参见图5,在这种控制流攻击中,变量A保存着隐私数据,a属于A则a也保存着隐私数据,将a的类型char转化成int(整数)类型赋值给i,通过循环比较b获取i的值,将整数类型的b转换为char(字符)类型,并连接到字符串B保存,最后将B发送出去。由于B包含了隐私数据A,而B被发送出去了,所以造成了隐私数据的泄露。
参见图5,这种控制流攻击的污染分析如下:A为污染的,A的数据流流向a,即A→a,则a为污染的,a的数据流流向i,即a→i,则i为污染的,对于循环“while b<i do try{thrownew Exception()}catch(Exception e){b←b+1}”,虽然循环的判断条件中(即控制信息)含有污染数据,但是循环体中没有进行污染数据的传递,所以b是未污染的,进一步的,B和IntToChar(b)是未污染的,则B是未污染的,最后逃过了污点的追踪。
根据污染情况分析和控制流程图5可知,在进行循环条件判断时,虽然两个变量b和a没有进行数据流的显式传递,但是通过比较进行了隐式的数据流传递,导致了隐私数据被窃取。这种攻击方式绕过污点追踪的方法就是通过循环的判断条件的控制依赖,绕过污点的追踪,来获取用户隐私数据。
以上三种控制流攻击方式都是通过控制分支(即控制信息),来绕过污点追踪的。但TaintDroid工具没有对控制分支依赖制定污点传播规则,所以在进行污点传播的过程中,无法追踪这三种控制流攻击。针对TaintDroid未考虑控制流的影响,而无法追踪控制流攻击的不足,本发明提出隐私数据的检测方法,通过对上述三种控制流攻击的分析,制定针对控制流分支的污点传播规则。下面将详细介绍S2022制定污点传播规则。
首先,建立污点传播模型。
为了制定传播规则,建立以下污点传播模型。
定义1污点传播模型:一个污点传播模型由四元组表示:
M=<O,T,∪,→>
其中:
O表示一组存储对象,包括变量,文件等,本实施例中为变量;
T表示对象污染情况的集合,例如设一个对象为A,则T(A)表示此对象的污染情况;
∪是特殊的符号,表示组合;
→表示数据流的传递。
基于此污点传播模型可以得出:
A→B表示A的数据流向B;
B→A表示B的数据流向A;
T(A)∪T(B)表示A的污点信息与B的污点信息进行组合并保存,如果T(A)或者T(B)中,有一个的值为true,则T(A)∪T(B)的值为true。
根据建立的污点传播模型,则有以下基础规则:
基础规则1:当数据流由A对象流向B对象时,即存在A→B,则
T(A)→T(B) (1)
基础规则2:当数据流由B对象流向A对象时,即存在B→A,则
T(B)→T(A) (2)
基础规则3:当数据流由B对象流向A对象,数据流由C对象流向A对象,并进行交运算时,即存在(T(B)→T(A))∩(T(C)→T(A)),则
(T(C)∪T(B))→T(A) (3)
其次,制定污点传播规则。
通过前述对控制流攻击的分析,发现这三种攻击都是通过条件语句和循环条件判断,遍历A的取值来获得A的隐私数据。它们都是通过条件依赖来绕过追踪,即通过隐式数据流传递获得隐私数据,所以要想对这些控制流攻击进行监控就需要对依赖的条件分支进行追踪。
这里,若对象为A,则A的污染情况为T(A)。据此可知:
定义2:依赖条件分支,如果对象A依赖于分支条件con,则表示分支条件与对象A之间存在隐式数据流,表示为:con→A。其中条件分支为con,条件分支的污染情况为T(con)。
定义3:条件分支数据流,如果条件分支进行的数据流为flow,数据流flow的结果为流向A,则表示为:flow→A。其中条件分支的数据流为flow,其污染情况为:T(flow)。
定义4:条件分支:Bra(A)。
Bra(A)有两种情况,即执行和不执行。当执行时,Bra(A)为true,当不执行时,Bra(A)为false。
定义5:关系:A⊥B。
若A和B均为真,则A⊥B可表示为A∧B若A和B中A为真、B为假(或A为假、B为真),则A⊥B可表示为A(或B)。
根据条件分支的两种情况以及前述基础规则,可以制定如下两种污点传播规则。
第一污点传播规则:如果A依赖于条件分支,并且这个条件分支的数据流的结果是流向A的,当执行这个条件分支时,污染的传递规则为:
T(con)∪T(flow)→T(A) (4)
该污点传播规则可以由前述建立的污点传播模型和基础规则推出,其证明过程如下:
证明1:第一污点传播规则的使用条件是A依赖于条件分支,并且这个条件分支的数据流的结果是流向A的,而且这个条件分支是被执行的,则满足的条件可以表示为:
(con→A)⊥((flow→A)∧Bra(A))
因为条件分支一定被执行,所以满足的条件可以转化为:
(con→A)∧(flow→A)
根据基础规则(1),则A的污染情况为:
(T(con)→T(A))∧(T(flow)→T(A))
再根据基础规则(3),可以转化为:T(con)∪T(flow)→T(A)。
第二污点传播规则:如果A依赖于条件分支,并且这个条件分支的数据流的结果是流向A的,当这个条件分支不执行时,污染传递规则为:
T(A)∪T(con)→T(A) (5)
该污点传播规则也可以由前述建立的污点传播模型和基础规则推出,其证明过程如下:
证明2:第二污点传播规则的使用条件是A依赖于条件分支,并且这个条件分支的数据流的结果是流向A的,而且这个分支是不被执行的,则满足的条件可以表示为:
(con→A)⊥((flow→A)∧Bra(A))
因为条件分支是不执行的,因此仅进行条件判断,所以满足的条件表示可以转化为:
(con→A)
考虑到上下文中的A的污染情况,则添加条件:A→A,所以条件为:
(con→A)∧(A→A)
根据第一污点传播规则,则A的污染情况为:
(T(con)→T(A))∧(T(A)→T(A)),
根据基础规则(3),则污染传播情况为:T(A)∪T(con)→T(A)
最后,应用污点传播规则。
下面分别介绍基于上述所制定的污点传播规则对于三种控制流攻击的应用情况。
应用一
结合图3,第一种控制流攻击中,在进行到条件判断的时候,当其执行时,采用第一污点传播规则,即根据公式(4)则
T(n==a)∪T(B+n)→T(B)
因为条件分支n==a是污染的,则T(n==a)为true,因此T(B)为true,所以B是污染的,B没有逃过污点追踪,因此,本实施例制定的污点传播规则完成了对这种攻击的追踪。
应用二
结合图4,第二种控制流攻击,在进行到条件判断的时候,当其执行时,采用第一污点传播规则,即根据公式(4)则:
T(j<i)∪T(b+1→b)→T(b)
由于条件分支j<i是污染的,则T(j<i)为true,所以T(b)为true。
又根据基础规则(1)则:
T(B)∪T(IntToChar(b))→T(B)
因为T(b)为true,则T(IntToChar(b))为true,因此T(B)为true,所以B是污染的,B没有逃过污点追踪,因此,本实施例制定的污点传播规则完成了对这种攻击的追踪。
应用三
结合图5,第三种控制流攻击,在进行到条件判断的时候,当其执行时,采用第一污点传播规则,即根据公式(4)则:
T(b<i)∪T(b+1→b)→T(b)
由于b<i是污染的,所以T(b<i)为true,则T(b)为true。
又根据基础污点传播规则(1)则:
T(B)∪T(IntToChar(b))→T(B)
由于T(b)为true,则T(IntToChar(b))为true,因此T(B)为true,所以B是污染的,B没有逃过污点追踪,因此,本实施例制定的污点传播规则完成了对这种攻击的追踪。
通过对上述三种控制流攻击的污点传播的应用,说明可以根据条件分支的情况采用本实施例预设的污点传播规则进行污点的追踪,避免出现欠污染情况,提高了隐私数据泄露检测的准确性。
步骤S203:污点汇集:设置汇集点对数据进行检测;
污点标记的提取和汇集是污点分析的最后一步,与污点标记相对应,当污点变量在经过传递之后需要在某个特定的位置进行检测从而发现是否泄露了隐私数据时,由于所检测的漏洞类型或隐私泄露的类型不同,污点汇集点的选择也不同。实际应用中,用户隐私泄露大部分是通过网络泄露的,在网络出口处进行数据的检测比较有效,所以本实施例选择的污点汇集点是Android的网络出口,Android的网络出口是指Android的网络调用的API,当Android应用通过网络发送数据时需要调用此API。
如果在污点汇集点,发现污染的数据,则代表隐私数据发送出去了,说明该应用存在隐私泄露的问题,如果在污点汇集点没有发现污染的数据,则说明此应用不存在隐私泄露问题,是安全的。
本实施例的方法通过修改Socket套接字来添加调用提取污点信息的方法实现提取污点标记的值。在提取出污点标记的值之后进一步判断,如果提取的污点标记的值不为空,则说明此Android应用存在隐私泄露的行为。反之,则此应用是安全的。与污点标记方法相对应,本实施例也为各种类型的隐私数据提供了提取污点标记值的方法。
步骤S204,判断是否存在污染数据,是则确定存在隐私数据泄露,否则确定不存在隐私数据泄露。
在本步骤中,通过Socket类的get方法从存储空间中获取污点变量的信息(即污点变量的值),然后将变量的污点标记值与初始化的TAIN_CLEAR进行比较,判断其是否为空,如果为空,则说明调用此污点变量的应用不存在隐私泄露行为,如果不为空,则说明有隐私数据发送出去了,即有隐私泄露问题,然后本实施例的方法可以输出污点传播的日志,供用户分析。
流程结束。
图6是本发明一个实施例的检测隐私数据泄露的装置的框图,参见图6,本实施例的检测隐私数据泄露的装置,应用于Android移动终端中,包括:
标记添加模块601,用于为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
存储模块602,用于将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
传播模块603,用于按照对包含控制信息的控制流分析后制定的污点传播规则,追踪所述变量对应的污点标记的传播;
检测模块604,用于在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为。
一个实施例中,标记添加模块601,具体用于对调用所述隐私数据的应用编程接口API进行修改,使所述API被调用时为隐私数据生成的变量添加污点标记。
一个实施例中,传播模块603,具体用于按照设定的第一污点传播规则和第二污点传播规则,追踪所述变量对应的污点标记的传播,
所述第一污点传播规则为:当变量A依赖于条件分支con,该条件分支con的数据流flow的结果是流向所述变量A,且条件分支con执行时,则
T(con)∪T(flow)→T(A);
其中,T(con)表示条件分支con的污染情况,T(flow)表示数据流flow的污染情况,∪表示组合,T(A)表示变量A的污染情况;
所述第二污点传播规则为:当变量A依赖于条件分支con,条件分支con的数据流flow的结果是流向所述变量A,且该条件分支con不执行时,则:
T(A)∪T(con)→T(A);
其中,T(A)表示变量A的污染情况,T(con)表示条件分支con的污染情况,∪表示组合。
一个实施例中,检测模块604,具体用于在预设的所述Android移动终端的网络出口,当检测到所述变量时,根据所述变量的类型对应从所述存储空间中获取所述变量对应的污点标记的值。
一个实施例中检测模块604,具体用于在预设的汇集点,判断所述变量对应的污点标记的值是否为空,如果不为空,则确定所述变量带有污点标记以及所述应用存在泄露隐私数据的行为;如果为空,则确定所述变量不带有污点标记以及所述应用不存在泄露隐私数据的行为。
需要说明的是,本实施例的检测隐私数据泄露的装置是和前述检测隐私数据泄露的方法对应的,所以本实施例的检测隐私数据泄露的装置的工作过程可以参见前述方法实施例的说明,这里不再赘述。
综上可知,本发明实施例的检测隐私数据泄露的装置,为隐私数据污点标记,追踪污点变量的传播,在汇集点检测传输的数据中是否存在带有污点标记的数据以检测应用是否泄露了隐私数据,如此,实现了在变量层次对Android移动终端中的应用的隐私数据泄露行为进行检测,并根据控制流攻击的特点预设污点传播规则,提高了隐私数据泄露检测的准确性,防止应用绕过污点追踪而将隐私数据泄露出去,保障信息安全。
以上所述,仅为本发明的具体实施方式,在本发明的上述教导下,本领域技术人员可以在上述实施例的基础上进行其他的改进或变形。本领域技术人员应该明白,上述的具体描述只是更好的解释本发明的目的,本发明的保护范围以权利要求的保护范围为准。
Claims (8)
1.一种检测隐私数据泄露的方法,应用于Android移动终端中,其特征在于,包括:
为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
按照对包含控制信息的控制流分析后设定的污点传播规则,追踪所述变量对应的污点标记的传播;
在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为;
按照设定的污点传播规则,追踪所述变量对应的污点标记的传播包括:
按照设定的第一污点传播规则和第二污点传播规则,追踪所述变量对应的污点标记的传播,
所述第一污点传播规则为:当变量A依赖于条件分支con,该条件分支con的数据流flow的结果是流向所述变量A,且条件分支con执行时,则
T(con)∪T(flow)→T(A);
其中,T(con)表示条件分支con的污染情况,T(flow)表示数据流flow的污染情况,∪表示组合,T(A)表示变量A的污染情况;
所述第二污点传播规则为:当变量A依赖于条件分支con,条件分支con的数据流flow的结果是流向所述变量A,且该条件分支con不执行时,则:
T(A)∪T(con)→T(A);
其中,T(A)表示变量A的污染情况,T(con)表示条件分支con的污染情况,∪表示组合。
2.根据权利要求1所述的方法,其特征在于,为所述Android移动终端中隐私数据生成的变量添加对应的污点标记包括:
对调用所述隐私数据的应用编程接口API进行修改,使所述API被调用时为隐私数据生成的变量添加污点标记。
3.根据权利要求1所述的方法,其特征在于,在预设的汇集点检测传输的数据是否带有污点标记包括:
在预设的所述Android移动终端的网络出口,当检测到所述变量时,根据所述变量的类型对应从所述存储空间中获取所述变量对应的污点标记的值。
4.根据权利要求3所述的方法,其特征在于,在预设的汇集点检测传输的数据是否带有污点标记包括:
在预设的汇集点,判断所述变量对应的污点标记的值是否为空,如果不为空,则确定所述变量带有污点标记以及所述应用存在泄露隐私数据的行为;如果为空,则确定所述变量不带有污点标记以及所述应用不存在泄露隐私数据的行为。
5.一种检测隐私数据泄露的装置,应用于Android移动终端中,其特征在于,包括:
标记添加模块,用于为所述Android移动终端中隐私数据生成的变量添加对应的污点标记,所述隐私数据是所述Android移动终端中安装的应用调用的隐私数据;
存储模块,用于将所述变量及其污点标记保存到根据所述变量的类型对应分配的存储空间中;
传播模块,用于按照对包含控制信息的控制流分析后制定的污点传播规则,追踪所述变量对应的污点标记的传播;
检测模块,用于在预设的汇集点检测传输的数据是否带有污点标记,是则确定所述应用存在泄漏隐私数据的行为,否则确定所述应用不存在泄漏隐私数据的行为;
所述传播模块,具体用于按照设定的第一污点传播规则和第二污点传播规则,追踪所述变量对应的污点标记的传播,
所述第一污点传播规则为:当变量A依赖于条件分支con,该条件分支con的数据流flow的结果是流向所述变量A,且条件分支con执行时,则
T(con)∪T(flow)→T(A);
其中,T(con)表示条件分支con的污染情况,T(flow)表示数据流flow的污染情况,∪表示组合,T(A)表示变量A的污染情况;
所述第二污点传播规则为:当变量A依赖于条件分支con,条件分支con的数据流flow的结果是流向所述变量A,且该条件分支con不执行时,则:
T(A)∪T(con)→T(A);
其中,T(A)表示变量A的污染情况,T(con)表示条件分支con的污染情况,∪表示组合。
6.根据权利要求5所述的装置,其特征在于,所述标记添加模块,具体用于对调用所述隐私数据的应用编程接口API进行修改,使所述API被调用时为隐私数据生成的变量添加污点标记。
7.根据权利要求5所述的装置,其特征在于,所述检测模块,具体用于在预设的所述Android移动终端的网络出口,当检测到所述变量时,根据所述变量的类型对应从所述存储空间中获取所述变量对应的污点标记的值。
8.根据权利要求7所述的装置,其特征在于,所述检测模块,具体用于在预设的汇集点,判断所述变量对应的污点标记的值是否为空,如果不为空,则确定所述变量带有污点标记以及所述应用存在泄露隐私数据的行为;如果为空,则确定所述变量不带有污点标记以及所述应用不存在泄露隐私数据的行为。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710543518.3A CN107330345B (zh) | 2017-07-05 | 2017-07-05 | 一种检测隐私数据泄露的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710543518.3A CN107330345B (zh) | 2017-07-05 | 2017-07-05 | 一种检测隐私数据泄露的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107330345A CN107330345A (zh) | 2017-11-07 |
CN107330345B true CN107330345B (zh) | 2020-11-27 |
Family
ID=60196386
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710543518.3A Active CN107330345B (zh) | 2017-07-05 | 2017-07-05 | 一种检测隐私数据泄露的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107330345B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108090364B (zh) * | 2017-11-29 | 2020-05-08 | 贝壳找房(北京)科技有限公司 | 一种数据泄漏源的定位方法及系统 |
CN111159704B (zh) * | 2019-12-31 | 2022-09-09 | 奇安信科技集团股份有限公司 | 虚拟内存数据泄露检测方法及装置 |
CN111404890B (zh) * | 2020-03-05 | 2022-07-05 | 北京字节跳动网络技术有限公司 | 流量数据检测方法、系统、存储介质及电子设备 |
CN111737357B (zh) * | 2020-07-17 | 2021-02-05 | 支付宝(杭州)信息技术有限公司 | 一种智能合约污点追踪方法及装置 |
CN112230935B (zh) * | 2020-11-03 | 2022-07-01 | 支付宝(杭州)信息技术有限公司 | 一种应用内的隐私风险检测方法、装置以及设备 |
CN113282909B (zh) * | 2021-05-11 | 2024-04-09 | 南京大学 | 一种设备指纹信息采集项识别方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729595A (zh) * | 2014-01-02 | 2014-04-16 | 东南大学 | 一种Android应用程序隐私数据泄露离线检测方法 |
CN104361281A (zh) * | 2014-11-17 | 2015-02-18 | 西安电子科技大学 | 一种安卓平台钓鱼攻击的解决方法 |
CN104766012A (zh) * | 2015-04-09 | 2015-07-08 | 广东电网有限责任公司信息中心 | 基于动态污点追踪的数据安全动态检测方法及系统 |
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
CN106803028A (zh) * | 2017-01-18 | 2017-06-06 | 西安电子科技大学 | 一种防止安卓手机短信验证码被窃取的方法 |
-
2017
- 2017-07-05 CN CN201710543518.3A patent/CN107330345B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729595A (zh) * | 2014-01-02 | 2014-04-16 | 东南大学 | 一种Android应用程序隐私数据泄露离线检测方法 |
CN104361281A (zh) * | 2014-11-17 | 2015-02-18 | 西安电子科技大学 | 一种安卓平台钓鱼攻击的解决方法 |
CN104766012A (zh) * | 2015-04-09 | 2015-07-08 | 广东电网有限责任公司信息中心 | 基于动态污点追踪的数据安全动态检测方法及系统 |
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
CN106803028A (zh) * | 2017-01-18 | 2017-06-06 | 西安电子科技大学 | 一种防止安卓手机短信验证码被窃取的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107330345A (zh) | 2017-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107330345B (zh) | 一种检测隐私数据泄露的方法和装置 | |
CN109002721B (zh) | 一种信息安全漏洞的挖掘分析方法 | |
Mercaldo et al. | Hey malware, i can find you! | |
CN108123956B (zh) | 基于Petri网的密码误用漏洞检测方法及系统 | |
EP3270319B1 (en) | Method and apparatus for generating dynamic security module | |
CN111695119B (zh) | 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法 | |
Ali-Gombe et al. | AspectDroid: Android app analysis system | |
Choudhary et al. | Haamd: Hybrid analysis for android malware detection | |
CN110909358A (zh) | 一种基于动静态分析的整形漏洞检测方法 | |
Mongiovì et al. | Combining static and dynamic data flow analysis: a hybrid approach for detecting data leaks in Java applications | |
CN110096433B (zh) | 一种iOS平台上获取加密数据的方法 | |
CN108256325A (zh) | 一种恶意代码变种的检测的方法和装置 | |
CN112733150A (zh) | 一种基于脆弱性分析的固件未知漏洞检测方法 | |
Sadeghi et al. | Mining the categorized software repositories to improve the analysis of security vulnerabilities | |
Chao et al. | An android application vulnerability mining method based on static and dynamic analysis | |
You et al. | Android implicit information flow demystified | |
Feichtner et al. | Automated binary analysis on ios: A case study on cryptographic misuse in ios applications | |
CN107085687B (zh) | 基于二进制熵的模糊测试加解密函数定位方法 | |
CN110717181B (zh) | 基于新型程序依赖图的非控制数据攻击检测方法及装置 | |
CN117579395B (zh) | 一种应用人工智能进行网络安全漏洞扫描的方法及系统 | |
CN105718793A (zh) | 基于修改沙箱环境防止恶意代码识别沙箱的方法及系统 | |
CN110727598B (zh) | 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 | |
CN107168875B (zh) | 一种基于安卓应用多入口特性的Activity构件泄露检测方法 | |
Jurn et al. | A survey of automated root cause analysis of software vulnerability | |
Tian et al. | Android inter-component communication analysis with intent revision |
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 |