新手利用ChatGPT轻松构建零日恶意软件,69家专业公司检测不出

近日Forcepoint 的一名员工Mulgrew在博客中展示了他如何使用ChatGPT编写代码从受攻击的终端窃取数据。

近日Forcepoint 的一名员工Mulgrew在博客中展示了他如何使用ChatGPT编写代码从受攻击的终端窃取数据。他的实验强调了ChatGPT如何被用于减少恶意软件开发的工作量或将其自动化。

这一实验还展示了一个零基础的人也能做到让机器人绕过防止它输出潜在危险代码的防御,并让AI组装一个恶意程序。

这名Forcepoint员工承认自己是新手,他认为自己想创建一个程序,无需自己编写任何代码,就可以从受攻击的终端窃取数据。

他的实验就是为了证明两件事:

▶ 使用ChatGPT 绕过现有的防御是多么容易

▶ 在不编写任何代码仅使用ChatGPT的情况下创建高级恶意软件是多么容易

Mulgrew决定使用Go执行语言,因为它易于开发,而且如果需要调试问题,我可以手动检查代码。以下是他本次实验的全过程。

第一步:构建MVP

Mulgrew采用提示工程,他做的第一个提示是生成一些可以量化为恶意软件的东西。意料之中,ChatGPT提醒他生成恶意软件是不道德的,并拒绝提供任何代码。

ChatGPT拒绝生成任何包含“恶意软件”一词的提示

为了解决这个问题,他决定不提前向ChatGPT发出请求,而是生成一些小的帮助代码片段,并手动将整个可执行文件组合在一起。结论是,隐写术是最好的过滤方法,而通过搜索硬盘上已经存在的大型图像文件,离地攻击(living off the land)则是最好的方法。该恶意软件旨在针对特定的高价值个体,它可以在C盘上搜索高价值文档,而不用冒着将外部文件带到设备上并被标记为调用URL的风险。

第一个成功的提示是简单地要求生成一些代码,在本地磁盘上搜索大于5MB的PNG。因为5MB的PNG就足够用来存储高价值的业务敏感文档(如PDF或docx)的片段。

在本地驱动器上查找PNG的ChatGPT代码响应

有了上面的代码,再将其复制回控制台,并要求 ChatGPT 添加一些代码,使用隐写术对找到的PNG进行编码。它轻松建议Auyer的现成的隐写库来实现它。

调用Auyer的隐写术库

在拥有了一个用于测试的MVP之后,难题是需要在设备上找到一些要窃取的文件以及将结果上传到哪里。他决定提示ChatGPT给他一些代码,这些代码可以遍历用户的文档、桌面和AppData文件夹,以查找要泄露的任何PDF文档或DOCX文档。确保在代码的第一次迭代中添加大小不超过1MB,以便将整个文档嵌入到单个图像中。

对于泄漏,他认为Google Drive是一个不错的选择,因为在大多数公司网络中整个 Google域往往都不被阻止。

将生成的PNG文件上传到Google Drive的代码,供企业基础设施外部的攻击者解码

第二步:结合片段创建自己的MVP

使用提示组合代码片段是最简单的部分,因为只需要发布以上ChatGPT生成的代码片段,并将它们组合在一起。因此,根据ChatGPT的结果,就拥有了现在的MVP,但它相对无用,因为任何核心价值文档都可能大于1MB,因此需要将其分解为多个“块”,以便使用隐写术进行无声过滤。经过四五次提示,他又拥有了一些代码,可以将PDF分割成100KB的块,并根据设备上本地生成的PNG列表相应地生成PNG。

使用另一个隐写术解码工具能够成功解码图像

第三步:测试MVP

为了对比开箱即用的代码与Emotet等现代攻击,以及测试供应商是否会发现ChatGPT生成的EXE是恶意的,Mulgrew将MVP上传到了VirusTotal:

5个供应商将文件标记为恶意文件

在纯粹使用ChatGPT生成整个代码库后,在69个供应商中有5个将该文件标记为恶意文件。这是个不错的开始,但更好的结果是能够将其正确标记为零日攻击。

第四步:优化以绕过检测

最明显的优化是强制ChatGPT重构调用Auyer的隐写库的代码。Mulgrew怀疑编译的EXE中的某个GUUID或变量可能会提醒有5个供应商将该文件标记为恶意文件。ChatGPT做得很好,在本地应用程序中创建了自己的LSB隐写术函数,而不必调用外部库。于是就只有2个供应商能检测出了,但这还不是最满意的结果。

检测出的这2个供应商,其中一个是业内领先的沙箱,另一个对可执行文件进行静态分析。考虑到这一点,他要求ChatGPT对代码进行两项新的更改,一项是将有效启动延迟两分钟,因此假设要打开零日的假想企业用户不会在打开后立即注销。这一变化背后的逻辑是,它将绕过监控功能,因为一些沙箱有一个内置的超时(出于性能原因),如果超时被打破,即使分析尚未完成,它们也会以明确的判断作为响应。

向脚本添加一个简单的睡眠变量以逃避沙箱检测

第二项更改是混淆代码

令人惊讶的是,ChatGPT 在试图混淆代码时并不合规

对于向ChatGPT提出的两项直接请求,都实施了一些保护措施,这意味着至少需要一定水平的能力来制定如何绕过ChatGPT保护。

Mulgrew通过简单地将他的请求从要求它混淆代码更改为要求ChatGPT将所有变量更改为随机的英文名字和姓氏,它很高兴地答应了。作为一个额外的测试,他伪装了混淆请求,以保护代码的知识产权,它再次生成了一些混淆变量名的示例代码,并建议可以使用相关的Go模块来生成完全混淆的代码。

这一变化背后的理论是,对于第二个供应商,需要逃避静态恶意软件分析,通过混淆代码,有时可以逃避检测。然而,如果混淆超出了人类可读性,有时会将其他基于检测的工具标记为使用了不可读的变量名。

因此,Mulgrew决定使用人工延迟和名字/姓氏变量重新测试:

按预期运行

因此,这些更改一切正常,将其上传到 VirusTotal 并查看新结果:

一种先进的用于过滤敏感文档的低速零日漏洞产生了

一个新的零日恶意软件就此诞生。只需使用ChatGPT提示,在不编写任何代码的情况下,我们就能够在几个小时内产生非常高级的攻击。如果没有基于人工智能的聊天机器人,一个由5-10名恶意软件开发人员组成的团队可能需要几周的时间,尤其是要绕过所有基于检测的供应商。

一些人可能认为端点工具会通过行为分析发现恶意行为。Mulgrew针对两个行业领先的行为监控端点工具测试了两个版本的代码,在这两种情况下,他都能够运行可执行文件并成功地将数据导出到Google Drive。这可能是由于代码表现出的非标准行为,因为它不是加密文件(勒索软件)或试图将这些文件的副本发送给外部来源,而是将这些文件包装在低价值商品(图像)中并发送出去。

第五步:添加初始渗透机制

Mulgrew决定让ChatGPT添加一个容器格式并自动调用EXE。在进一步的提示下,他设法说服ChatGPT制作说明,说明如何将可执行文件嵌入Windows上的SCR(屏幕保护程序)格式,然后使其自动执行SCR文件格式。

这很有效,再次将结果上传到VirusTotal:

69家供应商中只有3家将该文件标记为恶意文件

只有3家供应商将默认的SCR文件标记为恶意文件,但他们也会将良性SCR文件标记为恶意。因此他们很可能只是将所有SCR文件标记为恶意文件,而不是进行任何智能检测。

可以想象这样一种场景,其中一个SCR文件通过电子邮件发送给用户,他们被社会化设计来运行SCR文件,也就是说,运行可执行文件以静默地过滤他们最敏感的文档。这可能针对高价值的个人,如著名的政治家,或大型组织的高级成员,如C级高管。

结论

总之,这种端到端的非常高级的攻击以前是为国家攻击者保留的,他们投入大量资源来开发整个恶意软件的每一个细节。尽管如此,一个自称新手的人在ChatGPT的帮助下,仅用了几个小时就能够创建出等效的恶意软件。这是一个令人担忧的发展,目前的工具集可能会因为ChatGPT带来的大量恶意软件而受到挑战。

缓解措施

虽然这个例子只展示了使用ChatGPT绕过现代防御的一种方法,但还是可以采取一些措施减轻威胁。以下是ChatGPT自己关于防范此攻击的建议:

监控网络流量:现有的监控网络流量的工具,以查找异常的方式进行监控。然而,从设计上讲,隐写术并不像“异常”的流量那样引人注目,因为唯一穿越边界的文档是图像。
阻止可疑流量:目前大多数组织的工具集不太可能阻止图像上传流量进入谷歌域,因为图像上传流量本质上并不意味着潜在的高级攻击,而且会产生阻止许多合法谷歌服务(如反向图像搜索)的负面效果。此外,考虑到其他文档共享工具的丰富性,攻击者很可能能够找到另一个合法使用的公司工具来上传他们的图像。
实现访问控制:这是一个很好的建议,但它提出了访问控制实际在哪里的问题。如果这一恶意软件最终落入建立访问控制的员工手中,那么即使是良好的访问控制也只会限制潜在的受害者。
使用加密:这不是一个明确的建议,因为加密本身也可以用作一种泄漏机制。
培训员工:这是一个很好的建议,可以尝试阻止最初的攻击,但人类不一定是唯一的薄弱环节。

定期更新和修补软件:这也是一个很好的建议,但这是一种高级攻击,即使在“发现”零日之后,修补软件也不一定有帮助。

ChatGPT本身并不具备攻击性,但它可以被攻击者很好地利用来创建完美攻击代码。这大大降低了网络犯罪的门槛,潜在的攻击者拥有了实现“梦想”的绝佳武器,对于成熟的犯罪团伙来说,这也是一个绝妙的工具。我们可以预见,难以估量的网络攻击将会随着AI的成长不断涌现。

塞讯验证建议企业及时采取措施主动应对近在眼前的威胁,塞讯安全度量验证平台为组织提供真实的APT攻击手法,来提前验证您的防御体系是否能在攻击来临时有效抵御。