探索OpenAI在网络安全工具中的非常规应用
Sep 17, 2021 · 1777 words · 9 minute read
Note: 这是我在新加坡国立大学Greyhats俱乐部演讲的博客版本。如果您更喜欢视频,可以在这里观看:
引言 🔗
随着《黑客军团》和《黑客帝国》重回Netflix,重看它们成为一种奇特的时空错位体验。一方面,许多当时感觉新鲜原创的内容现在显得过时,甚至尴尬。毕竟,过去几年提供了无数“F SOCIETY”时刻,更不用说“红药丸”的被劫持……但这些剧集凭借一些我见过的最吸引人的开场场景而独树一帜。
随着AI深入技术采用生命周期,大多数低垂的果实已被采摘——在网络安全领域,杀毒引擎已在客户端和云端集成机器学习模型,而恶意行为者滥用合成媒体生成来执行各种骗局和阴谋。当然,有大量的炒作和恐吓,但仍有充分的理由担忧。
OpenAI的下一代GPT-3语言模型去年随着OpenAI API的发布而获得广泛关注,并在今年的Black Hat和DEF CON上成为热门话题。乔治城大学安全与新兴技术中心的一个团队展示了将GPT-3应用于虚假信息活动,而我的团队开发了基于OpenAI的网络钓鱼(和反网络钓鱼)工具,并在Black Hat和DEF CON上分享。毕竟,GPT-3 API相比之前的最先进技术提供了巨大的能力和访问飞跃;Lambda Labs的估计显示,参数数量比GPT-2增加了一百多倍。
| resource | gpt-2 | gpt-3 | gpt-3 api |
|---|---|---|---|
| time | 1+ weeks | 355 years | <1 minute |
| cost | $43k | $4.6m | $0.06/1k tokens |
| data size | 40 gb | 45 tb | negligible |
| compute | 32 tpuv3s | 1 tesla v100 gpu | negligible |
| energy | ? | ? | negligible |
| released | 2019 | 2020 | 2020 |
然而,大多数关于AI恶意应用的研究倾向于关注人为因素(诈骗、网络钓鱼、虚假信息)。有一些关于AI驱动的恶意软件的讨论,但这仍然处于概念验证阶段。这部分是由于研究人员可用的模型类型——生成模型容易应用于合成媒体,而语言模型容易应用于网络钓鱼和假新闻。分类问题很适合杀毒解决方案。但从这些低垂的果实出发,我们该去哪里?
OpenAI for Cybersecurity Tooling 🔗
最近,OpenAI发布了涉及代码的新产品。首先,GitHub基于GPT-3开发了Copilot,为程序员提供代码自动补全。接下来,由于与GitHub的数据共享协议,OpenAI生产了Codex,这是一个 arguably 更令人印象深刻的工具,可以根据纯语言指令生成代码。
转向编码部分受到API beta早期使用的启发,显示GPT-3即使没有微调也相当擅长解析代码。例如,输入这样的提示:
|
|
会返回:
|
|
当然,由于模型是概率性的,它偶尔也会返回滑稽的失败,例如:
|
|
OpenAI还最近发布了davinci-instruct beta模型,该模型经过微调以解析纯语言指令,并在我自己的测试中表现更好。鉴于Codex似乎是davinci-instruct和代码微调的混合,它的表现会更好。
Reverse-Engineering Assembly 🔗
考虑到所有这些,我决定测试OpenAI的模型。一个突出的可能性是将GPT-3应用于逆向工程汇编代码。如果它能很好地解释Python或JavaScript代码,那么下一层呢?毕竟,最好的恶意软件逆向工程师强调模式识别是关键。例如,考虑以下IDA图:
对于像我这样的 casual observer,需要一些时间来阅读和理解汇编代码,然后才能得出结论:这是一个RC4密码密钥调度算法。具体来说,这是来自Flare-On 2020 Challenge 7中使用的Metasploit payload的RC4密码——阅读我的过程 here。经验丰富的逆向工程师能够快速聚焦到有趣的常量(100h - 十进制256)和图的整体“形状”,以立即得出相同的结论。
是否可能利用机器学习的一个关键优势——模式识别——来自动化这个过程?虽然分类模型如今被杀毒引擎广泛使用,但是否可能临时改装GPT-3语言模型用于汇编?
直接来说,GPT-3本身在解释汇编方面很差。拿同一个RC4例子,问GPT-3解释它是什么:
GPT-3的第一个答案是汇编代码打印“HELLO WORLD”。虽然这表明GPT-3理解了提示,但答案完全错误。
如何改变提示呢?这次,我让GPT-3将汇编代码翻译成Python:
仍然不理想。似乎模型没有充分优化用于汇编代码。幸运的是,OpenAI还刚刚发布了beta微调功能,允许用户在训练补全上微调GPT-3(最高到Curie模型)。训练文件是JSONL格式,看起来像这样:
|
|
更重要的是,每月最多10次微调运行是免费的;数据集限制在250万 tokens(约80-100mb)。有趣的是,即使GPT-3最初是一个补全API,OpenAI建议微调可用于将模型转换为分类器,给出了电子邮件过滤器的例子。通过将自动补全 tokens 设置为1(即,在补全中只返回1个词),“补全”现在 function 作为一个分类(例如,返回“spam”或“junk”)。
于是开始了我的非常不科学的实验。我生成了一个训练语料库,包含100个windows/shell/reverse_tcp_rc4 payloads,使用Metasploit,用objdump反汇编它们,并用sed清理输出。对于我的未加密语料库,我使用了windows/shell/reverse_tcp。由于Metasploit每次迭代略微改变每个payload(我还随机化了RC4密钥),每个样本之间至少有一些差异。
然后,我将汇编作为每个训练样本的提示,并将补全值设置为 either rc4 or unecrypted。下一步:训练 - openai api fine_tunes.create –t training_samples.jsonl -m curie --no_packing。
在这里,我发现了API的一个主要优势——而对于爱好者来说,微调GPT-2需要 significant 时间和计算能力,通过API微调GPT-3在OpenAI的强大服务器上只花了 about 五分钟。而且它是免费的!目前是。
有了我的微调模型,我针对一个从网上抓取的小测试集进行了验证。我拿了不同作者的自定义RC4汇编作为我的测试集,例如rc4-cipher-in-assembly。对于未加密测试集,我简单地使用了非加密相关汇编代码。
不科学的结果(收起你们的 pitchforks)是令人鼓舞的:
RC4被识别出4/5次,而 unecrypted 3/5次。有趣的是,未加密测试样本的“错误”结果不是由于将它们错误分类为rc4。相反,微调模型 simply 返回了不相关的 tokens,例如新制表符。这可能是因为我的未加密汇编训练集纯粹是Metasploit shells,而测试集更多样化,包括自定义代码来弹出计算器等。如果将这些结果视为假阴性而不是假阳性,情况看起来更好。当然,结果每次迭代都不同,但它们 consistently 正确。
Code Review 🔗
由于我还没有访问Codex beta,我使用了davinci-instruct作为次优选项来执行代码审查。我输入了简单易受攻击代码样本,它表现得相当好。
在这个样本中,它正确识别了XSS漏洞,甚至指定了导致漏洞的确切参数。
同样重要的是要注意,Codex explicitly 引用代码错误检查作为一个用例。通过一些调整,说它也可以执行漏洞检查并不太牵强。这里唯一的限制是大型提示或代码库的性能。然而,对于小 cases(白盒CTF或DOM XSS?),我们可能很快看到体面的结果。
此外,即使微调目前 limited 到Curie模型,如果OpenAI开放Codex或Davinci进行微调,性能提升将是 incredible。
Blind Alleys 🔗
通过一些简单实验,我发现OpenAI的GPT-3可以进一步微调用于网络安全研究人员的特定用例。然而,GPT-3的有效性有 clear 限制。作为一个核心语言模型,它更适合 completion 和 instructions 等任务,但我怀疑它可能在密码分析或 fuzzing 方面不那么好——没有免费的午餐。对于不同任务,有更好的ML模型类——或者在某些情况下ML甚至没有用。
使用AI作为网络安全研究工具的另一面是,这些工具也可能被 compromised——机器学习变体的供应链攻击。像GitHub这样的数据源可能被毒化以产生易受攻击的代码,甚至泄露秘密。我认为使用GitHub代码作为训练数据集,即使对于开源许可证,也将 remain 一个 sticking point 对于某些人。
然而,对我来说 clear 的是,即使低垂的果实已被采摘,机器学习模型在网络安全中仍有 unusual 和 potentially powerful 的用例。随着对GPT-3的访问随时间增长,我期望有趣的AI驱动的安全工具出现。例如,IDA最近发布了基于云的Decompiler;虽然机器学习还没有进入 equation,但它可能是一个有趣的实验。怎么样,OpenAI,来一个安全黑客马拉松?让我们看看这个兔子洞能走多远。
dev ai code review reverse engineering