具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明web指纹匹配方法实施例流程图。如图1所示,本发明实施例的web指纹匹配方法包括:
S101,响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID。
在一些实施例中,可以通过网络流量分析的系统或工具(也可以使用威胁检测引擎)检测到攻击流量(比如请求报文、响应报文等信息)。也可以采用正则特征匹配、机器学习、基于恶意攻击行为的威胁情报分析等方法从网络流量中识别出具有威胁的流量(即识别出攻击流量)。一般的,威胁检测关注的重点在于威胁特征的相关信息,缺少对被攻击的受害资产详细属性分析识别。
威胁,是指可能对计算机系统或网络造成损害的任何事物。
威胁检测,是从网络、系统或应用程序中发现威胁的过程,威胁检测的方法可以是基于正则特征匹配或机器学习方法,或者可以理解为基于恶意攻击行为的威胁情报分析从网络流量中识别威胁的过程。
作为示例,当检测到攻击流量后,可以先判断攻击流量的攻击类型(比如RCE类攻击、DDOS类攻击等),根据攻击流量的攻击类型与规则ID的对照表,确定规则ID。
作为示例,攻击流量可以是某一POST方式的请求,其请求体的数据为参考如下:
shopId=T%28java.lang.Runtime%29.getRuntime%28%29.exec%28%22whoami%22%29&foodNameDetail=&reservedStatus=&limit=10&start=1&foodId=
对于正常流量的shopId参数应该是一个数字编号或字符串。上述攻击流量示例中的shopId参数是一段Java命令执行语句。经URL解码后上述攻击流量示例中的shopId参数的值为:
(java.lang.Runtime).getRuntime().exec("whoami")
S102,通过web指纹提取工具确定规则ID的web指纹规则。
在一些实施例中,如图4所示的一个应用场景,通过威胁检测引擎,确定规则ID后,通过威胁检测引擎可以将规则ID和攻击流量发送给web指纹提取工具,web指纹提取工具根据规则ID确定对应规则ID的web指纹规则后,通过web指纹规则过滤攻击流量。
作为示例,也可以通过规则ID和web指纹规则的对照表,确定web指纹规则,web指纹规则是针对一类web应用程序的规则,作为示例,Web开发框架为ThinkPHP、开发语言为PHP为一类web应用程序,Web开发框架为Shiro、开发语言为JAVA为另一类web应用程序。
指纹,是生物学术语,指人类手指末端指腹上由凹凸的皮肤所形成的纹路,具有唯一性特征。
S103,通过web指纹规则与攻击流量进行匹配,得到与攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
web指纹特征信息,是指Web应用程序的相关特征,包括Web应用程序所在的服务器操作系统、Web服务器、Web开发框架、开发语言、数据库等独特属性及相应的版本信息。
作为示例,web指纹特征信息可以参考:
192.168.58.151_8080_103:{"appname":"Apache","version":"2.4.9","os":"CentOS"}
其中,192.168.58.151_8080_103是存放在数据库中的Key,{"appname":"Apache","version":"2.4.9","os":"CentOS"}是存放在数据库中的Value。
说明:资产192.168.58.151上的8080端口上运行应用程序的103类型Web指纹为Apache,版本为2.4.9,操作系统为CentOS。103是对同一资产的同一端口的不同类型Web指纹进行的分类,分类有Web开发框架、编程语言、Web服务器等。
作为示例,Web指纹识别(即通过web指纹规则进行匹配的过程),是指基于Web指纹规则,从威胁检测到的攻击流量中通过正则匹配方式提取出受害资产的Web指纹过程。
本发明实施例提供的web指纹匹配方法,响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID;通过web指纹提取工具确定规则ID对应的web指纹规则;通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。本发明基于Web指纹规则,从网络流量请求响应报文(攻击流量)中通过特征匹配识别出受害资产的Web指纹特征信息。Web指纹特征信息,有利于完善受害资产信息、威胁检测的分析研判及辅助溯源分析攻击链,还可以结合受害资产的Web指纹特征信息对威胁检测的告警结果进行修正,还可以提高威胁检测精度,降低漏报误报率。
图2为本发明web指纹匹配方法的另一些实施例流程图。如图2所示,本发明实施例的web指纹匹配方法,包括:
S201,通过web指纹提取工具加载web指纹规则库至内存中,web指纹规则库包括至少一个web指纹规则,至少一个web指纹规则对应至少一个规则ID。
现有的指纹识别工具(或称web指纹提取工具)主要用于攻击方进行信息收集或者用于防守方进行资产梳理,如WhatWeb、Wappalyzer等工具,缺少用于威胁检测的Web指纹识别工具。
因此,实现威胁检测的Web指纹提取的前期,需要整理一个Web指纹规则库,Web指纹规则库可以检测不同类型的web应用程序,如Shiro、SpringBoot、WordPress等1000种以上的类型,可以检测不同开发框架、开发语言等属性的web应用程序。Web指纹规则库的数据可以来源于WhatWeb等工具的指纹库,或者来源于对资产扫描数据收集,或者来源于网络空间测绘产品的扫描数据。实现了将用于网络扫描系统等各种格式的Web指纹库转换成用于威胁检测系统中特有的Web指纹库。有利于完善受害资产信息,并一步用于威胁检测的分析研判及辅助溯源分析攻击链。
S202,响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID。
在一些可选的实现方式中,通过威胁检测引擎确定攻击流量对应的规则ID,包括:通过威胁检测引擎确定攻击流量的攻击类型和攻击流量对应的web应用程序类型;根据攻击类型和web应用程序类型,确定规则ID。
在一些实施例中,可以通过威胁检测引擎对网络流量过滤,当检测到攻击流量时,产生告警,确定规则ID,并调用web指纹提取工具。
作为示例,可以根据攻击类型和web应用程序类型的对照表,确定规则ID。
作为示例,攻击类型可以是RCE(远程命令执行),web应用程序类型可以是Java开发语言、使用了Shiro框架、操作系统为CentOS,根据上述的攻击类型和web应用程序类型查询对照表,确定规则ID。
S203,通过web指纹提取工具确定规则ID对应的web指纹规则。
在一些实施例中,步骤203的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤102,在此不再赘述。
S204,通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
在一些可选的实现方式中,得到web指纹特征信息之后,还包括:将web指纹特征信息转换为JSON格式并写入数据库。
在一些实施例中,web指纹特征信息也可以根据具体需要转换为同其他格式。写入数据库后,可以用于其他关联分析平台,或者对告警结果进行修正。结合受害资产的Web指纹特征信息对威胁检测的告警结果进行修正,可以提高威胁检测精度,降低漏报误报率。
本发明实施例提供的web指纹匹配方法,通过将web指纹特征信息转换为JSON格式并写入数据库以便其他关联分析;加载web指纹规则库,解决了缺少用于威胁检测的Web指纹识别工具,以及通过资产IP关联得到的信息无法在威胁检测过程中对告警结果进行修正的问题。
图3为本发明对攻击流量进行匹配的一些实施例流程图。如图3所示,本发明实施例的方法,包括:
S301,根据web指纹规则的key字段的值,确定匹配方式。
作为示例,web指纹规则中的key字段可以是一个也可以是多个。
在一些实施例中,web指纹规则可以包括前置规则和后置规则,前置规则(前置规则可以是关于Web应用程序的关键字的设定,若攻击流量存在某些关键字,则可以判断该攻击流量是哪类Web应用程序)可以用于对攻击流量进行过滤,识别出web应用程序是否包含有Web指纹特征信息,并产生指纹告警,减轻后续Web指纹提取工具的压力。若产生指纹告警,则通过后置规则从攻击流量的请求响应报文中提取出Web指纹特征信息。即前置规则用于产生指纹告警,在产生指纹告警后,可以根据传递给Web指纹提取工具的规则ID获得后置规则内容并提取Web指纹特征信息。
前置规则示例:
上述前置规则示例中的<title>匹配到“Apache Flink Web Dashboard”字符串,可以判断是Apache-Flink应用。
或者请求URL带有中/images/flink-logo.png字符串,也可以判断是Apache-Flink应用。
根据前置规则,从大量网络流量中过滤出Apache-Flink应用,然后通过后置规则提取选中的流量数据的web指纹特征信息。
作为示例,web指纹规则包含两个key字段的后置规则可以参考:
上述web指纹规则的实例中,两个key字段的值分别为text和version,text对应的匹配方式可以是字符串匹配,version对应的匹配方式可以是正则匹配。
在一些可选的实现方式中,key字段的值包括第一目标字段或第二目标字段;以及根据web指纹规则的key字段的值,确定匹配方式,包括:若web指纹规则的key字段的值为第一目标字段,则确定匹配方式为正则匹配;若web指纹规则的key字段的值为第二目标字段,则确定匹配方式为文本匹配;以及通过匹配方式与攻击流量进行匹配,包括:通过正则匹配的方式对攻击流量进行匹配;或通过文本匹配的方式对攻击流量进行匹配。
仍以上述为例,上述web指纹规则包含有两个key字段,两个key字段的值分别为text和version。text为第二目标字段,对应文本匹配;version为第一目标字段对应正则匹配。若web指纹规则只包含有一个key字段,则根据包含的一个key字段进行文本匹配或者正则匹配。
正则匹配,即通过正则表达式进行匹配,正则表达式是一种文本模式,是一组由字母和符号组成的特殊文本,包括普通字符(例如,a到z之间的字母)和特殊字符(例如,*、+、?等字符,也称为"元字符"),可以用来从文本中找出满足指定格式的字符串。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
文本匹配,就是从一段文本中匹配到指定的目标字符串,相当于最简单的正则表达式。即从文本(比如,请求响应报文)中取出一个字符串A,目标字符串作为字符串B(比如B为text对应的值,即pattern字段的text),比较二者是否相同。
作为示例,文本匹配的具体实现是进行模式匹配,即匹配到目标字符串相同的子字符串。仍以上述为例,若key字段为text,则确定为文本匹配,将pattern字段的overview确定为文本匹配的目标字符串。
作为示例,正则匹配,即根据web指纹规则生成正则表达式,通过正则表达式匹配攻击流量。根据key字段对应的pattern字段,生成正则表达式。仍以上述为例,若key字段为version,则确定为正则匹配,根据pattern字段的"flink-version":"([^"]+)"生成正则表达式。
S302,根据攻击流量,通过匹配方式进行匹配。
仍以上述web指纹规则为例,可以通过field字段确定要匹配的攻击流量。
在一些可选的实现方式中,通过正则匹配的方式对攻击流量进行匹配,包括:对web指纹规则的matches模式下的pattern字段的信息进行编译,得到正则表达式;将正则表达式与攻击流量进行匹配。
仍以上述web指纹规则为例,根据Web指纹规则的模式(matches)的pattern字段数据进行编译,如果编译成功返回正则表达式,正则表达式在后面匹配过程中从请求响应报文(即与field字段指定的攻击流量信息)中提取出Web应用程序的信息。
在一些可选的实现方式中,通过文本匹配的方式对攻击流量进行匹配,包括:将web指纹规则的matches模式下的pattern字段的信息与攻击流量进行匹配。
仍以上述web指纹规则为例,Web指纹规则的模式(matches)的pattern字段数据为overview,将overview与field字段指定的攻击流量信息进行文本匹配。
在一些可选的实现方式中,第一目标字段包括regex、appname、version或os,第二目标字段包括text。
作为示例,根据第一目标字段确定的匹配方式完成匹配后,可以根据需要定义得到的匹配结果是否是Web指纹的特征信息。比如:如果key字段为text,进行文本匹配,不提取Web指纹的特征信息;如果key字段为regex等,进行正则匹配,不提取Web指纹的特征信息;如果key字段为appname、version、os,则进行正则匹配并提取匹配信息作为Web指纹的特征信息,可以根据key字段为text和regex的匹配结果修正key字段为appname、version、os匹配得到的Web指纹的特征信息。
作为示例,攻击流量的请求响应报文可以参考:
GET/overview HTTP/1.1
Host:172.16.12.139:8081
Connection:keep-alive
Accept:application/json,text/plain,*/*
User-Agent:Mozilla/5.0(Windows NT 6.1;WOW64)
AppleWebKit/537.36(KHTML,like Gecko)Chrome/96.0.4664.45
Safari/537.36
Referer:http://172.16.12.139:8081/
Accept-Encoding:gzip,deflate
Accept-Language:zh-CN,zh;q=0.9
HTTP/1.1 200OK
Content-Type:application/json;charset=UTF-8
Access-Control-Allow-Origin:*
Connection:keep-alive
content-length:174
{"taskmanagers":0,"slots-total":0,"slots-available":0,"jobs-running":0,"jobs-finished":0,"jobs-cancelled":0,"jobs-failed":0,"flink-version":"1.11.2","flink-commit":"fe36135"}
结合上述后置规则示例,攻击流量的请求响应报文中:
1、请求头部中含有/overview
2、响应体含有"flink-version":"1.11.2"
如果key是version,就把正则匹配到的值(这里示例中符合pattern的具体值是1.11.2)提取出来作为版本值。如果key是appname、version、os之外的其它字段,就不提取匹配结果了。这里进行路径匹配的原因:确认这个请求就是Apache-Flink应用,减少误报。如果不用这个条件加强一下,其它类型的应用可能也包含了这个"flink-version":"1.11.2"字符串,仅仅因为一个条件"flink-version":"1.11.2",就认为是Apache-Flink应用的版本值,结果可能存在误报。Apache-Flink应用的首页默认会访问/overview路径,根据路径判断这是一个Apache-Flink应用。
本发明实施例提供的对攻击流量进行匹配的一些实施例,通过加载和建立web指纹规则库,解决了对处于内网的资产识别覆盖面不够的问题,通过web指纹规则库对攻击流量匹配,得到的web指纹特征信息更准确。
图5为本发明web指纹匹配装置实施例结构示意图。如图5所示,该装置500,包括:
第一处理模块501,用于响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID;
第二处理模块502,用于通过web指纹提取工具确定规则ID对应的web指纹规则;
第三处理模块503,用于通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
可选地,装置500,还包括:第四处理模块,用于:
通过web指纹提取工具加载web指纹规则库至内存中,web指纹规则库包括至少一个web指纹规则,至少一个web指纹规则对应至少一个规则ID。
可选地,第一处理模块501还用于:
通过威胁检测引擎确定攻击流量的攻击类型和攻击流量对应的web应用程序类型;
根据攻击类型和web应用程序类型,确定规则ID。
可选地,第三处理模块503,还用于:
根据web指纹规则的key字段的值,确定匹配方式;
通过匹配方式与攻击流量进行匹配。
可选地,key字段的值包括第一目标字段或第二目标字段;以及第三处理模块503,还用于:
若web指纹规则的key字段的值为第一目标字段,则确定匹配方式为正则匹配;
若web指纹规则的key字段的值为第二目标字段,则确定匹配方式为文本匹配;以及
通过匹配方式与攻击流量进行匹配,包括:
通过正则匹配的方式对攻击流量进行匹配;或
通过文本匹配的方式对攻击流量进行匹配。
可选地,第三处理模块503,还用于:
对web指纹规则的matches模式下的pattern字段的信息进行编译,得到正则表达式;
将正则表达式与攻击流量进行匹配。
可选地,第三处理模块503,还用于:
将web指纹规则的matches模式下的pattern字段的信息与攻击流量进行匹配。
可选地,第一目标字段包括regex、appname、version、或os,第二目标字段包括text。
可选地,装置500,还包括:
第五处理模块,用于将web指纹特征信息转换为JSON格式并写入数据库。
举个例子如下:
图6示例了一种电子设备的实体结构示意图,如图6示,该电子设备可以包括:处理器(processor)601、通信接口(Communications Interface)602、存储器(memory)603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。处理器601可以调用存储器603中的逻辑指令,以执行如下方法:响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID;通过web指纹提取工具确定规则ID对应的web指纹规则;通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
此外,上述的存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各实施例提供的web指纹匹配方法,例如包括:响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID;通过web指纹提取工具确定规则ID对应的web指纹规则;通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的web指纹匹配方法,例如包括:响应于检测到攻击流量,通过威胁检测引擎确定攻击流量对应的规则ID;通过web指纹提取工具确定规则ID对应的web指纹规则;通过web指纹规则与攻击流量进行匹配,得到攻击流量的web指纹特征信息,web指纹特征信息表示对应攻击流量的web应用程序的信息。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。