ChatGPT(Chat Generative Pre-trained Transformer)是一款美国OpenAI研发的聊天机器人程序,能够通过理解和学习人类语言来进行对话,根据聊天的上下文与使用者互动,真正像人类一样聊天交流。它甚至能完成撰写邮件、视频脚本、文案、代码、论文等任务。
ChatGPT的算法基于Transformer架构,这是一种使用自注意力机制处理输入数据的深度神经网络。Transformer架构广泛应用于语言翻译、文本摘要、问答等自然语言处理任务。ChatGPT使用了GPT-3.5大规模语言模型(LLM Large Language Model),并在该模型的基础上,引入强化学习来微调预训练的语言模型。这里的强化学习采用的是RLHF(Reinforcement Learning from Human Feedback),即人工标注方式。目的是通过其奖励惩罚机制,让LLM模型学会理解各种自然语言处理任务,并学会从helpfulness、honest、harmless三个维度判断什么样的答案是优质的。
ChatGPT模型的主要训练流程如下:
在安全检测领域,越来越多的企业组织开始使用人工智能技术,来帮助检测网络流量中的潜在威胁。人工智能的优势在于,它可以处理大量的数据,快速准确地识别并分类异常流量。通过训练神经网络模型,人工智能可以自动化检测识别网络攻击、漏洞利用和恶意软件等行为,减少人工干预和误报,提高检测的准确性与效率。
当前主流的网络攻击检测,核心是基于DPI技术,发展出的针对HTTP访问的检测(WAF),以及针对操作系统的入侵防御检测(IPS)。即部署在应用前,在用户请求到达服务端之前对其进行扫描和过滤,分析校验每个用户请求的网络包,确保每个请求的安全有效,对无效或有攻击行为的请求进行拦截或隔离。目前,常用的攻击检测方式如下:
基于事先编写的特定规则或模式(正则表达式)检测网络流量中的威胁,如病毒、恶意软件、入侵行为等。但是由于攻击手段多样化,有经验的黑客可以通过一些语句变化绕过检测。正则表达式是由关键字发展而来的,虽然在一定程度上降低了误报率,但由于正则表达式是基于字符串的过滤,只能检测预定好的攻击行为;针对一些比较复杂的注入方法,同样存在漏报率高的问题。
通过对同类流量的来源IP、协议类型比例、流量上下行趋势等基础元素的建模分析,得到一些异常事件的分析结论。但是流量分析需要对网络流量进行捕获分析,所以需要较高的计算资源和存储资源,会使得整个系统比较庞大。
通过监视网络流量的行为,检测出异常活动。例如,检测出某Web应用服务器访问非业务数据库、突发大量数据流、频繁访问尝试等,进而发现潜在的网络威胁。在这一过程中,会误报一些合法活动(例如临时下载等),且成熟的行为分析模型需要较长时间来训练和学习,因此防护效率可能较低。
将检测引擎设计成SQL语义解释器或命令行终端,尝试理解用户输入的内容,判断是否有可能构成攻击。目前主要针对SQL注入,使用场景有限。
基于DPI引擎的检测方式,除了有这些使用限制外,还存在多种绕过流量解析引擎进行入侵的方法。例如,利用DPI引擎可能存在的HTTP协议解析缺陷,只识别80端口为HTTP流量,而Web应用端口在8080上,其HTTP流量会被DPI引擎解析为非HTTP,从而绕过应用层攻击检测。
我们按照DPI引擎的解包流程,将原始流量解析出关键字段数据,进行规则匹配。如果能匹配到规则,则说明报文存在攻击行为;如果不能匹配,则说明报文风险较低。DPI引擎收到的流量如下图:
DPI引擎会按照会话对流量进行分组,在同一个组中的报文,一般为同一五元组的请求响应报文:
DPI引擎会将流量按照协议层级进行拆解,直到解析出所有的字段。
DPI引擎会提取其中应用层的明文请求,作为待检测内容:
ChatGPT作为一种大型自然语言处理模型,可以理解HTTP原始报文信息,这样无论攻击出现在URL、Cookies还是Referer中,都能顺利检测到。
ChatGPT、New Bing等攻击判断模块,会调用OpenAI相关API接口,使用提问的方式让ChatGPT、New Bing等进行攻击判断,示意代码如下:
import openai openai.api_key = "sk-Bew1dsFo3YXoY2***********81AkBHmY48ijxu"# api token 用来认证 def get_answer(prompt, max_tokens): # 定义一个获取答案的函数 try: response = openai.Completion.create( model = "text-davinci-003", # 模型名称 prompt = prompt,# 问题 temperature = 0.7, max_tokens = max_tokens,# 返回内容的长度限制 stream = False, # False就是一次性返回, True 就是一个个打出来像打字机, 返回的是迭代器, 需要后面代码处理. 此处没有处理 所以用False top_p = 1, frequency_penalty = 0, presence_penalty = 0 ) return 0, response['choices'][0]['text'].strip()# 获取返回值关键返回内容 except Exception as e:# 异常处理 return str(e), None
通过上述函数,就可以达到类似向ChatGPT提问的效果(使用模型为text-davinci-003),如下图:
ChatGPT会返回明确的是否存在攻击行为的结论以及行为描述,这样就完成了一次攻击判断。
如上图,可以将流量中大量需要判断的请求,分别存入不同的文件,由ChatGPT进行攻击判读,示例代码如下:
def main(read_dir = 'detect'):# 定义main函数 args = []# 缓存列表 global sign_req, all_req# 识别计数 for rf in walk_dir(read_dir, ['.txt']):# 遍历待检测目录 all_req += 1# 总数据包数自增1 content = read_fileA(rf, 'str')[:2048]# 提取报文文件前2048个字符 key_content = content.split('rnrnrn')[0][:1024]# 提取http请求 if len(key_content) < 10: continue# 如果长度太小就不检测 err, sign, disc = judge_attack(key_content, rf_rst)# 调用ChatGPT接口进行攻击检测 if sign: sign_req += 1# 如果检测到攻击, 攻击计数自增1 print('r' + f' 已检测 {all_req: 4} 个报文, 识别到攻击 {sign_req} 个, 检出率: {sign_req/all_req:0.2%}', end='', flush=True) # 打印结论
如此就可以做到批量报文攻击检测。
攻击样本来自Nuclei对靶机的扫描和全PoC检测,因为有一些请求从单个报文中确实看不出来是否存在威胁。
上述情况可能需要更多上下文才能判断,此次已去除此类无法准确判断的请求例,尽量给一些人工条件下能够准确判断的样例,总体检测结果如下图:
可见ChatGPT对流量检测的准确率是非常高的,基本上相当于一个安全专家进行快速判断,其安全检测能力值得期待。
有兴趣的读者可以查看完整的项目源码,链接为:https://github.com/VitoYane/PcapSplit
未来,ChatGPT在网络安全中将扮演什么角色、有什么影响,我们很难进行准确预测,这取决于它的使用方式和使用意图。来自人工智能的威胁并不是一个新问题,对网络安全从业者来说,重要的是及时意识到ChatGPT的潜在风险并采取适当的措施来应对。
安全专家预测,国家背景的黑客将率先在网络攻击中利用ChatGPT,而该技术最终会在更多的攻击组织中得到大规模的使用,防守方需要开始研发能够抵御此类攻击的系统。
从网络安全防护的角度来看,企业机构可以采取针对性的应对措施,对ChatGPT等类似模型进行培训,标记恶意活动和恶意代码,同时对其设置难以绕过的护栏。对于ChatGPT引发的威胁,可以向员工提供新型的网络意识培训,掌握识别社会工程攻击的知识,以便识别ChatGPT等人工智能工具创造的钓鱼攻击。
当然仅仅是这样还不够。ChatGPT等人工智能工具会以比人类罪犯更快的速度制造出新的威胁,传播威胁的速度也将超过网络安全人员的反应速度。企业机构跟上这一变化速度的唯一方法,是使用人工智能来应对人工智能。
总的来说:一方面,网络安全行业的研究人员、从业者、学术机构和企业组织可以利用ChatGPT的力量进行创新和协作,包括漏洞发现、事件响应和钓鱼检测;另一方面,随着ChatGPT等工具的发展,未来开发新的网络安全工具更加重要。安全厂商应更积极地开发和部署基于行为(而非规则)的AI安全工具,来检测人工智能生成的攻击。
Atas ialah kandungan terperinci 如何利用ChatGPT提升安全检测智能化水平. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!