【二等奖方案】Web攻击检测与分类识别赛题「爆汁大橘少糖」团队解题思路

news2024/12/23 5:26:41

2022 CCF BDCI 数字安全公开赛

赛题「Web攻击检测与分类识别

地址:http://go.datafountain.cn/4Zj

@爆汁大橘少糖战队获奖方案

团队简介

团队成员来自海康威视研究院,目前从事大数据算法相关的工作,具有丰富的数据挖掘实践经验。曾获得过2022绿色计算大赛数据中心流量时序预测赛道冠军,2022科大讯飞人岗匹配挑战赛冠军,2021 CCF BDCI系统认证风险预测冠军,2021ATEC科技精英赛科技新星榜冠军,2021招商银行FinTech精英训练营冠军,2020链想家计算科技大赛冠军等奖项,对数据挖掘及人工智能有浓厚的兴趣。

图片

摘要

团队基于HTTP协议内容相关的字段来识别Web攻击的种类,构建Web攻击检测模型。我们进行了数据探索,并进行多维度的特征工程构造以表征Web攻击模式特点,基于轻量梯度提升树搭建了Web攻击检测模型,同时调整特征与参数,实现鲁棒、高质量的攻击检测,在最终的排行榜测评中得分为0.9727,位列第一名。

关键词

Web攻击检测、特征工程、TF-IDF、梯度提升树

赛题任务

1.1 赛题背景

某业务平台平均每月捕获到Web攻击数量超过2亿,涉及常见注入攻击,代码执行等类型。传统威胁检测手段通过分析已知攻击特征进行规则匹配,无法检测未知漏洞或攻击手法。如何快速准确地识别未知威胁攻击并且将不同攻击正确分类,对提升Web攻击检测能力至关重要。利用机器学习和深度学习技术对攻击报文进行识别和分类已经成为解决该问题的创新思路,有利于推动AI技术在威胁检测分析场景的研究与应用。

1.2 赛题任务与评价指标

参赛团队需要对前期提供的训练集进行分析,通过特征工程、机器学习和深度学习等方法构建AI模型,实现对每一条样本正确且快速分类,不断提高模型精确率和召回率。待模型优化稳定后,通过无标签测试集评估各参赛团队模型分类效果,以F1-score评估各参赛团队模型质量。

整体评价指标的F1-score公式为如下所示,

图片

其中,TP表示为将正样本预测为正的数量,FP表示将负样本预测为正样本的数量,FN表示将负样本预测为负的数量。

数据探索

2.1 数据概览

本次赛题一共提供了id、method、user_agent、url、refer、body和label共计7个字段,其中id为样本编号列,label为攻击类型的编号,其他5个字段为HTTP协议的内容。

本赛题数据集分为训练集与测试集,训练集包含33219条数据,测试集包含4000条数据。两个数据集都包含5个HTTP协议特征,另外测试集不包含label字段。

2.2 缺失值

首先根据特征字段info图查看空值情况,如图2-1和图2-2所示,训练集字段id、method以及label不存在缺失值,字段user_agent缺失2630条数据,字段url缺失1条数据,字段refer缺失24675条数据,缺失率高达74.27%,字段body缺失12348条数据,而测试集具有相似的情况(字段缺失比例相当),字段id、method不存在缺失值,字段user_agent缺失327条数据,字段url缺失2条数据,字段refer缺失2856条数据,缺失率同样超过70%,字段body缺失1731条数据。

图片

图2-1 训练集信息

图片

图2-2 测试集信息

2.3 探索性分析

本赛题存在样本较不均衡的情况,如下图2-3所示,标签1(SQL注入)具有最多的样本高达14038条,占比高达42.25%,而标签3、4、5具有较小的样本量,其中标签5(XSS跨站脚本)更是只有659条数据,占比仅为1.98%,约为最高占比标签样本的二十分之一。因此后续需要进行相应处理以提升模型的性能。

图片

图2-3 标签分布

对HTTP协议特征字段进行长度统计,如下图2-4所示。可以看到method、refer字段长度一般较小,而user_agent和url的长度中位数分别为48和62.5,body的长度一般较长,中位数达到462。使用预训练模型可能需要注意token的长度限制。

图片

图2-4 字段长度统计

特征提取

在前述数据探索的基础上,我们进行了多维度的特征提取Web攻击的特征,极大提升模型准确性,主要包括原始特征、常规统计特征、TF-IDF特征以及业务相关特征。

3.1 原始特征

对于数据集的原始特征,method、user_agent、refer属于基数较小的类别变量,我们通过Label Encoder对其直接进行编码,而url、body属于高基数类别特征,我们将这两个特征去除。

3.2 常规统计特征

基于上述数据探索,我们发现该数据集存在较多的缺失,且其缺失程度和标签具有一定的相关性,于是构造了缺失值列和特征。

对于每个类别字段,我们都进行计数统计,来描述每个类别的出现频繁程度。

3.3 TF-IDF特征

HTTP协议内容相关字段也可以被视作一种特殊文本,对其进行TF-IDF统计有助于在不考虑语义信息的情况下提取不同文本中重要的字词,从而对Web攻击进行表征。

TF-IDF【2】的具体公式如下所示:

图片

其中,n表示某个词在文档中出现的次数,N表示文档中所有词出现的总和,这是一个归一化的过程,目的是消除文章篇幅长短上的差异。D表示语料中所有文档的总数,d表示语料中出现某个词的文档数量。TF-IDF为两者的乘积。用TF-IDF可以弱化常见词,保留重要的词。

对于TF-IDF生成的高维稀疏向量,我们主要有三种处理方法,第一种是直接将该特征送入树模型,第二种是通过SVD等方法进行降维再作为特征送入树模型,第三种则是通过简单的线性模型对TF-IDF矩阵进行学习,得到预测概率作为特征送入树模型。第一种方案效果与第三种效果相当但具有耗时巨大的特点,第二种方案则存在降维信息损失,效果相对较差,因而我们最终采取第三种方案来进行TF-IDF特征提取。

对于TF-IDF,依然有许多细节要明确,首先我们采取的方式是以char为单位的,通过1-3Gram以及4Gram分别进行特征提取,最终将他们提取的特征进行拼接。其次,我们处理的文本第一种为原始的url、user_agent以及body,第二种为对这些字段进行逆向处理以及数字泛化处理(连续的数字转化为一个零来表示)。最终将两种处理方式以及两种Gram生成的TF-IDF特征进行拼接。

3.4 业务特征

对于特殊词,例如alert、script、onerror、eval等进行正则匹配与统计计数。对于url字段中最后一个字符进行是否为“/”的判断。对于字符的数字字符频率、大写字母频率进行正则提取[3]。

对于SQL注入,做进一步的特征提取。包括and、or、xor、inner join、order等关键词的计数提取,对空格占字段的百分比进行统计,对{、}、=、@、*等特殊符号进行百分比统计,对前缀做&、%等字符的百分比统计。

对于XSS静态特征,做进一步的特征提取。包括java、script、iframe等特殊字符的计数提取。

模型训练

4.1 模型选择

因为赛题的模型限制,我们只采用了具有代表性的梯度提升树模型Lightgbm[1]进行模型搭建。

4.2 数据集划分

为了保证训练集和验证集正负样本比例与原始数据集相同如图4-1所示,我们采样五折分层交叉验证(StratifiedKFold)的方法进行训练集与验证集的划分。

图片

图4-1:分层交叉验证示意图

4.3 训练细节

我们发现模型在本地验证时多数类错例极少,而几个多数类存在错误率较高的情况。这是因为样本的不均衡情况的存在,模型过多的关注了多数类样本。

因此我们采用给样本加权的方式来进行模型训练,权值来自于各自类别的线下验证评分,线下验证评分越高采用越低的权重,这在线上评测中取得了较大成绩的提升。模型最后训练采用multi-logloss作为早停的评价指标。

致谢

感谢我的导师俞颖晔俞工,在比赛中给予了我很多建设性的意见,使我能够在赛题中取得更为突出的成绩。

感谢竞赛主办方提供的平台与机会,感谢360信息安全中心提供的宝贵数据集。

参考

[1] Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boosting decision tree, Advances in neural information processing systems. 2017: 3146-3154.

[2] Jones K S. A statistical interpretation of term specificity and its application in retrieval[J]. Journal of documentation, 1972.

[3]月亮与六便士. Web攻击检测机器学习深度实践.

https://www.freebuf.com/articles/web/205760.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯测试大佬分享4个关于 Python 函数(方法)的冷知识

关于参数标识 不知道大家在工作中有没有遇到一种情况,你的同事 A 写了一个方法给你调用,然后你调用时不知道该传什么参数,然后这个同事 A 还很 cao dan 的居然不加班!你一脸茫然的看着这个方法,当你尝试传进去一个 ab…

极狐GitLab 全新「价值流仪表盘」使用指南

本文来源:about.gitlab.com 作者:Haim Snir 译者:极狐(GitLab) 市场部内容团队 GitLab / 极狐GitLab 价值流仪表盘的使用相对简单,这种可以定制化的仪表盘能够让决策者识别数字化转型进程中的趋势及机遇。 如果你已经在用 GitLab…

【FAQ】调用EasyDSS返回的直播快照接口,无法编辑只能新建的原因排查与解决

EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景上,平台可以运用在互联网教育、在线课堂、游戏直播等领域…

Couldn‘t lock the file :/tmp/bbc-filesystem-base_syscache_service

解决方案: 进去带这个目录,然后切换成root用户,将它删除

17. Spring 事务

目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…

LBP特征笔记

LBP,局部二值模式(Local Binary Pattern),是一种描述图像局部纹理特征的方式,具有旋转不变性和灰度不变性。首先由T. Ojala, M.Pietikinen, 和 D. Harwood 在1994年提出。 LBP特征描述 基础LBP算子 基础的LBP算子定义…

什么是耗尽型MOS管

我们常用的MOS管属于增强型MOS管,对于N沟道增强型MOS管,需要UGS大于开启电压,MOS管才能导通。 其实还有一种MOS管,当UGS大于0,等于0,小于0时MOS管都能导通,这种MOS管叫做耗尽型 MOS管。 以N沟道…

复现原型链污染漏洞

目录 一、复现原型链污染漏洞 hackit 2018 1、创建hackit_2018.js文件 2、运行hackit_2018.js文件 3、寻找原型链漏洞 4、污染原型链 hackit 2018 1、创建hackit_2018.js文件 const express require(express) var hbs require(hbs); var bodyParser require(body-par…

485modbus转profinet网关连接6台ABB 变频器通讯案例

昆仑通态通过485Modbus转Profinet网关实现了1200PLC与6台ABB变频器之间的Modbus通讯,触摸屏本地实时监控。485Modbus转Profinet网关作为中间桥梁,实现1200PLC与ABB变频器之间的互联互通,使得数据的传输变得高效可靠。 打开博图添加PLC,在这里…

2.4G芯片XL2408开发板,SOP16封装,芯片集成1T 8051内核单片机

XL2408开发板可用于2.4G芯片XL2408开发板的开发调试。XL2408烧录仿真需要使用WS_LINK。XL2408开发板烧录仿真需要接4根线:PA13:DIO,PA14:CLK,VCC,GND。 XL2408芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,…

GY-NEO6MV2 GPS模块测试

GY-NEO6MV2 GPS模块测试 📓模块资料:GY-NEO6MV2 https://pan.baidu.com/s/17ihqLzXytrR2K2LmumvdKA🍁原理图(资料中有) 📑基本参数信息 🌿3V-5V供电通用。🌿默认波特率&#xff…

【JAVASE】static成员

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 static 1. static修饰成员变量2. static…

公司来了个拿 25K 出来的测试,算是见识到了基础的天花板

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

数学知识(一)

一、数论 1.1质数 定义:在所有大于1的自然数&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数(素数). 质数的判断:试除法 bool is_prime(int n) {if(n < 2) return false;for(int i 2;i < n / i;i ){if(n % i 0)return false;}return true; } 分…

一文学会git常用命令和使用指南

文章目录 0. 前言1.分支分类和管理1. 分支分类规范&#xff1a;2. 最佳实践3. 分支命名规范示例&#xff1a;4. 分支管理方法&#xff1a; 2. commit 注释规范1. 提交注释结构&#xff1a;2. 提交注释的准则&#xff1a; 3. git 常用命令1. git pull 核心用法2. git push 命令1…

C++初阶 - 6.模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板的概念 2.2函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 1.泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left…

SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Spring MVC入门 一、Spring MVC概述二、入门案例2.1导入Sp…

【宝藏系列】Linux 常用磁盘管理命令详解

【宝藏系列】Linux 常用磁盘管理命令详解 文章目录 【宝藏系列】Linux 常用磁盘管理命令详解前言1️⃣ df2️⃣du3️⃣fdisk&#x1f4df;磁盘格式化&#x1f4e0;磁盘检验⌨️磁盘挂载与卸除&#x1f4c0;卸载/dev/hdc6 前言 Linux磁盘管理常用三个命令为df、du和fdisk。 df…

Java框架(九)--Spring Boot入门(1)

SpringBoot 2.x入门简介 学前基础 Maven Spring MVC理念 开发环境 Spring Boot官网版本介绍 https://spring.io/projects/spring-boot#learn 我们点击 Reference Doc. &#xff0c;再点击Getting Started&#xff0c;就可以看到官网系统环境说明了 官网系统环境说明 Sp…

Nginx安装和Nginx配置虚拟主机

Nginx安装 源码包获取地址&#xff1a;http://nginx.org/download/ RPM包获取地址&#xff1a;http://nginx.org/packages/centos/7Server/x86_64/RPMS/ RPM安装 这里选择的RPM包是 nginx-1.22.0-1.el7.ngx.x86_64.rpm [rootlocalhost ~]# yum install nginx-1.22.0-1.el7.…