技术实践 | AI 安全:通过大模型解决高危WEB应用识别问题

一、引言

在日常企业安全能力建设中,收敛企业外网高危资产,以保障公司外部安全是企业安全的重要工作。WEB 高危服务(如:管理后台、内部系统等)外开是企业所面临的一个重要风险。针对该风险,传统的方式是基于规则进行识别,该方式需要投入大量人力成本进行规则维护。由于规则难以覆盖全面,经常出现误报、漏报,效果不佳的问题。

通过“文心大模型”,仅投入少量资源,解决了高危 WEB 应用服务识别的问题,并且准确率达到了 70% 以上,下面将详细为大家介绍。

二、传统高危 WEB 服务识别技术

传统高危 WEB 服务识别技术通过收集开源指纹库和内部产品指纹维护构建成了一套企业指纹识别库,其主要原理是通过获取 WEB 应用的 Header、Body、Title、Banner 等信息,对比指纹库规则进行判别,该模式下需要源源不断地扩充企业指纹库来达到较好的检出效果。传统的高危 WEB 服务识别技术架构如下图所示:

在这里插入图片描述
该架构主要包含三部分,分别为数据层、扫描层和业务层。其中数据层作为整个架构的基石,承载着公司网络资产和指纹资产,其数据丰富程度很大程度上决定了 WEB 服务识别能力的成熟度和覆盖广度。

扫描层通常对数据层数据进行处理,解析成固定格式的数据作为扫描输入源。一般情况下,利用端口扫描模块对资产发起端口发现,服务识别,CPE 信息获取等操作。在获取了一批有效的资产数据之后,对资产发起请求获取服务信息,并对比已有指纹库进行判别。其主要实现逻辑如下图所示:
在这里插入图片描述

  • 通过 WEB 服务解析模块对所有 WEB 资产服务信息进行提取
  • 获取到 WEB 服务信息后通过与指纹 DB 对比获取结果
  • 返回传递最终结果

在这里插入图片描述
图:指纹规则示例

业务层作为事件运营处置层,通常接受其他数据源的输入,安全运营人员判别事件后,将其推送给业务方进行修复,从而完成事件闭环。

三、高危 WEB 服务识别面临困难点

在第二章里了解了传统高危 WEB 服务识别的技术原理以及方案,那么从方案中可以发现会存在以下几点问题:

  • 检测规则依赖人工编写维护,在人力资源有限的情况下,如何保障外网高危服务资产的风险得以收敛?

  • 我们可以识别和发现已知框架和服务并将其转为检测规则,那么面对未知服务/框架我们如何能够发现潜在风险?

那么接下来,我将会围绕以上两点问题进行展开,讨论如何通过大模型能力帮助公司解决传统方案的痛点。

四、大模型高危 WEB 应用服务识别设计思路

在前面我们讲到了,传统检测方案依赖与人工维护指纹规则来保障检测能力的成熟度。那么在当下文生文大模型飞速发展的情况下,是否可以通过训练大模型等方式来识别高危 WEB 应用服务呢?答案是显然的。

4.1. 大模型输入

在开始正式训练模型识别高危 WEB 应用服务前,我们需要考虑好模型的输入数据格式。从安全工程师的视角来看,判断一个 WEB 应用服务是否为高危应用主要从以下几个方面:Title,Body、Header 等三类信息,其中较为重要的是 Title,Body 两块。由于原始的 HTML Body 中会包含较多无用标签和数据,因此我们需要在原始数据基础上继续清洗,以保证最终模型输入的数据是相对较为干净的。如果原始数据中包含较多的脏数据,可能模型会产生噪点,最终影响到真实场景下的输出不稳定。除此之外,由于输入的 Token 限制,需要对较大的原始 HTML Body 进行缩减以满足 Token 要求。

在这里插入图片描述
图:输入数据清洗示例

4.2. 大模型判别规则

为了训练模型,告诉模型哪类服务是高危服务,需要在前期制定好模型判别规则约束好高危服务的范围有哪些,可以通过提前界定好的规则判断 WEB 应用是否为高危服务,下面是几个判定案例:

  • 系统涉及到管理功能的平台视为高危服务。
  • 已知的开源系统/框架不应该开放到外网访问的视为高危服务,比如:Kibana、ElasticSearch、Grafana、Nacos 等。
  • 无效页面、错误页面视为非高危服务,比如:状态 404,500,502 等以及 nginx/centos 等 default page页面。
  • 对外提供服务的常规页面,产品介绍页面视为非高危,比如:百度智能云产品、百度网盘等 ToB、ToC 场景。

4.3. Prompt 构造

在上面我们定义好了部分判别规则后,需要构造模型理解的 Prompt 指导大模型如何进行服务判别,Prompt 的好坏影响着大模型的性能。一个好的 Prompt 上下文能够充分利用大模型的背景语料知识,并在 Prompt 提示下的特定工作内容中获得更好的表现。经过后期的观察表现,我们提炼出来了以下一部分 Prompt 作为模型指导,其内容如下所示:

“现在有一份从网站首页提取的数据,请你根据这份数据判断该网站是否属于高危服务,并给出响应的判断理由。\n\n”+

“## 要求:\n” +
“1.充分考虑数据中每一个字段,发现可能象征着风险的关键字。\n” +

“## 判断依据:\n” +
“高危服务主要指代暴露后可能对公司信息系统造成危害对服务。\n” +
“1. 对于管理后台登录、控制面板、数据库面板等页面,应当判定为高危服务。\n” +

“非高危服务指正常对外开放,提供各种功能的服务。\n” +
“1. 对于常规的网站服务、普通用户登录等页面,判定为非高危服务。\n” +

“## 输出格式\n” +
“{“reason”: “<判断为高危或非高危的具体理由>”, “isDangerous”: <true或false>}\n\n\n\n\n”

4.4. 输入数据源

在准备好以上的工作之后,我们需要挑选一批数据作为初始数据投喂给基础模型识别与训练。前期数据源需要保证数据的质量具有代表性,确保模型能够直观从数据源中构建出我们想要的结果。因此我们在训练前期,通过内部的资产库,挑选了 100 多条具有代表性的数据作为初始输入,这里包含常见的 WEB 应用框架(Grafana、ElasticSearch)、内部高危系统、常规百度对外服务和通用管理后台页面等。

在前期人工完成数据标记之后,我们已经基本完成了一个初版的数据源。为了提升模型的准确率,需要增加数据源来满足模型了解足够的知识。因此后期采用了 self instruction 的方法,直接调用大模型打标,并进行人工复核。

self instructe 用的是所谓语境学习 (In-contextLearning) 的方法,通过在 Prompt 中提供数个样例,依赖大模型预言基座,执行小样本学习。具体方式就是将上述的 Prompt 进行改造,构造几个预先设定好的对话上下文,让大模型在已经进行了几轮对话的前提下对新的内容进行生成。此处对话直接使用普适性较高且性能优越的旗舰模型:百度千帆 ERNIE 4.0 Turbo。

4.5. 模型微调

微调的数据量被建议在 1k 条左右。由于本模型使用的是百度千帆平台进行训练,按照格式导出数据在千帆平台上训练即可。得到的模型发布后,相较于原始模型能够更加准确地回答,并且确保了输出格式的准确,严格按照样式。

微调完成后,对于后续模型数据的录入,就无需再通过之前的 Prompt Learning 等方式,直接使用当前模型进行标注,人工筛选后重复训练进行模型强化学习。

通过以上流程,我们基本上可以训练出来一个较为精准的模型帮助我们识别外部高危 WEB 应用服务。接下来讲解一下训练后的模型在真实场景下的实践。

**

五、大模型高危 WEB 应用服务识别实践

目前该方案在公司场景中的架构如下图所示:

在这里插入图片描述
该架构主要分为两部分:WEB 资产信息获取和大模型判别。

目前应用在服务识别的下一模块进行调用,默认情况下进行外网资产端口发现和服务识别后,调用资产信息采集 Agent 解析 WEB 资产中包含的报文、标题等关键信息,经过数据清洗之后由 API 接口直接请求对接后端大模型能力进行判定;根据判定结果推送至事件运营中心运营。

那么在模型前期,会基于人工运营的数据对大模型进行 Prompt 调整,用来确保获得更加精准的 Prompt 帮助模型提升准确率。前期经过几轮迭代之后,模型可以在无人监督的情况下得出较好的精度。以下为训练后真实发现的高危 WEB 应用服务案例:

在这里插入图片描述
在这里插入图片描述
图:高危服务识别案例1

在这里插入图片描述
在这里插入图片描述
图:高危服务识别案例2

5.1. 后续迭代优化

在前期我们花费时间得到一个精度较高的模型后,在后期持续运营迭代过程中,只需投入少量人力复核识别结果,对偏差数据进行微调,可以不断完善提升模型准确率。流程如下图所示:

在这里插入图片描述
在后期人工标记过程中,可以定期对模型的训练数据进行纠正标记;积攒一批量的数据对模型进行微调,可以在一定程度上避免由于标记数据不足而导致的模型微调结果不理想的情况。

六、后记

在实际的安全使用场景中,该方式通过较少的数据集训练出较好的模型效果。目前能够以较为精准的知识判别 WEB 服务是否为高危应用,目前准确率达到:70%。同时在实际应用过程中,内部也发现了很多业务方的管理后台服务和测试环境等高危应用场景外开的情况,能够有效地解决如上提到的两点问题,在人力资源有限的情况下,只需要定期投入部分人力对模型进行标记调整,同时无需关注维护指纹规则库就可以达到较为显著的效果。

除此之外该方案面临最大的一个问题在于大模型并不具备先见知识,对于部分场景下的 WEB 应用缺乏真实的理解,比如 ToB 交付业务服务应该需要开放在公网提供给客户等场景下,大模型识别目前精准度还待提升。未来还需要持续投入人力完善模型训练,解决该场景下的问题。

七、AI+安全产品推荐

将大模型与代码安全相结合实现安全左移,也是百度安全实践的重要方向。我们基于百度文心快码(Baidu Comate)建设了 IDE 安全能力,可在编码过程中实现漏洞扫描和自动修复,帮助研发人员以最小成本解决安全问题。

如果对产品感兴趣,详情可点击参考代码安全智能体文档(https://cloud.baidu.com/doc/COMATE/s/Jm3due9vf#4-%E5%AE%89%E5%85%A8%E6%99%BA%E8%83%BD%E4%BD%93)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C 语言函数递归探秘:从基础概念到复杂问题求解的进阶之路

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 目录 什么是函数递归递归的基本组成递归的工作原理递归的优缺点递归的经典案例 5.1 阶乘计算5.2 斐波那契数列5.3 汉诺塔问题5.4 二分查找 递归的高级…

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现…

「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字&#xff0c;应用会判断是否接近目标数字&#xff0c;并提供提示“高一点”或“低一点”&#xff0c;直到用户猜中目标数字。这个小游戏结合状态管理和用户交互&#xff0c;是一个入门级的互动应用示例。 关键词 UI互…

el-table根据接口返回某一个字段合并行

根据名称相同合并行 <template><div><el-table :data"responseSearchIntegralAddData" :span-method"objectSpanMethod1" border style"width: 100%"><el-table-column prop"integralTypeName" label"名称…

Linux系统之fuser命令的基本使用

Linux系统之fuser命令的基本使用 一、fuser命令介绍二、fuser命令使用帮助2.1 help帮助信息2.1 基本语法①通用选项②文件/设备相关选项③网络相关选项④进程操作选项⑤其他选项 三、fuser命令的基本使用3.1 查找挂载点的进程3.2 查看指定设备进程信息3.3 查找监听特定端口的进…

守护进程

目录 守护进程 前台进程 后台进程 session&#xff08;进程会话&#xff09; 前台任务和后台任务比较好 本质 绘画和终端都关掉了&#xff0c;那些任务仍然在 bash也退了&#xff0c;然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…

网络安全在现代企业中的重要作用

网络安全是这个数字时代最令人担忧的事情之一。对技术的依赖性越来越强&#xff0c;使其同时面临多种网络威胁。其声誉和法律后果的大幅下降可能归因于一次妥协。 这使得良好的网络安全成为所有企业的选择和必需品。本文介绍了网络安全的重要性、企业中常见的网络威胁以及公司…

C++学习日记---第14天(蓝桥杯备赛)

笔记复习 1.对象的初始化和清理 对象的初始化和清理是两个非常重要的安全问题&#xff0c;一个对象或者变量没有初始状态&#xff0c;对其使用后果是未知&#xff0c;同样的使用完一个对象或者变量&#xff0c;没有及时清理&#xff0c;也会造成一定的安全问题 构造函数&…

Kotlin DSL Gradle 指南

本文是关于 Kotlin DSL Gradle 的指南&#xff08;上篇&#xff09;&#xff0c;介绍了 Gradle 作为 Android 开发构建工具的作用及优势&#xff0c;包括初始配置、生命周期、依赖管理、Task 相关内容。如 Task 的创建、自定义、各种方法和属性&#xff0c;以及文件操作等&…

深度学习笔记之BERT(三)RoBERTa

深度学习笔记之RoBERTa 引言回顾&#xff1a;BERT的预训练策略RoBERTa训练过程分析静态掩码与动态掩码的比较模型输入模式与下一句预测使用大批量进行训练使用Byte-pair Encoding作为子词词元化算法更大的数据集和更多的训练步骤 RoBERTa配置 引言 本节将介绍一种基于 BERT \t…

扫振牙刷设计思路以及技术解析

市面上目前常见的就两种&#xff1a;扫振牙刷和超声波牙刷 为了防水&#xff0c;表面还涂上了一层防水漆 一开始的电池管理芯片&#xff0c;可以让充电更加均衡。 如TP4056 第一阶段以恒流充电&#xff1b;当电压达到预定值时转入第二阶段进行恒压充电&#xff0c;此时电流逐…

机器学习基础--基于常用分类算法实现手写数字识别

# 1.数据介绍 >MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test …

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错&#xff1a; [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是&#xff1a; from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…

基于Springboot企业级工位管理系统【附源码】

基于Springboot企业级工位管理系统 效果如下&#xff1a; 系统登录页面 员工主页面 部门信息页面 员工管理页面 部门信息管理页面 工位信息管理页面 工位分配管理页面 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所。…

GoogleTest做单元测试

目录 环境准备GoogleTest 环境准备 git clone https://github.com/google/googletest.git说cmkae版本过低了&#xff0c;解决方法 进到googletest中 cmake CMakeLists.txt make sudo make installls /usr/local/lib存在以下文件说明安装成功 中间出了个问题就是&#xff0c;…

Android 11 三方应用监听关机广播ACTION_SHUTDOWN

前言 最近有项目过程中&#xff0c;有做app的同事反馈&#xff0c;三方应用无法监听关机广播。特地研究了下关机广播为啥监听不到。 1.原因&#xff1a;发送关机广播的类是ShutdownThread.java&#xff0c;添加了flag:Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER…

一篇文章了解Linux

目录 一&#xff1a;命令 1 ls命令作用 2 目录切换命令&#xff08;cd/pwd&#xff09; &#xff08;1)cd切换工作目录命令 3 相对路径、绝对路径和特殊路径 (1)相对路径和绝对路径的概念和写法 (2)几种特殊路径的表示符 (3)练习题&#xff1a; 4 创建目录命令&#x…

css—动画

一、背景 本文章是用于解释上一篇文章中的问题&#xff0c;如果会动画的小伙伴就不用再次来看了&#xff0c;本文主要讲解一下动画的设定规则&#xff0c;以及如何在元素中添加动画&#xff0c;本文会大篇幅的讲解一下&#xff0c;动画属性。注意&#xff0c;这是css3的内容&am…

MATLAB下的RSSI定位程序,二维平面上的定位,基站数量可自适应

文章目录 引言程序概述程序代码运行结果待定位点、锚点、计算结果显示待定位点和计算结果坐标 引言 随着无线通信技术的发展&#xff0c;基于 R S S I RSSI RSSI&#xff08;接收信号强度指示&#xff09;的方法在定位系统中变得越来越流行。 R S S I RSSI RSSI定位技术特别适…

排序算法之选择排序堆排序

算法时间复杂度辅助空间复杂度稳定性选择排序O(N^2)O(1)不稳定堆排序O(NlogN)O(1)不稳定 1.选择排序 这应该算是最简单的排序算法了&#xff0c;每次在右边无序区里选最小值&#xff0c;没有无序区时&#xff0c;就宣告排序完毕 比如有一个数组&#xff1a;[2,3,2,6,5,1,4]排…