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

2023-10-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来探究,但目前看效果并不理想,有待进一步挖掘。这种不确定性,对于调整模型结构、优化样本集等工作,都带来了更多的“玄学”属性。

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全运营场景下的语言模型应用 的相关文章

  • 这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3)

    正如标题所示 我想知道这段代码是否容易受到 SQL 注入攻击 如果是这样 是否有更好 更安全的方法来实现同样的目标 def add table args statement INSERT INTO s VALUES s table args
  • 安全地存储访问令牌

    我应该采取哪些安全措施来确保 如果我的数据库受到损害 长寿命访问令牌不会被盗 长寿命访问令牌与特定服务的用户名和密码一样好 但从与其他人的交谈看来 大多数人 包括我自己 都以纯文本形式存储访问令牌 这似乎与以纯文本形式存储密码一样糟糕 显然
  • 如何解码哈希

    如果攻击者可以访问用户的数据库并且密码存储在哈希值中 攻击者可以解码该哈希值吗 您能推荐任何可以解码哈希值的工具吗 您可以在这里找到更多详细信息 http crackstation net hashing security htm http
  • Symfony2 创建自己的编码器来存储密码

    我是 Symfony2 的新手 我可能有一个关于在数据库中编码用户密码的简单问题 我想以这种方式编码并存储在数据库中我的用户密码 encoded password salt sha1 salt raw password 我找到了各种编码器
  • 如何检查png文件是否是减压炸弹

    我正在尝试将图像上传到网站 我发现在允许上传时可能会发生这些减压炸弹攻击png文件 和其他一些 由于我要更改上传的图像 我想确保我不会成为这次攻击的受害者 因此 当涉及到检查是否png文件是一个炸弹 我可以读取文件的标题并确保宽度和高度不超
  • 使用一项识别服务保护 2 个不同的 Web 应用程序

    使用一项识别服务保护 2 个不同的 Web 应用程序 身份服务 Thinktecture身份服务V2应用1 Asp net MVC 5应用应用2 Asp net Web API应用 上述应用程序1和应用程序2是不同的项目并托管在不同的服务器
  • 安全地运行 docker

    我知道 docker 守护进程需要以 root 身份运行 https docs docker com articles security 所以我被告知这可能会导致一些安全隐患 例如如果容器遭到破坏 攻击者可以更改主机的系统文件 发生攻击时
  • Pyramid.security:使用 unauthenticated_userid(request) 从数据库获取用户信息真的安全吗?

    我正在尝试使用 Pyramid 文档创建可访问的用户数据缓存 使 用户对象 可用作请求属性 http docs pylonsproject org projects pyramid cookbook en latest auth user
  • 为什么codeigniter2不以更安全的方式存储csrf_hash,例如会话?

    为什么生成的 CSRF 保护令牌没有像建议的那样通过 SESSION 保存和使用here http codeutopia net blog 2008 10 16 how to csrf protect all your forms 目前在C
  • 某些方法上的 WCF REST 基本身份验证

    我在 WCF 4 0 中实现了很多 RESTful GET 和 POST 方法 所有这些都通过 SSL 进行 一些方法的示例 OperationContract WebInvoke UriTemplate Login Method POST
  • 如何在 ASP.NET 中阻止 IP 地址或 IP 类别

    我需要在 ASP NET 中阻止一个 IP 地址或类别 谁能帮我看一下代码吗 以及如何实施 Thanks 您可以使用以下命令获取客户端的 IP 地址HttpRequest UserHostAddress财产 http msdn micros
  • 如何使用 Spring Security 3.0.x 处理 HTTP 403

    我在 Spring Security 3 0 x 特别是目前的 3 0 2 方面遇到了一个小问题 我正在开发的整个应用程序运行完美 除非没有权限的人尝试登录 当发生这种情况时 用户会被重定向到 欢迎 页面 因为他的用户名 密码有效 并且他会
  • Spring安全和特殊字符

    我需要通过 url 在用户名和 或密码中使用特殊字符使用 j spring security check 登录 http localhost 8080 appname j spring security check j username u
  • Magento CSRF 保护

    我正在 Magento 中查看自定义表单 我看到了这些教程 http fastdivision com 2012 03 29 diy magento create ajax login registration forms for your
  • 有没有办法使用 Paramiko 和 Python 来获取您连接的 SSH 服务器的横幅?

    有没有办法使用 Paramiko 和 Python 来获取您尝试连接的 SSH 服务器的横幅 我正在处理许多机器的超安全服务器设置过程 密码是通过预定义的密钥生成的 该密钥与 SSH 横幅一起打印出来 我可以访问将为我提供密码的实用程序 但
  • android中无法绕过的Root检测方法

    我知道在 root 设备上运行拥有敏感信息的应用程序根本不安全 因此 开发人员通常在这种情况下进行 root 检测 如果发现设备已 root 则该应用程序将不会安装 一切都好 开发者在root检测中使用的主要技术是检查superuser a
  • 我的网站被黑了..我该怎么办? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我爸爸今天打电话给我 说访问他网站的人收到了 168 个病毒 试图下载到他们的计算机上 他根本不懂技术 而是用所见即所得的编辑器构建了整个东西 我打开
  • 为什么 XSS 注入需要对 & 进行转义

    OWASP 建议转义以防止 XSS 注入的五个字符是 lt gt 其中 我无法理解为什么 符号 应该被转义以及如何将其用作注入脚本的向量 有人可以举个例子 所有其他四个字符都被转义 但与号没有转义 所以会有 XSS 注入漏洞 我已经检查了另
  • 企业 iPhone 应用程序无线分发的安全性 - OTA iOS

    在企业 iPhone 应用程序的无线分发中 iPhone 安全地下载 XML 清单文件 其中包含指向 ipa 文件 应用程序本身 的完全限定 URL 然后从那里下载应用程序并安装它 我想知道这里是否存在安全漏洞 假设 iPhone 位于公共
  • Spring Security 实体字段级安全

    我有一个 Spring MVC 应用程序 它提供了一个视图 其中显示了来自Customer实体 例如姓名 地址 电话号码等 该应用程序具有各种角色 例如ROLE USER and ROLE ADMIN 用户具有ROLE USER只能看到客户

随机推荐

  • OC语言——点语法和成员变量的4种作用域及property和synthesize的使用

    点语法 点语法的本质还是方法调用 Person p Person new 点语法的本质还是方法调用 p age 10 p setAge 10 一 点语法注意点 implementation Person setter方法中的死循环 void
  • LLVM - 学习笔记一

    1 工具和库 LLVM中的独立工具 opt 在IR级对程序进行优化的工具 输入必须是LLVM的bitcode 生成的输出文件必须具有相同的类型 llc 通过特定后端将LLVM bitcode转换成目标汇编或目标问价的工具 llvm mc 能
  • Hadoop之MapReduce工作原理

    Hadoop由两部分组成 分别是分布式文件系统HDFS和分布式计算框架MapReduce 其中 分布式文件系统HDFS主要用于大规模数据的分布式存储 而MapReduce则构建在分布式文件系统上 对于存储在分布式文件系统的数据进行分布式计算
  • 【对比Java学Kotlin】在 foreach 中使用 break&continue

    正常情况下 我们只能在 loop 中使用 break 和 continue 但是 foreach 是扩展函数 不属于 loop 的范畴 如果我们想在 foreach 中达到 break 和 continue 的效果 只能使用 return
  • echo source 命令与 setup.bash与.bashrc文件

    编译完毕后键 echo source catkin ws devel setup bash gt gt bashrc source bashrc 本文分析这两条命令 echo 与source 以及setup bash文件与 bashrc两个
  • Flutter 布局Row(水平方向布局)、Column(垂直方向布局)、Wrap(可以自动换行的布局)、Flex(弹性布局)、Stack(叠层布局)、

    1 线性布局 Row 水平方向布局 Row 表示水平方向子组件的布局顺序 是从左往右还是从右往左 默认为系统当前Locale环境的文本方向 如中文 英语都是从左往右 而阿拉伯语是从右往左 TextDirection textDirectio
  • 通过模拟退火改进的Elman神经网络(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 神经网络是一个庞大的体系和概念 根据处理信息的不同方式来区分不同的network 比如根据处理信息结果的传递方向 分前馈型与反馈型 前馈型网络会根据输出数值来调整网
  • dede php调用指定文章,DedeCMS调用指定文章内容的两种实现方法

    有时候我们需要dedecms能够调用指定文章的内容 尤其是在建企业网站的时候 需要在首页调用网站简介联系我们什么的 今天 织梦技术研究中心就给大家介绍两种实现调用指定文章内容的方法 方法一 打开include inc arcpart vie
  • Golang基础 函数详解 函数基础

    文章目录 01 函数声明 02 更多样的参数列表 03 更灵活的返回值列表 参考资料 函数是一个固定的 可重复使用的程序段 子程序 它在实现单一或相关联功能的同时 还可以带有入口和出口 所谓的入口 就是函数参数即形参 通过这个入口把函数的参
  • 最强 Verilog 中 IP核 调用实现及思想

    写在前面 无论是在 ISE 还是 Vivado 中 关于 IP核 的调用都是非常方便的 所以对于初学者来说最关键的不是在 IP Catalog 中设置相关的 IP核 参数 而是在生成相关的 IP核 后该怎么做 也即如何让这些 IP核 为项目
  • 海思3516系列芯片SPI速率慢问题深入研究与优化(基于PL022 SPI 控制器)

    海思3516系列芯片SPI速率慢问题深入分析与优化 基于PL022 SPI 控制器 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏 液晶屏主控为 st7789 分辨率 240x240 图像格式 RGB565 查阅海思相关手册可知
  • HDU - 1598之为达目的不择手段(并查集的应用)

    find the most comfortable road Time Limit 1000 1000 MS Java Others Memory Limit 32768 32768 K Java Others Total Submissi
  • docker快速搭建redis集群(两种暴露宿主网络的方法)

    宿主机IP 192 168 123 181 方案一 host网络模式 1 新建6个容器节点 for port in seq 4001 4006 do docker run itd name redis port network host v
  • Java线程:volatile关键字

    本文转载至 http lavasoft blog 51cto com 62575 222076 Java线程 volatile关键字 Java 语言包含两种内在的同步机制 同步块 或方法 和 volatile 变量 这两种机制的提出都是为了
  • 自制个人图床

    如何自制个人图床 有时候我们想要将自己的图片以链接的形式展示 就得需要使用图床 或者上传到自己的服务器 别人的图床会担心图片链接过期 然而自己的服务器会占用内存资源 所以我们就自制个人图床 首先你得有服务器和域名 好了废话不多说直接上教程
  • 2021-10-21

    当打开一个页面 需要第一行显示当前用户能够领取奖励的按钮 应用场景 1 当某些游戏有在线领奖的活动 比如在线10分钟 20分钟 以此类推可以领取一些奖励 当有很多时 页面装不下的时候 我们希望显示的第一个就是玩家可以领取的奖励 比如10分钟
  • C++—类和对象

    文章目录 1 类 2 对象 2 1 创建对象 2 2 对象的操作 2 3 构造函数 2 4 析构函数 3 静态成员 4 this指针 5 友元 一切我们研究的事物 都可以叫做对象 对象具有状态 操作和行为 通常用一个数值来描述对象的状态 对
  • DVWA ----Buete Force

    DVWA Buete Force 暴力破解 low 直接使用Burip suite来进行暴力破解 medium 与low的方法一样 但是在破解速度上比较慢 因为在源代码中多了sleep 函数 high 同样使用Burip suite进行暴力
  • RK3588开发板上使用Qt+OpenCV捕获摄像头图像

    在Qt下没有专门的视频采集与播放工具 这里使用了OpenCV所带的库函数捕获摄像头的视频图像 硬件环境 讯为RK3588开发板 OV5695 MIPI接口 摄像头 软件版本 OS ubuntu20 04镜像固件 QT 5 12 8 Qt C
  • 安全运营场景下的语言模型应用

    接上篇 将安全运营的定义为 使用算法能力提取关键信息 以此来规避算法误判漏判带来的责任问题 同时提升运营人员的工作效率 在这篇尝试对语言模型的使用方法做一下讨论和分享 1 语言模型 先聊一下语言模型 这里刻意规避了 大模型 这个词 主要是对