CN117009972A - 漏洞检测方法、装置、计算机设备和存储介质 - Google Patents

漏洞检测方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN117009972A
CN117009972A CN202211266764.6A CN202211266764A CN117009972A CN 117009972 A CN117009972 A CN 117009972A CN 202211266764 A CN202211266764 A CN 202211266764A CN 117009972 A CN117009972 A CN 117009972A
Authority
CN
China
Prior art keywords
vulnerability
target application
file
detection result
control flow
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.)
Pending
Application number
CN202211266764.6A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211266764.6A priority Critical patent/CN117009972A/zh
Publication of CN117009972A publication Critical patent/CN117009972A/zh
Pending legal-status Critical Current

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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing 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

漏洞检测方法、装置、计算机设备和存储介质
技术领域
本申请涉及漏洞检测技术领域,特别是涉及一种漏洞检测方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着智能终端技术的发展,各种功能性应用程序涌现,比如:社交类应用、视频类应用、购物类应用等。对于应用开发商而言,在应用上线之前,需要对应用可能存在的漏洞进行检测,在检测发现应用存在漏洞的情况下,及时对漏洞进行修复,以防攻击者利用漏洞做出破坏性的攻击行为。
传统的漏洞检测引擎常常使用静态分析技术识别应用中的敏感接口作为漏洞判定的依据,但这种方式扫描出来的漏洞结果无法说明漏洞真实存在,存在较高误报率。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提升漏洞检测准确度的漏洞检测方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种漏洞检测方法。方法包括:
对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
基于动态分析结果对控制流图和使用记录进行更新;
基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
第二方面,本申请还提供了一种漏洞检测装置。装置包括:
静态分析模块,用于对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
动态分析模块,用于对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
更新模块,用于基于动态分析结果对控制流图和使用记录进行更新;
漏洞模式匹配模块,用于基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
程序生成模块,用于根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
在一些实施例中,静态分析模块具体用于:对目标应用的代码文件进行组件分析,得到目标应用包含的组件;针对目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在当前组件能被外部程序调用的情况下,将当前组件作为风险组件;获取目标应用包含的风险组件的入口函数,从入口函数开始进行数据流分析,得到控制流图。
在一些实施例中,静态分析模块具体用于:从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;在遍历至的当前语句存在函数调用的情况下,建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;基于整个遍历过程中建立的函数调用关系,构建控制流图。
在一些实施例中,静态分析模块还用于:获取目标应用的安装文件,并从安装文件中提取配置清单文件;在配置清单文件中查找安装文件的加固信息;在加固信息指示安装文件已加固的情况下,对安装文件进行脱壳处理,以得到目标应用的代码文件。
在一些实施例中,静态分析模块还用于:通过解压工具对安装文件进行解压对抗检测,得到第一对抗检测结果;通过分析预设格式文件的工具,对安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件。
在一些实施例中,动态分析模块具体用于:将目标应用的安装文件加载至动态模拟器中,以使得动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;基于函数调用关系、上下文信息、以及文件访问信息生成动态分析结果。
在一些实施例中,更新模块具体用于:将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,基于比较结果对控制流图进行更新;在更新后的控制流图中确定更新部分,对更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新使用记录。
在一些实施例中,漏洞模式匹配具体用于:获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。
在一些实施例中,动态分析结果中包括上下文信息和文件访问信息,漏洞模式匹配具体用于:在更新后的控制流图上确定与初步漏洞检测结果对应的漏洞攻击链路;基于漏洞攻击链路所包含的各函数的调用关系、以及动态分析结果中的上位文信息和文件访问信息,确定漏洞攻击的输入条件;将漏洞攻击链路和输入条件作为漏洞线索。
在一些实施例中,程序生成模块,具体用于将漏洞线索填充至漏洞验证代码中,得到与初步漏洞检测结果对应的目标漏洞验证代码;对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序。
在一些实施例中,本申请实施例提供的漏洞检测装置还包括:修复模块,用于在使用漏洞验证程序验证目标应用存在初步漏洞检测结果所指示的目标漏洞的情况下,对目标漏洞进行修复。
第三方面,本申请还提供了一种计算机设备。计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现以下步骤:
对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
基于动态分析结果对控制流图和使用记录进行更新;
基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
第四方面,本申请还提供了一种计算机可读存储介质。计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
基于动态分析结果对控制流图和使用记录进行更新;
基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
第五方面,本申请还提供了一种计算机程序产品。计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
基于动态分析结果对控制流图和使用记录进行更新;
基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
上述漏洞检测方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录,该使用记录可用于后续的漏洞模式匹配。此外,还会对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果。由于对目标应用的代码文件进行的数据流分析属于静态分析,静态分析的结果可能有缺失和错误,本申请中通过动态分析结果对静态分析得到的控制流图和使用记录进行纠错和补充,使得最终得到的控制流图和使用记录更加完整和准确。进而可基于更新后的使用记录进行漏洞模式匹配,得到更为准确的初步漏洞检测结果。再根据更新后的控制流图可以进一步确定与初步漏洞检测结果对应的更为准确的漏洞线索。再根据漏洞线索生成漏洞验证程序,以对初步漏洞检测结果进行自动的漏洞复测,进一步验证漏洞是否真实有效。这样通过动静态结合的方式可以初步准确的检测出可能存在的漏洞,再通过漏洞验证程序可以进一步对检测出的漏洞进行有效复测,可以大大降低漏洞误报率,提高漏洞检测的准确性。
附图说明
图1为一个实施例中漏洞检测方法的应用环境图;
图2为一个实施例中漏洞检测方法的流程示意图;
图3为一个实施例中采用白盒修复的界面示意图;
图4为一个实施例中后台系统的记录界面示意图;
图5为另一个实施例中漏洞检测方法的流程示意图;
图6为又一个实施例中漏洞检测方法的流程示意图;
图7为又一个实施例中预处理过程的流程示意图;
图8为又一个实施例中漏洞检测方法的流程示意图;
图9为一个实施例中漏洞检测装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的漏洞检测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。本申请各实施例所提供的漏洞检测方法可通过终端102或服务器104单独执行,还可以通过终端102和服务器104共同协作执行。以终端单独执行为例进行说明:一方面,对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录。另一方面,对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果。然后,基于动态分析结果对控制流图和使用记录进行更新,基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索。最后,根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
其中,终端102可以但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。本发明实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。服务器104可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。
下面再对本申请可能涉及到的相关技术进行说明:
本申请在某些场景中可能涉及到区块链技术的使用,如本申请可使用区块链存储漏洞检测方法执行过程中所涉及到的一些数据,比如采用区块链存储应用的安装文件;在执行本申请提供的漏洞检测方法的过程中,可将获得的与初步漏洞检测结果对应的漏洞检测报告存储至区块链上,还可将最终的漏洞检测结果存储在区块链上。
其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
此外,本申请提供的漏洞检测方法还可能会涉及到人工智能(ArtificialIntelligence,AI)技术,比如,在基于更新后的使用记录进行漏洞模式匹配时,就可基于预先训练好的神经网络模型进行漏洞检测。其中,人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
下面再对本申请所提供的漏洞检测方法进行详细的说明:
在一些实施例中,如图2所示,提供了一种漏洞检测方法,以该方法应用于计算机设备(该计算机设备具体可以是图1中的终端或服务器)为例进行说明,包括以下步骤:
步骤202,对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录。
其中,目标应用可以是任何类型的应用,示例性的,目标应用可以为社交类应用、购物类应用、搜索类应用等,本申请实施例对此不作限定。
其中,每个应用都有对应的安装文件,可获取目标应用的安装文件,基于安装文件获取目标应用的代码文件,以用于后续的数据流分析。
在一些实施例中,计算机设备可对目标应用的安装文件进行对抗性检测,在检测结果指示目标应用的安装文件不存在对抗性的情况下,基于安装文件获取目标应用的代码文件。在检测结果指示目标应用的安装文件存在对抗性的情况下,终止流程。
具体的,目标应用的安装文件为压缩包,计算机设备在获取到目标应用的安装文件后,可先对安装文件进行解压对抗检测,在安装文件不存在解压对抗性的情况下,从安装文件中获取预设格式的文件,对该预设格式的文件进行文件对抗检测,在该预设格式的文件不存在文件对抗性的情况下,确定目标应用的安装文件不存在对抗性。在安装文件存在解压对抗性的情况下,或者预设格式的文件存在文件对抗性的情况下,确定目标应用的安装文件存在对抗性。
在一些实施例中,在检测结果指示目标应用的安装文件不存在对抗性的情况下,计算机设备判断目标应用的安装文件是否加固,在目标应用的安装文件已加固的情况下,对目标应用的安装文件进行脱壳处理,以得到目标应用的代码文件。
具体的,计算机设备可从安装文件中提取配置清单文件,从该清单配置文件中提取安装文件的加固信息,基于该加固信息确定目标应用的安装文件是否加固。
其中,目标应用的代码文件中记录的代码可称为操作码(Operation Code,简称OPCode)指令,OPCode指令是对目标应用的源码进行编译后得到的,可对目标应用的代码文件中的OPCode指令进行逻辑分析,以确定目标应用包含的组件。基于目标应用包含的组件进行数据流分析得到控制流图。
在一些实施例中,计算机设备对代码文件中的OPCode指令进行逻辑分析可以包括对定义的java类、函数、成员、OPCode指令中用到的字符串等进行逻辑分析。
其中,目标应用包含的组件的类型包括开发平台提供的活动Activity、服务Service、内容提供者Content Provider、或者广播接收器BroadcastReceiver中的至少一种。
在一些实施例中,计算机设备对目标应用的代码文件中的OPCode指令进行逻辑分析,确定目标应用包含的组件的基础上,还可对各个组件所包含的函数的调用关系进行分析,得到函数调用图,该函数调用图可用作后续数据流分析的参考。
在一些实施例中,计算机设备在确定目标应用包含的组件后,可基于目标应用包含的组件,确定数据流分析的入口函数,从该入口函数开始进行数据流分析,得到控制流图。
在一些实施例中,计算机设备在确定目标应用包含的组件后,可从目标应用包含的组件中确定风险组件,并获取风险组件的入口函数,将风险组件的入口函数作为数据流分析的入口函数。
在一些实施例中,计算机设备可从风险组件的入口函数开始遍历风险组件所包括的每条语句,基于遍历至的每条语句的函数调用情况,建立函数调用关系,基于该函数调用关系,构建控制流图。
在一些实施例中,计算机设备从入口函数开始进行数据流分析的过程中,可对属于风险类型的函数的使用情况进行记录得到使用记录。具体的,可从风险组件的入口函数开始遍历风险组件所包括的每条语句,一方面,基于遍历至的每条语句的函数调用情况,建立函数调用关系,基于该函数调用关系,构建控制流图。另一方面,对属于风险类型的函数在每条语句中的使用情况进行记录得到使用记录。
步骤204,对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果。
在一些实施例中,计算机设备可将目标应用加载至动态模拟器中,并启动动态模拟器,动态模拟器便会使用测试工具对真实操作场景中对象可能执行的操作进行动态模拟。动态模拟器可对动态模拟过程中目标应用的运行情况进行分析,得到动态分析结果。
其中,动态模拟器可以为能够实现动态模拟的软件或者硬件设备,示例性的,动态模拟器可以为沙盒。测试工具可以为任何能够实现操作模拟的工具,示例性的,测试工具可以为猴子monkey工具。对象可能执行的操作包括按键、触屏、滑动等,本申请实施例对此不作限定。
在一些实施例中,计算机设备将目标应用加载至动态模拟器后,可向动态模拟器中注入钩子(hook)点,并启动动态模拟器,动态模拟器便会使用测试工具对真实操作场景中对象可能执行的操作进行动态模拟,动态模拟器可基于各个hook点获取到的信息,对动态模拟过程中目标应用的运行情况进行分析,得到动态分析结果。
在一些实施例中,计算机设备可使用任何能够实现hook点注入的方式,向动态模拟器中注入钩子hook点,示例性的,可使用跨系统、跨平台的开源进程注入框架(Frida)注入hook点。
在一些实施例中,计算机设备可获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合,可向动态模拟器中目标函数集合中各函数对应节点处、控制流图中各个函数对应的节点处、对代码文件中的OPCode指令进行逻辑分析得到的函数调用图中各个函数对应的节点处、目标应用包含的组件的生命周期入口函数对应的节点处、特定的应用程序编程接口(Application Programming Interface,简称API)处均注入hook点,本申请实施例对此不作限定。
其中,特定的应用程序编程接口包括权限申请、文件读写、或者网络请求中的至少一种。
在一些实施例中,计算机设备可使用主动调用技术触发常见应用场景的入口,并在该入口传入污点数据,可对污点数据的传播情况进行分析得到动态分析结果。其中,上述常见应用场景的入口可以包括扫码、深度链接(Deeplink)、蓝牙等硬件接口对应的入口。
需要说明的是:通过动态模拟器获取动态分析结果、以及通过触发常见应用场景的入口获取动态分析结果中可仅执行其中一个,也可以两者均执行,两者均执行时,两者获取的动态分析结果可相互补充,得到最终的动态分析结果。动态分析结果可以包括:目标应用的运行过程中函数调用关系、上下文信息、文件访问信息或者日志记录中的至少一种。
步骤206,基于动态分析结果对控制流图和使用记录进行更新。
其中,控制流图为对目标应用的代码文件进行数据流分析得到的,用于指示函数之间调用关系的拓扑图;动态分析结果包括目标应用实际运行过程中函数之间的调用关系。
在一些实施例中,计算机设备可从动态分析结果中提取函数调用关系,基于提取到的函数调用关系,对控制流图上的函数调用关系进行纠正和补充。
具体的,一方面计算机设备可在控制流图上查找用于实现目标功能的函数调用关系,另一方面计算机设备在动态分析结果中查找用于实现该目标功能的函数调用关系,将查找到的两种调用关系进行比较,若两者一致,则不作任何处理,若两者不一致,则基于动态分析结果中用于实现目标功能的函数调用关系,对控制流图上用于实现目标功能的函数调用关系进行纠正和补充。
在一些实施例中,考虑到属于风险类型的函数的使用记录是在数据流分析过程中得到的,而数据流分析得到控制流图可能发生了更新,因此,计算机设备可从更新后的控制流图上查找更新部分,基于更新部分中属于风险类型的函数的使用情况,对属于风险类型的函数的使用记录进行更新。
步骤208,基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索。
其中,预先可针对不同业务场景建立不同的漏洞模型,这里的漏洞模式匹配可以理解为漏洞模型匹配。示例性的,可针对使用原生应用中的浏览器引擎(webview)浏览万维网(web)页面这一业务场景建立相应的漏洞模型,针对打开统一资源定位符(UniformResource Locator,简称url)这一业务场景建立相应的漏洞模型,针对通过深度链接(Deeplink)访问敏感页面这一业务场景建立相应的漏洞模型,针对意图代理器(intentproxy)这一业务场景建立相应的漏洞模型,针对访问敏感支付模块绕过应用安全校验这一业务场景建立相应的漏洞模型。
在一些实施例中,针对每种漏洞模型,检测人员可为该漏洞模型定义属于风险类型的目标函数集合,计算机设备可将更新后的使用记录中属于风险类型的函数,与目标函数集合进行匹配,若能够匹配上,则确定目标应用可能存在该漏洞,从而得到初步漏洞检测结果。
示例性的,假设检测人员针对使用原生应用中的浏览器引擎(webview)浏览万维网(web)页面这一业务场景建立漏洞模型1,为漏洞模型1定义的属于风险类型的目标函数集合为目标函数集合1。针对打开统一资源定位符(Uniform Resource Locator,简称url)这一业务场景建立漏洞模型2,为漏洞模型2定义的属于风险类型的目标函数集合为目标函数集合2。针对通过深度链接(Deeplink)访问敏感页面这一业务场景建立漏洞模型3,为漏洞模型3定义的属于风险类型的目标函数集合为目标函数集合3。针对意图代理器(intentproxy)这一业务场景建立漏洞模型4,为漏洞模型4定义的属于风险类型的目标函数集合为目标函数集合4。针对访问敏感支付模块绕过应用安全校验这一业务场景建立漏洞模型5,为漏洞模型5定义的属于风险类型的目标函数集合为目标函数集合5。可针对5种漏洞模型中每种漏洞模型,依次执行如下匹配过程,将更新后的使用记录中属于风险类型的函数,与该漏洞模型对应的目标函数集合进行匹配,若能够匹配上,则确定目标应用可能存在该漏洞模型对应的漏洞,基于每种漏洞模型各自对应的匹配结果,确定初步漏洞检测结果。
其中,漏洞线索包括攻击者利用漏洞攻击目标应用时所基于的漏洞攻击的时机、漏洞攻击的入口、漏洞攻击参数等任何实现漏洞攻击的相关信息。
在一些实施例中,计算机设备在得到初步漏洞检测结果后,可在更新后的控制流图上确定与该初步漏洞检测结果对应的漏洞攻击链路,基于该漏洞攻击链路以及动态分析结果确定漏洞攻击的输入条件,可将漏洞攻击链路和该输入条件作为漏洞线索,用作后续漏洞验证程序的生成。
在一些实施例中,初步漏洞检测结果用于指示目标应用可能存在的漏洞,计算机设备可基于目标应用可能存在的漏洞,在更新后的控制流图上,确定一条攻击者利用该漏洞攻击目标应用时可能使用到的漏洞攻击链路,可结合动态分析结果分析攻击者使用该漏洞攻击链路攻击目标应用时使用到的输入条件,可将漏洞攻击链路和该输入条件作为漏洞线索,用作后续漏洞验证程序的生成。
步骤210,根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
在一些实施例中,计算机设备可利用漏洞验证代码生成漏洞验证程序,漏洞验证代码为漏洞验证的通用代码,在对目标应用是否存在某个漏洞进行验证时,可将该漏洞的相关漏洞线索填充至漏洞验证代码中,便可具有特定漏洞验证功能的代码。
在一些实施例中,计算机设备在得到与初步漏洞检测结果对应的漏洞线索后,将该漏洞线索填充至漏洞验证代码中,便可得到与初步漏洞检测结果对应的目标漏洞验证代码。可基于该目标漏洞验证代码,对目标应用是否存在初步漏洞检测结果中的漏洞进行验证。
在一些实施例中,计算机设备在得到目标漏洞验证代码后,可将目标漏洞验证代码转换为可以安装在终端上的漏洞验证程序,后续可使用该漏洞验证程序对目标应用存在的漏洞进行验证。
在一些实施例中,在通过漏洞验证程序验证得到目标应用确实存在某个漏洞的情况下,可对该漏洞进行修复。示例性的,可通过人工方式对漏洞进行修复,或者通过自动修复工具对漏洞进行修复,本申请实施例对此不作限定。
本申请实施例提供的漏洞检测方法,对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录,该使用记录可用于后续的漏洞模式匹配。对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果。基于动态分析结果对控制流图和使用记录进行更新。对目标应用的代码文件进行的数据流分析属于静态分析,静态分析的结果可能有缺失和错误,本申请实施例提出对目标应用的真实操作场景进行动态模拟,以获得动态分析结果,基于动态分析结果对静态分析得到的控制流图和使用记录进行纠错和补充,使得最终得到的控制流图和使用记录更加完整和准确。基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,由于上述动静态结合的方式提升了使用记录的准确性,使得基于使用记录获得的漏洞模式匹配结果也更加准确,提升了初步漏洞检测结果的准确性。根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索,上述动静态结合的方式同样提升了控制流图的的准确性,基于更新后的控制流图确定的漏洞线索也更加准确。根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。本申请实施例在基于使用记录进行漏洞模式匹配,得到初步漏洞检测结果后,还进一步基于漏洞线索生成了漏洞验证程序,并使用该漏洞验证程序对初步漏洞检测结果做进一步复测,大大提高漏洞检测的准确性,降低漏洞误报率。
在一些实施例中,对目标应用的代码文件进行数据流分析得到控制流图的步骤,包括:对目标应用的代码文件进行组件分析,得到目标应用包含的组件;针对目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在当前组件能被外部程序调用的情况下,将当前组件作为风险组件;获取目标应用包含的风险组件的入口函数,从入口函数开始进行数据流分析,得到控制流图。
其中,可以从目标应用的安装文件中获取目标应用的代码文件,具体的,可将安装文件中的可执行文件(dex文件)作为本申请实施例中的代码文件。dex文件包括目标应用的OPCode指令。
在一些实施例中,计算机设备可对目标应用的代码文件中的OPCode指令进行逻辑分析,以确定目标应用包含的组件。此处逻辑分析的对象可以包括OPCode指令中定义的java类、函数、成员、字符串等,本申请实施例对此不作限定。
在一些实施例中,计算机设备在对目标应用的代码文件中的OPCode指令进行逻辑分析的过程中,还可对每个组件内函数的调用关系进行分析,得到的分析结果可用于后续数据流分析的参考。
在一些实施例中,针对目标应用包含的每个组件,计算机设备可获取该组件的导出属性,若该组件的导出属性为可以导出,则确定该组件能被外部程序调用,若该组件的导出属性为不能导出,则确定该组件不能被外部程序调用。
在一些实施例中,计算机设备可从活动(Activity)、服务(Service)、广播接受者(Broadcast Receive)、内容提供者(Content Provider)这四大组件声明的清单文件中查找各个组件的导出属性。
在一些实施例中,对于目标应用包含的每个组件,在判断该组件能被外部程序调用的情况下,计算机设备可确定该组件存在漏洞攻击风险,可将该组件作为风险组件。
在一些实施例中,计算机设备对目标应用的代码文件中的OPCode指令进行逻辑分析后,可以确定目标应用包含的组件,在确定目标应用包含的某个组件为风险组件的情况下,可获取该风险组件的代码信息,从代码信息中查找该风险组件的入口函数,从入口函数开始进行数据流分析,得到控制流图。
在一些实施例中,目标应用包含的组件中可能存在多个风险组件,计算机设备可针对每个风险组件,查找该风险组件的入口函数,将各个风险组件的入口函数添加至数据流分析的入口,后续从数据流分析的入口中查找入口函数,从查找到的入口函数开始进行数据流分析,得到控制流图。
在一些实施例中,计算机设备可使用面向对象的编程语言优化框架(soot)构建dummyMainMethod,将该dummyMainMethod作为数据流分析的入口,可将各个风险组件的入口函数添加至dummyMainMethod中,后续从dummyMainMethod中查找入口函数,从查找到的入口函数开始进行数据流分析,得到控制流图。
上述实施例中,对目标应用的代码文件进行组件分析,得到目标应用包含的组件;针对目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在当前组件能被外部程序调用的情况下,将当前组件作为风险组件;获取目标应用包含的风险组件的入口函数,从入口函数开始进行数据流分析,得到控制流图。该控制流可用于后续漏洞模式匹配,以确定目标应用可能存在的漏洞,得到初步漏洞检测结果。
在一些实施例中,从入口函数开始进行数据流分析得到控制流图的步骤,包括:从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;在遍历至的当前语句存在函数调用的情况下,建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;基于整个遍历过程中建立的函数调用关系,构建控制流图。
在一些实施例中,计算机设备可将各个风险组件的入口函数添加至dummyMainMethod中,在进行数据流分析时,依次遍历dummyMainMethod中各个入口函数,对于遍历至的每个入口函数,均执行上述遍历语句的流程。
在一些实施例中,计算机设备可获取入口函数对应的目标组件的代码信息,从代码信息中定位入口函数的位置,从入口函数开始,逐条遍历代码信息中的每条语句,对于遍历至的当前语句,判断当前语句是否存在函数调用,若当前语句存在函数调用,则建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,或者当前语句不存在函数调用的情况下,对当前语句的下一语句继续进行遍历,直至遍历完目标组件包括的所有语句。对dummyMainMethod中各个入口函数均执行上述处理,可得到代码文件中各函数之间的函数调用关系,可基于得到的函数调用关系,构建控制流图。
示例性的,假设从入口函数开始遍历至第10条语句时发现第10条语句调用了第一函数,则建立第10条语句所属的函数与第一函数之间的调用关系,并对第一函数中包含的语句进行遍历,假设遍历至第一函数的第5条语句时发现第5条语句调用了第二函数,则建立第一函数与第二函数之间的调用关系,并对第二函数中包含的语句进行遍历,在遍历完第二函数中的所有语句的情况下,返回遍历第一函数中第6条语句,在遍历完第一函数中的所有语句的情况下,返回遍历上述第10条语句之后的语句。基于整个遍历过程中建立的函数调用关系,构建控制流图。
需要说明的是:上述示例仅以嵌套两次函数调用为例说明遍历过程,还可能存在嵌套更多次函数调用的情况,遍历过程均类似,本申请实施例对此不再赘述。
在一些实施例中,计算机设备在数据流分析过程中,对于遍历至的当前语句,除了判断当前语句是否存在函数调用,还可判断当前语句是否使用到属于风险类型的函数,若使用到属于风险类型的函数,则对属于风险类型的函数的使用情况进行记录,基于整个遍历过程中记录的风险类型的函数的使用情况生成使用记录。
其中,属于风险类型的函数的使用情况包括通过该函数创建了什么对象、在代码信息的第几行创建的该对象、使用什么寄存器引用该对象等。本申请实施例对此不作限定。
在一些实施例中,计算机设备可使用指向分析工具spark进行数据流分析,具体的,可将函数调用方称为caller,将被调用的函数称为callee,在数据流分析过程中,可对caller中的每条语句逐条进行遍历,在某条语句存在函数调用的情况下,对callee中的每条语句逐条进行遍历,在遍历完callee中所有语句后,返回遍历caller中剩余的语句。基于整个遍历过程中建立的函数调用关系,构建控制流图。
上述实施例中,从入口函数开始进行数据流分析得到控制流图的步骤,包括:从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;在遍历至的当前语句存在函数调用的情况下,建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;基于整个遍历过程中建立的函数调用关系,构建控制流图。该控制流可用于后续漏洞模式匹配,以确定目标应用可能存在的漏洞,得到初步漏洞检测结果。
在一些实施例中,对目标应用的代码文件进行组件分析之前,本申请实施例提供的漏洞检测方法还包括:获取目标应用的安装文件,并从安装文件中提取配置清单文件;在配置清单文件中查找安装文件的加固信息;在加固信息指示安装文件已加固的情况下,对安装文件进行脱壳处理,以得到目标应用的代码文件。
其中,目标应用的安装文件可以为安卓应用程序包(Android applicationpackage,简称APK),APK为压缩文件,可对APK进行解压,从解压得到的文件中提取配置清单文件。
在一些实施例中,计算机设备可从配置清单文件中获取安装文件的加固信息,需要说明的是,除了获取加固信息以外,还可获取包名、应用名、证书签名、运行系统版本、内嵌软件开发工具包(Software Development Kit,简称SDK)列表等,这些信息可用于后续漏洞模式匹配。
其中,加固信息用于指示安装文件是否加固,在加固信息指示安装文件已经加固的情况下,说明安装文件中的部分可执行文件(dex文件)被隐藏,则对安装文件进行脱壳处理,以得到全部的dex文件,将脱壳处理得到的dex文件作为目标应用的代码文件进行后续的数据流分析。在加固信息指示安装文件未加固的情况下,说明安装文件中的dex文件是完整的,直接将安装文件中的dex文件作为目标应用的代码文件进行后续的数据流分析。
在一些实施例中,计算机设备可采用手动脱壳的方式对安装文件进行脱壳处理,也可采用专门的脱壳工具对安装文件进行脱壳处理,本申请实施例对脱壳处理的方式不作限定。
上述实施例中,对目标应用的代码文件进行组件分析之前,本申请实施例提供的漏洞检测方法还包括:获取目标应用的安装文件,并从安装文件中提取配置清单文件;在配置清单文件中查找安装文件的加固信息;在加固信息指示安装文件已加固的情况下,对安装文件进行脱壳处理,以得到目标应用的代码文件。在得到目标应用的代码文件的基础上,对目标应用的代码文件进行数据流分析,得到控制流图。
在一些实施例中,从安装文件中提取配置清单文件之前,本申请实施例提供的漏洞检测方法还包括:通过解压工具对安装文件进行解压对抗检测,得到第一对抗检测结果;通过分析预设格式文件的工具,对安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件。
其中,目标应用的安装文件可以为安卓应用程序包(Android applicationpackage,简称APK),APK为压缩文件,可通过解压工具对APK进行解压,若能够成功解压,说明安装文件不存在解压对抗性,则第一对抗检测结果为不存在对抗性,若无法解压,说明安装文件存在解压对抗性,则第一对抗检测结果为存在对抗性。
在一些实施例中,在能够对APK成功解压的情况下,计算机设备可从解压后的文件中提取预设格式的文件,通过分析预设格式文件的工具,对该预设格式的文件进行文件对抗检测,得到第二对抗检测结果。
其中,预设格式的文件可以包括可扩展标记语言(xml)文件,资源索引表(arsc)文件中的至少一种,预设格式的文件中存储的内容为二进制,需要对应的分析工具来将二进制内容转换成文本和结构化的数据,以便于后续的数据流分析。xml文件对应的分析工具可以为反编译AXMLPrinter工具,arsc文件对应的分析工具可以为Android资源打包工具AAPT2。
在一些实施例中,计算机设备可使用AXMLPrinter工具对xml文件进行分析,在AXMLPrinter工具无法得到可读文件的情况下,说明xml文件存在文件对抗性,在AXMLPrinter工具能够将xml文件转换为可读文件的情况下,说明xml文件不存在文件对抗性。
在一些实施例中,计算机设备可使用Android资源打包工具AAPT2对arsc文件进行分析,在Android资源打包工具AAPT2无法从arsc文件提取到字符串信息,或者Android资源打包工具AAPT2报错的情况下,说明arsc文件存在文件对抗性,在Android资源打包工具AAPT2能够从arsc文件提取到字符串信息的情况下,说明arsc文件不存在文件对抗性。
在一些实施例中,在xml文件和arsc文件中任一存在文件对抗性的情况下,计算机设备可确定第二对抗检测结果为存在对抗性,在xml文件和arsc文件均不存在文件对抗性的情况下,计算机设备可确定第二对抗检测结果为不存在对抗性。
在一些实施例中,计算机设备在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件,并进行后续的处理。在第一对抗检测结果和第二对抗检测结果中,任一结果指示存在对抗性的情况下,终止流程。
上述实施例中,通过解压工具对安装文件进行解压对抗检测,得到第一对抗检测结果;通过分析预设格式文件的工具,对安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件,并进行后续的处理,从而得到控制流图。
在一些实施例中,对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果的步骤,包括:将目标应用的安装文件加载至动态模拟器中,以使得动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;基于函数调用关系、上下文信息、以及文件访问信息生成动态分析结果。
其中,动态模拟器可以为能够实现动态模拟的软件或者硬件设备,示例性的,动态模拟器可以为沙盒。
在一些实施例中,计算机设备可将目标应用的安装文件加载至沙盒中,然后使用跨平台的开源进程注入框架(Frida)向沙盒中注入hook点。示例性的,可在各漏洞模型对应的目标函数集合中各函数对应节点处、控制流图中各个函数对应的节点处、对代码文件中的OPCode指令进行逻辑分析得到的函数调用图中各个函数对应的节点处、目标应用包含的组件的生命周期入口函数对应的节点处、特定的应用程序编程接口(ApplicationProgramming Interface,简称API)处均注入hook点。然后启动动态模拟器,动态模拟器便会使用测试工具对真实操作场景中对象可能执行的操作进行动态模拟,动态模拟器可基于各个hook点获取到的信息,确定动态模拟过程中函数调用关系、上下文信息、文件访问信息,并将这些信息记录下来。可基于动态模拟器记录的函数调用关系、上下文信息以及文件访问信息生成动态分析结果。
其中,动态模拟器记录的上下文信息可以包括参数、函数值、寄存器以及内存等,本申请实施例对此不作限定。
上述实施例中,将目标应用的安装文件加载至动态模拟器中,以使得动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;基于函数调用关系、上下文信息、以及文件访问信息生成动态分析结果。该动态分析结果可用于对数据流分析得到的控制流图和使用记录进行更新,从而提升控制流图和使用记录的准确性。
在一些实施例中,基于动态分析结果对控制流图和使用记录进行更新的步骤包括:将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,基于比较结果对控制流图进行更新;在更新后的控制流图中确定更新部分,对更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新使用记录。
其中,数据流分析得到的控制流图是纯静态分析的结果,该控制流图可能存在缺失和错误的情况。而动态分析结果包括目标应用实际运行过程中函数之间的调用关系,可从动态分析结果中获取该函数调用关系,基于获取到的函数调用关系,对控制流图上的函数调用关系进行纠正和补充。
在一些实施例中,计算机设备可将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,若控制流图中不存在将动态分析结果中的函数调用关系,则将动态分析结果中的函数调用关系补充至控制流图中。若动态分析结果中的函数调用关系与控制流图中函数调用关系不一致,则将控制流图中函数调用关系更新为动态分析结果中的函数调用关系,从而实现对控制流图的补充和纠正。
在一些实施例中,由于属于风险类型的函数的使用记录是在数据流分析过程中得到的,而数据流分析得到控制流图可能发生了更新,计算机设备可从更新后的控制流图上查找更新部分,对更新部分所包含的语句逐条进行遍历,对于遍历至的当前语句,判断该语句是否使用到属于风险类型的函数,若使用到属于风险类型的函数,则对属于风险类型的函数的使用情况进行记录,基于对更新部分进行遍历的过程中涉及到的属于风险类型的函数的使用情况,更新使用记录。
上述实施例中,将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,基于比较结果对控制流图进行更新;在更新后的控制流图中确定更新部分,对更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新使用记录,提升了使用记录的准确性,使得后续基于使用记录获得的漏洞模式匹配结果也更加准确。
在一些实施例中,基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,包括:获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。
其中,预先建立的各漏洞模型可以包括针对使用原生应用中的浏览器引擎(webview)浏览万维网(web)页面这一业务场景建立相应的漏洞模型,为方便说明,将该漏洞模型称为漏洞模型1。还可包括针对打开统一资源定位符(Uniform Resource Locator,简称url)这一业务场景建立相应的漏洞模型,为方便说明,将该漏洞模型称为漏洞模型2。还可包括针对通过深度链接(Deeplink)访问敏感页面这一业务场景建立相应的漏洞模型,为方便说明,将该漏洞模型称为漏洞模型3。还可包括针对意图代理器(intent proxy)这一业务场景建立相应的漏洞模型,为方便说明,将该漏洞模型称为漏洞模型4。还可包括针对访问敏感支付模块绕过应用安全校验这一业务场景建立相应的漏洞模型,为方便说明,将该漏洞模型称为漏洞模型5。
其中,更新后的使用记录中属于风险类型的函数包括:污染源点函数和污染终点函数。属于风险类型的目标函数集合可以包括:污染源点类型的目标函数集合和污染终点类型的目标函数集合。
在一些实施例中,计算机设备针对每种漏洞模型,可判断更新后的使用记录中污染源点函数,是否落入该漏洞模型所对应的污染源点类型的目标函数集合中,并且判断更新后的使用记录中污染终点函数,是否落入该漏洞模型所对应的污染终点类型的目标函数集合中,若两个判断的判断结果均为是,则取得目标应用可能存在该漏洞模型对应的漏洞。对每种漏洞模型均做上述判断,基于各漏洞模型各自对应的判断结果,确定初步漏洞检测结果。
示例性的,假设漏洞模型1对应的污染源点类型的目标函数集合为source集合1,漏洞模型1对应的污染终点类型的目标函数集合为sink集合1。漏洞模型2对应的污染源点类型的目标函数集合为source集合2,漏洞模型2对应的污染终点类型的目标函数集合为sink集合2。漏洞模型3对应的污染源点类型的目标函数集合为source集合3,漏洞模型3对应的污染终点类型的目标函数集合为sink集合3。漏洞模型4对应的污染源点类型的目标函数集合为source集合4,漏洞模型4对应的污染终点类型的目标函数集合为sink集合4。漏洞模型5对应的污染源点类型的目标函数集合为source集合5,漏洞模型5对应的污染终点类型的目标函数集合为sink集合5。判断更新后的使用记录中污染源点函数是否落入source集合1中,并且判断更新后的使用记录中污染终点函数是否落入sink集合1,若均落入,则认为目标应用可能存在漏洞模型1对应的漏洞,若任一判断结果为未落入,则认为目标应用不存在漏洞模型1对应的漏洞。针对漏洞模型2、漏洞模型3、漏洞模型4和漏洞模型5均做上述判断,可确定目标应用是否可能存在相应的漏洞。基于各漏洞模型各自对应的判断结果,确定初步漏洞检测结果。
上述实施例中,获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。由于使用记录是基于动静态结合的方式得到的,准确性较高,使得基于使用记录获得的漏洞模式匹配结果也更加准确,提升了初步漏洞检测结果的准确性。
在一些实施例中,动态分析结果中包括上下文信息和文件访问信息,根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索的步骤包括:在更新后的控制流图上确定与初步漏洞检测结果对应的漏洞攻击链路;基于漏洞攻击链路所包含的各函数的调用关系、以及动态分析结果中的上下文信息和文件访问信息,确定漏洞攻击的输入条件;将漏洞攻击链路和输入条件作为漏洞线索。
其中,初步漏洞检测结果用于指示目标应用可能存在的漏洞,可基于目标应用可能存在的漏洞,在更新后的控制流图上,确定一条攻击者利用该漏洞攻击目标应用时可能使用到的漏洞攻击链路,可基于漏洞攻击链路所包含的各函数的调用关系、动态分析结果中的上下文信息、文件访问信息以及日志记录,分析攻击者使用该漏洞攻击链路攻击目标应用时使用到的输入条件,可将漏洞攻击链路和该输入条件作为漏洞线索。
需要说明的是:在初步漏洞检测结果指示目标应用可能存在多个漏洞的情况下,对于目标应用可能存在的每个漏洞,均执行上述漏洞线索生成的过程,后续基于每个漏洞对应的漏洞线索,均生成对应的漏洞验证程序。
在一些实施例中,计算机设备可基于初步漏洞检测结果、漏洞攻击链路、漏洞攻击的输入条件、漏洞线索、以及可采用的修复方案等信息,生成漏洞报告,供修复阶段参考。
上述实施例中,在更新后的控制流图上确定与初步漏洞检测结果对应的漏洞攻击链路;基于漏洞攻击链路所包含的各函数的调用关系、以及动态分析结果中的上下文信息和文件访问信息,确定漏洞攻击的输入条件;将漏洞攻击链路和输入条件作为漏洞线索。由于上述动静态结合的方式提升了控制流图的的准确性,基于更新后的控制流图确定的漏洞线索也更加准确。
在一些实施例中,根据漏洞线索生成漏洞验证程序的步骤包括:将漏洞线索填充至漏洞验证代码中,得到与初步漏洞检测结果对应的目标漏洞验证代码;对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序。
在一些实施例中,计算机设备可利用漏洞验证代码生成漏洞验证程序,漏洞验证代码为漏洞验证的通用代码,在得到与初步漏洞检测结果对应的漏洞线索后,将该漏洞线索填充至漏洞验证代码中,便可得到与初步漏洞检测结果对应的目标漏洞验证代码。可对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序。
在一些实施例中,开发人员可将漏洞验证程序和目标应用均安装在测试机上,并在测试机上同时打开漏洞验证程序和目标应用,以通过漏洞验证程序进一步验证目标应用是否确实存在对应的漏洞。
在一些实施例中,可针对每种漏洞模型,制作示范如何使用对应漏洞验证程序的视频教程,开发人员可参考该视频教程,对安装在测试机上的漏洞验证程序进行操作,以实现对目标应用可能存在的漏洞的复测。
上述实施例中,将漏洞线索填充至漏洞验证代码中,得到与初步漏洞检测结果对应的目标漏洞验证代码;对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序,后续可将漏洞验证程序安装在测试机上,利用该漏洞验证程序实现对目标应用可能存在的漏洞的复测,大大提高漏洞检测的准确性,降低漏洞误报率。
在一些实施例中,本申请实施例提供的漏洞检测方法还包括:在使用漏洞验证程序验证目标应用存在初步漏洞检测结果所指示的目标漏洞的情况下,对目标漏洞进行修复。
在一些实施例中,漏洞模式匹配过程涉及到的漏洞模型是基于业务场景建立的,不同的业务场景可能有不同的修复需求,这种情况下,可通过人工修复的方式对目标应用存在的漏洞进行修复。
在一些实施例中,在业务场景比较简单,对修复的需求较低的情况下,可通过修复工具自动修复。
在一些实施例中,在没有目标应用的源码或者不方面获得源码的情况下,可使用黑盒工具修复,如果有源码,可以下载IDEA插件进行漏洞修复,这种修复方式可称为白盒修复。示例性的,图3为对目标应用进行修复时可能使用到的一种界面图,图3所示界面包括目录区、代码区、修复结果区、修复日志区。目录区用于展示应用的代码结构,代码区用于展示当前待修复的代码,在对当前待修复的代码进行修复时,可调出图3所示工具栏,在工具栏中选择编码规约扫描这一工具,该工具便会对当前待修复的代码自动进行修复,修复结果会展示在修复结果区,并且本次修复的相关内容会形成日志在修复日志区展示。图4为采用白盒修复时后台系统的记录界面示意图,该界面可以包括对象信息、漏洞分析、漏洞统计、漏洞详情、系统设置、对象管理等条目,提交漏洞修复结果的界面上可设置上报统计、详细信息、文件树等控件,供修复人员使用。
上述实施例中,在使用漏洞验证程序验证目标应用存在初步漏洞检测结果所指示的目标漏洞的情况下,对目标漏洞进行修复。在漏洞修复过程可使用自动化修复工具,提升了漏洞修复效率。
在一些实施例中,提供一种漏洞检测方法,参见图5所示,该漏洞检测方法包括:
步骤501,通过解压工具对目标应用的安装文件进行解压对抗检测,得到第一对抗检测结果;通过分析预设格式文件的工具,对安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件。
步骤502,从安装文件中提取配置清单文件;在配置清单文件中查找安装文件的加固信息;在加固信息指示安装文件已加固的情况下,对安装文件进行脱壳处理,以得到目标应用的代码文件。
步骤503,对目标应用的代码文件进行组件分析,得到目标应用包含的组件;针对目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在当前组件能被外部程序调用的情况下,将当前组件作为风险组件;获取目标应用包含的风险组件的入口函数,从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;在遍历至的当前语句存在函数调用的情况下,建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;基于整个遍历过程中建立的函数调用关系,构建控制流图。
步骤504,在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录。
步骤505,将目标应用的安装文件加载至动态模拟器中,以使得动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;基于函数调用关系、上下文信息、以及文件访问信息生成动态分析结果。
步骤506,将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,基于比较结果对控制流图进行更新;在更新后的控制流图中确定更新部分,对更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新使用记录。
步骤507,获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。
步骤508,在更新后的控制流图上确定与初步漏洞检测结果对应的漏洞攻击链路;基于漏洞攻击链路所包含的各函数的调用关系、以及动态分析结果中的上位文信息和文件访问信息,确定漏洞攻击的输入条件;将漏洞攻击链路和输入条件作为漏洞线索。
步骤509,将漏洞线索填充至漏洞验证代码中,得到与初步漏洞检测结果对应的目标漏洞验证代码;对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序。漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
步骤510,在使用漏洞验证程序验证目标应用存在初步漏洞检测结果所指示的目标漏洞的情况下,对目标漏洞进行修复。
本申请实施例提供的漏洞检测方法,对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录,该使用记录可用于后续的漏洞模式匹配。对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果。基于动态分析结果对控制流图和使用记录进行更新。对目标应用的代码文件进行的数据流分析属于静态分析,静态分析的结果可能有缺失和错误,本申请实施例提出对目标应用的真实操作场景进行动态模拟,以获得动态分析结果,基于动态分析结果对静态分析得到的控制流图和使用记录进行纠错和补充,使得最终得到的控制流图和使用记录更加完整和准确。基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,由于上述动静态结合的方式提升了使用记录的准确性,使得基于使用记录获得的漏洞模式匹配结果也更加准确,提升了初步漏洞检测结果的准确性。根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索,上述动静态结合的方式同样提升了控制流图的的准确性,基于更新后的控制流图确定的漏洞线索也更加准确。根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。本申请实施例在基于使用记录进行漏洞模式匹配,得到初步漏洞检测结果后,还进一步基于漏洞线索生成了漏洞验证程序,并使用该漏洞验证程序对初步漏洞检测结果做进一步复测,大大提高漏洞检测的准确性,降低漏洞误报率。
在一些可能的场景中,本申请实施例提供的漏洞检测方法可以应用于对社交类应用、购物类应用、搜索类应用的检测,本申请实施例对此不作限定。以搜索应用为例,参见图6所示,在对搜索应用进行漏洞检测的过程中,可先对搜索应用进行预处理,该预处理过程可以包括对抗性检测,在检测结果为不存在对抗性的情况下,判断搜索应用的安装文件是否加固,在安装文件已经加固的情况下,对安装文件进行脱壳处理,得到搜索应用的代码文件。可对搜索应用的代码文件进行静态分析,该静态分析可以包括组件分析,以得到搜索应用包含的组件,可基于搜索应用包含的组件进行数据流分析,得到控制流图以及属于风险类型的函数的使用记录。可将搜索应用安装在沙盒中,以对搜索应用进行动态分析,得到动态分析结果,可基于动态分析结果对数据流分析得到的控制流图、属于风险类型的函数的使用记录进行更新,得到更新后的控制流图和更新后的使用记录。可基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索,根据漏洞线索生成概念验证(Proof of Concept,简称PoC),即,漏洞验证程序,至此漏洞初步检测过程结束。在漏洞修复阶段,可对搜索应用是否存在对应的漏洞进行验证,具体的,可将漏洞验证程序和搜索应用安装在测试机上,通过漏洞验证程序进行自动验证。在验证结果为存在漏洞的情况下,查看该漏洞对应的业务场景是否有定制化修复需求,若有,则开发人员人工进行修复,若没有,则查看是否能获得搜索应用的源码,若能获得源码,则安装修复插件进行修复,若无法获得源码,则通过黑盒修复工具进行修复。
在一些实施例中,参见图7所示,图6中静态分析之前的流程可以包括,对目标应用的安装文件进行解压对抗检测、对安装文件中的xml文件进行文件对抗检测、对arsc文件进行文件对抗检测,在均不存在对抗性的情况下,从安装文件中的配置清单文件中提取目标应用的基础信息,该基础信息可以包括加固信息、包名、应用名、证书签名、运行系统版本、内嵌SDK列表等,基于加固信息识别安装文件是否加固,在安装文件已经加固的情况下,对安装文件进行脱壳处理,得到目标应用的代码文件,在安装文件未加固的情况下,说明dex文件是完整的,直接将安装文件中的dex文件作为目标应用的代码文件。
在一些实施例中,参见图8所示,可对目标应用的代码文件进行静态分析,得到目标应用包含的组件,以及这些组件中风险组件的生命周期函数,即入口函数,可将各风险组件的入口函数添加至预先构建的dummyMainMethod中,从dummyMainMethod中的入口函数开始进行数据流分析,得到属于风险类型的函数的使用记录,数据流分析还可以得到目标应用的控制流图。之后可启动动态引擎以进入动态分析子流程,该子流程可以包括:将安装文件加载至沙盒设备,启动沙盒,在沙盒中注入hook点,控制测试工具点击目标应用10分钟,基于沙盒记录的内容生成动态分析结果。另外还可使用主动调用技术触发常见应用场景的入口,并在该入口传入污点数据,可对污点数据的传播情况进行分析得到动态分析结果。可将动态分析结果导出,基于动态分析结果更新控制流图和使用记录,基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;根据漏洞线索生成漏洞验证程序。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的漏洞检测方法的漏洞检测装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个漏洞检测装置实施例中的具体限定可以参见上文中对于漏洞检测方法的限定,在此不再赘述。
在一个实施例中,如图9所示,提供了一种漏洞检测装置,包括:
静态分析模块901,用于对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
动态分析模块902,用于对目标应用的真实操作场景进行动态模拟,以对目标应用的运行情况进行分析得到动态分析结果;
更新模块903,用于基于动态分析结果对控制流图和使用记录进行更新;
漏洞模式匹配模块904,用于基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与初步漏洞检测结果对应的漏洞线索;
程序生成模块905,用于根据漏洞线索生成漏洞验证程序,漏洞验证程序用于对初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
在一些实施例中,静态分析模块901具体用于:对目标应用的代码文件进行组件分析,得到目标应用包含的组件;针对目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在当前组件能被外部程序调用的情况下,将当前组件作为风险组件;获取目标应用包含的风险组件的入口函数,从入口函数开始进行数据流分析,得到控制流图。
在一些实施例中,静态分析模块901具体用于:从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;在遍历至的当前语句存在函数调用的情况下,建立当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;在遍历完当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;基于整个遍历过程中建立的函数调用关系,构建控制流图。
在一些实施例中,静态分析模块901还用于:获取目标应用的安装文件,并从安装文件中提取配置清单文件;在配置清单文件中查找安装文件的加固信息;在加固信息指示安装文件已加固的情况下,对安装文件进行脱壳处理,以得到目标应用的代码文件。
在一些实施例中,静态分析模块901还用于:通过解压工具对安装文件进行解压对抗检测,得到第一对抗检测结果;通过分析预设格式文件的工具,对安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;在第一对抗检测结果和第二对抗检测结果均指示不存在对抗性的情况下,从安装文件中提取配置清单文件。
在一些实施例中,动态分析模块902具体用于:将目标应用的安装文件加载至动态模拟器中,以使得动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;基于函数调用关系、上下文信息、以及文件访问信息生成动态分析结果。
在一些实施例中,更新模块903具体用于:将动态分析结果中的函数调用关系,与控制流图中的函数调用关系进行比较,基于比较结果对控制流图进行更新;在更新后的控制流图中确定更新部分,对更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新使用记录。
在一些实施例中,漏洞模式匹配904具体用于:获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。
在一些实施例中,动态分析结果中包括上下文信息和文件访问信息,漏洞模式匹配904具体用于:在更新后的控制流图上确定与初步漏洞检测结果对应的漏洞攻击链路;基于漏洞攻击链路所包含的各函数的调用关系、以及动态分析结果中的上位文信息和文件访问信息,确定漏洞攻击的输入条件;将漏洞攻击链路和输入条件作为漏洞线索。
在一些实施例中,程序生成模块,905具体用于将漏洞线索填充至漏洞验证代码中,得到与初步漏洞检测结果对应的目标漏洞验证代码;对目标漏洞验证代码进行编译,得到与初步漏洞检测结果对应的漏洞验证程序。
在一些实施例中,本申请实施例提供的漏洞检测装置还包括:修复模块,用于在使用漏洞验证程序验证目标应用存在初步漏洞检测结果所指示的目标漏洞的情况下,对目标漏洞进行修复。
上述漏洞检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种漏洞检测方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (15)

1.一种漏洞检测方法,其特征在于,所述方法包括:
对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
对所述目标应用的真实操作场景进行动态模拟,以对所述目标应用的运行情况进行分析得到动态分析结果;
基于所述动态分析结果对所述控制流图和所述使用记录进行更新;
基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与所述初步漏洞检测结果对应的漏洞线索;
根据所述漏洞线索生成漏洞验证程序,所述漏洞验证程序用于对所述初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
2.根据权利要求1所述的方法,其特征在于,所述对目标应用的代码文件进行数据流分析得到控制流图,包括:
对所述目标应用的代码文件进行组件分析,得到所述目标应用包含的组件;
针对所述目标应用包含的每个组件,确定当前组件是否能被外部程序调用,在所述当前组件能被外部程序调用的情况下,将所述当前组件作为风险组件;
获取所述目标应用包含的风险组件的入口函数,从所述入口函数开始进行数据流分析,得到控制流图。
3.根据权利要求2所述的方法,其特征在于,所述从所述入口函数开始进行数据流分析,得到控制流图,包括:
从各风险组件的入口函数开始遍历各风险组件所包括的每条语句;
在遍历至的当前语句存在函数调用的情况下,建立所述当前语句所属的函数与所调用的函数之间的函数调用关系,并对所调用的函数中包含的语句进行遍历,且在遍历过程中存在函数调用的情况下,建立对应的函数调用关系;
在遍历完所述当前语句所调用的函数中的所有语句的情况下,对当前语句的下一语句继续进行遍历,直至遍历完所有风险组件包括的所有语句;
基于整个遍历过程中建立的函数调用关系,构建控制流图。
4.根据权利要求2所述的方法,其特征在于,所述对所述目标应用的代码文件进行组件分析之前,所述方法还包括:
获取所述目标应用的安装文件,并从所述安装文件中提取配置清单文件;
在所述配置清单文件中查找所述安装文件的加固信息;
在所述加固信息指示所述安装文件已加固的情况下,对所述安装文件进行脱壳处理,以得到所述目标应用的代码文件。
5.根据权利要求4所述的方法,其特征在于,所述从所述安装文件中提取配置清单文件之前,所述方法还包括:
通过解压工具对所述安装文件进行解压对抗检测,得到第一对抗检测结果;
通过分析预设格式文件的工具,对所述安装文件中预设格式的文件进行文件对抗检测,得到第二对抗检测结果;
在所述第一对抗检测结果和所述第二对抗检测结果均指示不存在对抗性的情况下,从所述安装文件中提取配置清单文件。
6.根据权利要求1所述的方法,其特征在于,所述对所述目标应用的真实操作场景进行动态模拟,以对所述目标应用的运行情况进行分析得到动态分析结果,包括:
将所述目标应用的安装文件加载至动态模拟器中,以使得所述动态模拟器对真实操作场景进行动态模拟,并记录动态模拟过程中函数调用关系、上下文信息、文件访问信息;
基于所述函数调用关系、所述上下文信息、以及所述文件访问信息生成动态分析结果。
7.根据权利要求1所述的方法,其特征在于,所述基于所述动态分析结果对所述控制流图和所述使用记录进行更新,包括:
将所述动态分析结果中的函数调用关系,与所述控制流图中的函数调用关系进行比较,基于比较结果对所述控制流图进行更新;
在更新后的控制流图中确定更新部分,对所述更新部分所包含的语句进行遍历,基于遍历过程中涉及到的属于风险类型的函数的使用情况,更新所述使用记录。
8.根据权利要求1所述的方法,其特征在于,所述基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,包括:
获取预先建立的各漏洞模型,并确定每个漏洞模型各自对应的属于风险类型的目标函数集合;
基于更新后的使用记录中属于风险类型的函数是否落入任一漏洞模型所对应的目标函数集合,确定初步漏洞检测结果。
9.根据权利要求1所述的方法,其特征在于,所述动态分析结果中包括上下文信息和文件访问信息,所述根据更新后的控制流图确定与所述初步漏洞检测结果对应的漏洞线索,包括:
在更新后的控制流图上确定与所述初步漏洞检测结果对应的漏洞攻击链路;
基于所述漏洞攻击链路所包含的各函数的调用关系、以及所述动态分析结果中的上位文信息和文件访问信息,确定漏洞攻击的输入条件;
将所述漏洞攻击链路和所述输入条件作为漏洞线索。
10.根据权利要求1所述的方法,其特征在于,所述根据所述漏洞线索生成漏洞验证程序,包括:
将所述漏洞线索填充至漏洞验证代码中,得到与所述初步漏洞检测结果对应的目标漏洞验证代码;
对所述目标漏洞验证代码进行编译,得到与所述初步漏洞检测结果对应的漏洞验证程序。
11.根据权利要求1-11任一项所述的方法,其特征在于,所述方法还包括:
在使用所述漏洞验证程序验证所述目标应用存在所述初步漏洞检测结果所指示的目标漏洞的情况下,对所述目标漏洞进行修复。
12.一种漏洞检测装置,其特征在于,包括:
静态分析模块,用于对目标应用的代码文件进行数据流分析得到控制流图,并在数据流分析过程中对属于风险类型的函数的使用情况进行记录得到使用记录;
动态分析模块,用于对所述目标应用的真实操作场景进行动态模拟,以对所述目标应用的运行情况进行分析得到动态分析结果;
更新模块,用于基于所述动态分析结果对所述控制流图和所述使用记录进行更新;
漏洞模式匹配模块,用于基于更新后的使用记录进行漏洞模式匹配,得到初步漏洞检测结果,并根据更新后的控制流图确定与所述初步漏洞检测结果对应的漏洞线索;
程序生成模块,用于根据所述漏洞线索生成漏洞验证程序,所述漏洞验证程序用于对所述初步漏洞检测结果进行漏洞复测,以得到最终的漏洞检测结果。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
15.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
CN202211266764.6A 2022-10-17 2022-10-17 漏洞检测方法、装置、计算机设备和存储介质 Pending CN117009972A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211266764.6A CN117009972A (zh) 2022-10-17 2022-10-17 漏洞检测方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211266764.6A CN117009972A (zh) 2022-10-17 2022-10-17 漏洞检测方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN117009972A true CN117009972A (zh) 2023-11-07

Family

ID=88567857

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211266764.6A Pending CN117009972A (zh) 2022-10-17 2022-10-17 漏洞检测方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN117009972A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118153048A (zh) * 2024-05-09 2024-06-07 中国软件评测中心(工业和信息化部软件与集成电路促进中心) 代码审计方法、装置、终端设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118153048A (zh) * 2024-05-09 2024-06-07 中国软件评测中心(工业和信息化部软件与集成电路促进中心) 代码审计方法、装置、终端设备及存储介质

Similar Documents

Publication Publication Date Title
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN110474900B (zh) 一种游戏协议测试方法及装置
CN109871312B (zh) 一种接口测试方法、装置、设备及可读存储介质
CN112558946A (zh) 一种生成代码的方法、装置、设备和计算机可读存储介质
Kim et al. Software vulnerability detection methodology combined with static and dynamic analysis
CN115033894B (zh) 一种基于知识图谱的软件组件供应链安全检测方法及装置
CN112016138A (zh) 一种车联网自动化安全建模的方法、装置和电子设备
CN111782526A (zh) 一种接口测试方法、装置、电子设备及存储介质
CN113590454A (zh) 测试方法、装置、计算机设备和存储介质
CN111752841A (zh) 单测模拟方法、装置、设备与计算机可读存储介质
KR20200096766A (ko) 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN117009972A (zh) 漏洞检测方法、装置、计算机设备和存储介质
CN109240923B (zh) 接口测试脚本的生成方法及计算机可读存储介质
CN111221721A (zh) 一种单元测试案例自动化录制和执行方法及装置
WO2023206873A1 (zh) 基于抽象语法树的代码检测方法、装置、设备及存储介质
Silva et al. Identifying classes in legacy JavaScript code
CN116775034A (zh) 内核观测程序的构建方法、装置及设备
CN115292178A (zh) 测试数据搜索方法、装置、存储介质以及终端
CN111737090B (zh) 日志仿真方法、装置、计算机设备和存储介质
Jiang et al. An exploitability analysis technique for binary vulnerability based on automatic exception suppression
CN113032256A (zh) 自动化测试方法、装置、计算机系统和可读存储介质
Ambroladze Fast and scalable analysis of smart contracts
CN114579976B (zh) 基于状态转换的堆内存破坏漏洞自动验证方法和系统
Zhou et al. DAppHunter: Identifying Inconsistent Behaviors of Blockchain-based Decentralized Applications

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