李 钊,张先荣,郭 帆
(1.安徽医科大学 图书馆信息技术部,安徽 合肥 340100;2.广州大学 网络空间先进技术研究院,广东 广州 510000;3.江西师范大学 计算机信息工程学院,江西 南昌 330022)
随着互联网技术的高速发展,网络在人们生活中呈现爆发式的增长,Web平台具有大量的网络信息资源,这也导致了Web网站的漏洞越来越多[1]。据Gartern的统计,在绝大多数的网络攻击中,发生在Web层面的攻击高达75%左右[2],因此面向Web程序的入侵检测就显得极为重要了。
Web入侵检测系统主要分为误用检测和异常检测[3],误用检测技术通常对所有已知的攻击类型进行建立模型和规则匹配库,因此误用检测类似于黑名单机制,优点是能够检测已知的攻击和具有较低的误报率,缺点是对未知的攻击难以检测,所以当面对未知攻击时误用检测的检测率有时候并不理想。异常检测是对正常行为进行建模,构建正常行为模型,不用分析所有的攻击类型,类似于白名单机制,优点是具有较高的检测率,缺点是误报率通常较高。
对于Web入侵检测,众多学者对此领域做出了相关贡献。Almgren等[4]以Web应用日志URL的路径、编码字符等作为攻击特征,通过攻击特征来匹配攻击请求,设计了Web误用检测系统,具有较高的检测率和低误报率。著名的入侵检测攻击Snort[5]就是典型的基于网络流量检测的误用检测系统,通过官方网络攻击规则库或者自定义规则库能够对网络流量进行入侵检测。Jin Wang等[6]人提出了一种新的允许网络爬行轨迹的方法来建立基线轮廓,并设计了一种新的基于异常的http泛洪检测方案(简称HTTP-sCAN),HTTP-sCAN不受未知网络爬行轨迹的干扰,能够检测出所有的http -flood攻击。Li Bo等[7]人提出了一种基于加权深度学习的子空间光谱集合聚类方法,称为WDL-SSEC,应用集合聚类模型将异常与正常样本分离,然后,使用word2vec来获得标记的语义表示,并连接加权标记以获得url的向量。最后,基于子空间的集合聚类和局部自适应聚类(LAC)将多聚类异常分为具体类型。
以往研究大多是从误用检测或异常检测的单个纬度去讨论入侵检测系统的,因此本文设计了混合的入侵检测系统,首先,基于Web已有的攻击方法,提取Web日志的攻击向量构建攻击规则匹配库,设计了Web误用检测模型。其次,采集Web日志的正常访问数据,构建正常访问模型,设计了异常检测模型。最后,在误用检测和异常检测的基础上设计了基于Web日志的Web混合入侵检测系统模型WL-HIDSM(Web Log Intrusion Detection System Model)。
Web混合入侵检测系统WL-HIDSM采用模块化设计,模型的总体设计方法如图1所示,利用这个混合入侵检测模型能够增加入侵检测的检测率和降低入侵检测的误报率,它的主要包括以下3个部分。
图1 Web混合入侵检测模型WL-HIDSM总体结构
(1)Web日志预处理模块:这个模块的功能是将Web日志的数据进行预处理和清洗。
(2)误用入侵检测模块:通过Web攻击向量构建规则库,将Web日志与规则库匹配,若匹配成功则表示检测到入侵,若匹配失败,则将进行异常入侵检测。
(3)异常入侵检测模块:通过正常的Web日志数据构建正常访问模型,将误用检测没有匹配成功的日志数据送至异常检测模块进行检测,若超过设定的阈值则表示检测到异常日志数据,反之亦然。
误用检测有着检测率高和误报率低的特征,这导致大量的工业产品使用误用检测技术。
误用检测技术[8]是分析出各种已知的攻击类型数据,并将这些攻击数据集合构建一个攻击向量库,然后将待测数据与攻击向量库进行匹配,若匹配成功则表示检测到入侵行为。鉴于本文的检测数据是Web日志,所有将构建的攻击向量库与Web日志匹配,若匹配成功,则表示Web程序受到入侵。误用检测原理如图2所示。
图2 误用检测模型
由图2所示误用检测技术的原理,我们可以总结Web误用检测模型的两个关键:一是需要收集Web程序的各种攻击类型方式,并能够对已知的各种攻击类型进行分析和攻击向量提取;二是对攻击向量进行分析并构建合适的规则库。
本文Web误用检测模块从Web日志采集入侵数据,首先搭建使用PHPStudy v8.1[9]搭建Web服务器集成环境来模拟真实的运行环境,并将WebGoat[10]Web漏洞测试平台放入服务器环境中,然后再OWASP Top10 2021[11]中获取已知的Web程序攻击向量,将使用这些获取的Web攻击向量在集成环境中测试,最后,将根据获得的Web日志数据构建攻击向量匹配规则库。具体实现如图3所示。
图3 Web误用检测流程
我们以XSS跨站脚本攻击的攻击荷载payload:为例在Web漏洞站点WebGoat进行测试,获得Web日志数据为:%3Cscript%3Ealert%281%29%3C%2Fscript%3E,通过得到的入侵测试数据分析得到正则表达式为:(?i)