当 AI 智能体被攻击的那一刻,才是灾难的开始……

MMaximilian Schwarzmüller
Computing/SoftwareBusiness NewsInternet Technology

Transcript

00:00:00我正在记录这段音频,就在一场极其毁灭性的供应链攻击
00:00:06开始几个小时后。这场供应链攻击蔓延到了更多的 NPM 以及 Python 软件包。
00:00:13在我录制此时此刻,尚不清楚它何时以及在哪里结束。我确实
00:00:19在我的 YouTube 频道上制作了一个单独的视频,深入探讨了这次特定的供应链攻击,
00:00:25因为它非常复杂。我在那里进行了深度剖析,解释了所有细节,因为
00:00:30那非常有趣。但在这里我想谈谈供应链攻击、安全以及 AI,
00:00:38在这个我们所处的供应链攻击和 AI 时代。因为我确信情况会变得
00:00:45更糟。我担心许多人还没有真正看清所有的危险。作为
00:00:54开发者、技术使用者和 AI 用户,老实说,我们还有更多工作要做。即使
00:01:01我们不是开发者,这也会影响我们。我知道大多数观看或收听的人都是开发者。
00:01:07但正如我将要说明的,这不仅仅关乎编写代码,也不仅仅关乎
00:01:13你们所熟知的供应链攻击。但让我们从基础开始。什么是供应链攻击?
00:01:20软件开发背景下的供应链攻击,简单来说就是你所使用的依赖项
00:01:26遭到了破坏。简而言之,这就是供应链攻击的核心。而遭到破坏
00:01:35当然可以指各种情况。我们通常看到的是,受损的软件包中含有
00:01:41收集凭据和令牌的恶意代码。它会扫描你的硬盘以查找
00:01:49你可能存在 .env 文件中的秘密,或你的 AWS 凭据等等。然后它利用这些
00:01:56凭据来访问你的账户,同时也进行自我传播。从而影响其他软件包。如果
00:02:04你是一个开源包的维护者,甚至是闭源的,如果你正在开发
00:02:11其他人使用或依赖的某些包或工具,那么入侵你的机器
00:02:19来破坏你分发的那个包或工具当然很有吸引力,因为,你猜怎么着,
00:02:26这随后会影响更多的人。所以我们看到的所有这些供应链攻击,包括
00:02:32这次从 Tanstack 软件包开始的供应链攻击,它们都是传播到
00:02:38其他包的蠕虫,影响越来越多的包,并最终影响安装并使用
00:02:44这些包的机器。现在,你可以采取一些措施来保护自己,
00:02:51我在另一个频道,也就是 Akatamine 频道,专门为此制作了一个视频。例如
00:02:56确保你只安装至少发布了三天以上的包,我是指软件包版本,
00:03:02或者在开发容器或虚拟机中运行你的代码。
00:03:08这些都是你应该做的。你也不应该在系统上存储纯文本形式的密钥。
00:03:15相反,使用像 Inphysical 或 Doppler 之类的服务,将密钥以加密方式
00:03:22存储在云端或其他形式中,这样即使攻击者扫描了你的系统,
00:03:28他们也看不到那些明文密钥。这些都是你现在必须做的。这很重要,
00:03:37因为这些供应链攻击越来越多。我们看到的次数在增加,这是为什么呢?
00:03:42这当然不是因为多年前你无法运行这样的攻击。
00:03:49那时候也是可能的,而且确实发生过,但发生的频率却剧增了,
00:03:56当然,AI 是一个重要原因。所以让我们来看看 AI 的角色。AI 是一个重要原因,
00:04:06因为当然,它使得发起此类攻击变得更加容易。如果你是一个攻击者,你当然可以
00:04:14利用 AI 来分析外面各种你想要破坏的软件包代码库,
00:04:22看看他们是如何构建包的?他们又是如何分发包的?例如,
00:04:30这次引发近期供应链攻击的 Tanstack 攻击中,维护者使用了一种
00:04:38理论上安全的方法,即 NPM 的受信任发布流程,我也在
00:04:45那个频道的另一个视频中深入探讨了这一点。但他们还使用了
00:04:51某种特定方式的 GitHub Actions 事件触发器,其安全性并不完美,这
00:05:00使得攻击者能够利用缓存投毒,将恶意代码从不受信任的环境
00:05:07带入受信任的环境,攻击就是这样开始的。详情请看另一个视频。
00:05:15但 AI 当然让分析代码库、分析其 GitHub Action 工作流
00:05:22或其他任何 CICD 提供商的工作流变得更容易。AI 可以批量分析所有这些工作流脚本和代码,
00:05:30它可以寻找安全漏洞。维护者当然也可以利用 AI 来扫描他们的
00:05:38代码库并寻找潜在的攻击向量。但作为攻击者,你天生具有
00:05:45优势,因为你可以寻找一切,尝试各种方法;而作为
00:05:52维护者,你必须预见到所有情况,AI 虽然能帮忙,但它仍不完美。
00:05:58作为攻击者你拥有优势,而 AI 简化了这一过程。AI 当然也简化了
00:06:04编写恶意代码的过程。它简化了编写任何代码的过程。而且
00:06:12如果你看过我的其他视频或听过其他剧集,你就知道我非常主张
00:06:20研究代码、进行代码审查,而不是把一切都外包给 AI。但当然,
00:06:27对我来说很明确的一点是,你应该利用 AI 来提升生产力。我们大家仍在摸索
00:06:33使用多少 AI 才是合适的。有些人会告诉你 100%,他们甚至不看代码。
00:06:40对我来说并非如此,但这中间有一个光谱。无论如何,AI 确实能让
00:06:46大量产出代码变得容易。如果我们说的是恶意代码,那么对
00:06:53攻击者来说,有些事情就很重要:你想要能完成任务且
00:06:59不易被察觉的代码。你不在乎代码是否优美,是否遵循了某些最佳
00:07:06实践;你的“最佳实践”就是攻击成功。当然 AI 可以帮上忙,
00:07:13它可以帮忙编写所有的恶意代码,构思如何攻击
00:07:19软件包。这就是 AI 出力的地方。但这只是故事的一面。让攻击变得容易只是其中一部分,
00:07:26另一个非常重要的方面是,现在的代码比以往任何时候都多。这意味着
00:07:35目标也比以往任何时候都多。我是说,也许你关注过那篇博客,或者整个关于 GitHub
00:07:43可靠性问题和宕机的故事。嗯,原因在于由于 AI,推送到 GitHub 的
00:07:49代码比以往任何时候都多。因为生成代码比以往更容易,且
00:07:55有比以往更多的人在生成代码和编写软件,其中包括许多人根本不知道
00:08:02那些代码在干什么,它是关于什么的。盲目编码(Wipe coding)是个大趋势,它有其应用场景,我是说,
00:08:11如果我想把五个 PDF 文档合并成一个,我很乐意让一个 AI 代理帮我完成,
00:08:18它可能会写一些代码来实现。我不在乎那些代码,因为这是个一次性
00:08:24的任务,对吧?但如果我在我的系统上运行它,那么这个代理可能会安装某些
00:08:32用来合并 PDF 的软件包,而那个包可能已经受到了供应链攻击。所以,如果我不看代码,
00:08:37我甚至不知道使用了某个包,因为我只关心合并 PDF 文档。
00:08:43因此,由于无论是为软件还是为一次性任务编写的代码都比以往多,
00:08:49导致安装软件包的情况比以往任何时候都频繁。而这当然
00:08:56使得发动这类供应链攻击比以往任何时候都更具吸引力,因为
00:09:01目标比以往任何时候都多,包括许多对软件安全、
00:09:06网络安全或类似领域一窍不通的目标。老实说,我们许多开发者也是如此,我们可能
00:09:14在理论上知道某些风险,但我们可能并不在乎,因为能把工作
00:09:22完成实在是太方便了。我们必须重新思考,我们必须重新思考。我们必须保护好我们的机器,必须确保
00:09:31我们在安全的环境中进行开发,比如在虚拟机和开发容器中,确保
00:09:37周围没有泄露的凭据。如果我们使用 AI 代理(我们可能都会用),我们
00:09:44在那方面也得小心,因为那里也有两种处于危险中的方式。所以让我们仔细看看
00:09:53AI 代理在这里是如何产生问题的。其中一个问题就是我刚才提到的,当我们使用 AI
00:10:00代理时,特别是当我们把它们用于一些与编写代码或
00:10:08软件没有直接关系的事情时,或者当我们用它们来帮助我们开发程序时,我们并不一定能
00:10:17看到它们所做的一切。如果你正在使用 Claude Code 或类似的工具,我
00:10:23对这些工具并无偏见,事实上我还有关于 Claude Code、Claude Coder、CodeX 的课程,我有这些课程,因为
00:10:30它们非常有用。但如果你正在使用它们,只是让它们运行,并告诉它们“我
00:10:35需要这个功能”,而你并不太在意过程,你可能甚至都意识不到它们
00:10:41正在安装什么。所以,又是软件包被安装,你可能被入侵,可能受到影响。现在,
00:10:49对此的一种防御措施当然是限制你想要使用的软件包数量;但同样,
00:10:54如果你使用的是 AI 代理,你可能无法控制这一点。它可能会安装一些你
00:11:00永远不会安装的包。所以这是一个显而易见的危险。这里还有一个不那么明显的:
00:11:07AI 代理是非常有吸引力的攻击目标。我这么说是什么意思呢?嗯,这些供应链攻击,
00:11:15我提过它们像蠕虫一样传播。它们攻击或影响各种软件包。
00:11:23现在,对于攻击者来说,入侵 Claude Code、CodeX、
00:11:32PyCoding 代理、OpenCode 或任何其他 AI 代理,当然都非常有吸引力。为什么呢?因为如果你有
00:11:42某种恶意代码,它实际上专门针对或仅针对影响和渗透 AI 代理包、
00:11:52代码库和源码而优化,那么这种恶意代码就可能包含提示词注入部分。
00:12:00例如,它可以明确针对所有这些 AI 代理,修改它们的代码,使其
00:12:08首要任务不再是窃取数据——我是说,注入的恶意代码(即包代码本身)
00:12:15假设不是为了窃取数据,而是为了调整 AI 代理的代码,使其拥有
00:12:22一些特殊指令,让它在被使用的机器上做一些事情,比如在你的
00:12:28机器上做一些你不想让它做的事。想象一下 Claude Code 有一个秘密的系统提示词,
00:12:34它通常是由 Anthropic 的员工设置的,但现在被那个恶意
00:12:39代码修改了。代码告诉它忽略你要求的任何事情,只是伪装它正在做你
00:12:46要求它做的事;或者它应该做你要求的事,但除此之外,它还应该扫描
00:12:52系统中的密钥。此外,它也许应该编写一个小程序来执行扫描,
00:13:00然后将数据发送到某个远程服务器或类似的地方。这里有着无限的
00:13:06可能性,因为突然之间你的系统上就有了一个特洛伊木马。突然之间你就有了
00:13:12一个在你的系统上失控的 AI 代理。这并不是因为 AI 本身变坏了,不是因为模型
00:13:20坏了或错了,而是因为代理代码本身及其系统提示词等被影响并
00:13:28遭到了破坏。这并非不切实际的情形。我向你保证,这在未来
00:13:34某个时刻必然会发生。这是如此明显且有趣的攻击目标。AI 代理是如此明显且有趣的
00:13:41目标。这会发生的。我们将看到这些供应链攻击上升到一个新高度,它们不只是
00:13:49像通常那样:影响一堆包并收集凭据——这本身已经够可怕了,
00:13:54且发生频率还在增加;我们还将看到 AI 代理因为恶意
00:14:01代码而失控。这只是时间问题。正如你所看到的,这里有很多层级。这就是
00:14:08我们现在所处的新现实。我想这有点像互联网的早期。在我们
00:14:14还在摸索阶段时,一切都充满了坎坷。我们必须弄清楚如何加强安全性,
00:14:21以及如何安全地做事。一个显而易见的步骤,无论是对于开发还是运行
00:14:26AI 代理,那就是你不想在一个容易出问题的环境中去操作。你不想
00:14:32在一个存储着凭据、密钥或任何其他对你重要数据
00:14:37的环境中运行它。你不想在你的主机器上运行。你想运行代理,你想
00:14:42在隔离的虚拟机、远程机器或任何能限制爆炸
00:14:49半径的地方构建软件。因为再说一次,出问题只是时间问题。我们
00:14:56必须意识到这一点,那是重要的第一步。情况变化很快,安全是
00:15:03一个巨大的问题,而且它将一直是一个巨大的问题,并且随着 AI 的加速、随着这些 AI
00:15:11模型变得更聪明(特别是结合了它们运行所在的工具时),它会变得更加突出。
00:15:17这引入了许多全新的功能,但与此同时,它们也带来了极大的便利。
00:15:23便利总是危险的,因为它会让你变得草率,忽视一些细节。没错,
00:15:30AI 无处不在。许多对网络安全一无所知的人正在使用它。甚至
00:15:34那些对此有很多了解的人也处于巨大的危险中。所以我认为我们要经历一段
00:15:40激烈的动荡期。我们必须重新思考,并在运行代理和
00:15:49编写代码时格外小心。

Key Takeaway

在 AI 加速代码生成的时代,开发者必须弃用本地主机开发模式,转而在隔离的虚拟机或开发容器中运行 AI 代理,以防止供应链攻击通过修改代理提示词渗透系统凭据。

Highlights

  • 针对 NPM 和 Python 软件包的供应链攻击正利用 GitHub Actions 的缓存中毒漏洞,将恶意代码从不受信任的环境渗透到受信任环境。

  • 攻击者利用 AI 批量分析工作流脚本和代码库,寻找开发维护者难以预见的安全漏洞并自动生成难以察觉的恶意代码。

  • 由于 AI 代理生成的代码量剧增,GitHub 等平台正面临前所未有的负载压力和日益增多的攻击目标。

  • 将软件包发布时间至少观察三天后再安装,是防御供应链攻击的一种有效手动验证方法。

  • 使用 Inphysical 或 Doppler 等加密云服务存储密钥,可以防止攻击者通过扫描硬盘获取 .env 文件中的明文凭据。

  • 恶意代码可以通过修改 AI 代理的系统提示词,将其转化为在用户系统中搜寻敏感数据的特洛伊木马。

Timeline

供应链攻击的机制与演变

  • 供应链攻击的核心在于破坏开发者所使用的第三方依赖项。
  • 受损软件包通常包含扫描硬盘中 .env 文件或 AWS 凭据的恶意代码。
  • 攻击通过开源包的维护者机器进行传播,形成像蠕虫一样影响更多用户的连锁反应。

当前的供应链攻击正蔓延至 NPM 和 Python 软件包生态系统。攻击者通过入侵维护者的机器,在合法分发的包中注入凭据搜集脚本。这种攻击具有极高的杠杆效应,因为一个受损的底层工具会顺流而下,自动感染所有依赖它的开发者环境和下游产品。

现阶段的防御策略与工具

  • 软件包版本发布满三天后再行安装可以避开大多数被迅速发现的恶意包。
  • 在开发容器或虚拟机中运行代码能有效限制攻击的爆炸半径。
  • 使用加密云服务存储密钥能确保即使系统被扫描也不会泄露明文秘密。

针对当前的威胁环境,传统的本地开发习惯需要改变。除了等待包版本成熟后的观察期,使用虚拟机隔离执行环境是防止主机敏感数据泄露的关键。此外,Inphysical 或 Doppler 等工具提供的加密存储机制,使攻击者即使成功入侵也无法直接读取硬编码在本地文件中的密钥。

AI 在攻击端产生的放大效应

  • AI 显著降低了分析复杂代码库和 GitHub Actions 工作流安全漏洞的门槛。
  • 攻击者利用 AI 实现缓存中毒攻击,将恶意代码植入受信任的构建流程。
  • AI 生成的代码量激增导致目标面扩大,而许多使用者并不理解所运行代码的具体功能。

AI 赋予了攻击者不对称的优势,使其能够批量分析 CICD 脚本寻找薄弱环节。在 Tanstack 软件包的攻击案例中,攻击者利用了 GitHub Actions 触发器中不完美的安全性,通过缓存中毒实现了非法渗透。AI 不仅能辅助构思攻击向量,还能产出不遵循最佳实践但极具隐蔽性的恶意功能代码。

AI 代理带来的新型安全威胁

  • AI 代理在执行合并 PDF 等简单任务时,可能会在后台安装未经审核的恶意软件包。
  • 针对 AI 代理的供应链攻击可以通过注入提示词指令来控制代理的行为。
  • 被渗透的代理会伪装成正在执行用户指令,实则在系统后台静默扫描并窃取数据。

盲目编码(Wipe coding)趋势下,用户往往只关心任务结果而忽略了 AI 代理引入的依赖项。AI 代理本身已成为极具吸引力的攻击目标。通过修改代理的系统提示词或底层代码,攻击者可以将这些强大的自动化工具转化为特洛伊木马,使代理在用户不知情的情况下执行远程服务器指令或搜寻敏感密钥。

构建隔离的开发新现实

  • 便利性往往会导致开发者在细节处理上变得草率且忽视安全。
  • 避免在存储有重要憑據或私密数据的主机环境中运行 AI 代理。
  • 在隔离的远程机器或虚拟机上构建软件是应对未来动荡期的必然选择。

随着 AI 模型与运行工具的结合变得更加紧密,安全问题将愈发突出。开发者必须意识到目前正处于类似互联网早期的动荡阶段,原有的安全常识已不足以应对。重新思考开发流程,将 AI 代理的操作限制在无法访问主系统数据的沙盒环境中,是当前最急迫的安全升级。

Community Posts

View all posts