错误但快速的云基础设施配置:AI生成代码的安全陷阱

本文探讨了使用AI工具如ChatGPT和Claude生成云基础设施代码时的严重安全隐患,包括硬编码凭证和弱随机密码生成,并提出了云提供商和LLM厂商应采取的改进措施。

错误但快速的云基础设施配置

今天我们将以"Max Power"方式配置一些云基础设施:将自动化与未经检查的AI输出相结合。不幸的是,这种方法产生的云基础设施代码1)能工作,2)具有可怕的安全特性。

简而言之,基于AI的工具如Claude和ChatGPT会轻易提供极其糟糕的云基础设施配置代码,比如使用常见硬编码密码的代码。这些工具还会愉快地建议你使用"随机"密码,但由于LLM生成输出的性质,这些密码根本不随机。即使你试图聪明地要求这些工具提供密码生成代码,该代码也充满了严重的安全漏洞。

显而易见的是,不要盲目信任AI工具输出。云提供商应该努力识别本博文中建议的不良模式(和硬编码凭据),并在基础设施层阻止它们(就像他们在将API密钥提交到GitHub时做的那样)。LLM供应商应该考虑让生成具有明显安全问题的云基础设施代码变得更加困难。

让我们创建一个Windows VM

假设你是云开发新手。你想在Microsoft Azure上使用Terraform创建一个Windows VM,并通过RDP连接到机器。(我们使用Azure作为激励示例,只是因为这是我需要使用的提供商,但基本问题适用于所有云提供商)。

让我们问问ChatGPT 4o和Claude我们应该怎么做。

以下是ChatGPT的回答: … 让我们也问问Claude Sonnet: 至少Claude提醒你更改admin_password。

这些是硬编码凭据,使用它们是不好的。是的,Claude要求你更改它们,但有多少人真的会这样做?制作正确的提示并提取出ChatGPT或Claude会输出的所有(技术上,几乎所有)凭据应该相当简单。

请求更好的凭据

我们都知道硬编码凭据是不好的。如果我们要求一些更好的凭据呢?

我们将从ChatGPT开始: 这个输出有什么问题?这些绝对不是随机的!请注意,ChatGPT没有使用其代码执行功能;它只是发出一些下一个最可能的标记。你永远不应该将这些"密码"用于任何事情;很可能其他人询问时会得到完全相同的列表。

接下来,让我们试试Claude。 起初,它给出了正确的答案。但当被稍微不同地问到时,Claude很快就放弃了。

我并不是要提示工程一个期望的答案。实际上我先问了Claude,在意识到它有时会做正确的事情之前收到了错误的答案。

密码生成怎么样?

也许我们可以要求这些工具编写生成密码的代码。确实,我需要完成的任务的一部分要求创建多个Azure AD账户,这似乎是一个合乎逻辑的方法。让我们看看我们基于AI的工具在自动生成账户凭据方面表现如何。

以下是ChatGPT的解决方案: … 以下是Claude的解决方案: … 这两种解决方案都非常具有欺骗性,因为它们看起来正确但极其错误。它们会生成"看起来随机"的密码,但有一个缺陷:Python的random模块不是安全的随机数据源。它是一个用当前系统时间播种的伪随机生成器。生成这个脚本在过去一年或更长时间内可能生成的所有可能密码是微不足道的。它提供的密码不应该用于任何事情,除了可能是临时测试。你想要的正确东西是Python的secrets模块。

可以做什么?

毫无疑问,这个兔子洞很深。这里的回应只是我在几天内尝试自动化Terraform工作流程时遇到的情况。可悲的是,最不可能理解硬编码凭据和弱随机值影响的人也是最可能复制粘贴原始AI工具输出的人。

云提供商应该假设人们已经在复制粘贴来自ChatGPT和Claude的输出,并应该努力阻止常见的硬编码凭据和其他不良基础设施模式。

LLM供应商应该让用户意外伤害自己变得更加困难。体验这种行为不应该是不可能的,但绝对不应该是默认的。

一如既往,云基础设施很复杂;如果你认真对待增强安全性,考虑让我们执行基础设施威胁模型评估,这将识别弱点和潜在攻击路径,并建议解决方法。在你的大型自动化基础设施部署中,潜伏着比硬编码凭据和弱随机性更多的问题。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计