Llama.cpp是Georgi Gerganov 基于 Meta 的 LLaMA 模型 手写的纯 C/C++ 版本,让我们实现了在笔记本电脑上部署和体验AI大模型,实现没有GPU也可以运行AI大模型。执行起来虽然比较慢,但是只能算做体验,还可以选择不同语言。某个模型使用体验不好时,还可以更换模型。同时也可以对于既有的模型合并后使用,处理能力更强。
本地可以运行模型之后,计划自己利用已有的数据进行数据训练和模型微调。
为了在已有模型上面增强威胁建模能力,需要使用已有的威胁建模数据进行数据训练,包括训练用基础数据和微调数据。基础数据一般使用txt文本进行存储,只是对问题和答案描述有大致的对应关系即可,而用于微调的数据则需要按照instruction、input和output标准的指令和答案格式的json文件数据。原来数据都是使用excel存储的,在ChatGPT-3.5中描述需要如何读取excel数据,生成的数据什么格式,则AI就可以生成程序代码,处理数据使用Python比较方便,把代码拷贝到编辑器后,调试和执行,当代码无法实现功能或实现有问题时,可以继续让AI进行修正,发现AI真的很强大,虽然生成的代码还需要调试和修改,但是生成框架后,在上面修改大幅度减少了开发的工作量。下面处理完成的json数据格式。
这种数据格式是无法用于数据微调的,需要转化为指令格式。我发现在ChatGpt输入的编辑框非常小,且不小心单击回车后会提交问题,AI就会去处理,影响效率,同时也会消耗我们使用AI的次数。可以事先编辑要实现的功能,包括示例数据格式,要生成的数据格式,则AI生成的结果会更接近我们想要达到的目的。像下面这种方式比较好
例如:
{
"安全需求一级": "公共技术",
"安全需求二级": "加密算法",
"安全需求三级": "加密算法",
"安全需求编号": "AL-001-001",
"安全需求": "使用安全的加密算法。",
"重要程度": "安全需求一级",
"对应威胁": "密文暴力破解",
"参考标准": "None",
"安全测试用例建议": "访谈项目架构分析师,确定加密算法。"
},
{
"安全需求一级": "None",
"安全需求二级": "None",
"安全需求三级": "签名算法",
"安全需求编号": "AL-002-001",
"安全需求": "使用安全的签名算法。",
"重要程度": "安全需求一级",
"对应威胁": "None",
"参考标准": "None",
"安全测试用例建议": "访谈项目架构分析师,确定签名算法。"
},
{
"安全需求一级": "操作资源",
"安全需求二级": "输入数据处理",
"安全需求三级": "利用可变编码",
"安全需求四级": "使用前置ghost字符序列绕过输入过滤器",
"安全需求五级": "/",
"安全需求六级": "/",
"面临威胁": "使用前置ghost字符序列绕过输入过滤器",
"攻击模式": "精细模式",
"概述": "攻击者意图引入一些前置字符来使输入绕过过滤器,被攻击的API(应用程序编程接口)在忽略掉前置ghost字符后执行了攻击者的输入。当API会接受多种语法的输入数据,并用相同的语法将其解释,而过滤器又没有将目标API能接受的所有语法范围都考虑进来时,这一攻击就会发生。
一些API会从参数(形参)的字符串中删除特定前置字符。有时是因为被认为存在重复,因此被移除。另一种可能性是解释器的逻辑在分析的一开始就被指定要求通过一些方式删除某些字符。攻击者可以在一开始指定多种类型的可变编码试探绕过。
最常见的是加入ghost字符—这些额外字符不会影响请求在API层的有效性。如果攻击者能够访问被作为目标的API函数库,某些攻击想法就可以被直接测试了。一旦能够通过测试的可变ghost编码出现,攻击者就可以从基于库的API测试转移到对真实服务的测试了。",
"执行攻击的前提条件": "目标API必须能够忽略用来绕过过滤器的前置ghost字符并且保持在语义上与原句子相同。",
"严重程度": "中",
"被利用的可能性": "中",
"所需资源": "/",
"探测技术": "/",
"攻击发生的告警提示": "/",
"混淆技术": "/",
"解决、缓解方案": "执行白名单列表,而不是黑名单列表的输入有效性验证。
在验证有效性前规范所有数据。
对于输入有效性的验证,采用迭代的方法(参考深度防御原则)。",
"攻击对象位置方式(注入向量)": "网页表单元素,URL,Networksocket,文件。",
"攻击负载": "攻击负载(payload)是攻击者提供给目标API,允许攻击者提权、破坏认证服务的参数(形参)。",
"生效区域": "/",
"攻击负载生效会带来的影响": "授权服务的失败会造成数据机密性和完整性的沦陷。",
"相关的安全性要求": "/"
},
{
"安全需求四级": "使用可变IP地址编码",
"安全需求五级": "/",
"安全需求六级": "/",
"面临威胁": "使用可变IP地址编码",
"攻击模式": "精细模式",
"概述": "这一攻击依赖于非常规格式的IP地址表示方法。网络上的应用需要一个指定格式的网络位置信息,比如描述完全的域名、URL、IP地址或IP地址段。问题是攻击者可以利用这些设计时可能未被验证的假设使用多种不同的可能编码和网络地址格式。使用naming方式创建策略的命名空间、进行访问控制管理的应用程序可能是易受直接使用IP地址查询的方式影响的,这却是一种在网络上进行通讯时使用的更权威通用的方式。
可变的IP地址可被攻击者用于绕过应用程序访问控制,从而连接到仅仅通过隐藏位置保护起来的数据。
除此之外,这一类型的攻击还可以被当做探测机制得到入口点信息,攻击者收集后用于更深入地渗透进系统。",
"执行攻击的前提条件": "目标软件必须未能预料到IP/web地址所有可能的有效编码方式。",
"严重程度": "高",
"被利用的可能性": "中",
"所需资源": "与服务器建立会话的能力,或者通过同步会话直接捕获输出的能力,再或者其他如使用FTP等方法。",
"探测技术": "/",
"攻击发生的告警提示": "/",
"混淆技术": "/",
"解决、缓解方案": "设计阶段:使用默认拒绝的访问控制策略。
设计阶段:输入有效性验证例程需要检查并确保输入的数据类型和内容以对抗主动的指定。对于IP地址,需要使用应用程序授权使用的IP地址表示方式,不接受用户指定IP的地址或IP地址格式(比如IP地址段)。
贯彻阶段:对所有远程内容执行输入有效性验证。",
"攻击对象位置方式(注入向量)": "恶意输入通过标准输入点传递。",
"攻击负载": "根据攻击模式的不同,payload(攻击负载)也不同。恶意payload可能是通过诸如网页浏览器等客户端应用程序传递给服务器的。",
"生效区域": "客户端主机和客户端网络",
"攻击负载生效会带来的影响": "允许攻击者查看并访问意料之外的网络服务。",
"相关的安全性要求": "/"
},
两种情况处理:
第一种情况:前面数组中有“安全需求一级”或“安全需求二级”或“安全需求三级”,但是第二个数组中“安全需求一级”或“安全需求二级”或“安全需求三级”中有一个为“None”,则第二个数组都是从第一个数组继承相同键名称对应的值,所以提问的问题可以是:instruction=公共技术中的加密算法包括什么? 则input=加密算法和签名算法, 加密算法和签名算法就是来自于安全需求一级和安全需求二级相同上面数组的相同键名称对应的值。对于包括了“安全需求四级”键值,则其前三个安全需求对应的键值为None的话,则其值都是来自于前面数组。对于安全需求之外的键值,组合成一个字符串赋值给output,作为训练数据时的output。
第二种情况:前面数组中有安全需求一级”或“安全需求二级”或“安全需求三级”,但是当前数组却没有这三个键名称,只有“安全需求四级”,则说明该数组对应的前面三个键值都是来自于上一个数组。
根据这个规律,你能帮我生成一个python代码吗
则可以生成类似下面格式的Json文件:
上面的问题只是根据Json中单个数组元素提炼出的指令,问题相对比较单一,后面还在借助AI提炼更多的指令,这些问题的生成,就可以用来去微调数据模型了。
(结束)