CN112149137B - 漏洞检测方法、装置、电子设备及计算机可读存储介质 - Google Patents

漏洞检测方法、装置、电子设备及计算机可读存储介质 Download PDF

Info

Publication number
CN112149137B
CN112149137B CN202011056685.3A CN202011056685A CN112149137B CN 112149137 B CN112149137 B CN 112149137B CN 202011056685 A CN202011056685 A CN 202011056685A CN 112149137 B CN112149137 B CN 112149137B
Authority
CN
China
Prior art keywords
byte
bytes
response information
value
access request
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
Application number
CN202011056685.3A
Other languages
English (en)
Other versions
CN112149137A (zh
Inventor
张何钫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202011056685.3A priority Critical patent/CN112149137B/zh
Publication of CN112149137A publication Critical patent/CN112149137A/zh
Priority to PCT/CN2021/120771 priority patent/WO2022068742A1/zh
Application granted granted Critical
Publication of CN112149137B publication Critical patent/CN112149137B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Abstract

本申请实施例提供了一种漏洞检测方法、装置、设备及计算机可读存储介质;该方法包括:在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示密码分组连接CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的初始向量IV;在将所述IV的前n‑m‑1个字节的值调整为第一预设值的情况下,对所述IV的第n‑m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n‑2;在对所述IV的第n‑m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。

Description

漏洞检测方法、装置、电子设备及计算机可读存储介质
技术领域
本申请涉及金融科技(Fintech)的信息安全领域,涉及但不限于一种漏洞检测方法、装置、电子设备及计算机可读存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向Fintech转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
目前,在金融科技领域中,对于密码分组链接(Cipher-Block Chaining,CBC)模式的填充提示(Padding Oracle)漏洞,可以通过对密文的暴力破解,基于暴力破解结果判断Padding Oracle漏洞是否存在,然而,上述方案需要对数百字节(byte)的反序列化利用代码进行完整的破解,导致消耗较长的时间。
发明内容
本申请实施例提供一种漏洞检测方法、装置、电子设备及计算机可读存储介质,可以解决现有技术中需要对数百字节的反序列化利用代码进行完整的破解导致的消耗较长时间的问题。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种漏洞检测方法,所述方法包括:
在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示CBC加解密的处理逻辑,所述数据访问请求中携带有CB C加解密过程使用的初始向量(Initialization Vector,IV);
在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述I V的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2;
在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。
在本申请的一些实施例中,
所述在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m不等于0的情况下,在对所述IV的当前字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,所述当前字节为所述IV的第n-m个字节至第n个字节中的一个字节;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,判断所述当前字节是否为所述IV的第n-m个字节,得到判断结果,根据所述判断结果检测所述漏洞是否存在。
在本申请的一些实施例中,所述根据所述判断结果检测所述漏洞是否存在,包括:
在所述当前字节不是所述IV的第n-m个字节的情况下,将当前已经破解的字节的值设置为所述IV的对应字节的值,并对所述IV的当前字节的前一字节进行破解;
在所述当前字节是所述IV的第n-m个字节,且所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述当前字节是所述IV的第n-m个字节,且所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m等于0的情况下,在对所述IV的第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述两种不同的错误页面分别是基于第一填充序列和第二填充序列生成的,所述第一填充序列表示解密后明文的错误填充序列,所述第二填充序列表示解密后明文的正确填充序列,所述解密后明文表示基于暴力破解的所述IV的字节进行解密得到包括填充序列的明文。
在本申请的一些实施例中,所述两种不同的错误页面为表示不同错误消息的页面。
在本申请的一些实施例中,所述方法还包括:
在获取所述数据访问请求后,确定所述数据访问请求中的参数与CBC加密块的特征匹配时,将所述IV的前n-m-1个字节的值调整为第一预设值。
在本申请的一些实施例中,所述CBC加密块的特征包括长度和/或格式。
在本申请的一些实施例中,所述方法还包括:
获取应用程序对应的处理逻辑的代码块;
对获取的所述代码块行语法分析,得到语法分析结果,所述语法分析结果包括解密处理部分;
在所述解密处理部分包括不同的三种分支处理逻辑的情况下,确定获取的所述代码块为所述第一处理逻辑的代码块。
在本申请的一些实施例中,所述三种不同的分支处理逻辑包括:第一处理逻辑、第二处理逻辑和第三处理逻辑;
其中,所述第一处理逻辑表示解密正确且后续处理正确时返回正常页面的逻辑,所述第二处理逻辑表示解密错误返回第一错误页面的逻辑,所述第三处理逻辑表示解密正确且后续处理正确时返回第二错误页面的逻辑,所述第一错误页面与所述第二错误页面不同。
在本申请的一些实施例中,所述数据访问请求包括位于所述IV后的密文块,所述密文块的内容为预设内容。
在本申请的一些实施例中,所述第一预设值为NULL值。
本申请实施例提供一种漏洞检测装置,所述装置包括:
获取模块,用于在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的IV;
破解模块,用于在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述I V的字节数,m取0至n-2;
检测模块,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。
在本申请的一些实施例中,所述检测模块,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m不等于0的情况下,在对所述IV的当前字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,所述当前字节为所述IV的第n-m个字节至第n个字节中的一个字节;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,判断所述当前字节是否为所述IV的第n-m个字节,得到判断结果,根据所述判断结果检测所述漏洞是否存在。
在本申请的一些实施例中,所述检测模块,用于根据所述判断结果检测所述漏洞是否存在,包括:
在所述当前字节不是所述IV的第n-m个字节的情况下,将当前已经破解的字节的值设置为所述IV的对应字节的值,并对所述IV的当前字节的前一字节进行破解;
在所述当前字节是所述IV的第n-m个字节,且所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述当前字节是所述IV的第n-m个字节,且所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述检测模块,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m等于0的情况下,在对所述IV的第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述两种不同的错误页面分别是基于第一填充序列和第二填充序列生成的,所述第一填充序列表示解密后明文的错误填充序列,所述第二填充序列表示解密后明文的正确填充序列,所述解密后明文表示基于暴力破解的所述IV的字节进行解密得到包括填充序列的明文。
在本申请的一些实施例中,所述两种不同的错误页面为表示不同错误消息的页面。
在本申请的一些实施例中,所述获取模块,还用于在获取所述数据访问请求后,确定所述数据访问请求中的参数与CBC加密块的特征匹配时,将所述I V的前n-m-1个字节的值调整为第一预设值。
在本申请的一些实施例中,所述CBC加密块的特征包括长度和/或格式。
在本申请的一些实施例中,所述获取模块,还用于:
获取应用程序对应的处理逻辑的代码块;
对获取的所述代码块行语法分析,得到语法分析结果,所述语法分析结果包括解密处理部分;
在所述解密处理部分包括不同的三种分支处理逻辑的情况下,确定获取的所述代码块为所述第一处理逻辑的代码块。
在本申请的一些实施例中,所述三种不同的分支处理逻辑包括:第一处理逻辑、第二处理逻辑和第三处理逻辑;
其中,所述第一处理逻辑表示解密正确且后续处理正确时返回正常页面的逻辑,所述第二处理逻辑表示解密错误返回第一错误页面的逻辑,所述第三处理逻辑表示解密正确且后续处理正确时返回第二错误页面的逻辑,所述第一错误页面与所述第二错误页面不同。
在本申请的一些实施例中,所述数据访问请求包括位于所述IV后的密文块,所述密文块的内容为预设内容。
在本申请的一些实施例中,所述第一预设值为NULL值。
本申请实施例提供一种电子设备,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现上述任意一种漏洞检测方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于被处理器执行时,实现上述任意一种漏洞检测方法。
本申请实施例中,在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的IV;在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2;在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。可以看出,在本申请实施例中,只需要对IV的第n-m个字节到第n个字节进行暴力破解,便可以根据响应信息检测漏洞是否存在,即,只需要对IV的部分字节进行暴力破解,与相关技术中对数百字节(byte)的反序列化利用代码进行完整的破解的方案相比,降低了运算量,漏洞检测速度更快,消耗时间更少。
附图说明
图1A为相关技术中基于CBC模式的加密过程示意图;
图1B为相关技术中基于CBC模式的解密过程示意图;
图2为本申请实施例提供的漏洞检测方法的一个可选的流程图;
图3为本申请实施例中代码块的示意图;
图4为本申请实施例中对图3所示的代码块进行语法分析得到的语法树的示意图;
图5为本申请实施例中CBC模式的填充过程示意图;
图6为本申请实施例中明文、填充后数据以及加密后的密文的示意图;
图7为本申请实施例中与图6对应的加密过程示意图;
图8为本申请实施例中与图6对应的解密过程示意图;
图9为本申请实施例中基于预设的IV值对明文进行解密的示意图一;
图10为本申请实施例中基于预设的IV值对明文进行解密的示意图二;
图11为本申请实施例中基于预设的IV值对明文进行解密的示意图三;
图12为本申请实施例中基于预设的IV值对明文进行解密的示意图四;
图13为本申请实施例中基于预设的IV值对明文进行解密的示意图五;
图14为本申请实施例中基于预设的IV值对明文进行解密的示意图六;
图15为本申请实施例中针对目标明文确定所需要的IV的示意图;
图16为本申请实施例中目标明文的数据块拆分示意图;
图17为本申请实施例提供的漏洞检测方法的另一个可选的流程图;
图18为本申请实施例提供的漏洞检测装置的一个可选的组成结构示意图;
图19为本申请实施例提供的电子设备的结构示意图。
具体实施方式
在相关技术中,CBC模式在数据加解密领域具有广泛的应用前景;图1A为相关技术中基于CBC模式的加密过程示意图,如图1A所示,从第二个明文块(Plaintext)开始,每个明文块先与前一个密文块(Ciphertext)进行异或运算后,再结合密钥(key)进行加密,得到对应的密文块。为了保证解密后的明文消息的唯一性,第一个明文块需要与IV进行异或运算后,再结合密钥进行加密,得到第一个密文块(与第二个明文块进行异或运算的密文块)。
图1B为相关技术中基于CBC模式的解密过程示意图,如图1B所示,从第二个密文块开始,首先利用密钥对密文块进行运算,然后对运算结果与前一个密文块进行异或运算,得到对应的明文块。这里,在利用密钥对第一个密文块进行运算后,将第一个密文块的运算结果与IV进行异或运算,得到第一个明文块。
下面对CBC模式的Padding Oracle漏洞进行解释性说明;Padding的含义是“填充”,在解密时,如果发现解密后得到的结果的填充方式不符合规则,那么表示输入数据有问题,对于解密的类库来说,就会生成异常提升信息,以提示Padding不正确;Oracle表示“提示”的意思,如果输入的密文不合法,类库则会抛出异常信息,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。这里,攻击者所需要的提示仅仅是“解密成功与否”这样一个二元信息,例如在一个网页(Web)程序中可能只是“200-OK”及“500-Internal Server Error”这样的表现形式,而不需要其他任何详细信息。
在相关技术中,在开源项目Shiro-721中,可以使用针对Apache Shiro框架的RememberMe功能中用到的高级加密标准(Advanced Encryption Standar d,AES)-128-CBC模式的Padding Oracle漏洞进行验证,主要验证方式为,针对Apache Shiro框架的特性,配合反序列化漏洞对Web应用程序进行攻击,按照上文中的Padding Oracle漏洞的利用方式从后往前进行自动化暴破。
上述对CBC模式的Padding Oracle漏洞的验证方案存在以下缺陷:1)仅能针对特定的Apache Shiro框架进行Padding Oracle漏洞的验证,针对其它的安全框架无法进行Padding Oracle漏洞的验证,特定性、针对性较强,通用型不足。2)上述方案需要在默认漏洞存在的前提下进行验证,需要对数百字节的反序列化利用代码进行完整的破解,只有在完整后的破解后的代码无法利用时才会认定漏洞不存在;并且,单线程进行暴力破解至少需要花费超过1个小时,也就是说,上述对CBC模式的Padding Oracle漏洞的验证方案会消耗较长的时间。
针对上述技术问题,提出本申请实施例的技术方案。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
本申请实施例提供一种漏洞检测方法、装置、电子设备及计算机可读存储介质;本申请实施例提供的漏洞检测方法可以应用于电子设备中,下面说明本申请实施例提供的电子设备的示例性应用,本申请实施例提供的电子设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等。
下面对本申请实施例的漏洞检测方法进行示例性说明。
图2为本申请实施例提供的漏洞检测方法的一个可选的流程图,如图2所示,该流程可以包括:
步骤201:在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;第一处理逻辑表示CBC加解密的处理逻辑,数据访问请求中携带有C BC加解密过程使用的IV。
本申请实施例中,可以预先获取针对访问接口的处理逻辑,然后判断获取的处理逻辑是否表示CBC加解密的处理逻辑,即判断获取的处理逻辑是否为第一处理逻辑。
这里的访问接口可以为应用程序对应的接口统一资源定位符(Uniform Resource Locator,URL),例如,访问接口可以是“http://sampleapp/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6”;在一些实施例中,访问接口可以是针对符合超文本传输协议(HyperText Transfer Protoco l,HTTP)的Web应用的接口,也可以是远程过程调用(Remote Procedure Ca ll,RPC)场景的访问接口。
本申请实施例中,如果获取的处理逻辑中存在CBC加解密的代码块,则说明获取的处理逻辑为第一处理逻辑;示例性地,CBC加解密的代码块可以是A ES-CBC加解密的代码块、椭圆曲线密码学(Elliptic curve cryptography,ECC)-CBC加解密的代码块或数据加密标准(Data Encryption Standard,DES)-CB C加解密的代码块,本申请实施例对此并不进行限定。
本申请实施例中,上述IV包括n个字节,示例性地,n的取值为8。
本申请的一些实施例中,数据访问请求表示针对应用程序的访问请求,在应用程序中采用CBC加密模式进行数据加密;数据访问请求中还携带有位于I V后的密文块,示例性地,数据访问请求为“Request:http://sampleapp/home.js p?UID=0000000000000000F851D6CC68FC9537”,其中,字符串“0000000000000000”表示16进制的IV,字符串“F851D6CC68FC9537”表示16进制的密文块。
本申请的一些实施例中,数据访问请求中IV后的密文块的内容为预设内容。
在一种实施方式中,可以随机生成数据访问请求中IV后的密文块的内容。
可以理解地,在进行漏洞检测时,可以模拟攻击者对漏洞进行攻击的方式进行检测,而攻击者预先并不能获知正确的密文块,因而,本申请实施例中,无需获取正确的密文块的内容,便可以通过对IV值的部分字节的值的破解,来实现漏洞的检测。
在实际应用中,在将数据访问请求发送至应用程序后,可以基于CBC解密模式对数据访问请求进行解密处理,并返回响应信息。
步骤202:在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2。
本步骤的一种实现方式可以是,固定设置IV的前n-m-1个字节的值为第一预设值,然后利用穷举法不断尝试IV的第n-m个字节到第n个字节中每个字节的取值,针对IV的第n-m个字节到第n个字节中任意一个字节,每尝试一次IV的字节的取值,可以将数据访问请求发送到应用程序;可以理解地,IV为上述数据访问请求中的信息,在IV发生变化时,上述数据访问请求发生相应的变化。
在一些实施例中,IV的每个字节的取值范围为0-255,对IV的第n-m个字节到第n个字节中每个字节的值进行暴力破解的过程为:将IV的对应字节的值分别取0至255,从而进行暴力破解。
在一些实施例中,需要按照IV的第n个字节到第n-m个字节的顺序,依次对IV的第n个字节到第n-m个字节的值进行暴力破解。
在本申请的一些实施例中,上述第一预设值为NULL值;可以理解地,N ULL值通常为全零数值,将第一预设值设为NULL值的情况下,便于计算得到数据访问请求的响应信息,一定程度上降低了计算资源的消耗。
步骤203:在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。
示例性地,上述漏洞可以是Padding Oracle漏洞或其它类型的漏洞。
本申请实施例中,可以在每次尝试IV的第n-m个字节到第n个字节中任意一个字节的取值时,均获取数据访问请求的响应信息;也就是说,获取的数据访问请求的响应信息包括对IV的第n-m个字节到第n个字节中任意一个字节的各个取值对应的响应信息;例如,在对IV的第n个字节的值进行暴力破解的过程中,获取的数据访问请求的响应信息包括对IV的第n个字节的各个取值对应的响应信息。示例性地,响应信息包括:将IV的第n个字节分别取0至255时,得到的256个取值对应的响应信息。
在实际应用中,上述步骤201至步骤203可以基于电子设备中的处理器实现,上述处理器可以是特定用途集成电路(Application Specific Integrated Cir cuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital SignalProcessing Device,DSPD)、可编程逻辑装置(Progra mmable Logic Device,PLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Central ProcessingUnit,CPU)、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作限制。
可以看出,在本申请实施例中,只需要对IV的第n-m个字节到第n个字节进行暴力破解,便可以根据响应信息检测漏洞是否存在,即,只需要对IV的部分字节进行暴力破解,与相关技术中对数百字节的反序列化利用代码进行完整的破解的方案相比,降低了运算量,漏洞检测速度更快,消耗时间更少。
另外,本申请实施例并不需要采用特定的安全框架如Apache Shiro框架进行漏洞检测,因而,本申请实施例的漏洞检测方法的通用型更强,可以应用于各种安全框架的漏洞验证。
本申请的一些实施例中,可以预先获取应用程序对应的处理逻辑的代码块;对获取的所述代码块行语法分析,得到语法分析结果,所述语法分析结果包括解密处理部分;在所述解密处理部分包括不同的三种分支处理逻辑的情况下,确定获取的所述代码块为所述第一处理逻辑的代码块。
在一些实施例中,语法分析结果还可以包括加密处理部分。
在一些实施例中,可以采用抽象语法树(Abstract Syntax Tree,AST)方式或其它方式对代码块进行语法分析,得到语法树,这里的语法树为上述语法分析结果。
在计算机科学中,AST也称为语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
在一些实施例中,上述三种不同的分支处理逻辑可以包括:第一处理逻辑、第二处理逻辑和第三处理逻辑;
其中,第一处理逻辑表示解密正确且后续处理正确时返回正常页面的逻辑,第二处理逻辑表示解密错误返回第一错误页面的逻辑,第三处理逻辑表示解密正确且后续处理正确时返回第二错误页面的逻辑,第一错误页面与第二错误页面不同。
可以理解地,如果语法分析结果中的解密处理部分包括三种不同的分支处理逻辑,则说明获取的代码块为CBC解密的处理逻辑的代码块,即,确定获取的代码块为第一处理逻辑的代码块;进而,在获取包括CBC加解密过程使用的IV的基础上,通过对IV进行暴力破解,可以实现对CBC解密模式的漏洞的检测;进一步地,本申请实施例在各种安全框架的应用场景中,均可以通过语法分析来获取第一处理逻辑的代码块,即,本申请实施例可以应用于各种安全框架的漏洞检测,通用型更强。
在本申请的一些实施例中,在获取数据访问请求后,确定数据访问请求中的参数与CBC加密块的特征匹配时,将IV的前n-m-1个字节的值调整为第一预设值。
在一些实施例中,CBC加密块的特征包括长度和/或格式。
在一些实施例中,CBC加密块的特征可以是符合AES-128-CBC或者AES-256-CBC等的加密块的特征。
在一些实施例中,在数据访问请求中的参数与CBC加密块的特征不匹配,说明数据访问请求中的参数与CBC模式无关,因而,可以不进行CBC模式的漏洞检测,直接结束流程。
可以看出,本申请实施例可以在数据访问请求中的参数与CBC加密块的特征匹配的情况下,进行后续的IV值的暴力破解,因而,本申请实施例可以根据符合条件的数据访问请求,实现对CBC模式的漏洞检测。
对于根据响应信息检测漏洞是否存在的实现方式,示例性地,可以在响应信息包括两种不同的错误页面情况下,确定存在漏洞;在所述响应信息不包括两种不同的错误页面情况下,确定不存在漏洞。
可以理解地,数据访问请求的响应信息可以包括三种情况,下面分别进行说明。
情况1:在接收到正确的密文(填充格式正确且值合法)时,应用程序返回表示“HTTP 200”消息的正常页面。
情况2:接收到非法的密文(解密后填充不正确)时,应用程序返回表示“HTTP 500”错误消息和框架错误的第一错误页面。
情况3:接收到正确但不合法的密文(填充格式正确且值不合法),应用程序显示自定义错误消息“HTTP 200”,并返回自定义错误页面,这里的自定义错误页面为上述第二错误页面。
本申请实施例中,如果数据访问请求的响应信息包括上述三种情况对应的页面,则可以认为应用程序存在CBC模式的漏洞;进一步地,需要判断响应信息是否包括正常页面,只需要在响应信息包括第一错误页面和第二错误页面时,便可以认为应用程序存在CBC模式的漏洞。
可以看出,本申请实施例可以根据响应信息是否包括两种不同的错误页面,来确定是否存在漏洞,易于实现。
本申请的一些实施例中,可以在确定存在漏洞时,生成告警信息,以提示存在漏洞。
在本申请的一些实施例中,在m等于0的情况下,在对所述IV的第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息;
在响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
可以看出,本申请实施例可以仅仅需要对第IV的最后一个字节进行破解,便可以根据响应信息检测漏洞是否存在,与相关技术中对数百字节的反序列化利用代码进行完整的破解的方案相比,降低了运算量,漏洞检测速度更快,消耗时间更少。
在本申请的一些实施例中,在m不等于0的情况下,在对IV的当前字节的值进行暴力破解的过程中,获取数据访问请求的响应信息,当前字节为所述IV的第n-m个字节至第n个字节中的一个字节。
在响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在响应信息包括两种不同的错误页面的情况下,判断当前字节是否为IV的第n-m个字节,得到判断结果,根据判断结果检测漏洞是否存在。
这里,对于根据判断结果检测所述漏洞是否存在的实现方式,示例性地,可以在当前字节不是IV的第n-m个字节的情况下,将当前已经破解的字节的值设置为所述IV的对应字节的值,并对IV的当前字节的前一字节进行破解;即,将当前字节的前一字节作为新的当前字节,然后,返回至在对IV的当前字节的值进行暴力破解的过程中,获取数据访问请求的响应信息的步骤;
在所述当前字节是所述IV的第n-m个字节,且所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述当前字节是所述IV的第n-m个字节,且所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
下面以m等于1的情况进行示例性说明。
首先对IV的第n个字节进行暴力破解,在对IV的第n个字节进行暴力破解获取数据访问请求的响应信息;在响应信息不包括两种不同的错误页面的情况下,确定不存在漏洞;在响应信息不包括两种不同的错误页面的情况下,继续对IV的第n-1个字节进行暴力破解。
在对IV的第n-1个字节进行暴力破解获取数据访问请求的响应信息;在响应信息不包括两种不同的错误页面的情况下,确定不存在漏洞;在响应信息包括两种不同的错误页面的情况下,确定存在漏洞。
在一些实施例中,在对IV的第n个字节进行暴力破解后,可以得到IV的第n个字节的破解值;然后,可以固定设置IV的前n-2个字节的值为第一预设值,固定设置IV的第n个字节的值为上述IV的第n个字节的破解值,并利用穷举法不断尝试IV的第n-1个字节的取值,每尝试一次IV的第n-1个字节的取值,可以将数据访问请求发送到应用程序;可以理解地,IV为上述数据访问请求中的信息,在IV发生变化时,上述数据访问请求发生相应的变化。
本申请实施例中,为了防止仅对IV的最后一个字节(第n个字节)暴力破解带来的偶然性因素,可以在对IV的第n个字节进行暴力破解后,在确定响应信息包括两种不同的错误页面的情况下,继续对IV的第n个字节前的部分字节进行暴力破解,并基于响应信息确定漏洞是否存在,这样,可以提高漏洞检测的可靠性。
进一步地,本申请实施例只需要对IV的部分字节进行暴力破解,便可以根据响应信息检测漏洞是否存在,与相关技术中对数百字节的反序列化利用代码进行完整的破解的方案相比,降低了暴力破解的时间,漏洞检测速度更快。
本申请的一些实施例中,上述两种不同的错误页面分别是基于第一填充序列和第二填充序列生成的,第一填充序列表示解密后明文的错误填充序列,第二填充序列表示解密后明文的正确填充序列,解密后明文表示基于暴力破解的所述IV的字节进行解密得到包括填充序列的明文。
在实际应用中,可以在对IV的第n-m个字节到第n个字节的值进行暴力破解后,基于第n-m个字节到第n个字节的破解值和CBC解密模式的处理逻辑,计算解密后明文,解密后明文包括填充序列;填充序列不符合预设填充规则时,说明解密后明文中的填充序列为错误填充序列,即,确定明解密后明文中的填充序列为第一填序列;填充序列符合预设填充规则时,说明解密后明文中的填充序列为正确填充序列,即,确定明解密后明文中的填充序列为第二填序列。
在本申请的一些实施例中,所述两种不同的错误页面为表示不同错误消息的页面。示例性地,不同错误消息可以是HTTP 500消息和HTTP200消息。
下面通过一个具体的示例对本申请实施例的Padding Oracle漏洞的检测原理进行说明。
在一些实施例中,访问接口为“http://sampleapp/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6”;示例性地,访问接口中携带的是用户身份证明(User Identification,UID)参数为16进制参数,且UID参数为48和16的倍数,该访问接口存在采用AES-CBC模式加解密的可能,可以进行Padding Oracle漏洞的检测。
对该访问接口进行检测,可以获取针对访问接口的处理逻辑;以Python语言的Flask框架为例,可以根据访问接口的路径信息和钩子(hook)框架的UR L映射关系,确定访问接口的路由(route)对应的函数,进而,可以根据该函数查找到针对访问接口的处理逻辑。
在查找的处理逻辑与AES-CBC解密的处理逻辑正则匹配时,基于AST对查找到的处理逻辑的代码块进行语法分析,得到语法树。图3为本申请实施例中代码块的示意图,参照图3,代码块中,“success”表示解密正确且后续处理正确时返回的成功消息,“failed1”表示解密错误返回的第一种错误信息,“faile d2”表示解密正确且后续处理正确时返回的第二种错误信息。
图4为本申请实施例中对图3所示的代码块进行语法分析得到的语法树的示意图,如图4所示,语法树的语法结构包括两个Try语句、两个Excepthandl e语句、以及三个不同的return语句,在语法树中包括上述这种语法结构时,可以认为语法树的解密处理部分包括上述三种不同的分支处理逻辑,此时,认为上述查找到的处理逻辑为第一处理逻辑,可以进行后续的暴力破解过程。
下面对CBC模式的填充过程进行示例性说明。
在CBC加密方式中,在一些实施例中,以AES-128-CBC为例,“AES-128-CBC”中的128表示16个字节,也就是说,以16个字节作为一个数据块,需要加密的数据可以按照16个字节分为多块之后,在未有数据填充的部分填充数据,如果有p个未进行数据填充的字节,则每个未进行数据填充的字节均填充p,p取0至15。
在另一些实施例中,图5为本申请实施例中CBC模式的填充过程示意图,如图5所示,以8个字节为一个数据块,需要加密的数据可以按照8个字节分为多块之后,在未有数据填充的部分填充数据,图5中,块#1和块#2表示响铃的数据块,Ex1、Ex2、Ex3、Ex4和Ex5分别表示不同的待填充的数据,Ex1(填充后)、Ex2(填充后)、Ex3(填充后)、Ex4(填充后)和Ex5(填充后)分别表示Ex1、Ex2、Ex3、Ex4和Ex5的填充后数据;0x05、0x02、0x01、0x08和0x04分别表示Ex1、Ex2、Ex3、Ex4和Ex5对应的填充数值。
在一些实施例中,在数据访问请求中的UID参数表示可以正确解密且正确进行后续处理的参数时,数据访问请求的响应信息可以包括正常页面;在UID参数表示为“UID=0000000000000000xxxxxxxxxxxxxxxx”的情况下,在UID参数中,“xxxxxxxxxxxxxxxx”表示随机设置的密文块,“0000000000000000”设置为NULL值的IV,此时,数据访问请求的响应信息可以包括错误页面。
下面对基于Padding Oracle漏洞回溯明文的原理进行示例性说明。
Padding Oracle漏洞是指在一些特定场景下,通过分析前文中的填充方式和数据访问请求的响应信息,可以控制需要加密的数据,我们可以自由控制需要加密的值(即明文),而不会造成解密错误。
例如,需要加密的明文为BRIAN;12;2;在Web应用场景中,上述访问接口为“http://sampleapp/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6”,在该访问接口中,IV表示UID参数中的前8个字节,即“7B216A634951170F”,“F851D6CC68FC9537858795A28ED4AAC”表示IV后的密文块。
在实际对Padding Oracle漏洞进行攻击的场景中,攻击者并不会预先获知明文,在本申请实施例中,可以预先获知明文,以便于进行后续的原理说明。
图6为本申请实施例中明文、填充后数据以及加密后的密文的示意图,图6中,明文(填充后)表示对明文进行数据填充后的数据,密文为明文(填充后)对应的加密数据,每个数据块为8个字节,填充数据和密文为16进制数据。
图7为本申请实施例中与图6对应的加密过程示意图,图7中,明文(填充后)和密文的含义与图6相同,这里不再赘述,加密算法可以是TripleDES等加密算法,中间值表示加密过程中通过异或运算得出的数值,中间值为16进制的数据。
图8为本申请实施例中与图6对应的解密过程示意图,图8中,明文(填充后)和密文的含义与图6相同,这里不再赘述,解密算法可以是TripleDES等解密算法,中间值表示解密过程中通过异或运算得出的数值,中间值为16进制的数据。
参照图8,在IV值和密文正确的情况下,最后得出的明文应该包括正确填充序列,这里的填充序列为5个“0x05”。
在一些实施例中,如果最后得出的明文中的填充序列不正确,则可以生成填充异常提示信息。
在本申请的另一些实施例中,可以获取数据访问请求,数据访问请求中的UID参数包括全文NULL值的IV和IV后的密文块,在一个示例中,数据访问请求为“Request:http://sampleapp/home.jsp?UID=0000000000000000F851D6CC68FC9537”,其中,字符串“0000000000000000”表示16进制的IV,字符串“F851D6CC68FC9537”表示16进制的密文块。
基于该数据访问请求进行数据访问,可以得到如下所示的“HTTP 500”错误消息:
Response:500-Internal Server Error
基于该“HTTP 500”错误消息,可以确定明文中的填充序列不正确。
图9为本申请实施例中基于预设的IV值对明文进行解密的示意图一,如图9所示,解密后的明文的最后一个字节不属于正确的填充序列。
然后,可以将IV的最后一个字节的值加1,重复解密过程,同样可以得到“HTTP500”错误消息。
将IV的最后一个字节的值加1后,数据访问请求为“Request:http://sampl eapp/home.jsp?UID=0000000000000001F851D6CC68FC9537”。
图10为本申请实施例中基于预设的IV值对明文进行解密的示意图二,图10中,解密后的明文的最后一个字节“0x3D”不属于正确的填充序列;图10与图9相比,IV的最后一个字节的值增加了1,解密后的明文的最后一个字节由“0x3c”变为“0x3d”。
如果对IV的最后一个字节的值进行暴力破解,直至达到0xFF(对应十进制数255),在每次尝试对IV的最后一个字节取值时,均发送相应的数据访问请求,并获取数据访问请求的响应消息;那么,在IV的最后的一个字节为某个特定数值时,解密后的明文的最后一个字节属于正确的填充序列。
示例性地,正确的填充序列为“0x01”。对于IV的最后一个字节的256个取值,可能只有在一个取值时,会使得解密后的明文的最后一个字节属于正确的填充序列,例如,在IV的最后一个字节的取值为3C(16进制)时,解密后的明文的最后一个字节属于正确的填充序列;此时,数据访问请求为“Request:http://sampleapp/home.jsp?UID=000000000000003CF851D6CC68FC9537”,数据访问请求的响应消息为如下所示的“HTTP 200”的错误消息:Response:200OK。
图11为本申请实施例中基于预设的IV值对明文进行解密的示意图三,图11中,解密后的明文的最后一个字节“0x01”属于正确的填充序列;图11与图9相比,IV的最后一个字节的值变为3c,解密后的明文的最后一个字节由“0x3c”变为“0x01”。
本申请实施例中,可以根据解密后的明文的最后一个字节“0x01”和对应的IV的最后一个字节“0x3C”、以及上述CBC模式的解密过程,计算出中间值的最后一个字节为“0x3D”。
根据前述实施例记载的内容,在上述CBC模式的解密过程中,中间值的每个字节都会与密文中的前一个数据块(第一个数据块的前一个数据块为IV)的对应字节进行异或操作,也就是说,我们可以通过固定中间值的一个字节,通过改变上一个数据块的对应字节来改变解密后的明文的对应字节;在另一些实施例中,也可以根据上述CBC模式的解密过程,计算出正确的明文,例如,I V的某个字节为“0x0F”,密文的对应字节为“0x37”,中间值的对应字节为“0x3D”,这样基于上述CBC模式的解密过程,可以确定明文的对应字节为“0x02”。
在一些实施例中,在破解中间值的第8个字节,可以继续破解中间值的第7个字节,破解第7个字节的原理与破解第8个字节的原理类似。
在一些实施例中,中间值的最后一个字节为“0x3D”,可以将IV的第8个字节固定设置为破解值“0x3F”,并IV的前6个字节固定设置为NULL值,并对IV的第7个字节进行暴力破解(从0x00开始,直至0xFF),从而确定IV的第7个字节和中间值的第7个字节。
图12为本申请实施例中基于预设的IV值对明文进行解密的示意图四,如图12所示,解密后的明文的最后两个字节不相同,因而不属于正确的填充序列,
图13为本申请实施例中基于预设的IV值对明文进行解密的示意图五,如图13所示,解密后的明文的最后两个字节属于正确的填充序列,因而,可以确定解密后的明文的最后两个字节为图13所示的“0x02”,参照图13,IV的第7个字节为“0x24”。
基于前述实施例记载的内容,可以依次破解IV的各个字节,从而确定出中间值的完整数据,在一个示例中,如图14所示,在对IV的各个字节进行暴力破解后,解密后的明文的最后8个字节均为“0x08”。
基于前述实施例记载的内容,可以利用Padding Oracle漏洞进行明文破解,下面说明Padding Oracle漏洞的另一种应用,即,利用Padding Oracle漏洞确定目标明文对应的中间值和密文。
如果要将密文中的第一个数据块解密为“TEST”这个值,可以计算所需要的IV值,只需要在破解出中间值后,将目标明文“TEST”与中间值进行异或运算即可,在一种实施方式中,参照图15,可以将字符串“TEST”后填充4个“0x04”字节,然后将填充后的数据与中间值进行异或,便可以得出所需要的IV值,例如,所需要的IV值的各个字节分别为:“0x6D”、“0x36”、“0x70”、“0x76”、“0x03”、“0x6E”、“0x22”和“0x39”。
如果要生成的目标明文较长,超出了一个数据块的长度,则可以将目标明文拆分为多个数据块,多个数据块中未填充数据的部分进行数据填充。
在一个示例中,目标明文为“ENCRYPT TEST”,则可以参照图16,将目标明文为“ENCRYPT TEST”按照两个数据块进行拆分,并将第2个数据块的后4个字节填充:“0x04”。
首先对最后一个数据块即第2个数据块开始,破解最后一个数据块对应的中间值和密文,在一个示例中,破解出的中间值的16进制数为“6D367076036E2239”,破解出的密文的16进制数为“F851D6CC68FC9537”;在这种情况下,可以将破解出的中间值“6D367076036E2239”作为密文,并在数据访问请求中携带IV值和位于IV值之后的密文“6D367076036E2239”,即,数据访问请求为“Request:http://sampleapp/home.jsp?UID=00000000000000006D367076036E223”,此时,可以参照前述实施例记载的内容,对IV值进行重新破解,从而确定出第一个数据块的密文;如此,可以得出两个数据块的密文。
结合前述实施例记载的内容,本申请实施例提出了漏洞检测方法的另一个可选的流程。
图17为本申请实施例提供的漏洞检测方法的另一个可选的流程图,如图17所示,该流程可以包括:
步骤171:获取用于实现第一处理逻辑的代码块。
步骤172:采用AST方式对代码块进行语法分析,得到语法树。
步骤173:判断语法树的解密处理部分是否包括三种不同的分支处理逻辑时,如果是,则执行步骤174;如果否,则结束流程。
这里,三种不同的分支处理逻辑包括上述第一处理逻辑、第二处理逻辑和第三处理逻辑。
本申请实施例中,在语法树的解密处理部分包括三种不同的分支处理逻辑时,进行黑盒处理流程,黑盒处理流程包括步骤174至步骤1710。
步骤174:获取数据访问请求。
步骤175:将数据访问请求中IV的前n-1个字节的值调整为第一预设值,对IV的第n个字节的值进行暴力破解。
步骤176:在暴力破解过程中判断是否返回两种不同的错误页面,如果是,则执行步骤177,如果否,则执行步骤178。
这里,在对IV的一个字节的值进行暴力破解的过程中,获取数据访问请求的响应信息,如果响应信息包括两种不同的错误页面,则说明在暴力破解过程中返回两种不同的错误页面;反之,如果响应信息不包括两种不同的错误页面,则说明在暴力破解过程中未返回两种不同的错误页面。
步骤177:判断暴力破解的字节是否为IV的最后一个字节,如果是,则执行步骤179,如果否,则执行步骤1710。
步骤178:确认不存在Padding Oracle漏洞,然后结束流程。
步骤179:对IV的第n-1个字节的值进行暴力破解;然后,返回至步骤176。
这里,可以在将IV的前n-2个字节的值调整为第一预设值,并将IV的第n个字节的值确定为破解值时,对IV的第n-1个字节的值进行暴力破解。
步骤1710:确认存在Padding Oracle漏洞,然后,结束流程。
在前述实施例提出的漏洞检测方法的基础上,本申请实施例还提出了一种漏洞检测装置;图18为本申请实施例的漏洞检测装置的一个可选的组成结构示意图,如图18所示,该漏洞检测装置180可以包括:
获取模块181,用于在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的IV;
破解模块182,用于在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2;
检测模块183,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在。
在本申请的一些实施例中,所述检测模块183,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m不等于0的情况下,在对所述IV的当前字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,所述当前字节为所述IV的第n-m个字节至第n个字节中的一个字节;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,判断所述当前字节是否为所述IV的第n-m个字节,得到判断结果,根据所述判断结果检测所述漏洞是否存在。
在本申请的一些实施例中,所述检测模块183,用于根据所述判断结果检测所述漏洞是否存在,包括:
在所述当前字节不是所述IV的第n-m个字节的情况下,将当前已经破解的字节的值设置为所述IV的对应字节的值,并对所述IV的当前字节的前一字节进行破解;
在所述当前字节是所述IV的第n-m个字节,且所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述当前字节是所述IV的第n-m个字节,且所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述检测模块183,用于在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息检测漏洞是否存在,包括:
在m等于0的情况下,在对所述IV的第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
在本申请的一些实施例中,所述两种不同的错误页面分别是基于第一填充序列和第二填充序列生成的,所述第一填充序列表示解密后明文的错误填充序列,所述第二填充序列表示解密后明文的正确填充序列,所述解密后明文表示基于暴力破解的所述IV的字节进行解密得到包括填充序列的明文。
在本申请的一些实施例中,所述两种不同的错误页面为表示不同错误消息的页面。
在本申请的一些实施例中,所述获取模块181,还用于在获取所述数据访问请求后,确定所述数据访问请求中的参数与CBC加密块的特征匹配时,将所述IV的前n-m-1个字节的值调整为第一预设值。
在本申请的一些实施例中,所述CBC加密块的特征包括长度和/或格式。
在本申请的一些实施例中,所述获取模块181,还用于:
获取应用程序对应的处理逻辑的代码块;
对获取的所述代码块行语法分析,得到语法分析结果,所述语法分析结果包括解密处理部分;
在所述解密处理部分包括不同的三种分支处理逻辑的情况下,确定获取的所述代码块为所述第一处理逻辑的代码块。
在本申请的一些实施例中,所述三种不同的分支处理逻辑包括:第一处理逻辑、第二处理逻辑和第三处理逻辑;
其中,所述第一处理逻辑表示解密正确且后续处理正确时返回正常页面的逻辑,所述第二处理逻辑表示解密错误返回第一错误页面的逻辑,所述第三处理逻辑表示解密正确且后续处理正确时返回第二错误页面的逻辑,所述第一错误页面与所述第二错误页面不同。
在本申请的一些实施例中,所述数据访问请求包括位于所述IV后的密文块,所述密文块的内容为预设内容。
在本申请的一些实施例中,所述第一预设值为NULL值。
在实际应用中,获取模块181、破解模块182和检测模块183均可以利用处理器实现,上述处理器可以是ASIC、DSP、DSPD、PLD、FPGA、CPU、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作限制。
需要说明的是,以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的漏洞检测方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是终端、服务器等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
对应地,本申请实施例再提供一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,该计算机可执行指令用于实现本申请实施例提供的任意一种漏洞检测方法。
相应的,本申请实施例再提供一种计算机存储介质,所述计算机存储介质上存储有计算机可执行指令,该计算机可执行指令用于实现上述实施例提供的任意一种漏洞检测方法。
本申请实施例还提供一种电子设备,图19为本申请实施例提供的电子设备的一个可选的组成结构示意图,如图19所示,所述电子设备190包括:
存储器191,用于存储可执行指令;
处理器192,用于执行所述存储器191中存储的可执行指令时,实现上述任意一种漏洞检测方法。
上述处理器192可以为ASIC、DSP、DSPD、PLD、FPGA、CPU、控制器、微控制器、微处理器中的至少一种。
上述计算机可读存储介质/存储器可以是只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性随机存取存储器(Ferromagnetic Random Access Memory,FRAM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器;也可以是包括上述存储器之一或任意组合的各种终端,如移动电话、计算机、平板设备、个人数字助理等。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一些实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一些实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本申请实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得设备自动测试线执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (15)

1.一种漏洞检测方法,其特征在于,所述方法包括:
在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示密码分组连接CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的初始向量IV;
在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2;
根据m是否等于0的情况,在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息是否包括两种不同的错误页面,检测漏洞是否存在;其中,在m等于0的情况下对所述IV的第n个字节的值进行暴力破解,或者在m不等于0的情况下对所述IV的第n-m个字节至第n个字节中的字节进行暴力破解。
2.根据权利要求1所述的方法,其特征在于,所述根据m是否等于0的情况,在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息是否包括两种不同的错误页面,检测漏洞是否存在,包括:
在m不等于0的情况下,在对所述IV的当前字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,所述当前字节为所述IV的第n-m个字节至第n个字节中的一个字节;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,判断所述当前字节是否为所述IV的第n-m个字节,得到判断结果,根据所述判断结果检测所述漏洞是否存在。
3.根据权利要求2所述的方法,其特征在于,所述根据所述判断结果检测所述漏洞是否存在,包括:
在所述当前字节不是所述IV的第n-m个字节的情况下,将当前已经破解的字节的值设置为所述IV的对应字节的值,并对所述IV的当前字节的前一字节进行破解;
在所述当前字节是所述IV的第n-m个字节,且所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述当前字节是所述IV的第n-m个字节,且所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
4.根据权利要求1所述的方法,其特征在于,所述根据m是否等于0的情况,在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息是否包括两种不同的错误页面,检测漏洞是否存在,包括:
在m等于0的情况下,在对所述IV的第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息;
在所述响应信息不包括两种不同的错误页面的情况下,确定不存在所述漏洞;在所述响应信息包括两种不同的错误页面的情况下,确定存在所述漏洞。
5.根据权利要求2至4任一项所述的方法,其特征在于,所述两种不同的错误页面分别是基于第一填充序列和第二填充序列生成的,所述第一填充序列表示解密后明文的错误填充序列,所述第二填充序列表示解密后明文的正确填充序列,所述解密后明文表示基于暴力破解的所述IV的字节进行解密得到包括填充序列的明文。
6.根据权利要求2至4任一项所述的方法,其特征在于,所述两种不同的错误页面为表示不同错误消息的页面。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在获取所述数据访问请求后,确定所述数据访问请求中的参数与CBC加密块的特征匹配时,将所述IV的前n-m-1个字节的值调整为第一预设值。
8.根据权利要求7所述的方法,其特征在于,所述CBC加密块的特征包括长度和/或格式。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取应用程序对应的处理逻辑的代码块;
对获取的所述代码块行语法分析,得到语法分析结果,所述语法分析结果包括解密处理部分;
在所述解密处理部分包括不同的三种分支处理逻辑的情况下,确定获取的所述代码块为所述第一处理逻辑的代码块。
10.根据权利要求9所述的方法,其特征在于,所述三种不同的分支处理逻辑包括:第一处理逻辑、第二处理逻辑和第三处理逻辑;
其中,所述第一处理逻辑表示解密正确且后续处理正确时返回正常页面的逻辑,所述第二处理逻辑表示解密错误返回第一错误页面的逻辑,所述第三处理逻辑表示解密正确且后续处理正确时返回第二错误页面的逻辑,所述第一错误页面与所述第二错误页面不同。
11.根据权利要求1所述的方法,其特征在于,所述数据访问请求包括位于所述IV后的密文块,所述密文块的内容为预设内容。
12.根据权利要求1所述的方法,其特征在于,所述第一预设值为NULL值。
13.一种漏洞检测装置,其特征在于,所述装置包括:
获取模块,用于在获取用于实现第一处理逻辑的代码块的情况下,获取数据访问请求;所述第一处理逻辑表示密码分组连接CBC加解密的处理逻辑,所述数据访问请求中携带有CBC加解密过程使用的初始向量IV;
破解模块,用于在将所述IV的前n-m-1个字节的值调整为第一预设值的情况下,对所述IV的第n-m个字节到第n个字节的值进行暴力破解,n为所述IV的字节数,m取0至n-2;
检测模块,用于根据m是否等于0的情况,在对所述IV的第n-m个字节到第n个字节的值进行暴力破解的过程中,获取所述数据访问请求的响应信息,根据所述响应信息是否包括两种不同的错误页面,检测漏洞是否存在;其中,在m等于0的情况下对所述IV的第n个字节的值进行暴力破解,或者在m不等于0的情况下对所述IV的第n-m个字节至第n个字节中的字节进行暴力破解。
14.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的漏洞检测方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至12任一项所述的漏洞检测方法。
CN202011056685.3A 2020-09-30 2020-09-30 漏洞检测方法、装置、电子设备及计算机可读存储介质 Active CN112149137B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202011056685.3A CN112149137B (zh) 2020-09-30 2020-09-30 漏洞检测方法、装置、电子设备及计算机可读存储介质
PCT/CN2021/120771 WO2022068742A1 (zh) 2020-09-30 2021-09-26 漏洞检测方法、装置、电子设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011056685.3A CN112149137B (zh) 2020-09-30 2020-09-30 漏洞检测方法、装置、电子设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN112149137A CN112149137A (zh) 2020-12-29
CN112149137B true CN112149137B (zh) 2023-12-05

Family

ID=73895161

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011056685.3A Active CN112149137B (zh) 2020-09-30 2020-09-30 漏洞检测方法、装置、电子设备及计算机可读存储介质

Country Status (2)

Country Link
CN (1) CN112149137B (zh)
WO (1) WO2022068742A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112149137B (zh) * 2020-09-30 2023-12-05 深圳前海微众银行股份有限公司 漏洞检测方法、装置、电子设备及计算机可读存储介质
CN115277064B (zh) * 2022-06-14 2024-05-10 中国电信股份有限公司 数据加密、数据解密方法、装置、电子设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103647648A (zh) * 2013-12-10 2014-03-19 飞天诚信科技股份有限公司 一种安全通讯的方法
CN109698743A (zh) * 2019-03-05 2019-04-30 中国人民解放军32082部队 一种基于消息填充漏洞的分组密码加密密文数据恢复方法
CN110162989A (zh) * 2019-05-28 2019-08-23 上海海洋大学 基于cbc模式的多类型文件加密共享与访问控制方法
CN111294345A (zh) * 2020-01-20 2020-06-16 支付宝(杭州)信息技术有限公司 一种漏洞检测方法、装置及设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5673319A (en) * 1995-02-06 1997-09-30 International Business Machines Corporation Block cipher mode of operation for secure, length-preserving encryption
US20020144141A1 (en) * 2001-03-31 2002-10-03 Edwards James W. Countering buffer overrun security vulnerabilities in a CPU
CN112149137B (zh) * 2020-09-30 2023-12-05 深圳前海微众银行股份有限公司 漏洞检测方法、装置、电子设备及计算机可读存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103647648A (zh) * 2013-12-10 2014-03-19 飞天诚信科技股份有限公司 一种安全通讯的方法
CN109698743A (zh) * 2019-03-05 2019-04-30 中国人民解放军32082部队 一种基于消息填充漏洞的分组密码加密密文数据恢复方法
CN110162989A (zh) * 2019-05-28 2019-08-23 上海海洋大学 基于cbc模式的多类型文件加密共享与访问控制方法
CN111294345A (zh) * 2020-01-20 2020-06-16 支付宝(杭州)信息技术有限公司 一种漏洞检测方法、装置及设备

Also Published As

Publication number Publication date
CN112149137A (zh) 2020-12-29
WO2022068742A1 (zh) 2022-04-07

Similar Documents

Publication Publication Date Title
CN110493197B (zh) 一种登录处理方法及相关设备
CN110868287B (zh) 一种认证加密密文编码方法、系统、装置及存储介质
CN112202754B (zh) 一种数据加密方法、装置、电子设备及存储介质
CN109241484B (zh) 一种基于加密技术的网页数据的发送方法及设备
CA2990849C (en) Numeric pattern normalization for cryptographic signatures
JP2016515235A5 (zh)
CN112149137B (zh) 漏洞检测方法、装置、电子设备及计算机可读存储介质
CN108075888B (zh) 动态url生成方法及装置、存储介质、电子设备
CN113259132B (zh) 数据传输加解密方法、装置、计算机设备及存储介质
WO2019001083A1 (zh) 一种视频流地址鉴权方法及装置
CN108431819B (zh) 保护客户端访问视频播放器的drm代理的服务的方法和系统
CN110019075B (zh) 日志加密方法与解密方法及装置
WO2020233047A1 (zh) 页面测试的方法及装置
CN110555303A (zh) 防止机器脚本恶意访问的方法及装置
CN115550060B (zh) 基于区块链的可信证书验证方法、装置、设备和介质
CN108376212B (zh) 执行代码安全保护方法、装置及电子装置
Kario Everlasting ROBOT: The Marvin Attack
CN114117388A (zh) 设备注册方法、设备注册装置、电子设备以及存储介质
CN114422209A (zh) 一种数据处理的方法、装置及存储介质
CN116781265A (zh) 一种数据加密的方法和装置
CN111654731A (zh) 密钥信息传输方法、装置、电子设备及计算机存储介质
CN116455892B (zh) 文件传输方法、传输装置及终端设备
CN112367171B (zh) 一种基于rsa和MD5的数据传输方法及组件
CN113824693B (zh) 多媒体数据分享方法、装置、系统、电子设备和存储介质
CN116318686B (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
GR01 Patent grant
GR01 Patent grant