专家介绍:李智华,华为安全AI算法专家,中科院博士
ChatGPT的核心优势是通过基于自然语言处理技术模型、情景模型和语言模型来自动生成文章和代码。在前面的文章中,我们从攻击视角探讨了ChatGPT对网络安全的影响,本文将从防御视角来探讨ChatGPT在网络安全领域的作用,并进行能力评估。
ChatGPT在网络安全领域的应用主要有以下几个方面:
1.威胁检测:(1)提取签名规则(2)识别恶意代码
2.代码审计:分析代码漏洞
3.威胁情报:从文本中提取情报
4.安全运营:生成安全运营报告
威胁检测:提取签名规则
能力指数:★★★☆☆
众所周知,GitHub上有大量开源的签名规则,例如Yara、Sigma、ES等,可以用于威胁检测。由于ChatGPT训练数据包含GitHub内容,因此我们可以测试ChatGPT的规则提取能力。我们首先要求ChatGPT输出检测挖矿木马的Sigma规则。
这次给出的答案十分全面,但是检测规则仍然不够完善,经过多次询问后,最终得出的检测规则如下:

这些规则虽然不能直接应用于产品,但是对于威胁分析而言,能够迅速掌握检测规则的概貌,也算是一种很不错的帮助。
威胁检测:识别恶意代码
能力指数:★★★★☆
ChatGPT有能力理解和分析代码,我们让ChatGPT来分析下前一篇文章所生成的webshell后门。
第一步,识别一句话木马。

可以看到ChatGPT给出了正确回答,同时给出了非常不错的判定理由。我们继续使用base64解码的webshell,让ChatGPT进行识别,ChatGPT依然应对自如。

第二步,识别变种的webshell。
接下来试试免杀的webshell。下面是一个利用在高版本php语法不换行,来执行命令绕过常规检测的webshell,我们让ChatGPT来检测。

ChatGPT给出的判定结果完全正确,并且其反引号可以用来执行命令的理由也非常充分。
前方高能!!!
下面是一个难度极高的检测示例,使用字符串替换和函数方式运行webshell命令。

可以看到,ChatGPT给出的答案完全正确,其解释更是令人惊叹。要知道,人看这段代码可能没什么,要交给机器自动化判定,必须要通过对PHP脚本的词法分析和语义分析才能获得,但在ChatGPT看来,这似乎不算什么难事。
综上所述,ChatGPT 在恶意脚本类代码识别方面表现出色,能力指数评分为★★★★☆。其 AI 所给出的结果令人惊叹,这归功于它出色的代码分析能力。
ChatGPT为何擅长代码分析呢?
●使用的文本生成模型GPT(Generative Pre-trained Transformer)能够对代码进行分析,以确定其意图。
●训练所使用的数据量巨大,ChatGPT从Stack Overflow、github等大量的语料里训练模型。
●ChatGPT可以学习特定的编程语言的语义,生成更加准确的语义分析结果。
代码审计:分析代码漏洞
能力指数:★★☆☆☆
前面提到ChatGPT擅长代码分析,接下来我们看看它在代码审计方面的能力,是否可以帮助我们发现代码中存在的问题。
首先,我们以比较简单的存在SQL注入的代码审计为例:

ChatGPT的回答还算让人满意。不过,当我们尝试一个不存在SQL注入的代码时,ChatGPT就开始“一本正经的胡说八道”了:

实际上,上面的代码可以有效地防止SQL注入,原因如下:
1.采用了预编译,避免了拼接SQL语句,清晰地划分了代码与数据。
2.检测了数据类型是否仅为数字。
3.判定结果是否仅为一条,有效防止“拖库”攻击。
ChatGPT回答错误,进一步追问ChatGPT,让其给出poc代码。

果然,它给出的答案是错的。
ChatGPT 的代码审计能力指数为★★☆☆☆。总体而言,ChatGPT 对代码审计有一定的帮助,但是需要人工核实它回答的结果是否正确。
威胁情报:从文本提取情报
能力指数:★★☆☆☆
从公开报道中摘取有关情报,是安全领域最为常见的自然语言处理应用场景之一。我们让ChatGPT从CrowdStrike的“麻辣香锅”恶意软件公开报道中,提取出一份中文摘要。

看起来还不错!我们再让ChatGPT提取响尾蛇组织使用的TTP。


上述回答给出的链接已经失效,无法证实其答案的正确性。
ChatGPT从文本提取情报的能力指数为★★☆☆☆。综合来看,ChatGPT 对于提取情报有一定的帮助,但还需要人工核实。
安全运营:生成安全运营报告
能力指数:★★☆☆☆
ChatGPT可以提升安全运营效率,已有公开报道称它可以解析安全日志,针对可能存在的威胁事件,提供详细的处置建议,并发布相应的事件通告;还可以生成用户报告,支持组织有效地管理安全风险。
安全运营的最终目标是实现智能运营,而最具挑战性的工作是在海量告警中发现有效攻击。ChatGPT目前无法实现海量告警研判分析,仍然需要安全运营专家的参与,才能达到最佳效果。
ChatGPT生成安全运营报告的能力指数为★★☆☆☆。
基于ChatGPT构建安全大模型
看到ChatGPT在网络安全防御方面的诸多优点,很多安全企业可能蠢蠢欲动,希望做自己的安全大模型。
如何让大模型适配安全场景呢?
很多人可能都会想到在ChatGPT这样的大模型基础上,针对安全领域重新训练一个增量模型。但是有几个关键问题需要考虑:
1.训练成本:大模型训练成本取决于训练数据的大小和模型复杂性。当训练数据更大和模型更复杂时,训练成本会更高,因为需要更多的计算资源来处理更多的数据。
2.模型调整:针对安全运营场景,需要调整大模型的数据输入,用于海量安全事件的研判分析,这需要安全运营和AI专家投入。
3.最终效果:由于安全事件本质上是低概率事件,大规模对于少见的,甚至是新型的安全攻击类型,当前还无法有效处理。
ChatGPT使AI在网络安全防御中的应用更为广泛,它是一种基于深度学习的自然语言生成技术,可以帮助网络安全防御人员提取签名规则,识别恶意代码,提升代码审计和情报提取的效率;帮助安全运营人员分析日志,生成安全运营报告,给出有效的防护措施建议。鉴于这些益处,许多企业希望构建适配安全场景的大模型,这就必须考虑训练成本、模型调整这些因素,并且大模型对于少见的、甚至是新型的安全攻击类型,当前还无法有效处理。即便如此,我们仍然相信,ChatGPT等大模型的出现一定会对网络安全领域带来很大改变,实现智能分析和运营,只是一个时间问题。
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
英文版英文链接关注公众号在“亚特兰蒂斯的回声”中踏上一段难忘的冒险之旅,深入未知的海洋深处。足智多谋的考古学家AriaSeaborne偶然发现了一件古代神器,揭示了一张通往失落之城亚特兰蒂斯的隐藏地图。在她神秘的导师内森·兰登教授的指导和勇敢的冒险家亚历克斯·默瑟的帮助下,阿丽亚开始了一段危险的旅程,以揭开这座传说中城市的真相。他们的冒险之旅带领他们穿越险恶的大海、神秘的岛屿和充满陷阱和谜语的致命迷宫。随着Aria潜在的魔法能力的觉醒,她被睿智勇敢的QueenNeria的幻象所指引,她让她为即将到来的挑战做好准备。三人组揭开亚特兰蒂斯令人惊叹的隐藏文明,并了解到邪恶的巫师马拉卡勋爵试图利用其古
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案