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

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.rhkb.cn/news/74431.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2023 华数杯全国大学生数学建模竞赛】 C题 母亲身心健康对婴儿成长的影响 Python代码实现

【2023 华数杯全国大学生数学建模竞赛】 C题 母亲身心健康对婴儿成长的影响 1 题目 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、压力等…

MySQL操作命令详解:增删改查

文章目录 一、CRUD1.1 数据库操作1.2 表操作1.2.1 五大约束1.2.2 创建表1.2.3 修改表1.2.3 删除表1.2.4 表数据的增删改查1.2.5 去重方式 二、高级查询2.1 基础查询2.2 条件查询2.3 范围查询2.4 判空查询2.5 模糊查询2.6 分页查询2.7 查询后排序2.8 聚合查询2.9 分组查询2.10 联…

C高级DAY2

1.思维导图 2. 递归实现,输入一个数,输出这个数的每一位 递归实现,输入一个数,输出这个数的二进制c 写一个脚本,包含以下内容: 显示/etc/group文件中第五行的内容创建目录/home/ubuntu/copy切换工作路径到…

MySQL(一)基本架构、SQL语句操作、试图

MySQL系列文章 MySQL(一)基本架构、SQL语句操作、试图 MySQL(二)索引原理以及优化 MySQL(三)SQL优化、Buffer pool、Change buffer MySQL(四)事务原理及分析 MySQL(五&a…

性能优化-react路由懒加载和组件懒加载

背景 随着项目越来越大,打包后的包体积也越来越大,严重影响了首屏加载速度,需要对路由和组件做懒加载处理 主要用到了react中的lazy和Suspense。 废话不多说,直接上干货 路由懒加载 核心代码 import React, { lazy, Suspens…

MySQL数据库——多表操作

文章目录 前言多表关系一对一关系一对多/多对一关系多对多关系 外键约束创建外键约束插入数据删除带有外键约束的表的数据删除外键约束 多表联合查询数据准备交叉连接查询内连接查询外连接查询左外连接查询右外连接查询满外连接查询 子查询子查询关键字ALL 关键字ANY 和 SOME 关…

MySQL 远程操作mysql

可以让别人在他们的电脑上操作我电脑上的数据库 create user admin identified with mysql_native_password by admin; //设置账号密码都为admingrant all on *.* to admin; //给admin账号授权 授权完成

RabbitMQ-API

这里写目录标题 Hello word 模式添加依赖生产者消费者获取信道工具类 Work Queues模式消费者代码 C1开启多线程运行启动 消费者代码 C2生产者代码 消息应答自动应答消息应答的方法Multiple 的解释消息自动重新入队消息手动应答代码消费者API 队列持久化消息持久化不公平分发消息…

MyBatis-基础操作-CRDU

前端页面展示提供对于数据的删除操作,后端为其实现 根据id删除数据(D) 具体的SQL语句 delete from emp where id 17; 接口方法 Delete("delete from emp where id #{id} ")public int DeleteByID(Integer id); 测试方法 Testpub…

【项目设计】MySQL 连接池的设计

目录 👉关键技术点👈👉项目背景👈👉连接池功能点介绍👈👉MySQL Server 参数介绍👈👉功能实现设计👈👉开发平台选型👈👉MyS…

【力扣】 12. 整数转罗马数字 模拟

力扣 12. 整数转罗马数字 解题思路 当某个位数的某个数不为4或9时,高位对应的字符总是在低位对应的字符前面。只有当该数为4或9时,低位对应的字符在高位前面。 根据这一特性,我们进行分类讨论。 1.当数为4时,则对应的罗马数为 10 …

怎么把图片变成表格?几个步骤轻松转换

如果您需要将一张图片中的数据转换成表格,这里有几个简单的步骤,可以帮助您完成这个转换过程。以下是需要注意的事项。 首先,我们先了解OCR(Optical Character Recognition,光学字符识别)技术。然后合理运用…

【练】要求定义一个全局变量 char buf[] = “1234567“,创建两个线程,不考虑退出条件,打印buf

要求定义一个全局变量 char buf[] "1234567",创建两个线程,不考虑退出条件,另: A线程循环打印buf字符串,B线程循环倒置buf字符串,即buf中本来存储1234567,倒置后buf中存储7654321. 不…

C++内存管理

C语言内存管理方式在C中可以继续使用,但是存在一定的缺陷,如使用malloc动态开辟自定义类型对象的空间,无法自动调用构造函数,那就必须我们去显示的调用构造函数(一般情况下,构造函数不可以显示调用&#xf…

【多线程初阶】多线程案例之单例模式

文章目录 前言1. 什么是单例模式2. 饿汉模式3. 懒汉模式 --- 单线程版4. 懒汉模式 --- 多线程版5. 懒汉模式 --- 多线程改进版总结 前言 本文主要给大家讲解多线程的一个重要案例 — 单例模式. 关注收藏, 开始学习吧🧐 1. 什么是单例模式 单例模式是一种很经典的…

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的jvm模型图 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时,这会导致m…

活动目录密码更改

定期更改密码是一种健康的习惯,因为它有助于阻止使用被盗凭据的网络攻击,安全专家建议管理员应确保用户使用有效的密码过期策略更改其密码。 管理员可以通过电子邮件通知用户在密码即将过期时更改其密码,但在许多组织中,用户只能…

web流程自动化详解

今天给大家带来Selenium的相关解释操作 一、Selenium Selenium是一个用于自动化Web浏览器操作的开源工具和框架。它提供了一组API(应用程序接口),可以让开发人员使用多种编程语言(如Java、Python、C#等)编写测试脚本&…

应用层协议——https

文章目录 1. HTTPS 是什么2. 什么是"加密"3. 常见的加密方式4. 数据摘要 && 数字签名5. HTTPS 的工作过程探究5.1 方案1 - 只使用对称加密5.2 方案2 - 只使用非对称加密5.3 方案3 - 双方都使用非对称加密5.4 方案4 - 非对称加密 对称加密5.5 中间人攻击5.6 …

Mac提示文件:已损坏,无法打开。你应该把它移到废纸篓

文章目录 一、电脑信息二、打开任何来源设置三、更改应用程序拓展属性 一、电脑信息 我的是新版的Venture 13的系统。UI改的比较多。与之前的配置还是有很大的区别的。 打开下载的软件,显示已经损坏,打不开。抛开软件本身的问题外,一般是Ma…