如何使用chatgpt编写后端代码 ChatGPTScan:使用ChatGPTScan批量进行代码审计

默认分类5个月前发布 admin
3,510 0
ChatGPT国内版

背景

最近 杀进安全圈,除过各位师傅介绍的使用方法外,微软也公布了。

在网络安全应用方面,现在 的优势是对于代码/日志/混淆等文本类信息有着较好的理解能力。

例如在代码审计时,常常会遇到一些大型项目,里面有很多复杂的函数。使用 辅助代码审计,可以快速理解这些函数的作用,提高代码审计效率。

这里尝试使用 实现一个代码审计平台,让 帮我挖洞。

收获

添加了约 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!。

如何使用chatgpt编写后端代码 ChatGPTScan:使用ChatGPTScan批量进行代码审计

这里 是一个数组,里面存放历史对话信息。

和网页版的 不同,api 版本可以一次性发送所有的历史对话信息,包括用户的历史提问和 的历史回答。

role 字段预设的角色有三个,user, 和 。其中 user 代表用户说的内容。 代表系统说的内容,对于 后续的回答具有指示作用。 代表 的回答。

将三个角色的说话内容加入数组里,即可将整个对话的背景信息发送给 。

原理

在实现 前,我们先分析一下在 web 版 进行代码审计的基本流程

首先发送一条请求,让 扮演一个安全专家

然后将准备好的漏洞代码片段发送给 ,并且提出让它分析代码,找出漏洞然后根据严重程度分级

输出如下

可以看到 比较清晰地输出了漏洞存在的位置,漏洞描述,以及给漏洞标注的危害等级

其中对于明显存在漏洞的代码,标注了高危;对于存在漏洞但是可能无法利用的代码,标注了中危;对于做了防护的代码,标注了低危

从上面的交互过程中可以总结出,我们需要发送给 的内容分成三个部分

第一,系统指令部分,告诉 扮演一个网络安全专家,引导 进入情景

第二,代码内容部分,将需要分析的代码发送给

第三,用户需求部分,告诉 需要做怎样的分析,以及以怎样的格式输出

设计 代码审计的 , 可以从这个三段式的结构入手

实现效果

下面展示一下实现好的效果。项目后端采用 + 库,前端采用 vue3 + -plus

架构上, 扫描器和 web 管理界面分离, 可以支持 web 管理界面远程控制扫描器。

功能上, 实现了运行管理,项目列表,扫描结果,用户管理和密钥管理模块。

如何使用chatgpt编写后端代码 ChatGPTScan:使用ChatGPTScan批量进行代码审计

性能上,采用多线程加速扫描,理论 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导航网发布

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...