CN115906102A - 应用程序的漏洞挖掘方法及装置 - Google Patents
应用程序的漏洞挖掘方法及装置 Download PDFInfo
- Publication number
- CN115906102A CN115906102A CN202211635057.XA CN202211635057A CN115906102A CN 115906102 A CN115906102 A CN 115906102A CN 202211635057 A CN202211635057 A CN 202211635057A CN 115906102 A CN115906102 A CN 115906102A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- security vulnerability
- security
- application program
- test link
- 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
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请涉及网络安全技术领域,提供一种应用程序的漏洞挖掘方法及装置。所述方法包括:对应用程序的源代码进行静态分析,确定安全漏洞;从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。本申请实施例提供的应用程序的漏洞挖掘方法,能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
Description
技术领域
本申请涉及网络安全技术领域,具体涉及一种应用程序的漏洞挖掘方法及装置。
背景技术
为确保应用程序的安全性,会在应用上线前对应用程序进行应用程序的漏洞挖掘,以检测出其中存在的漏洞。相关技术中,对应用程序进行应用程序的漏洞挖掘的方式,通常是对应用程序的源代码进行静态分析,以挖掘出应用程序的漏洞。然而,由于静态分析时应用程序的代码并没有运行,因此若代码中存在多个模块或者组件的调用关系时,可能会在静态分析中被误判断为应用程序的漏洞,导致静态分析挖掘出的漏洞误报率高。
发明内容
本申请旨在至少解决相关技术中存在的技术问题之一。为此,本申请提出一种应用程序的漏洞挖掘方法,能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
本申请还提出一种应用程序的漏洞挖掘装置。
本申请还提出一种电子设备。
本申请还提出一种计算机可读存储介质。
根据本申请第一方面实施例的应用程序的漏洞挖掘方法,包括:
对应用程序的源代码进行静态分析,确定安全漏洞;
从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
本申请实施例提供的应用程序的漏洞挖掘方法,通过对应用程序的源代码进行静态分析,挖掘出安全漏洞后,从安全漏洞对应的污点源的类信息中获取注解内容和方法参数,以利用污点源的注解内容和方法参数,来生成可准确覆盖安全漏洞所处的位置的测试链接,以通过该测试链接的漏洞请求测试来对挖掘出的安全漏洞进行验证,从而有效地验证该安全漏洞是否存在,进而能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
根据本申请的一个实施例,对应用程序的源代码进行静态分析,确定安全漏洞,包括:
对所述源代码进行解析,获取所述源代码的抽象语法树;
对所述抽象语法树的各类声明进行遍历,从各所述类声明中,获取存在Contro ll er注解的目标声明,以从所述抽象语法树的各节点中,获取存在所述目标声明的各目标节点;
将存在Contro l l er方法参数的所述目标节点作为所述污点源,以所述污点源为起点,对各所述目标节点进行遍历,获取所述污点源的传播路径;
检测所述传播路径中调用的过滤函数,根据所述过滤函数的调用检测结果,确定所述安全漏洞。
根据本申请的一个实施例,根据所述过滤函数的调用检测结果,确定所述安全漏洞,包括:
所述传播路径中当前目标节点的子目标节点不存在所述过滤函数的调用,且所述子目标节点调用了入参可控的漏洞函数,确定存在所述安全漏洞。
根据本申请的一个实施例,根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果,包括:
调用所述测试链接,请求预设的dns l og地址;
所述dns l og地址未接收到根据所述测试链接生成的请求,确定所述验证结果为所述安全漏洞存在。
根据本申请的一个实施例,还包括:
获取s i nk埋点在所述测试链接调用时的堆栈信息;
确定所述堆栈信息存在所述污点源的污点标记,生成所述安全漏洞的告警信息。
根据本申请的一个实施例,获取s i nk埋点的堆栈信息,包括:
从所述源代码的各预设埋点中,获取被所述请求触发的各目标埋点;
确定所述目标埋点包括所述s i nk埋点,获取所述s i nk埋点的堆栈信息。
根据本申请的一个实施例,各预设埋点由对各方法名为start,且方法描述为()Ljava/l ang/Process;的类进行埋点后得到。
根据本申请第二方面实施例的应用程序的漏洞挖掘装置,包括:
静态分析模块,用于对应用程序的源代码进行静态分析,确定安全漏洞;
链接生成模块,用于从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
动态分析模块,用于根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
根据本申请第三方面实施例的电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述计算机程序时实现上述任一实施例所述的应用程序的漏洞挖掘方法。
根据本申请第四方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所述的应用程序的漏洞挖掘方法。
根据本申请第五方面实施例的计算机程序产品,包括:所述计算机程序被处理器执行时实现如上述任一实施例所述的应用程序的漏洞挖掘方法。
本申请实施例中的上述一个或多个技术方案,至少具有如下技术效果之一:
通过对应用程序的源代码进行静态分析,挖掘出安全漏洞后,从安全漏洞对应的污点源的类信息中获取注解内容和方法参数,以利用污点源的注解内容和方法参数,来生成可准确覆盖安全漏洞所处的位置的测试链接,以通过该测试链接的漏洞请求测试来对挖掘出的安全漏洞进行验证,从而有效地验证该安全漏洞是否存在,进而能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
进一步的,通过在利用静态分析,挖掘出安全漏洞后,再调用由从污点源的类信息中提取的注解内容和方法参数生成的测试链接,来请求预设的dns l og地址,以根据请求结果来验证安全漏洞是否存在,从而进一步提高挖掘出的安全漏洞的准确性。
进一步的,通过在调用测试链接后,再基于调用测试链接时s i nk埋点的堆栈信息的动态代码分析方式,来判断堆栈信息是否存在污点源的污点标记,并在确定堆栈信息存在污点源的污点标记时,再生成安全漏洞的告警信息。这样,便可实现通过查看s i nk埋点的堆栈信息,来验证污点源引入的数据是否能够不经无害处理而直接传播到污点汇聚点,进一步提高挖掘得到的安全漏洞的准确性,减少漏洞误报率。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的应用程序的漏洞挖掘方法的流程示意图;
图2是对图1的应用程序的漏洞挖掘方法中源代码的静态分析作进一步细化的流程图;
图3是对图1的应用程序的漏洞挖掘方法中安全漏洞的验证作进一步细化的流程图;
图4是本申请又一实施例提供的应用程序的漏洞挖掘方法的流程示意图;
图5是本申请实施例提供的应用程序的漏洞挖掘装置的结构示意图;
图6是本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面,将通过几个具体的实施例对本申请实施例提供的应用程序的漏洞挖掘方法及装置进行详细介绍和说明。
在一实施例中,提供了一种应用程序的漏洞挖掘方法,该方法应用于服务器,用于挖掘出应用程序的漏洞。其中,服务器可以是独立的服务器或者是多个服务器组成的服务器集群来实现,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能采样点设备等基础云计算服务的云服务器。
如图1所示,本实施例提供的一种应用程序的漏洞挖掘方法包括:
步骤101,对应用程序的源代码进行静态分析,确定安全漏洞;
步骤102,从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
步骤103,根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
通过对应用程序的源代码进行静态分析,挖掘出安全漏洞后,从安全漏洞对应的污点源的类信息中获取注解内容和方法参数,以利用污点源的注解内容和方法参数,来生成可准确覆盖安全漏洞所处的位置的测试链接,以通过该测试链接的漏洞请求测试来对挖掘出的安全漏洞进行验证,从而有效地验证该安全漏洞是否存在,进而能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
在一实施例中,在对应用程序进行漏洞挖掘时,服务器预先对应用程序进行获取。若获取到的应用程序为jar包的形式,则可使用I nte l l i J I DEA插件java-decomp il er.jar,来对应用程序的jar包进行反编译后解压,得到应用程序的java源代码。在获取到java源代码后,即可对java源代码进行静态分析,如可通过SAST(Stat i cApp l i cati on Secur ity Test i ng,静态应用安全测试)对源代码进行静态分析,如对基于java的Spr i ng boot Web应用程序进行命令执行挖掘检测,以通过分析源代码发现容易让组织的应用程序受到攻击的安全漏洞。
而为使静态分析的结果更为准确,在一实施例中,如图2所示,对应用程序的源代码进行静态分析,确定安全漏洞,包括:
步骤201,对所述源代码进行解析,获取所述源代码的抽象语法树;
步骤202,对所述抽象语法树的各类声明进行遍历,从各所述类声明中,获取存在Contro l l er注解的目标声明,以从所述抽象语法树的各节点中,获取存在所述目标声明的各目标节点;
步骤203,将存在Contro l l er方法参数的所述目标节点作为所述污点源,以所述污点源为起点,对各所述目标节点进行遍历,获取所述污点源的传播路径;
步骤204,检测所述传播路径中调用的过滤函数,根据所述过滤函数的调用检测结果,确定所述安全漏洞。
在通过SAST对源代码进行静态分析时,可使用Python中的java l ang库对源代码进行解析,以获取源代码的抽象语法树。其中,java.l ang库是java语言的核心,它提供了java中的基础类。包括基本Object类、C l ass类、Str i ng类、基本类型的包装类、基本的数学类等最基本的类。
在获取抽象语法树后,在抽象语法树的类层面上,遍历所有的类声明,查找各类声明是否存在Spr i ngboot中Contro l l er注解,以将存在Contro l l er注解的类声明作为目标声明。在获取到各目标声明后,将抽象语法树中存在目标声明的节点作为目标节点,以得到与各目标声明一一对应的各目标节点。
对各目标节点,以存在Contro l l er方法参数的目标节点作为污点源,对各目标节点进行遍历,然后使用dfs(深度优先遍历)不断地向下追溯污点源的传播,以获取该污点源的传播路径。在获取污点源的传播路径后,判断传播路径中是否调用过滤函数,以根据判断结果来判断源代码是否存在安全漏洞。其中,污点源是指直接引入不受信任的数据或者机密数据到系统中的节点。
示例性的,可通过查看任一当前目标节点的子目标节点是否调用过滤函数。若子目标节点调用了过滤函数,则表示污点源引入的数据经过过滤,此时可确定源代码中污点源的传播路径不存在安全漏洞;若各子目标节点均未调用过滤函数,则确定应用程序的源代码存在安全漏洞。而为更准确地进行安全漏洞的验证,在进行过滤函数调用检测的同时,还需进行漏洞函数的调用检测。具体的,若传播路径中当前目标节点的子目标节点不存在过滤函数的调用,且子目标节点调用了漏洞函数同时漏洞函数的入参可控,则确定应用程序的源代码存在安全漏洞。其中,漏洞函数可以为Runt ime.getRunt ime().exec()等。
为使对安全漏洞的挖掘更为准确,在一实施例中,在查看调用函数时,还可以查看当前目标节点的子目标节点的入参信息。若子目标节点的入参信息为可控变量,则表示当前目标节点与子目标节点之间的路径可达,此时则可检测该子目标节点是否存在所述过滤函数的调用。若不存在,则表示应用程序的源代码存在安全漏洞。
当经过上述方式确定存在安全漏洞后,可通过DAST(Dynami cs App l i cat ion Secur ity Test i ng,动态应用程序安全测试)对源代码进行动态分析,来验证安全漏洞是否存在。其中,DAST是测试Web、移动和AP I应用程序以通过模拟攻击发现漏洞/安全漏洞的过程,以及使用自动扫描仪或手动渗透测试实践实时测试应用程序的过程。
而为使动态分析的结果更为准确,在一实施例中,通过DAST进行动态分析,可以是获取污点源所在的类信息,从该污点源的类信息中,读取注解内容和方法参数拼接测试链接。其中,读取的注解内容包括类的注解内容以及方法的注解内容。示例性的,类信息包括Rce类和CommandExec(Str i ng cmd)方法,Rce类存在注解为@RequestMapp i ng("/rce"),其中CommandExec(Str i ng cmd)方法存在注解为@GetMapp i ng("/runt ime/exec"),可以得到方法中参数名为cmd,类型为Str i ng,从而可拼接出测试链接:http://xxx.xx/rce/runt ime/exec?cmd=pay l oad。得到测试链接后生成pay l oad插入cmd参数中,pay l oad将插入cur l命令来进行测试链接的测试,以验证安全漏洞是否存在。
具体的,如图3所示,根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果,包括:
步骤301,调用所述测试链接,请求预设的dns l og地址;
步骤303,所述dns l og地址接收到根据所述测试链接生成的请求,确定所述验证结果为所述安全漏洞存在。
在一实施例中,在得到测试链接后,生成pay l oad插入测试链接的cmd参数中。pay l oad将插入cur l命令来进行测试,通过cur l请求预设的dns l og地址,判断dns log地址是否收到请求,以此验证漏洞是否存在。若利用该测试链接成功请求到预设的dns log地址,则可确定验证结果为安全漏洞可能存在;若利用该测试链接无法请求到预设的dnsl og地址,可确定验证结果为安全漏洞可能不存在或无法对外发起请求。
通过在利用静态分析,挖掘出安全漏洞后,再调用由从污点源的类信息中提取的注解内容和方法参数生成的测试链接,来请求预设的dns l og地址,以根据请求结果来验证安全漏洞是否存在,从而进一步提高挖掘出的安全漏洞的准确性。
然而,考虑到利用测试链接的调用测试来进行动态分析,其测试并不能保证100%准确,无法测试无回显的安全漏洞,这导致被验证为存在的安全漏洞也可能属于误报的安全漏洞。因此为进一步提高挖掘到的安全漏洞的准确性,在一实施例中,如图4所示,还包括:
步骤104,获取s i nk埋点在所述测试链接调用时的堆栈信息;
步骤105,确定所述堆栈信息存在所述污点源的污点标记,生成所述安全漏洞的告警信息。
在一实施例中,在确定验证结果为安全漏洞存在时,可通过I AST(I nteract ive App l i cat i on Secur ity Test i ng,交互式安全测试)来校验测试链接测试过程中产生的堆栈信息,如数据流、入参信息以及调用堆栈等,以最终验证该安全漏洞是否存在。其中,IAST可以访问代码本身,能够在每行代码执行SAST,而且,IAST可以访问HTTP流量,也能够在每一次请求和响应时,执行类DAST的分析。
而为最终的验证结果更为准确,在一实施例中,通过IAST进行安全漏洞的最终验证的方式,可以是通过hook技术在多个目标节点中进行埋点监控,如在Source(污点源)、Propagator(传播节点)、Si nk(污点汇聚节点)实现埋点和监控,埋点逻辑使用ASM字节码增强技术。ASM是一个Java字节码操控框架,它能被用来动态生成类或者增强既有类的功能。ASM可以直接产生二进制c l ass文件,也可以在类被加载入Java虚拟机之前动态改变类行为。Source埋点为Spr i ng中进行参数绑定的相关类方法;Propagator为传播节点,这些节点是变量的复制、赋值和大部分的字符串处理等操作,也就是针对一些污点可能丢失的地方,它们可以传播污染,如Str i ng、Str i ngBu i l der、Str i ngBuffer常用类以及Base64的decode、encode处理方法等;Si nk埋点为危险操作真正触发的方法,如java.lang.UN IXProcess#forkAndExec 、java.l ang.ProcessBu i l der#start 或 者java.lang.Process Imp l#start,在本实施例中对java.l ang.ProcessBu i l der#start进行埋点即可,即在进行漏洞挖掘之前,可预先选择所有方法名为start且方法描述为()Ljava/l ang/Process;的类进行埋点。当通过调用测试链接,验证安全漏洞存在时,可从si nk埋点获取测试链接调用时的堆栈信息,如入参信息、污点传播以及调用堆栈。其中,s ink代表直接产生安全敏感操作或者泄露隐私数据到外界。
具体的,获取s i nk埋点在测试链接调用时的堆栈信息,可以是当调用测试链接时,测试链接的请求将触发Source埋点的逻辑得到入参信息,接着进入污点传播过程,如果中间存在变量处理会触发Propagator埋点。若被请求触发的目标埋点不包括s i nk埋点,即测试链接的请求无法到达Si nk埋点,则表示由污点源引入的数据不能够不经无害处理,而直接传播到污点汇聚点,此时则说明该污点源的传播路径的信息流是安全的,因此可最终确定该安全漏洞不存在。
当被请求触发的目标埋点包括s i nk埋点,即请求最终能够达到Si nk埋点,则获取s i nk埋点的堆栈信息,并对该堆栈信息进行综合分析。若s i nk埋点的堆栈信息不存在污点源的污点标记,则表示由污点源引入的数据不能够不经无害处理,而直接传播到污点汇聚点,此时则说明该污点源的传播路径的信息流是安全的。若s i nk埋点的堆栈信息存在污点源的污点标记,则表示污点源引入的数据能够不经无害处理,而直接传播到污点汇聚点,说明污点源的传播路径产生了隐私数据泄露或危险数据操作等安全问题,此时可最终验证安全漏洞存在。
当最终验证安全漏洞存在时,则可生成包括静态分析结果、测试链接测试结果以及对测试链接测试过程进行动态代码分析获取到的各目标埋点的堆栈信息的告警信息,并将该告警信息发送至用户的目标终端,以使用户根据该告警信息对安全漏洞进行最终的确认。
通过在调用测试链接确定挖掘的安全漏洞存在后,再基于调用测试链接时s i nk埋点的堆栈信息,来判断堆栈信息是否存在污点源的污点标记,并在确定堆栈信息存在污点源的污点标记时,再生成安全漏洞的告警信息,从而可通过查看s i nk埋点的堆栈信息,来验证污点源引入的数据是否能够不经无害处理而直接传播到污点汇聚点,进一步提高挖掘得到的安全漏洞的准确性,减少漏洞误报率。
下面对本申请提供的应用程序的漏洞挖掘装置进行描述,下文描述的应用程序的漏洞挖掘装置与上文描述的应用程序的漏洞挖掘方法可相互对应参照。
在一实施例中,如图5所示,提供了一种应用程序的漏洞挖掘装置,包括:
静态分析模块210,用于对应用程序的源代码进行静态分析,确定安全漏洞;
链接生成模块220,用于从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
动态分析模块230,用于根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
通过对应用程序的源代码进行静态分析,挖掘出安全漏洞后,从安全漏洞对应的污点源的类信息中获取注解内容和方法参数,以利用污点源的注解内容和方法参数,来生成可准确覆盖安全漏洞所处的位置的测试链接,以通过该测试链接的漏洞请求测试来对挖掘出的安全漏洞进行验证,从而有效地验证该安全漏洞是否存在,进而能够提高挖掘出的应用程序的漏洞的准确性,减少漏洞误报率。
在一实施例中,静态分析模块210具体用于:
对所述源代码进行解析,获取所述源代码的抽象语法树;
对所述抽象语法树的各类声明进行遍历,从各所述类声明中,获取存在Contro ll er注解的目标声明,以从所述抽象语法树的各节点中,获取存在所述目标声明的各目标节点;
将存在Contro l l er方法参数的所述目标节点作为所述污点源,以所述污点源为起点,对各所述目标节点进行遍历,获取所述污点源的传播路径;
检测所述传播路径中调用的过滤函数,根据所述过滤函数的调用检测结果,确定所述安全漏洞。
在一实施例中,静态分析模块210具体用于:
所述传播路径中当前目标节点的子目标节点不存在所述过滤函数的调用,且所述子目标节点调用了入参可控的漏洞函数,确定存在所述安全漏洞。
在一实施例中,动态分析模块230具体用于:
调用所述测试链接,请求预设的dns l og地址;
所述dns l og地址接收到根据所述测试链接生成的请求,确定所述验证结果为所述安全漏洞存在。
在一实施例中,动态分析模块230还用于:
获取s i nk埋点在所述测试链接调用时的堆栈信息;
确定所述堆栈信息存在所述污点源的污点标记,生成所述安全漏洞的告警信息。
在一实施例中,动态分析模块230还用于:
从所述源代码的各预设埋点中,获取被所述请求触发的各目标埋点;
确定所述目标埋点包括所述s i nk埋点,获取所述s i nk埋点的堆栈信息。
在一实施例中,各预设埋点由对各方法名为start,且方法描述为()Ljava/l ang/Process;的类进行埋点后得到。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)810、通信接口(Commun i cat i on I nterface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的计算机程序,以执行应用程序的漏洞挖掘方法,例如包括:
对应用程序的源代码进行静态分析,确定安全漏洞;
从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-On l yMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本申请实施例还提供一种存储介质,存储介质包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,计算机程序被处理器执行时,计算机能够执行上述各实施例所提供的应用程序的漏洞挖掘方法,例如包括:
对应用程序的源代码进行静态分析,确定安全漏洞;
从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种应用程序的漏洞挖掘方法,其特征在于,包括:
对应用程序的源代码进行静态分析,确定安全漏洞;
从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
2.根据权利要求1所述的应用程序的漏洞挖掘方法,其特征在于,对应用程序的源代码进行静态分析,确定安全漏洞,包括:
对所述源代码进行解析,获取所述源代码的抽象语法树;
对所述抽象语法树的各类声明进行遍历,从各所述类声明中,获取存在Controller注解的目标声明,以从所述抽象语法树的各节点中,获取存在所述目标声明的各目标节点;
将存在Controller方法参数的所述目标节点作为所述污点源,以所述污点源为起点,对各所述目标节点进行遍历,获取所述污点源的传播路径;
检测所述传播路径中调用的过滤函数,根据所述过滤函数的调用检测结果,确定所述安全漏洞。
3.根据权利要求2所述的应用程序的漏洞挖掘方法,其特征在于,根据所述过滤函数的调用检测结果,确定所述安全漏洞,包括:
所述传播路径中当前目标节点的子目标节点不存在所述过滤函数的调用,且所述子目标节点调用了入参可控的漏洞函数,确定存在所述安全漏洞。
4.根据权利要求1所述的应用程序的漏洞挖掘方法,其特征在于,根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果,包括:
调用所述测试链接,请求预设的dnslog地址;
所述dnslog地址接收到根据所述测试链接生成的请求,确定所述验证结果为所述安全漏洞存在。
5.根据权利要求4所述的应用程序的漏洞挖掘方法,其特征在于,还包括:
获取sink埋点在所述测试链接调用时的堆栈信息;
确定所述堆栈信息存在所述污点源的污点标记,生成所述安全漏洞的告警信息。
6.根据权利要求5所述的应用程序的漏洞挖掘方法,其特征在于,获取sink埋点的堆栈信息,包括:
从所述源代码的各预设埋点中,获取被所述请求触发的各目标埋点;
确定所述目标埋点包括所述sink埋点,获取所述sink埋点的堆栈信息。
7.根据权利要求6所述的应用程序的漏洞挖掘方法,其特征在于,各预设埋点由对各方法名为start,且方法描述为()Ljava/lang/Process;的类进行埋点后得到。
8.一种应用程序的漏洞挖掘装置,其特征在于,包括:
静态分析模块,用于对应用程序的源代码进行静态分析,确定安全漏洞;
链接生成模块,用于从所述安全漏洞对应的污点源的类信息中,获取注解内容和方法参数,以根据所述注解内容和所述方法参数,生成测试链接;
动态分析模块,用于根据所述测试链接进行漏洞请求测试,确定所述安全漏洞的验证结果。
9.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的应用程序的漏洞挖掘方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的应用程序的漏洞挖掘方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211635057.XA CN115906102A (zh) | 2022-12-19 | 2022-12-19 | 应用程序的漏洞挖掘方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211635057.XA CN115906102A (zh) | 2022-12-19 | 2022-12-19 | 应用程序的漏洞挖掘方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115906102A true CN115906102A (zh) | 2023-04-04 |
Family
ID=86480663
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211635057.XA Pending CN115906102A (zh) | 2022-12-19 | 2022-12-19 | 应用程序的漏洞挖掘方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115906102A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117061222A (zh) * | 2023-09-12 | 2023-11-14 | 北京安全共识科技有限公司 | 一种漏洞数据获取方法及漏洞验证方法 |
-
2022
- 2022-12-19 CN CN202211635057.XA patent/CN115906102A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117061222A (zh) * | 2023-09-12 | 2023-11-14 | 北京安全共识科技有限公司 | 一种漏洞数据获取方法及漏洞验证方法 |
CN117061222B (zh) * | 2023-09-12 | 2024-05-07 | 北京基调网络股份有限公司 | 一种漏洞数据获取方法及漏洞验证方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110209583B (zh) | 安全测试方法、装置、系统、设备和存储介质 | |
CN111400722B (zh) | 扫描小程序的方法、装置、计算机设备和存储介质 | |
US20170316202A1 (en) | Rasp for scripting languages | |
CN108664793B (zh) | 一种检测漏洞的方法和装置 | |
KR100732689B1 (ko) | 웹 보안방법 및 그 장치 | |
US9032519B1 (en) | Protecting websites from cross-site scripting | |
CN111783096B (zh) | 检测安全漏洞的方法和装置 | |
CN106548075B (zh) | 漏洞检测方法和装置 | |
KR101972825B1 (ko) | 하이브리드 분석 기술을 이용한 임베디드 기기 취약점 자동 분석 방법, 장치 및 그 방법을 실행하는 컴퓨터 프로그램 | |
CN110929264A (zh) | 漏洞检测方法、装置、电子设备及可读存储介质 | |
CN112887388A (zh) | 基于沙箱环境的数据处理系统 | |
CN110968872A (zh) | 文件漏洞的检测处理方法、装置、电子设备及存储介质 | |
CN115906102A (zh) | 应用程序的漏洞挖掘方法及装置 | |
CN112765026A (zh) | 一种动态监测phpweb应用代码漏洞方法及相关装置 | |
CN108898014A (zh) | 一种病毒查杀方法、服务器及电子设备 | |
Ablahd | Using python to detect web application vulnerability | |
CN115168847A (zh) | 应用补丁生成方法、装置、计算机设备及可读存储介质 | |
Ladisa et al. | Towards the detection of malicious java packages | |
CN111241547B (zh) | 一种越权漏洞的检测方法、装置及系统 | |
Shanmugasundaram et al. | A study on removal techniques of Cross-Site Scripting from web applications | |
CN106789899B (zh) | 一种基于html5的跨域消息发送方法及装置 | |
Duraisamy et al. | A server side solution for protection of web applications from cross-site scripting attacks | |
US11921862B2 (en) | Systems and methods for rules-based automated penetration testing to certify release candidates | |
CN115348086A (zh) | 一种攻击防护方法及装置、存储介质及电子设备 | |
CN114077737A (zh) | 基于污点分析的Android组件间通信数据流检测方法 |
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 |