安全运营场景下的语言模型应用

news2024/9/22 7:36:26

接上篇,将安全运营的定义为“使用算法能力提取关键信息”,以此来规避算法误判漏判带来的责任问题,同时提升运营人员的工作效率。在这篇尝试对语言模型的使用方法做一下讨论和分享。

1. 语言模型

先聊一下语言模型。(这里刻意规避了“大模型”这个词,主要是对其应用方式的理解还不深刻)

直到ChatGPT出来之前,我都没有太关注过NLP领域相关的算法应用,主要是认为和我们更常涉及的应用领域,如分类、推荐等,有比较大的差异。

个人认为,语言模型的独特之处,在于“特征的离散性”。我们常见的特征分为两种:1)在推荐等领域中,人为去计算的各类特征,比如用户的年龄、性别、活跃时间等,这些特征都经过人工预处理,转化成向量,供算法去使用的;2)在图片、音视频领域中,这些内容本质上是一堆数字信号,因此输入本身就是向量化的。而语言是人类诞生的一种高效信息载体,虽然最终会以图形或声音的方式呈现出来,但语言本身如何进行编码,却隐藏在我们的大脑中。因此,NLP首先遇到的问题就是如何将文本变成向量,也就是NLP中反复提及的embedding。

而安全领域也存在着这种隐藏在大脑内的认知关系。最简单的,Web安全中SQL注入就有很多特征和对抗,不同的payload,不同的编码。即使WAF具备了检测逻辑,也会带来误报过高的问题。但其实在安全专家进行人工运营的时候,大部分情况下是能够做出精准判断的。差距主要有两点:

1)人接收的信息量更大,可以去关联上下文,可以去查看进程,可以去研读代码等等。所以安全的一个长期发展方向就是找到更多的数据切面,将更多的日志关联起来,HIDS/RASP/SIEM等

2)人是能够理解payload的具体含义的。写规则的时候,我们会告诉机器去检测哪些关键字,但机器并不理解关键字的含义,所以攻击者可以尝试去绕过。

我之前提过,ChatGPT出来之后,证明在NLP领域下,机器开始理解人类世界了。因为机器见到的不再是精心构造的特征,而是相当原始的token。当算法去学习一项任务的时候,它尝试去捕捉这些原始的token中的复杂关系,正如人类的思维一样。 也因此,我会认为,语言模型的成功,意味着安全领域下的专家经验,可以逐步被替代。

2. 基于RNN的做法

在transformer出现之前,RNN是NLP领域最经典的模型结构,它巧妙了处理了特征中的时序关系。因此,在时序场景中,通常都会看到RNN的身影。比如,安全场景中的事件序列。

下面借助一篇论文展开讨论RNN的应用方式。

Van Ede, Thijs, et al. "Deepcase: Semi-supervised contextual analysis of security events." 2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022.

这篇论文的目标定义为了,提取事件序列中的关键事件,从而提供强可解释性。同时这些关键事件也可用于后续的加工处理,如相似性判断等。论文中设计了如下的模型结构:

经典RNN中的Encoder和Decoder结构比较类似,输出目标是预测下一个事件。而在安全事件研判中,我们不需要去进行预测,而是一个找关键特征和分类任务。因此,论文中将RNN的Decoder替换成了一个线性层输出,输出的目标是每一个事件对应的权重。

简单来说,就是使用RNN的Encoder去对事件序列进行信息压缩,相当于embedding的过程。然后基于Encoder后的向量,去嵌套其他算法完成目标任务。

该论文的主要启发在于,我们可以通过构造算法结构,来满足可解释性的需求。而可解释性,通常体现为特征的权重。类似于,我们在做复杂事件判断的时候,往往依靠的是“直觉”。虽然“直觉”怎么产生的很复杂,但我们通常能够说出其中的关键因素是哪些。

这个结构也让我想起了CNN中的分层思路:先卷积作特征提取,再池化作压缩,最后全连接完成分类特定任务。每一层的输出都是可以被呈现的,分别提取了哪些特征。比如先提取线和边,再构造局部形状等。

这篇论文不满足需求的地方在于,它设定的输入是事件序列。而事件是一个需要经过提前编码的东西,适用性会受到限制。

3. 基于Bert的做法

Transformer的提出,除了解决了RNN的串型训练问题,还将预训练的模式引入到了NLP领域,大幅度降低了应用的门槛。在ChatGPT中,可以看到预训练好的模型已经包含了相当丰富的专业知识。因此,对比RNN需要从0开始训练模型,从预训练出发,尝试用更纯粹的NLP模型来解决安全领域的问题,会是一个更有意思的尝试。

NLP中embedding是一个很神奇的存在,它能够将离散的token转变为向量的形式。而转化后的向量本身,也包含了相当多的信息。例如,直接计算向量之间的余弦相似度,通常就能够代表不同词之间的含义相近程度。基于这个原理,可以使用训练好的embedding,来完成关键词提取工作,比如KeyBERT。

结合上一篇讲的,将告警运营当成一个分类+关键词提取的过程,可以设计如下的算法结构:(这里也可以参考上述的RNN结构来设计,但涉及的自定义开发工作量会更多。因此,不在论证阶段展开。)

这个算法本身是简单拼凑,不难实现。核心在于,如何将告警信息进行“文本化”。 通常来说,我们处理的告警信息是个结构化的数据,比如JSON格式,它其中包含了时间、IP、可疑payload、关联的其他节点等各式信息。而使用Bert预训练模型意味着我们不能够人为将它进行编码,而是需要把结构化的数据构造成文本的形式。幸运的是,预训练好的模型足够强大,对文本语法基本不挑剔,在试验中,直接把键值对作拼接,就能够取得还不错的效果。

很难说这是一种进步还是退步。直觉上,把信息进行人工编码,可以提升机器学习的效率,但也使得人工编码本身成为机器上限。而将结构化信息转化成更原始的文本信息,机器的学习空间更大,但任务复杂度也更高,“大力出奇迹”。这也意味必须依靠预训练模型才能够实现,不然训练量过于庞大,无法普适。

4. 基于GPT的做法

Bert和GPT的差异,主要在于Bert更擅长处理特定目标的任务(如分类),而GPT更强调“生成式”这个效果,依靠“预测”下一个词来完成各种任务。随着OpenAI把参数量大幅度扩增,大模型的智能开始“涌现”(参数量达到某个临界点后,结果表现突然上升),似乎意味着“万物皆可生成”。

事实上人类也是依靠“生成式”来完成各种任务的,不论思维方式如何,最终输出都是以一段话、一系列动作等形态来呈现的。

 进入“生成式”的应用场景后,如何设计Prompt变成了主要工作。因为生成式的输出是不固定的(问ChatGPT同样的问题,给出的答案不论是结构还是内容,都是不同的),并不利于成为一个接口对接其他上下游系统。因此,我们需要构造合适的Prompt,并进行一定的fine-tuning,确保GPT学会这个Prompt对应的问答模式。

具体实现思路上,会参照Bert的模式,先训练GPT完成分类任务,再训练GPT完成关键词提取。

以上过程使用OpenAI提供的API即可完成。但会遇到的一个问题是,往往并不存在“告警文本+关键词”的训练样本(日常运营过程中,安全专家会对结果做出判断,但不会把判断过程写下来)。在OpenAI自己实现的过程中,会构造人工打标的奖励模型来解决这类问题,但相关API并不开放,因此对构造样本集提出了一定的挑战。

现有模式下暂时没想到合适的解法,除非自己搭建GPT环境(成本略高,Bert还勉强能够本机跑下来,GPT则相当以来GPU环境),又或者干点脏活累活,一点一点积攒人工打标数据。

5. 总结

通过近期的研究和一些简单试验,会认为NLP模型是提升算法在安全领域下发挥潜力的方向。它使得机器看到的内容和人保持一致,而不在局限于人工编码带来的上限。同时,借助预训练得到的知识储备,快速完成目标任务的学习和适用。

但试验过程中,也会遇到一些困难,比如:

1)目前NLP模型的输入长度都相对受限制。而安全运营场景下,尤其是在接入SOAR之后,一起事件的关联信息是相当丰富的。而将事件文本化,本身就会降低信息传输的效率,很难将文本长度压缩到目标范围内。这个时候,要么事先剥除无用信息,要么把文本做分段输入。但不论哪种做法,都会带来实现难度的大幅提升。

2)NLP模型的复杂度提升,可控性也有所下降。虽然能够完成关键词提取任务,但模型是如何判定的,仍然难以琢磨。尝试使用过SHAP来探究,但目前看效果并不理想,有待进一步挖掘。这种不确定性,对于调整模型结构、优化样本集等工作,都带来了更多的“玄学”属性。

整体来说,个人倾向于认为语言模型下的智能涌现,代表着未来的发展方向。但目前的算法成熟度仍然处于初期,至少对于如何普适性的应用(而不是集中在大厂手里),仍然有很大的发展空间。而在当前条件下,做一些探索性质的工作,大概率抵不过算法整体的发展趋势,但有利于加深对算法本身的理解,为后续做好技能储备。

 

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

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

相关文章

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 赛后总结之31页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 1 题目 电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场 地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“618”等…

计算机视觉(2)——图像预处理

目录 二、图像预处理 2.1 介绍 2.2 特征提取方法 2.2.1 直方图 2.2.2 CLAHE 2.2.3 形态学运算 2.2.4 空间域处理及其变换 2.2.5 空间域分析及变换 (1) 均值滤波 (2)中值滤波 (3)高斯滤波 &am…

【博弈论】【第一章】博弈论导论

博弈论导论 【例题】选择数字【例题】巴什博弈【例题】射手博弈博弈论的基本概念:参与人战略行动信息支付函数【例题】分100元 课程概述: 【例题】选择数字 两个参与人A和B,轮流选择[3,4,5,6,7,8,9]中的一个整数(可重复)。当累计…

【JUC基础】01. 初步认识JUC

目录 1、前言 2、什么是JUC 3、并行和并发 4、进程和线程 5、如何创建子线程 5.1、继承Thread 5.2、实现Runnable 5.3、实现Callable 5.4、小结 6、Thread和Runnable 7、Runnable和Callable 8、线程状态 9、总结 1、前言 前段时间,有朋友跟我说&#…

(7) 支持向量机(上)

文章目录 1 概述1.1 支持向量机分类器是如何工作的 2 sklearn.svm.SVC2.1 线性SVM决策过程的可视化2.2 重要参数kernel(核函数)2.3 探索核函数在不同数据集上的表现2.4 探索核函数的优势和缺陷2.5 选取与核函数相关的参数:degree & gamma…

【Java笔试强训 27】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥 不用加…

VSCode下载、安装和简单配置

之前提到Python IDE的选择时,VSCode以其轻便、简洁、高效、专业等优点成为最适合做Python工程项目开发的IDE,本期就来详细讲解一下VSCode的一个下载、安装以及Python开发环境的配置。 一、下载 直接进入VSCode官网,选择对应系统版本的VSCod…

切片、索引和排序

关于使用Series切片带尾片的疑惑。 切片是数字的时候不带尾片 切片非数字时带尾片 索引 可以使用loc()和iloc()选择数据。轴标签(loc()),整数标签(iloc())。 # 第一行列名为’A‘,’B‘的行。 print( df.loc[1, [A, B]])# [0, 1)的列为 [B(1), A(0…

默认成员函数:详解类的隐式操作

目录 一.类的默认成员函数二.构造函数三.析构函数。四.拷贝构造函数五.赋值运算符重载 一.类的默认成员函数 类的默认成员函数就是定义一个类后,类会自动生成的成员函数,若我们显示定义则类不会自动生成。 二.构造函数 在数据结构学习阶段我们手撕过栈…

VC++ | MFC应用程序设计:框架搭建

VC | MFC应用程序设计:框架搭建 时间:2023-05-01 文章目录 VC | MFC应用程序设计:框架搭建1.启动程序2.新建项目2-1.新建项目2-2.应用程序类型2-3.文档模板属性2-4.用户界面功能2-5.高级功能选项2-6.生成的类2-7.解决方案资源管理器 3.工程文…

如何在外远程控制我的世界服务器 - MCSM面板【端口映射】

文章目录 概述1.MCSManager 安装2.内网穿透2.1 安装cpolar内网穿透 3. 访问公网地址4.固定公网地址4.1 保留一个二级子域名4.2 配置固定二级域名4.3 访问固定公网地址 5. 设置节点公网地址6. 固定节点公网地址6.1 保留一个固定tcp地址6.2 配置固定TCP地址 转载自远程穿透文章&a…

【Latex】有关于Latex tabularray的一些很不错的教程、模板

1. 简介: 除了大家熟知的tabular,Latex在2021年出了一个table排版的新包:tabularray。 笔者这几天初步体验了一下tabularray,个人觉得tabularray明显比tabular的使用体感好不少。 不管是从排版的效果、便捷程度,还是…

基于NumPy构建LSTM模块并进行实例应用(附代码)

文章目录 0. 前言0.1 读本文前的必备知识 1. LSTM架构2. LSTM正向传播代码实现2.1 隐藏层正向传播2.2 输出层正向传播 3. LSTM反向传播代码实现3.1 输出层反向传播3.2 隐藏层反向传播 4. 实例应用说明5. 运行结果6. 后记6 完整代码 0. 前言 按照国际惯例,首先声明&a…

目标跟踪--卡尔曼滤波 与 匈牙利算法

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。 跟踪结果中,每个bbox左上角的数字是用来标识某个人的唯一ID号。那么问题就来了,视频中不同时刻的同一个人,位置发生了变化&#x…

西瓜书读书笔记整理(三)—— 第二章 模型评估与选择

第二章 模型评估与选择 第 2 章 模型评估与选择2.1 经验误差与过拟合1. 错误率 / 精度 / 误差2. 训练误差 / 经验误差 / 泛化误差3. 过拟合 / 欠拟合4. 学习能力5. 模型选择 2.2 评估方法1. 评估方法概述2. 留出法3. 交叉验证法4. 自助法5. 调参 / 最终模型 2.3 性能度量1. 回归…

【JavaEE】UDP数据报套接字—实现回显服务器(网络编程)

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 本篇文章将带你了解什么是网络编程? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输&am…

中断-STM32

中断-STM32 中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓…

Java程序猿搬砖笔记(十一)

文章目录 Hexo博客 Next主题图片防盗链问题Springboot Druid数据库密码加密配置步骤Java统计字符串出现的次数Java获取某个字符在字符串中出现第N次的位置Maven激活指定profileMaven中resources标签的用法详解MySQL 字符集不一致报错EasyExcel日期格式化Configuration、Compone…

gradle Task 详解

Task定义和配置 查看工程下所有的task,使用如下命令 gradle tasks 定义一个task task创建的源码 参数分别是 task 名称,和一个 closure。groovy语法的closure可以写在小括号外面,小括号可以省略 task的源码 public interface Task extends…

【Java笔试强训 25】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥星际密码…