目录
一.项目背景
ChatGPT开启了大语言模型发展的新方向,各大互联网巨头纷纷进入赛道。各大高校也加大对LLM的研发应用。在AGI领域OpenAI的统治地位暂时无可撼动;因此针对特定领域(Specific-Domain)的大语言模型是发展的必然趋势。继清华发布ChatLaw法律大模型,哈工大发布BenTsao医学大模型,华东师范大学发布EduChat教育大模型后,或许我们的项目是代表山东大学在网络安全垂直领域完成的第一个大语言模型(根据Github和Archive收录内容)
无独有偶的是,我们发现微软也有类似定位产品——Microsoft Security Copilot,但微软也只是公布了Demo而没有实际可应用的产品。
或许这也代表着引入大语言模型到网络安全审计领域的技术路线是可行的。
通过引入AutoAudit这样的网络安全语言模型,我们可以期待在网络安全领域取得更大的突破。它将成为安全专业人员的得力助手,提供准确、快速的分析和预测,帮助应对不断演进的网络威胁。
为了便于交互,应对实际的安全审核应用场景,我们将AutoAudit模型与ClamAV进行耦合,搭建了一个安全扫描的平台(前端参考了Bootstrap所提供的模板)。如果您想直接下载AutoAudit模型,请访问HuggingFace直接获取权重。
我们也在Github上发布了我们的项目,并且详细讲解了更多关于数据集组织和模型训练部署的信息(针对垂直领域的模型Fine-tune技巧),欢迎访问我们的Github主页(喜欢的话也请打个star)。
二.项目简介
项目描述:我们训练部署了一个专精于网络安全领域的类ChatGPT模型,在回答几大特定安全领域上的专业能力媲美商业模型(比如ChatGPT和文心一言)。并以模型为基础,集成安全扫描工具,实现了支持多模态输入(例如PDF,XSS,Python代码,SQL语句)的安全审计平台。
最终的效果:AutoAudit 平台可成功部署在一网页站点上,并且支持多模态的输入。平台可作为代理服务器类型软件实时对恶意代码进行审计,并在审计平台以日志形式生成审计结果,网页管理员可对任意外来文件和代码的审计结果进行查询与分析、以及重新审计。语言模型还能够以安全报告为基准,继续回答用户安全问题。
1.上传文件或代码进行审查;
2.查看历史扫描记录并搜索指定文件;
3.查看扫描报告;
4.根据报告与大语言模型进行交互:
三.数据集组织
我们采用了数据集组织方法Self-Instruct,该方法结合了人工标注和自我生成的数据。数据集主要来自于Github、Kaggle、安全网站、公开的安全漏洞数据集组成,随后经过清洗、数据增强等来构造对话数据。数据集严格按照Alpaca模型数据集格式组织,分为Instruction,input,output三部分,我们规定在output输出中应当包含对具体内容的分析(analysis),安全评级(label),安全风险(risk),以及对应的解决方案(solution)。以下是场景样例:
question | answer | Subject |
---|---|---|
Please evaluate whether this statement carries any security vulnerabilities:"" or pg_sleep ( TIME ) --" | 1. analysis: The SQL statement appears to be attempting SQL injection by injecting a sleep command using the 'pg_sleep' function.\n2. label: high\n3. risk: The specific element that produces the vulnerability is the injection of the 'pg_sleep' function within the statement.\n4. solution: Implement proper input validation and parameterization to prevent SQL injection attacks. | SQL分析(特化) |
Please analyze whether this Python code snippet poses security risks:“import socket\nimport json\nimport os\nimport subprocess\nimport base64\n\nclass Backdoor:\n def init(self, ip, port):\n self.connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n self.connection.connect((ip, port))" | 1. analysis: The Python code snippet defines a class named 'Backdoor' with an initializer method 'init'. The class sets up a socket connection to a specified IP address and port.\n2. label: Low\n3. risk: The given Python code snippet has a low security risk. It mainly establishes a socket connection, which is a common networking operation. However, the actual security risk depends on the implementation details of the class and its usage.\n4. solution: Ensure that the 'Backdoor' class and its usage have appropriate security measures in place, such as proper input validation, secure communication protocols, access controls, and error handling, to mitigate potential security risks. | Python代码分析(特化) |
What is the purpose of the Certificate Revocation List (CRL)? | The purpose of the Certificate Revocation List (CRL) is to list the digital certificates revoked by the issuing certificate authority (CA) before their scheduled expiration date, indicating that they should no longer be trusted. | 安全知识问答(泛化) |
当前我们训练的模型数据集构成比例为:
关于数据集的组织以及模型的训练细节,我们均在Github项目中公布,对于特定垂直领域的大语言模型Fine-tune知识,我们也在主页中进行了一些分享。
四.未来计划
-
强化安全领域的逻辑推理能力,尝试在更大的模型基座上进行相应的训练:在网络安全领域,特别是我们所选择的恶意代码分析,SQL注入,以及XSS分析等细分场景下,对于模型的输入Token有着较大的要求,目前的初级模型输入大约为500-700Token,显然无法达到我们的需求。目前正在考虑使用ChatGLM或者LLaMA2作为新的基底模型。
-
加强准确性和可信度:在安全领域,准确性和可信度至关重要。由于我们的团队资金限制以及某些特殊原因,我们暂时还只能使用scripts目录下的部分自动化脚本进行Self-instruct,生成的数据样本实在有限且耗费时间,同时也可能缺乏专业性和严谨性。目前团队对于改进,扩大数据集还有很多问题亟需解决,希望能够得到帮助。
-
接入更多的安全扫描工具:并且与LLM进行耦合,尽可能覆盖更多的安全场景(正在考虑自动化漏洞挖掘以及二进制逆向分析)。
-
尝试接入Langchain:允许LLM模型与外界数据源进行连接。