背景
最近 杀进安全圈,除过各位师傅介绍的使用方法外,微软也公布了。
在网络安全应用方面,现在 的优势是对于代码/日志/混淆等文本类信息有着较好的理解能力。
例如在代码审计时,常常会遇到一些大型项目,里面有很多复杂的函数。使用 辅助代码审计,可以快速理解这些函数的作用,提高代码审计效率。
这里尝试使用 实现一个代码审计平台,让 帮我挖洞。
收获
添加了约 2w 个 开源项目进行扫描 ( 因为 api 成本问题,截止目前,扫描了一部分 ), 在 某 1k star 和 1.2k star 的 开源项目中扫描到了两个高危问题,目前已经提交修复,并获得 CVE 编号
API 简介
为了方便发送代码和获取结果,以及后续实现自动化扫描功能,我们使用 提供的 api 接口来和 交互。
下面先补充一些 api 接口的基本知识。目前 开放了 api 接口,方便用户基于的能力开发第三方程序。已经注册的用户访问管理面板可以创建 API key
https://platform.openai.com/account/api-keys
也有官方文档提供了 API key 的使用教程。
https://platform.openai.com/docs/api-reference
例如,我们可以通过 curl 请求,在 头中带上 API key,和 的 api 交互。这里我将 写入了环境变量,直接读取发送。
curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"
响应报文会列出可以使用的模型。
这里我们主要使用 gpt-3.5-turbo 这个模型,它也是目前使用最多的模型。
也提供了封装好的 库。首先使用如下指令安装。
pip install openai
然后可以编写一段简单的代码进行测试
import openaiopenai.api_key = "sk-XXXXXXXXX"openai.proxy = "http://127.0.0.1:7890"result = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Say this is a test!"}] )print(result.choices[0].message.content)
运行之后即可输出 This is a test!。
这里 是一个数组,里面存放历史对话信息。
和网页版的 不同,api 版本可以一次性发送所有的历史对话信息,包括用户的历史提问和 的历史回答。
role 字段预设的角色有三个,user, 和 。其中 user 代表用户说的内容。 代表系统说的内容,对于 后续的回答具有指示作用。 代表 的回答。
将三个角色的说话内容加入数组里,即可将整个对话的背景信息发送给 。
原理
在实现 前,我们先分析一下在 web 版 进行代码审计的基本流程
首先发送一条请求,让 扮演一个安全专家
然后将准备好的漏洞代码片段发送给 ,并且提出让它分析代码,找出漏洞然后根据严重程度分级
输出如下
可以看到 比较清晰地输出了漏洞存在的位置,漏洞描述,以及给漏洞标注的危害等级
其中对于明显存在漏洞的代码,标注了高危;对于存在漏洞但是可能无法利用的代码,标注了中危;对于做了防护的代码,标注了低危
从上面的交互过程中可以总结出,我们需要发送给 的内容分成三个部分
第一,系统指令部分,告诉 扮演一个网络安全专家,引导 进入情景
第二,代码内容部分,将需要分析的代码发送给
第三,用户需求部分,告诉 需要做怎样的分析,以及以怎样的格式输出
设计 代码审计的 , 可以从这个三段式的结构入手
实现效果
下面展示一下实现好的效果。项目后端采用 + 库,前端采用 vue3 + -plus
架构上, 扫描器和 web 管理界面分离, 可以支持 web 管理界面远程控制扫描器。
功能上, 实现了运行管理,项目列表,扫描结果,用户管理和密钥管理模块。
性能上,采用多线程加速扫描,理论 api 调用频率可以达到 限制频率。
主要模块截图如下:
运行管理:这里可以监控扫描器运行状态,启动和停止扫描器。
项目列表: 这里可以查看添加的项目信息,支持多种搜索条件。
扫描结果:这里可以查看所有扫描结果,支持多种搜索条件, 生成的扫描报告会以 的形式渲染出来,方便查看。这里也在指令中要求 明确地用 关键字标注出大概率存在漏洞的报告,方便定位搜索有效漏洞报告。
用户管理:可以查看用户状态,修改密码。
密钥管理:可以动态添加和删除密钥, 并且查看余额。
结语
目前 gpt-3.5-turbo 的 limit 是 4096个 token,也就是说 所有内容加上 最后给出的回答不能超过 4096 个 token,不然就会报错。
4096 个 token 支持的代码片段还比较小,只能审计一些较简单的漏洞。
后续 gpt-4 模型的 limit 为 8k 个 token,gpt-4-32k 模型的 limit 为 32k 个 token。
增大的 limit 会更有利于代码审计,可以期待一下。
命令行版本的已经开源:
完整项目后续会在 账号 上开源,欢迎持续关注。
END
扫码关注我们御 梦 而 生 如 鹿 归 林
323AI导航网发布