CN107038378B - 应用软件安全漏洞检测方法和系统 - Google Patents
应用软件安全漏洞检测方法和系统 Download PDFInfo
- Publication number
- CN107038378B CN107038378B CN201611036378.2A CN201611036378A CN107038378B CN 107038378 B CN107038378 B CN 107038378B CN 201611036378 A CN201611036378 A CN 201611036378A CN 107038378 B CN107038378 B CN 107038378B
- Authority
- CN
- China
- Prior art keywords
- point
- invocation
- application software
- sensitive
- external input
- 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
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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种应用软件安全漏洞检测方法,该方法包括:基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息;根据所述数据流信息,判断所述敏感调用点是否被污点数据污染;若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点;若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。本发明还公开了一种应用软件安全漏洞检测系统。本发明大大提高了应用软件的安全漏洞检测效率。
Description
技术领域
本发明涉及数据安全技术领域,尤其涉及一种应用软件安全漏洞检测方法和系统。
背景技术
智能手机中安装的应用软件类型多样,为人们的生活、娱乐、工作带来了极大的便利。由于应用软件可能涉及各用户的隐私、财产安全,因此,应用软件的安全性一直是人们关注的重点。
现有应用软件安全漏洞检测大部分是基于静态的规则扫描和应用组件类的模糊测试实现,如墨贝系统和Drozer工具,是通过对应用软件代码的静态扫描实现软件安全性的检测。这样的检测方法方案比较粗糙,仅仅是基于代码文字的规则匹配,存在大量的误报和漏报;另一方面,由于检测的覆盖面有限,并不能深入发现应用软件的功能逻辑所存在的安全隐患。
因此,如何提高应用软件的安全漏洞检测效率成为了亟需解决的问题。
发明内容
本发明的主要目的在于提供一种软件安全漏洞检测方法和系统,旨在解决应用软件的安全漏洞检测效率低的技术问题。
为实现上述目的,本发明提供一种应用软件安全漏洞检测方法,所述应用软件安全漏洞检测方法包括以下步骤:
基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息;
根据所述数据流信息,判断所述敏感调用点是否被污点数据污染;
若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点;
若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。
优选地,所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤包括:
根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;
若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;
若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
优选地,所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤还包括:
若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;
若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
优选地,所述基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息的步骤之前,还包括:
当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
优选地,所述确定所述外部输入点为所述应用软件的安全漏洞的步骤之后,还包括:
确定回溯找到所述外部输入点的路径为危险路径。
此外,为实现上述目的,本发明还提供一种应用软件安全漏洞检测系统,所述应用软件安全漏洞检测系统包括:
采集模块,用于基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息;
判断模块,用于根据所述数据流信息,判断所述敏感调用点是否被污点数据污染;
回溯模块,用于若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点;
确定模块,用于若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。
优选地,所述回溯模块还用于,
根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
优选地,所述回溯模块还用于,
若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
优选地,所述应用软件安全漏洞检测系统还包括:
污点模块,用于当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
优选地,所述确定模块还用于,
确定回溯找到所述外部输入点的路径为危险路径。
本发明实施例提出的一种应用软件安全漏洞检测方法和系统,通过基于预先在应用软件敏感调用点配置的插桩,采集应用软件运行过程中流经敏感调用点的数据流信息,进行动态的数据采集,模拟应用软件实际运行的状态,相对于静态数据来说采集的数据更具有真实性,能够更好的进行应用软件的安全性检测,提高安全漏洞检测效率;然后,根据流经敏感调用点的数据流信息,判断敏感调用点是否被污点数据污染;若敏感调用点被污染,则敏感调用点可能被外部输入点关联调用,影响应用软件安全,此时,根据敏感调用点的变量参数,回溯查找敏感调用点对应的外部输入点,也即查找更够调用敏感调用点的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本发明中基于应用软件运行过程中的关键调用和数据处理操作的实时监控输出,通过离线自动污点数据传播分析,检测应用潜在的安全漏洞。通过采用动态插桩和离线数据流分析动静态结合的检测技术,能够覆盖应用软件更深层次功能和逻辑检查,不存在漏报,且采集的数据来自实际运行过程,真实有效,不存在误报,大大提高了应用软件的安全漏洞检测效率。
附图说明
图1为本发明应用软件安全漏洞检测方法第一实施例的流程示意图;
图2为图1中根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤的细化流程示意图;
图3为图1中根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤的细化流程示意图;
图4为本发明应用软件安全漏洞检测方法第二实施例的流程示意图;
图5为本发明应用软件安全漏洞检测方法第三实施例的流程示意图;
图6为本发明应用软件安全漏洞检测系统第一实施例的功能模块示意图;
图7为本发明应用软件安全漏洞检测系统第二实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,本发明应用软件安全漏洞检测方法第一实施例提供一种应用软件安全漏洞检测方法,所述应用软件安全漏洞检测方法包括:
步骤S10、基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息。
本发明通过在应用软件的函数敏感调用点配置插桩,在程序运行时,获取流经插桩点(也即敏感调用点)的数据流,用于检测敏感调用点是否安全,从而进行数据回溯。由于采集的数据是应用软件真实运行过程中的数据,因此真实有效,降低了漏洞漏报和误报的概率,提高了应用软件的安全漏洞检测效率。
具体的,作为一种实施方式,首先,在不破坏待检测应用软件的程序原有逻辑完整性的前提下,在待检测应用软件需检测的敏感调用点配置插桩,以采集应用软件的运行时的关键调用数据。
在配置程序插桩后,启动待检测的应用软件,获取插桩采集的流经敏感调用点的数据流信息。
插桩采集的数据流信息包括应用软件运行过程中,调用此敏感调用点时传递给此敏感调用点的参数,以及敏感调用点根据传递的参数执行函数调用后输出的返回值等信息。
需要说明的是,敏感调用点是应用软件中的关键调用点,或是安全性要求要高的调用点,可以由测试人员人为确定需检测的敏感调用点,在需检测的各敏感调用点配置插桩。
步骤S20、根据所述数据流信息,判断所述敏感调用点是否被污点数据污染。
需要说明的是,在通过外部输入点向应用软件输入污点数据后,污点数据会在应用软件运行的过程中,传递污染关联的参数,关联参数会被打上污染标签。
则,若流经敏感调用点的参数携带有污点标签,则可以判定此敏感调用点被污点数据污染,也即,外部输入点输入的数据能够影响、控制此敏感调用点,存在风险。
步骤S30、若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点。
若敏感调用点被污染,则首先需要确定敏感调用点的变量参数,例如,敏感调用点使用形参执行函数输出返回值,则敏感调用点的形参即为变量参数,需要追踪传递给敏感调用点、对形参赋值的实参。
然后,根据插桩采集的数据流信息中传递给此敏感调用点的实参,进行数据回溯,查找此变量参数数值的来源,以获取影响此变量参数的值的调用点,直至查找到的能够影响此变量参数的值的调用点为源节点,例如常量赋值、外部输入点等时,停止数据回溯。
需要说明的是,源节点的参数不再受应用软件内部其他调用点的影响。
若能够影响此变量参数的值的调用点的源节点为外部输入点,则确定此外部输入点为敏感调用点对应的外部输入点,此外部输入点输入的数据能够影响、控制敏感调用点,给应用软件造成风险。
作为一种实施方式,参照图2,所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤包括:
步骤S31、根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;
步骤S32、若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;
步骤S33、若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
步骤S34、若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
例如,主函数调用当前敏感调用点时,传递给敏感调用点的参数为A,敏感调用点根据A执行函数调用后会对应输出返回值,则确定敏感调用点的形参为变量参数。
然后,根据传递给敏感调用点的参数A,查找应用软件中返回或输出A的前驱调用点,也即查找将A作为返回值输出且执行顺序早于敏感调用点的调用点。
需要说明的是,前驱调用点在应用软件的各调用点执行顺序中,早于对比调用点执行函数调用。例如上述“查找输出A的前驱调用点”中,前驱调用点的函数执行顺序应当早于当前敏感调用点。
若前驱调用点1输出的返回值为A,则判断前驱调用点1输出的参数是否为外部输入点输入的变量。
若前驱调用点1输出的参数是外部输入点输入的变量,也即A是由前驱调用点1根据外部输入点输入的变量对应输出的,则可以确认此外部输入点为数据流的源节点,也就是当前敏感调用点对应的外部输入点。
若前驱调用点1是根据输入的实参B,执行函数调用运算得到A,则根据B继续查找返回B的前驱调用点,也即查找将B作为返回值输出,且执行顺序早于前驱调用点1的调用点,以此类推,直至找到数据流的源节点。
若源节点为外部输入点,则可以确定找到源节点为敏感调用点对应的外部输入点。
若源节点为常量赋值,则可以确定未回溯到外部输入点,当前敏感调用点安全,停止回溯。
进一步地,若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。
在根据变量参数进行数据回溯时,可能会遇到多个调用点输出参数均为此变量参数,此时,首先根据各调用点的执行顺序,筛选出执行顺序先于敏感调用点的调用点,也可称为执行顺序早于敏感调用点的调用点。
若筛选后,得到的调用点只有一个,则就可以确定此调用点为当前查找的、用于进一步进行数据回溯前驱调用点;若筛选后,得到的调用点有多个,则此时根据这多个调用点的执行顺序,确定执行顺序最晚、但早于敏感调用点的调用点为当前查找的、用于进一步进行数据回溯前驱调用点,也即确定执行顺序最接近敏感调用点的为前驱调用点。
例如,若输出A的调用点包括调用点2、调用点3,则获取调用点2、调用点3的执行顺序。若调用点2先于调用点3执行,敏感调用点晚于调用点3执行,则调用点3的执行顺序更加接近敏感调用点,确定调用点3为前驱调用点;若调用点3先于调用点2执行,敏感调用点晚于调用点2执行,则调用点2的执行顺序更加接近敏感调用点,确定调用点2为前驱调用点。
同理,在后续回溯数据时,若遇到多个调用点输出的参数均为当前回溯的参数、无法确定前驱调用点的情况时,选取执行顺序早于当前调用点、且最接近当前调用点的为前驱调用点,继续进行数据回溯。
由此,在有多个调用点输出变量参数时,可以唯一确定前驱调用点,实现了通过调用点时序,进行数据回溯和外部输入点的查找。
进一步地,作为另一种实施方式,参照图3,所述根据所述数据流信息中传递给所述敏感调用点的参数,回溯查找所述敏感调用点对应的外部输入点的步骤,还包括:
步骤S35、若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;
步骤S36、若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
步骤S37、若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
若敏感调用点的变量参数值是由前驱参数的赋值决定的,也即传递给敏感调用点、对变量参数进行赋值的参数是前驱调用点的赋值,则回溯对应的右值,也即对传递给敏感调用点的变量参数进行赋值的右值。
若此右值是外部输入点输入的变量,也即前驱调用点是根据外部输入点输入的变量对输出的参数进行赋值的,则可以确定此外部输入点为敏感调用点对应的外部输入点。
若右值为常量赋值,则可以确定当前数据链安全,未回溯到外部输入点,停止回溯。
由此,实现了对函数调用和赋值的数据追踪,保障了回溯调用点的完整性和准确性。
步骤S40、若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。
若成功回溯数据找到敏感调用点对应的外部输入点,则找到的外部输入点可能会被利用输入数据,调用此敏感调用点,给应用软件带来安全隐患。
由此,可以确定此外部输入点为应用软件的安全漏洞,进行漏洞上报。
在本实施例中,基于预先在应用软件敏感调用点配置的插桩,采集应用软件运行过程中流经敏感调用点的数据流信息,进行动态的数据采集,模拟应用软件实际运行的状态,相对于静态数据来说采集的数据更具有真实性,能够更好的进行应用软件的安全性检测,提高安全漏洞检测效率;然后,根据流经敏感调用点的数据流信息,判断敏感调用点是否被污点数据污染;若敏感调用点被污染,则敏感调用点可能被外部输入点关联调用,影响应用软件安全,此时,根据敏感调用点的变量参数,回溯查找敏感调用点对应的外部输入点,也即查找更够调用敏感调用点的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本实施例中基于应用软件运行过程中的关键调用和数据处理操作的实时监控输出,通过离线自动污点数据传播分析,检测应用潜在的安全漏洞。通过采用动态插桩和离线数据流分析动静态结合的检测技术,能够覆盖应用软件更深层次功能和逻辑检查,不存在漏报,且采集的数据来自实际运行过程,真实有效,不存在误报,大大提高了应用软件的安全漏洞检测效率。
进一步地,参照图4,本发明应用软件安全漏洞检测方法第二实施例提供一种应用软件安全漏洞检测方法,基于上述本发明应用软件安全漏洞检测方法第一实施例,所述步骤S10之前,还包括:
步骤S50、当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
当应用软件的敏感调用点已经配置好插桩,启动运行时,或在应用软件运行的过程中,通过应用软件的各个外部输入点,向应用软件中输入带有污染标签的污点数据。
污点数据再被输入应用软件后,跟随各调用点的调用,通过赋值、函数调用等方式,污染关联的参数。若被污染的参数流经调用点,则可认为此调用点被污点。
若应用软件运行的过程中敏感调用点被污染,则可以确定外部输入点输入的污点数据的关联参数能够流经此敏感调用点进行函数调用,也即此敏感调用点能够被外部输入点调用,存在安全漏洞。然后,根据敏感调用点的数据流进行数据回溯,查找能够调用敏感调用点的外部输入点,此能够调用敏感调用点的外部输入点即为应用软件的安全漏洞。
在本实施例中,当所述应用软件运行时,在应用软件的各外部输入点输入污点数据,用以检测敏感调用点是否被感染,从而根据被感染的敏感调用点查找对应的安全漏洞,实现了对应用软件漏洞的检测。本实施例通过向各外部输入点输入污点数据,使应用软件运行起来,能够快速、准确的标记出存在被外部输入点调用风险的敏感调用点,进而提高风险调用点的准确率,实现对应用软件深层逻辑的检测,减少漏洞的误报和漏报,提高漏洞检测的效率。
进一步地,参照图5,本发明应用软件安全漏洞检测方法第三实施例提供一种应用软件安全漏洞检测方法,基于上述本发明应用软件安全漏洞检测方法第一实施例或第二实施例(本实施例以上述本发明应用软件安全漏洞检测方法第一实施例为例),所述步骤S40之后,还包括:
步骤S60、确定回溯找到所述外部输入点的路径为危险路径。
当成功找到敏感调用点对应的外部输入点时,将找到外部输入点的路径信息提取出来,得到从外部输入点输入的污点数据流向敏感调用点的路径,以及路径上被感染的各调用点。
然后,标记此路径为危险路径,便于研发人员了解敏感调用点的具体风险,以提高应用软件的完全性。
在本实施例中,确定回溯找到敏感调用点对应外部输入点的路径为危险路径,以便于研发人员进行进一步地漏洞原因分析、提升应用软件的安全性。
参照图6,本发明应用软件安全漏洞检测系统第一实施例提供一种应用软件安全漏洞检测系统,所述应用软件安全漏洞检测系统包括:
采集模块10,用于基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息。
本发明通过在应用软件的函数敏感调用点配置插桩,在程序运行时,获取流经插桩点(也即敏感调用点)的数据流,用于检测敏感调用点是否安全,从而进行数据回溯。由于采集的数据是应用软件真实运行过程中的数据,因此真实有效,降低了漏洞漏报和误报的概率,提高了应用软件的安全漏洞检测效率。
具体的,作为一种实施方式,首先,在不破坏待检测应用软件的程序原有逻辑完整性的前提下,在待检测应用软件需检测的敏感调用点配置插桩,以采集应用软件的运行时的关键调用数据。
在配置程序插桩后,启动待检测的应用软件,采集模块10获取插桩采集的流经敏感调用点的数据流信息。
插桩采集的数据流信息包括应用软件运行过程中,调用此敏感调用点时传递给此敏感调用点的参数,以及敏感调用点根据传递的参数执行函数调用后输出的返回值等信息。
需要说明的是,敏感调用点是应用软件中的关键调用点,或是安全性要求要高的调用点,可以由测试人员人为确定需检测的敏感调用点,在需检测的各敏感调用点配置插桩。
判断模块20,用于根据所述数据流信息,判断所述敏感调用点是否被污点数据污染。
需要说明的是,在通过外部输入点向应用软件输入污点数据后,污点数据会在应用软件运行的过程中,传递污染关联的参数,关联参数会被打上污染标签。
则,若流经敏感调用点的参数携带有污点标签,则判断模块20可以判定此敏感调用点被污点数据污染,也即,外部输入点输入的数据能够影响、控制此敏感调用点,存在风险。
回溯模块30,用于若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点。
若敏感调用点被污染,则回溯模块30首先需要确定敏感调用点的变量参数,例如,敏感调用点使用形参执行函数输出返回值,则敏感调用点的形参即为变量参数,需要追踪传递给敏感调用点、对形参赋值的实参。
然后,根据插桩采集的数据流信息中传递给此敏感调用点的实参,进行数据回溯,查找此变量参数数值的来源,以获取影响此变量参数的值的调用点,直至查找到的能够影响此变量参数的值的调用点为源节点,例如常量赋值、外部输入点等时,停止数据回溯。
需要说明的是,源节点的参数不再受应用软件内部其他调用点的影响。
若能够影响此变量参数的值的调用点的源节点为外部输入点,则回溯模块30确定此外部输入点为敏感调用点对应的外部输入点,此外部输入点输入的数据能够影响、控制敏感调用点,给应用软件造成风险。
作为一种实施方式,所述回溯模块30还用于,
根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述源节点为常量赋值,则停止回溯根据,确定未找到所述敏感调用点对应的外部输入点。
例如,主函数调用当前敏感调用点时,传递给敏感调用点的参数为A,敏感调用点根据A执行函数调用后会对应输出返回值,则回溯模块30确定敏感调用点的形参为变量参数。
然后,回溯模块30根据传递给敏感调用点的参数A,查找应用软件中返回或输出A的前驱调用点,也即查找将A作为返回值输出且执行顺序早于敏感调用点的调用点。
需要说明的是,前驱调用点在应用软件的各调用点执行顺序中,早于对比调用点执行函数调用。例如上述“查找输出A的前驱调用点”中,前驱调用点的函数执行顺序应当早于当前敏感调用点。
若前驱调用点1输出的返回值为A,则回溯模块30判断前驱调用点1输出的参数是否为外部输入点输入的变量。
若前驱调用点1输出的参数是外部输入点输入的变量,也即A是由前驱调用点1根据外部输入点输入的变量对应输出的,则回溯模块30可以确认此外部输入点为数据流的源节点,也就是当前敏感调用点对应的外部输入点。
若前驱调用点1是根据输入的实参B,执行函数调用运算得到A,则根据B继续查找返回B的前驱调用点,也即查找将B作为返回值输出,且执行顺序早于前驱调用点1的调用点,以此类推,直至找到数据流的源节点。
若源节点为外部输入点,则回溯模块30可以确定找到源节点为敏感调用点对应的外部输入点。
若源节点为常量赋值,则回溯模块30可以确定未回溯到外部输入点,当前敏感调用点安全,停止回溯。
进一步地,若回溯模块30找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。
回溯模块30在根据变量参数进行数据回溯时,可能会遇到多个调用点输出参数均为此变量参数,此时,回溯模块30首先根据各调用点的执行顺序,筛选出执行顺序先于敏感调用点的调用点,也可称为执行顺序早于敏感调用点的调用点。
若筛选后,得到的调用点只有一个,则回溯模块30就可以确定此调用点为当前查找的、用于进一步进行数据回溯前驱调用点;若筛选后,得到的调用点有多个,则此时回溯模块30根据这多个调用点的执行顺序,确定执行顺序最晚、但早于敏感调用点的调用点为当前查找的、用于进一步进行数据回溯前驱调用点,也即确定执行顺序最接近敏感调用点的为前驱调用点。
例如,若输出A的调用点包括调用点2、调用点3,则获取调用点2、调用点3的执行顺序。若调用点2先于调用点3执行,敏感调用点晚于调用点3执行,则调用点3的执行顺序更加接近敏感调用点,确定调用点3为前驱调用点;若调用点3先于调用点2执行,敏感调用点晚于调用点2执行,则调用点2的执行顺序更加接近敏感调用点,确定调用点2为前驱调用点。
同理,在后续回溯数据时,若遇到多个调用点输出的参数均为当前回溯的参数、无法确定前驱调用点的情况时,选取执行顺序早于当前调用点、且最接近当前调用点的为前驱调用点,继续进行数据回溯。
由此,在有多个调用点输出变量参数时,回溯模块30可以唯一确定前驱调用点,实现了通过调用点时序,进行数据回溯和外部输入点的查找。
进一步地,作为另一种实施方式,所述回溯模块30还用于,
若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
若敏感调用点的变量参数值是由前驱参数的赋值决定的,也即传递给敏感调用点、对变量参数进行赋值的参数是前驱调用点的赋值,则回溯模块30回溯对应的右值,也即对传递给敏感调用点的变量参数进行赋值的右值。
若此右值是外部输入点输入的变量,也即前驱调用点是根据外部输入点输入的变量对输出的参数进行赋值的,则可以确定此外部输入点为敏感调用点对应的外部输入点。
若右值为常量赋值,则回溯模块30可以确定当前数据链安全,未回溯到外部输入点,停止回溯。
由此,回溯模块30实现了对函数调用和赋值的数据追踪,保障了回溯调用点的完整性和准确性。
确定模块40,用于若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。
若成功回溯数据找到敏感调用点对应的外部输入点,则找到的外部输入点可能会被利用输入数据,调用此敏感调用点,给应用软件带来安全隐患。
由此,确定模块40可以确定此外部输入点为应用软件的安全漏洞,进行漏洞上报。
在本实施例中,采集模块10基于预先在应用软件敏感调用点配置的插桩,采集应用软件运行过程中流经敏感调用点的数据流信息,进行动态的数据采集,模拟应用软件实际运行的状态,相对于静态数据来说采集的数据更具有真实性,能够更好的进行应用软件的安全性检测,提高安全漏洞检测效率;然后,判断模块20根据流经敏感调用点的数据流信息,判断敏感调用点是否被污点数据污染;若敏感调用点被污染,则敏感调用点可能被外部输入点关联调用,影响应用软件安全,此时,回溯模块30根据敏感调用点的变量参数,回溯查找敏感调用点对应的外部输入点,也即查找更够调用敏感调用点的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定模块40确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本实施例中基于应用软件运行过程中的关键调用和数据处理操作的实时监控输出,通过离线自动污点数据传播分析,检测应用潜在的安全漏洞。通过采用动态插桩和离线数据流分析动静态结合的检测技术,能够覆盖应用软件更深层次功能和逻辑检查,不存在漏报,且采集的数据来自实际运行过程,真实有效,不存在误报,大大提高了应用软件的安全漏洞检测效率。
进一步地,参照图7,本发明应用软件安全漏洞检测系统第二实施例提供一种应用软件安全漏洞检测系统,基于上述本发明应用软件安全漏洞检测系统第一实施例,所述应用软件安全漏洞检测系统还包括:
污点模块50,用于当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
当应用软件的敏感调用点已经配置好插桩,启动运行时,或在应用软件运行的过程中,污点模块50通过应用软件的各个外部输入点,向应用软件中输入带有污染标签的污点数据。
污点数据再被输入应用软件后,跟随各调用点的调用,通过赋值、函数调用等方式,污染关联的参数。若被污染的参数流经调用点,则可认为此调用点被污点。
若应用软件运行的过程中敏感调用点被污染,则可以确定外部输入点输入的污点数据的关联参数能够流经此敏感调用点进行函数调用,也即此敏感调用点能够被外部输入点调用,存在安全漏洞。然后,回溯模快30根据敏感调用点的数据流进行数据回溯,查找能够调用敏感调用点的外部输入点,此能够调用敏感调用点的外部输入点即为应用软件的安全漏洞。
在本实施例中,当所述应用软件运行时,污点模块50在应用软件的各外部输入点输入污点数据,用以检测敏感调用点是否被感染,从而根据被感染的敏感调用点查找对应的安全漏洞,实现了对应用软件漏洞的检测。本实施例通过向各外部输入点输入污点数据,使应用软件运行起来,能够快速、准确的标记出存在被外部输入点调用风险的敏感调用点,进而提高风险调用点的准确率,实现对应用软件深层逻辑的检测,减少漏洞的误报和漏报,提高漏洞检测的效率。
进一步地,本发明应用软件安全漏洞检测系统第三实施例提供一种应用软件安全漏洞检测系统,基于上述本发明应用软件安全漏洞检测系统第一实施例、第二实施例,所述确定模块40还用于,
确定回溯找到所述外部输入点的路径为危险路径。
当成功找到敏感调用点对应的外部输入点时,确定模块40将找到外部输入点的路径信息提取出来,得到从外部输入点输入的污点数据流向敏感调用点的路径,以及路径上被感染的各调用点。
然后,确定模块40标记此路径为危险路径,便于研发人员了解敏感调用点的具体风险,以提高应用软件的完全性。
在本实施例中,确定模块40确定回溯找到敏感调用点对应外部输入点的路径为危险路径,以便于研发人员进行进一步地漏洞原因分析、提升应用软件的安全性。
以上仅为本发明的可选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种应用软件安全漏洞检测方法,其特征在于,所述应用软件安全漏洞检测方法包括以下步骤:
基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息;
根据所述数据流信息,判断所述敏感调用点是否被污点数据污染;
若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点;
若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞;
所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤包括:
根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;
若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;
若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接近所述敏感调用点的为所述前驱调用点;
所述数据流信息包括所述应用软件运行过程中,调用所述敏感调用点时传递给所述敏感调用点的参数,以及所述敏感调用点根据传递的参数执行函数调用后输出的返回值信息。
2.如权利要求1所述的应用软件安全漏洞检测方法,其特征在于,所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤还包括:
若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
3.如权利要求2所述的应用软件安全漏洞检测方法,其特征在于,所述根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点的步骤还包括:
若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;
若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
4.如权利要求1、2或3所述的应用软件安全漏洞检测方法,其特征在于,所述基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息的步骤之前,还包括:
当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
5.如权利要求1、2或3所述的应用软件安全漏洞检测方法,其特征在于,所述确定所述外部输入点为所述应用软件的安全漏洞的步骤之后,还包括:
确定回溯找到所述外部输入点的路径为危险路径。
6.一种应用软件安全漏洞检测系统,其特征在于,所述应用软件安全漏洞检测系统包括:
采集模块,用于基于预先在应用软件敏感调用点配置的插桩,采集所述应用软件运行过程中流经所述敏感调用点的数据流信息;
判断模块,用于根据所述数据流信息,判断所述敏感调用点是否被污点数据污染;
回溯模块,用于若所述敏感调用点被污染,则根据所述敏感调用点的变量参数,回溯查找所述敏感调用点对应的外部输入点;
确定模块,用于若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞;
所述回溯模块还用于,根据所述变量参数,回溯查找输出所述变量参数的前驱调用点;若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;
所述回溯模块还用于,若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接近所述敏感调用点的为所述前驱调用点;
所述数据流信息包括所述应用软件运行过程中,调用所述敏感调用点时传递给所述敏感调用点的参数,以及所述敏感调用点根据传递的参数执行函数调用后输出的返回值信息。
7.如权利要求6所述的应用软件安全漏洞检测系统,其特征在于,所述回溯模块还用于,
若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
8.如权利要求7所述的应用软件安全漏洞检测系统,其特征在于,所述回溯模块还用于,
若所述前驱调用点将所述变量参数作为赋值输出,则获取所述变量参数对应的右值;若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。
9.如权利要求6、7或8所述的应用软件安全漏洞检测系统,其特征在于,所述应用软件安全漏洞检测系统还包括:
污点模块,用于当所述应用软件运行时,在所述应用软件的各外部输入点输入污点数据。
10.如权利要求6、7或8所述的应用软件安全漏洞检测系统,其特征在于,所述确定模块还用于,
确定回溯找到所述外部输入点的路径为危险路径。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611036378.2A CN107038378B (zh) | 2016-11-14 | 2016-11-14 | 应用软件安全漏洞检测方法和系统 |
PCT/CN2017/077984 WO2018086292A1 (zh) | 2016-11-14 | 2017-03-24 | 应用软件安全漏洞检测方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611036378.2A CN107038378B (zh) | 2016-11-14 | 2016-11-14 | 应用软件安全漏洞检测方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107038378A CN107038378A (zh) | 2017-08-11 |
CN107038378B true CN107038378B (zh) | 2018-06-26 |
Family
ID=59531016
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611036378.2A Active CN107038378B (zh) | 2016-11-14 | 2016-11-14 | 应用软件安全漏洞检测方法和系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107038378B (zh) |
WO (1) | WO2018086292A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110381033B (zh) * | 2019-06-24 | 2021-06-08 | 深圳开源互联网安全技术有限公司 | Web应用漏洞检测方法、装置、系统、存储介质和服务器 |
CN111625833B (zh) * | 2020-04-13 | 2023-06-13 | 中国科学院软件研究所 | 一种高效的软件程序释放后重用漏洞判定方法和装置 |
CN111506900B (zh) * | 2020-04-15 | 2023-07-18 | 抖音视界有限公司 | 漏洞检测方法、装置、电子设备及计算机存储介质 |
CN111931186B (zh) * | 2020-08-12 | 2023-09-08 | 中国工商银行股份有限公司 | 软件风险识别方法及装置 |
CN112162777B (zh) * | 2020-09-27 | 2022-11-18 | 北京智联安行科技有限公司 | 一种源代码特征提取方法及装置 |
CN113342673B (zh) * | 2021-06-25 | 2024-07-02 | 深圳前海微众银行股份有限公司 | 漏洞检测方法、设备及可读存储介质 |
CN114389978B (zh) * | 2021-12-21 | 2024-04-02 | 中国人民解放军32802部队 | 一种基于静态污点分析的网络协议侧信道检测方法和系统 |
CN114417355B (zh) * | 2022-01-07 | 2022-11-08 | 上海交通大学 | 针对工业控制系统的轻量级安全性检测系统及方法 |
CN114741700B (zh) * | 2022-03-28 | 2024-05-03 | 中国人民解放军战略支援部队信息工程大学 | 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置 |
CN114780962B (zh) * | 2022-04-02 | 2024-04-26 | 中国人民解放军战略支援部队信息工程大学 | 基于动态能量调控的Windows程序模糊测试方法及系统 |
CN117077151B (zh) * | 2023-10-16 | 2024-01-26 | 北京华云安信息技术有限公司 | 漏洞挖掘方法、装置、设备以及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103714000A (zh) * | 2013-12-18 | 2014-04-09 | 杭州电子科技大学 | 一种面向敏感区域的嵌入式软件测试用例生成方法 |
CN103995782A (zh) * | 2014-06-17 | 2014-08-20 | 电子科技大学 | 一种基于污点不变集的污点分析方法 |
CN104021073A (zh) * | 2014-05-06 | 2014-09-03 | 南京大学 | 一种基于指针分析的软件漏洞检测方法 |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN104765687A (zh) * | 2015-04-10 | 2015-07-08 | 江西师范大学 | 基于对象跟踪和污点分析的j2ee程序漏洞检测方法 |
CN105487983A (zh) * | 2015-12-24 | 2016-04-13 | 郑州恩倍网络科技有限公司 | 基于智能路径引导的敏感点逼近方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662840A (zh) * | 2012-03-31 | 2012-09-12 | 天津大学 | Firefox浏览器扩展行为自动检测系统及方法 |
CN103207969B (zh) * | 2013-04-12 | 2016-10-05 | 百度在线网络技术(北京)有限公司 | 检测Android恶意软件的装置以及方法 |
CN104462981B (zh) * | 2013-09-12 | 2019-01-04 | 深圳市腾讯计算机系统有限公司 | 漏洞检测方法及装置 |
CN106055980B (zh) * | 2016-05-30 | 2018-12-11 | 南京邮电大学 | 一种基于规则的JavaScript安全性检测方法 |
-
2016
- 2016-11-14 CN CN201611036378.2A patent/CN107038378B/zh active Active
-
2017
- 2017-03-24 WO PCT/CN2017/077984 patent/WO2018086292A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103714000A (zh) * | 2013-12-18 | 2014-04-09 | 杭州电子科技大学 | 一种面向敏感区域的嵌入式软件测试用例生成方法 |
CN104021073A (zh) * | 2014-05-06 | 2014-09-03 | 南京大学 | 一种基于指针分析的软件漏洞检测方法 |
CN103995782A (zh) * | 2014-06-17 | 2014-08-20 | 电子科技大学 | 一种基于污点不变集的污点分析方法 |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN104765687A (zh) * | 2015-04-10 | 2015-07-08 | 江西师范大学 | 基于对象跟踪和污点分析的j2ee程序漏洞检测方法 |
CN105487983A (zh) * | 2015-12-24 | 2016-04-13 | 郑州恩倍网络科技有限公司 | 基于智能路径引导的敏感点逼近方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107038378A (zh) | 2017-08-11 |
WO2018086292A1 (zh) | 2018-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038378B (zh) | 应用软件安全漏洞检测方法和系统 | |
CN107273751B (zh) | 基于多模式匹配的安全漏洞在线发现方法 | |
CN103984900B (zh) | Android应用漏洞检测方法及系统 | |
CN105825138B (zh) | 一种敏感数据识别的方法和装置 | |
CN105550594B (zh) | 安卓应用文件的安全性检测方法 | |
CN110413506A (zh) | 测试用例推荐方法、装置、设备及存储介质 | |
CN108268371B (zh) | 面向Android应用的智能模糊测试方法 | |
CN109145579A (zh) | 智能网联汽车信息安全认证测试方法和系统 | |
CN107038380B (zh) | 一种基于程序特征树的漏洞检测方法及系统 | |
CN107368417A (zh) | 一种漏洞挖掘技术测试模型及测试方法 | |
CN109525556A (zh) | 一种用于确定嵌入式系统固件中协议漏洞的轻量级方法及系统 | |
CN104021084A (zh) | 一种Java源代码缺陷检测方法及装置 | |
CN107038115A (zh) | 应用软件安全漏洞检测方法和系统 | |
CN105589807B (zh) | 一种应用程序间组件能力泄露动态检测方法和系统 | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
CN104504337A (zh) | 一种安卓数据泄露的恶意应用检测方法 | |
CN104184728A (zh) | 一种Web应用系统的安全检测方法及安全检测装置 | |
CN117034299B (zh) | 一种基于区块链的智能合约安全检测系统 | |
CN105808369A (zh) | 一种基于符号执行的内存泄漏检测方法 | |
Jabbarvand et al. | Automated construction of energy test oracles for Android | |
CN115952503B (zh) | 融合黑白灰安全检测技术的应用安全测试方法及系统 | |
CN107886000A (zh) | 一种软件漏洞检测方法、分级响应方法及软件漏洞检测系统 | |
CN109948338A (zh) | 基于静态分析的安卓应用敏感路径触发方法 | |
CN106295346A (zh) | 一种应用漏洞检测方法、装置及计算设备 | |
CN106021113A (zh) | 一种精准测试的实现方法 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1237056 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1237056 Country of ref document: HK |