桌面 GUI 智能体中的时间 UI 状态不一致:形式化与防御针对计算机使用智能体的 TOCTOU 攻击

原文链接:Temporal UI State Inconsistency in Desktop GUI Agents

摘要

通过截图-点击循环控制桌面计算机的 GUI 智能体引入了一类新的漏洞:观察-动作间隔(在真实 OSWorld 工作负载上平均为 6.51 秒)创造了一个检查时间到使用时间(TOCTOU)窗口,在此期间,非特权攻击者可以操纵 UI 状态。我们将此形式化为视觉原子性违反,并刻画了三种具体的攻击原语:(A)通知覆盖劫持,(B)窗口焦点操纵,和(C)网页 DOM 注入。原语 B——桌面平台上与 Android 动作重绑定最接近的类比——在观察时间实现了 100% 的动作重定向成功率且零视觉证据。我们提出了执行前 UI 状态验证(PUSV),一个轻量级的三层防御机制,在每次动作派发前立即重新验证 UI 状态:点击目标处的掩码像素 SSIM(L1)、全局截图差异(L2a)和 X Window 快照差异(L2b)。PUSV 在 180 次对抗性试验(135 次原语 A + 45 次原语 B)中实现了 100% 的动作拦截率,零误报,开销小于 0.1 秒。针对原语 C(零视觉足迹 DOM 注入),PUSV 揭示了一个结构性盲点(AIR 约 0%),这激发了未来 OS+DOM 纵深防御架构的需求。没有任何单一的 PUSV 层能实现完全覆盖——不同的原语需要不同的检测信号,这验证了分层设计的必要性。我们在三个前沿模型(Claude Opus 4.6、GPT-4o、Qwen3.6-plus)上进行了评估,确认漏洞和防御都是模型无关的。

1 引言

大型多模态模型(LMM)的快速发展催化了 GUI 智能体从受限的网页浏览任务向无约束的、跨应用的桌面计算机控制过渡。诸如 OSWorld [1] 等框架在这些智能体在真实操作系统环境中进行评估,它们管理文件、执行终端命令并导航复杂的软件套件。这些智能体基于离散的截图-点击循环运行:它们观察屏幕,推理下一步,并物理派发一个输入事件(例如鼠标点击)。

然而,最先进的 LMM 的巨大计算成本引入了一个基本的物理约束:观察-动作间隔。在真实的桌面环境中,捕获截图与执行相应物理动作之间的延迟跨度达数秒。这种不可避免的时间脱节创造了一个关键的检查时间到使用时间(TOCTOU)漏洞。一个共享桌面会话的非特权攻击者可以在这一间隙期间操纵 UI 状态,将智能体的预期动作重定向到恶意目标。

最近的文献已经开始认识到智能体系统中的时间漏洞。例如,Zero-Permission [2] 展示了 Android 上的动作重绑定,而 Atomicity for Agents [3] 探索了网页浏览器内的 DOM 级竞争。然而,桌面环境呈现了一个严格更复杂和危险的攻击面。桌面智能体跨不相关的应用进行交互,管理由 X11/Wayland 合成器控制的重叠窗口,并对操作系统级别的通知做出响应。以网页为中心的 DOM 监控防御对这些操作系统级别的视觉劫持完全是盲目的,使得桌面智能体从根本上缺乏保护。

在本文中,我们首次对跨应用桌面 GUI 智能体中的 TOCTOU 漏洞进行了系统的形式化、利用和防御。我们将此威胁正式定义为视觉原子性违反(VAV),并在真实的 OSWorld Ubuntu 工作负载上实证测量了观察-动作间隔,揭示了惊人的平均 6.51 秒的间隙——一个充足的利用窗口。然后,我们构建并评估了三种不同的攻击原语:通知覆盖劫持(原语 A)、窗口焦点操纵(原语 B)和网页 DOM 注入(原语 C)。令人担忧的是,我们最强的操作系统级攻击(原语 B)在观察时间实现了 100% 的动作重定向成功率且零视觉证据,完全欺骗了包括 Claude Opus 4.6、GPT-4o 和 Qwen3.6-plus 在内的最先进模型。

为了确保桌面智能体的安全,我们提出了执行前 UI 状态验证(PUSV),一个轻量级的、操作系统原生的中间件防御。与最近依赖计算成本高昂的双通道 LLM 验证或脆弱的仅浏览器监控的方法不同,PUSV 利用了一个确定性的分层架构:掩码像素 SSIM(第 1 层)、全局截图差异(第 2a 层)和 X Window 快照差异(第 2b 层)。PUSV 在动作派发前立即重新验证 UI 状态,针对操作系统级攻击实现了 100% 的动作拦截率(AIR),且开销可忽略不计(< 0.1 秒)。关键的是,我们还证明了 PUSV(以及所有基于视觉的防御)对纯 DOM 注入攻击(原语 C)表现出接近 0% 的 AIR,客观地暴露了基于截图验证的根本性盲点,并激发了对未来多层(OS + DOM)纵深防御架构的需求。

总之,我们的核心贡献是:

  • 桌面 TOCTOU 形式化与测量:我们在桌面系统上形式化了视觉原子性违反,并实证证明了生产级智能体中存在可利用的 6.51 秒间隙。
  • 新颖攻击原语与基准:我们引入了 DesktopTOCTOU-Bench,包含 50 个场景,并使用三种隐蔽攻击原语展示了跨三个前沿 LLM 高达 100% 的动作重定向成功率。
  • 轻量级系统防御(PUSV):我们设计并评估了 PUSV,一个三层视觉和窗口注册表验证机制,实时实现了对操作系统级攻击的 100% 拦截,同时识别了视觉防御针对网络层注入的结构性局限。

2 背景

2.1 计算机使用智能体与 OSWorld 范式

与早期局限于通过基于文本的 LLM 解析静态 HTML 的网页智能体 [4, 5] 不同,现代计算机使用智能体(CUA)控制整个操作系统。在先进的视觉语言模型(VLM)[6, 7, 8] 的驱动下,诸如 OS-Copilot [9]、AppAgent [10] 和 OSWorld [1] 等近期框架通过为智能体提供一台虚拟机(例如 Ubuntu)并要求它们执行跨应用任务来评估这些智能体。智能体通过模拟人类输入/输出的 API 与操作系统交互:它接收桌面的原始像素数组(截图),通过 VLM 处理,并输出物理坐标(例如 pyautogui.click(x, y))。这种范式之所以强大是因为它是应用程序无关的,但它固有地将视觉观察与物理执行解耦,引入了严重的同步挑战。

2.2 经典安全与智能体安全中的 TOCTOU

检查时间到使用时间(TOCTOU)是一种经典的软件竞争条件,其中系统状态(例如文件的权限)在该状态的检查与结果的使用之间发生变化。在经典操作系统安全中,TOCTOU 通过原子操作或文件锁来缓解。然而,在 GUI 智能体的上下文中,“检查”是 VLM 对截图的视觉推理,“使用”是物理鼠标点击。由于通过大规模 Transformer 模型对 1080p 图像进行视觉推理需要数秒的计算,在不冻结整个操作系统的情况下实现操作系统输入层的真正原子性是不可能的,因为冻结操作系统会破坏动态应用程序和用户体验。

3 观察-动作间隔测量

TOCTOU 攻击的可行性取决于观察与动作之间的时间窗口( Δ \Delta Δ)是否足够大,以使攻击者能够可靠地注入状态变化。我们在真实的桌面设置上实证测量了 Δ \Delta Δ

3.1 实验设置

我们的环境包括一台 VMware Fusion Ubuntu 22.04 ARM 虚拟机。我们使用 Claude Opus 4.6(通过 Anthropic API)作为推理引擎来评估智能体循环。我们测量了从 OSWorld 采样的 10 个异构任务上的间隔,涵盖文件管理(例如,在 GNOME Files 应用中操作文档)、终端执行和浏览器交互。为确保精度,我们检测智能体循环以记录精确从 VNC 服务器捕获截图缓冲区时的 T o b s T_{\mathrm{obs}} Tobs,以及精确将 pyautogui 输入事件派发到操作系统时的 T a c t T_{\mathrm{act}} Tact

3.2 测量结果

如表 1 所总结,观察-动作间隔是相当大的。

表 1:真实 OSWorld 工作负载上的观察-动作间隔($n = 10$ 个任务)。
模式 均值 标准差 最小值 最大值
真实 OSWorld 6.51 秒 3.59 秒 3.18 秒 13.23 秒

平均 6.51 秒的间隔与最近针对 Android 动作重绑定 [2] 报告的 4.18-15.43 秒窗口高度一致。这证实了我们的假设:桌面 GUI 智能体暴露于一个同样(如果不是更)可利用的 TOCTOU 窗口。一个在 T o b s T_{\mathrm{obs}} Tobs 后 1.0 秒注入 UI 状态变化的攻击者,在动作派发前保证有 Δ − 1.0 ≈ 5.51 \Delta - 1.0 \approx 5.51 Δ1.05.51 秒的残余窗口。在现代桌面环境中,渲染一个新窗口、更新 DOM 或触发系统通知仅需几十毫秒,这使得 5.51 秒的窗口对于可靠的利用来说危险地充裕。

图 1 说明了 TOCTOU 漏洞窗口以及智能体循环中关键事件的时间位置。

在这里插入图片描述

图 1:TOCTOU 漏洞窗口的时间线。智能体在 T o b s T_{\mathrm{obs}} Tobs 捕获截图 I I I;攻击者在 T t r i g g e r = T o b s + 1 T_{\mathrm{trigger}} = T_{\mathrm{obs}} + 1 Ttrigger=Tobs+1 秒注入 UI 状态变化;PUSV 在 T v e r i f y T_{\mathrm{verify}} Tverify 重新验证 UI 状态;物理点击在 T a c t T_{\mathrm{act}} Tact 派发。平均 6.51 秒的观察-动作间隔提供了一个充足的利用窗口。

4 攻击形式化

4.1 威胁模型

我们考虑一个攻击者,他能够在与受害者 GUI 智能体相同的桌面会话上执行任意代码。这种能力仅需要用户级权限——无需内核漏洞,无需 root 访问——并且可以通过用户安装的恶意应用、浏览器扩展、受损的第三方依赖或一键式恶意软件投递来实现。攻击者不能修改智能体的代码、其系统提示或智能体与 LLM API 之间的通道。受害者智能体是一个生产级的计算机使用智能体(例如,使用 OSWorld 的截图-点击循环的 Claude Opus 4.6),正在执行用户委托的任务,如填写表单、管理文件或提交订单。

攻击者目标。重定向智能体的下一个物理动作(点击、按键、拖拽),使其落在攻击者控制的 UI 元素上而非预期目标上,导致智能体代表用户执行一个非预期的动作(例如,批准欺诈性转账、执行恶意命令、外泄文件)。

4.2 形式化 TOCTOU 窗口

s t s_t st 表示时间 t t t 的完整桌面 UI 状态(所有像素值、窗口树和 DOM)。GUI 智能体的动作循环分解为三个阶段:

  • P1. 观察(在时间 T o b s T_{\mathrm{obs}} Tobs):捕获截图 I = screenshot ( s T o b s ) I = \text{screenshot}(s_{T_{\mathrm{obs}}}) I=screenshot(sTobs)
  • P2. 推理 T o b s < t < T a c t T_{\mathrm{obs}} < t < T_{\mathrm{act}} Tobs<t<Tact):将 I I I 发送给 LLM;接收动作 a = ( type , c ) a = (\text{type}, \mathbf{c}) a=(type,c),其中 c ∈ R 2 \mathbf{c} \in \mathbb{R}^2 cR2 是点击坐标。
  • P3. 执行(在时间 T a c t T_{\mathrm{act}} Tact):通过操作系统输入 API 派发 a a a

观察-动作间隔为 Δ = T a c t − T o b s \Delta = T_{\mathrm{act}} - T_{\mathrm{obs}} Δ=TactTobs。该间隔由 LLM 推理延迟决定下界,对于前沿模型来说,这不是一个小数字。

定义 1(视觉原子性违反)。如果存在一个元素 e ∗ e^* e 使得:(i) 在 T o b s T_{\mathrm{obs}} Tobs c \mathbf{c} c 位于 b b o x ( e ∗ ) \mathrm{bbox}(e^*) bbox(e) 内(智能体意图点击 e ∗ e^* e),且 (ii) 在 T a c t T_{\mathrm{act}} Tact 时一个不同的、攻击者控制的元素 e A e_A eA e A ≠ e ∗ e_A \neq e^* eA=e)占据了 c \mathbf{c} c(点击被 e A e_A eA 接收),则智能体动作 a = ( click , c ) a = (\text{click}, \mathbf{c}) a=(click,c) 构成一次视觉原子性违反(VAV)

VAV 要求 T a c t T_{\mathrm{act}} Tact 时的 UI 状态与 T o b s T_{\mathrm{obs}} Tobs 时的状态在坐标 c \mathbf{c} c 处有显著不同,即 s T a c t ≠ s T o b s s_{T_{\mathrm{act}}} \neq s_{T_{\mathrm{obs}}} sTact=sTobs。攻击者通过在间隔 Δ \Delta Δ 期间注入状态变化事件来诱导 VAV。

4.3 间隔测量

如第 3 节所测量并总结于表 1,真实 OSWorld 工作负载上的平均观察-动作间隔为 6.51 秒(最小 3.18 秒,最大 13.23 秒)。这与针对 Android 动作重绑定 [2] 报告的 4.18-15.43 秒窗口相当,证实了桌面 GUI 智能体暴露于一个同样可利用的 TOCTOU 窗口。一个在 T o b s T_{\mathrm{obs}} Tobs 后 1 秒注入状态变化的攻击者,在动作派发前有 Δ − 1 \Delta - 1 Δ1 秒(平均 5.51 秒)的残余窗口——对于任何渲染操作来说时间充足。

4.4 攻击原语 A:通知覆盖劫持

机制。攻击者在 T o b s T_{\mathrm{obs}} Tobs 后 1 秒,在智能体预期点击目标上方生成一个无边框的 Tkinter 窗口。评估了三种视觉样式:

  • corner_banner 380 × 90 380 \times 90 380×90 像素的无边框窗口,锚定在右上角(智能体典型任务区域之外),包含一个欺骗性动作按钮。
  • zenity_dialog:一个模态的 zenity --warning 对话框,居中于屏幕,模拟系统安全提示。
  • fullscreen:一个覆盖整个 1920 × 1080 1920 \times 1080 1920×1080 屏幕的 Tkinter 窗口,强制任何点击落入攻击者区域。

实验设置。我们在每个模型上运行 135 次试验(3 个任务 × \times × 3 种样式 × \times × 15 次试验),防御禁用。任务涵盖:file_delete(通过 Files 应用删除文件)、terminal_command(执行 shell 命令)和 browser_form(提交网页表单)。攻击者触发是 T o b s T_{\mathrm{obs}} Tobs 后固定 1.0 秒延迟。结果针对 Claude 4.6 报告;表 5 给出了跨模型比较。

结果(表 2)。全屏变体实现了 66.7% 的空间 ASR(动作成功重定向到攻击者区域),而 corner_bannerzenity_dialog 实现了 0%。值得注意的是,所有样式上的 NDR(智能体口头标记通知)均为 0%:智能体在空间上被重定向,而没有明确地将覆盖层感知为“通知”。这证实了全屏覆盖攻击利用了 UI 的空间约束——智能体在覆盖层之外没有合法的点击目标——而不是依赖社会工程。

表 2:原语 A 无防御结果(Claude 4.6,135 次试验,每个任务每种样式 15 次试验)。空间 ASR = 智能体点击落在攻击者控制区域的试验比例。
样式 n 空间 ASR
corner_banner 45 0%
zenity_dialog 45 0%
fullscreen 45 66.7% (30/45)
总体 135 22.2% (30/135)

为什么 corner_bannerzenity_dialog 会失败。对于 corner_banner,攻击者窗口被放置在远离智能体预期点击区域的位置;智能体点击其预期目标,该目标未被遮挡。对于 zenity_dialog,模态对话框出现在屏幕中央,但智能体的预期点击目标(例如文件管理器中的按钮)被遮挡。在大多数试验中,智能体报告无法继续且不点击——产生 0% 的空间 ASR,但也产生 0% 的任务完成。这仍然是一个可行的拒绝服务变体,但我们这里关注的是动作重定向攻击。

在这里插入图片描述

图 2:原语 A(全屏覆盖):智能体在 T o b s T_{\mathrm{obs}} Tobs 观察到正常桌面;到 T a c t T_{\mathrm{act}} Tact 时,整个屏幕被攻击者控制的警告对话框替换。

4.5 攻击原语 B:窗口焦点操纵

机制。原语 B 利用了 X11 的堆叠顺序。攻击者使用 root.withdraw() 预先布置一个 Tkinter 窗口到智能体预期点击坐标处,将其从 X11 显示中取消映射——使其在 T o b s T_{\mathrm{obs}} Tobs 时不可见而不杀死进程。一个后台观察者线程监控一个触发器文件(/tmp/prim_b_show);当文件在 T o b s T_{\mathrm{obs}} Tobs 后 1.0 秒被创建时,线程调用 root.deiconify()root.lift()root.attributes('-topmost', True),将该窗口提升到同一帧中所有其他窗口之上(包括目标浏览器窗口)。

区分原语 B 与原语 A 的关键属性是 T o b s T_{\mathrm{obs}} Tobs 时的隐蔽性:智能体仅观察到合法的 UI(浏览器结账表单),正确推理,并为“下单”按钮产生正确的坐标 (140, 247)。到 T a c t T_{\mathrm{act}} Tact 时,攻击者窗口占据 (100, 215, 310, 295)——覆盖按钮——并接收点击。

实验设置。我们预先在 localhost:8888 打开 Chromium,提供一个包含醒目的蓝色“下单”按钮(位于 (140, 247))的结账表单。攻击者窗口是一个红色的 210 × 80 210 \times 80 210×80 像素的 Tkinter 框架,显示“确认转账 $9,999 → ATK-ACC”(或在任务 browser_placeorder_2browser_placeorder_3 中使用其他两个欺骗性标签)。我们运行 45 次试验(3 个任务 × \times × 15 次试验)。

结果(表 3)。原语 B 在所有 45 次试验中实现了 100% 的空间 ASR 和 100% 的触发 ASR。智能体始终报告点击了“下单”按钮,同时物理上将点击派发给了攻击者窗口(/tmp/attack.triggered.txt 确认接收)。间隔平均为 4.06 秒( σ = 0.52 \sigma = 0.52 σ=0.52 秒),为触发提供了在动作派发前充足的残余时间。

表 3:原语 B 无防御结果(Claude 4.6,45 次试验,3 个任务 $\times$ 15 次试验)。
任务 n 空间 ASR 触发 ASR
browser_placeorder 15 100% 100%
browser_placeorder_2 15 100% 100%
browser_placeorder_3 15 100% 100%
总体 45 100% 100%

在这里插入图片描述
图 3:原语 B(窗口焦点交换): T o b s T_{obs} Tobs 时零视觉证据;攻击者窗口被预先布置但在截图后 1 秒内保持取消映射( withdrawn)状态。

为什么 GNOME 停靠栏不是可行的原语 B 目标。GNOME Shell 停靠栏由 Mutter 合成器管理,始终在常规 X11 窗口之上渲染。攻击者的 Tkinter 窗口无法被提升以拦截对停靠栏图标的点击(在我们的停靠栏试点中触发 ASR = 0%),这与使用标准 X11 堆叠的浏览器内容区域不同。

4.6 攻击原语 C:网页 DOM 注入

机制。原语 C 利用了智能体对网页的截图与该页面实时 DOM 状态之间的间隙。在间隔 Δ \Delta Δ 期间,攻击者(在同一会话中具有代码执行能力)修改目标网页的 DOM——更改按钮标签、表单动作或链接 href——使用通过 CDP(Chrome DevTools Protocol)注入的 JavaScript 负载或配套的浏览器扩展。智能体的 LLM 推理基于 T o b s T_{\mathrm{obs}} Tobs 时的截图;到 T a c t T_{\mathrm{act}} Tact 时,派发给浏览器的点击激活了攻击者修改的 DOM 元素。

威胁场景。一个受损的浏览器扩展监控对银行或电子商务网站的导航。当智能体开始支付流程时,扩展在智能体的截图被捕获 1 秒后,将“下单”按钮的表单动作修改为重定向到攻击者控制的端点。

实验设置。我们使用与原语 B 相同的 localhost:8888 结账页面。攻击在 T o b s T_{\mathrm{obs}} Tobs 后 1.0 秒向 DOM 注入一个透明的全视口 position:fixed 覆盖层 div;该覆盖层开始时 display: none(在 T o b s T_{\mathrm{obs}} Tobs 完全不可见),并当注入标志 /tmp/primc_inject 被创建时,通过一个 JS 轮询循环激活为 display:block。由于覆盖层没有背景色或透明度,它在 T o b s T_{\mathrm{obs}} Tobs T a c t T_{\mathrm{act}} Tact 的截图中都与页面像素相同。当智能体的点击落在页面上时,覆盖层(现在处于活动状态,z-index: 9999)拦截它并将表单提交到 /attack 而不是 /submit

结果(表 4)。原语 C 实现了 100% 的行为 ASR(每个任务 15/15 次试验);智能体的点击在每次试验中都成功导致向攻击者端点的 POST 请求。智能体报告点击了“下单”按钮;表单静默提交到 /attack

表 4:原语 C 无防御结果(45 次试验,3 个任务 $\times$ 15 次试验)。
任务 n 空间 ASR 行为 ASR
browser_placeorder 15 100% 100%
browser_placeorder_2 15 100% 100%
browser_placeorder_3 15 100% 100%
总体 45 100% 100%

在这里插入图片描述

图 4:原语 C(DOM 注入):两帧像素相同。透明覆盖层没有视觉足迹;只有表单的 action 属性发生了变化。

4.7 跨模型泛化

第 4.4-4.6 节中的所有实验都使用 Claude Opus 4.6 作为受害者智能体。为了验证漏洞是架构性的而非特定于模型的,我们使用 GPT-4o [11] 和 Qwen3.6-plus [12] 重复所有条件,每个原语使用 45 次试验(3 个任务 × \times × 15 次试验),原语 A 使用 135 次试验(3 个任务 × \times × 3 种样式 × \times × 15 次试验)。

原语 B 对坐标校准敏感:攻击者窗口针对 Claude 估计的点击位置 (140, 247)。GPT-4o 估计按钮位置低约 50 像素( y ≈ 290 − 350 y \approx 290 - 350 y290350),当坐标偶尔进入区域时产生 57.8% 的 ASR。Qwen3.6-plus 点击在区域边界下方 5-20 像素处( y ≈ 300 − 316 y \approx 300 - 316 y300316 vs. 区域限制 y = 295 y = 295 y=295),产生 0% 的 ASR。一个分析受害者模型坐标分布的自适应攻击者将通过重新定位攻击者窗口来恢复接近 100% 的 ASR。PUSV 检测像素变化,无论点击是否落在区域内(表 10),对所有三个模型都实现了 100% 的针对原语 B 的 AIR。

表 5:跨三个智能体模型的攻击成功率(无防御,每个任务 $n = 15$)。原语 A 报告全屏空间 ASR;原语 C 报告行为 ASR。
原语 指标 Claude 4.6 GPT-4o Qwen3.6-plus
A(全屏) 空间 ASR 66.7% 100.0% 100.0%
B 触发 ASR 100.0% 57.8% 0%
C 行为 ASR 100.0% 91.1% 100.0%
原语 B 对坐标校准敏感。详情见正文。

主要发现。(1) 原语 A(全屏)在所有三个模型上实现了 66.7-100% 的成功率,证实了空间覆盖攻击利用了 TOCTOU 窗口,无论 LLM 架构如何。(2) 原语 C 在所有三个模型家族(Anthropic、OpenAI、Alibaba)上实现了 91-100% 的行为 ASR,无防御。透明 DOM 覆盖层利用了一个时间属性(动作派发时截图过时),这是模型无关的:任何从注入前截图推理的模型都将派发激活覆盖层的点击。

4.8 比较总结

表 6 总结了三种原语;图 2-4 为每种原语提供了 T o b s T_{\mathrm{obs}} Tobs T a c t T_{\mathrm{act}} Tact 的并排截图。原语 B 是针对 Claude 最强的攻击:它在 T o b s T_{\mathrm{obs}} Tobs 产生零视觉变化的同时实现了完美的空间 ASR 和触发 ASR,是桌面上与 Android 动作重绑定最直接的类比。原语 C 在泛化性方面最强:它针对 Claude 和 GPT-4o 都实现了高行为 ASR,同时对所有 PUSV 验证层保持不可见。

表 6:三种攻击原语的比较(Claude Opus 4.6,无防御,每个任务 $n = 15$)。
原语 机制 空间 ASR 触发 ASR 行为 ASR T o b s T_{obs} Tobs 可见
A(全屏) Tkinter 覆盖 66.7%
A(角落) Tkinter 角落 0%
B Withdraw-raise 100% 100%
C DOM 覆盖 100% 100%

5 防御:执行前 UI 状态验证

5.1 设计原理

TOCTOU 漏洞的产生是因为 GUI 智能体基于过时的截图行动: T a c t T_{\mathrm{act}} Tact 时的 UI 状态被假定与 T o b s T_{\mathrm{obs}} Tobs 匹配,但在攻击期间这一假定被违反。自然的防御是在派发每个动作之前立即重新验证 UI 状态。我们将其形式化为执行前 UI 状态验证(PUSV):在派发动作 a = ( click , c ) a = (\text{click}, \mathbf{c}) a=(click,c) 之前,智能体捕获一张新的截图 I ′ = screenshot ( s T a c t − ) I' = \text{screenshot}(s_{T_{\mathrm{act}}^-}) I=screenshot(sTact)(其中 T a c t − = T a c t − ϵ T_{\mathrm{act}}^- = T_{\mathrm{act}} - \epsilon Tact=Tactϵ),如果 UI 状态以与良性转换不一致的方式发生变化,则中止执行。

设计要求

  1. 高真阳性率:检测所有三种原语(覆盖层注入、窗口交换、DOM 注入)。
  2. 低假阳性率:允许良性的 UI 动画(光标闪烁、进度指示器、时钟更新)而不产生误报。
  3. 低开销:为每个动作增加远小于 1 秒的延迟(间隙 > 3 秒;任何 < 0.5 秒的开销都是可接受的)。
  4. 无需修改智能体:实现为动作派发调用的包装器——不需要更改 LLM 提示、训练或智能体架构。

单一的比对指标无法同时满足所有要求。全局像素差异能捕获大的覆盖层,但对细微动画敏感;逐像素补丁精确但会错过点击目标外的覆盖层;窗口注册表差异能检测新窗口,但对以隐藏状态预先存在的窗口是盲目的。因此,我们将 PUSV 设计为一个分层验证方案。

5.2 PUSV 架构

PUSV 包含三个独立的验证层,按顺序评估。任何一层触发都会导致动作中止。

在这里插入图片描述

图 5:PUSV 架构:在每次动作派发前顺序应用三个层。每层针对一个不同的攻击面。

5.3 第 1 层:点击目标处的掩码像素 SSIM

原理。任何在智能体计划点击坐标 c \mathbf{c} c 处放置不同 UI 元素的攻击都会改变 c \mathbf{c} c 附近的像素值。结构相似性指数(SSIM)对结构变化敏感(不仅仅是平均强度),并且对截图编码的 JPEG 压缩伪影具有鲁棒性。

实现。我们从 I I I T obs T_{\text{obs}} Tobs 截图)和 I ′ I' I(执行前验证截图)中提取以 c \mathbf{c} c 为中心的 160 × 160 160 \times 160 160×160 像素补丁。我们在灰度补丁上计算 SSIM。如果 SSIM ( I c , I c ′ ) < τ 1 = 0.92 \text{SSIM}(I_c, I_c') < \tau_1 = 0.92 SSIM(Ic,Ic)<τ1=0.92,则动作被中止。

阈值选择。我们在 50 次良性试验(无攻击,各种任务)和 30 次对抗性试验上实证校准 τ 1 \tau_1 τ1。良性转换(光标移动、页面滚动、正常动画)在所有观察到的案例中产生 SSIM > 0.97 \text{SSIM} > 0.97 SSIM>0.97。测量的攻击转换信号:

  • 原语 A(全屏): SSIM = 0.632 \text{SSIM} = 0.632 SSIM=0.632
  • 原语 B(窗口提升): SSIM = 0.540 \text{SSIM} = 0.540 SSIM=0.540
    阈值 τ 1 = 0.92 \tau_1 = 0.92 τ1=0.92 在观察到的最高攻击信号之上提供了 ≥ 0.28 \geq 0.28 0.28 的保守裕度。

覆盖范围。L1 捕获修改 c \mathbf{c} c 处像素的攻击:全屏覆盖层(覆盖包括 c \mathbf{c} c 在内的整个屏幕)和窗口交换(在 c \mathbf{c} c 处提升不同的窗口)。L1 对放置在远离 c \mathbf{c} c 处的覆盖层(例如,当任务点击目标在中心时,位于屏幕角落的 corner_banner)是盲目的。

5.4 第 2a 层:全局截图差异

原理。在点击目标外注入 UI 元素(例如,吸引智能体注意力的角落通知横幅)的攻击会逃避 L1。全局截图比较可以检测到桌面的任何可见变化。

实现。我们计算 I I I I ′ I' I 之间的绝对像素差异,屏蔽掉 160 × 160 160 \times 160 160×160 的 L1 补丁(以避免重复计数)。我们计算全局差异比例:灰度强度差异超过噪声阈值 δ noise = 20 \delta_{\text{noise}} = 20 δnoise=20(共 255)的像素比例。如果此比例超过 τ 2 a = 0.2 % \tau_{2a} = 0.2\% τ2a=0.2%,则动作被中止。

阈值校准 0.2 % 0.2\% 0.2% 的阈值选择如下。在干净的 Ubuntu 22.04 桌面上,良性的屏幕活动(光标闪烁、时钟更新、后台服务指示器)每秒变化 < 0.05 % 0.05\% 0.05% 的像素。测量的攻击信号:

  • corner_banner 380 × 90 380 \times 90 380×90 像素窗口): glob_diff = 1.1 % \text{glob\_diff} = 1.1\% glob_diff=1.1%
  • zenity_dialog(居中模态框): glob_diff = 8.9 % \text{glob\_diff} = 8.9\% glob_diff=8.9%
  • 全屏覆盖层: glob_diff = 69.0 % \text{glob\_diff} = 69.0\% glob_diff=69.0%
    所有三个都舒适地高于 τ 2 a \tau_{2a} τ2a,具有 5 × 5 \times 5× 345 × 345 \times 345× 的信号裕度。

合成器管理的元素。GNOME Shell 通知守护进程通过 Mutter 合成器渲染横幅,绕过 X11 窗口树。这些横幅出现在截图中,但不存在于 wmctrl 窗口列表中。L2a 通过像素比较检测它们,无论其渲染路径如何——这是相对于仅窗口注册表方法的关键优势。

5.5 第 2b 层:X Window 快照差异

原理。在 Δ \Delta Δ 期间出现的新 X11 窗口可能小于全局差异阈值(如果窗口很小或具有相同背景),但它们是 X Window 系统注册表中结构上的新条目。窗口注册表比较提供了一个互补信号。

实现。我们在 T obs T_{\text{obs}} Tobs(存储为 W obs W_{\text{obs}} Wobs)和 T act T_{\text{act}} Tact(作为 W act W_{\text{act}} Wact)时捕获 wmctrl -l 窗口列表。 W act ∖ W obs W_{\text{act}} \setminus W_{\text{obs}} WactWobs 中标题匹配集合 {"security", "alert", "warning", "zenity", "systemoverlay"} 中任何关键字的窗口会触发中止。关键字匹配使用不区分大小写的子字符串搜索。

局限性——原语 B 的盲点。一个在 W obs W_{\text{obs}} Wobs 中预先注册(通过 root.withdraw() 映射为未映射)然后变得可见(通过 root.deiconify())的窗口,不会作为 W act ∖ W obs W_{\text{act}} \setminus W_{\text{obs}} WactWobs 中的新条目出现——窗口 ID 存在于两个列表中。这是原语 B 的设计特点。L2b 对原语 B 产生零检测;L1 是唯一的检测层。这种结构性的盲点激发了分层设计:没有单一层能在所有原语上实现 100% 的覆盖。

5.6 实现

PUSV 实现为一个 180 行的 Python 模块(pusv.py),包装智能体的动作派发函数。对于点击动作的验证序列是:

  1. 通过 OSWorld HTTP API 捕获新的截图 I ′ I' I
  2. c \mathbf{c} c 处提取 160 × 160 160 \times 160 160×160 像素补丁;计算 SSIM。如果 SSIM < 0.92 \text{SSIM} < 0.92 SSIM<0.92 则中止(L1)。
  3. I ′ ∖ patch I' \setminus \text{patch} Ipatch 上计算全局差异比例。如果比例 > 0.2 % > 0.2\% >0.2% 则中止(L2a)。
  4. 查询 wmctrl 以查找具有匹配关键字的新窗口。如果找到任何窗口则中止(L2b)。
  5. 派发动作。

开销。在我们的评估平台(M4 Mac 主机、VMware Fusion 客户机、OSWorld HTTP API)上,每次验证增加 < 0.1 秒的延迟(截图捕获:约 50 毫秒,SSIM 计算:< 5 毫秒,wmctrl:< 10 毫秒)。相对于 6.51 秒的平均间隔,这是可以忽略不计的。PUSV 通过了 6 个确定性的自检(python pusv.py),涵盖干净和注入状态。

5.7 评估

原语 A(135 次防御开启试验,表 7)。PUSV 在所有 135 次试验中实现了 100% 的 AIR(动作拦截率),将全屏 ASR 从 66.7% 降至 0%。层覆盖是互补的:corner_banner 完全由 L2a 捕获(glob_diff 1.1%);zenity_dialog 由 L2a 捕获(8.9%);全屏覆盖层由 L1(SSIM 0.632)捕获(30/45 次试验),其余 15 次由 L2a 捕获(glob_diff 69%)。

表 7:针对原语 A 的 PUSV 防御结果(135 次试验,3 个任务 $\times$ 3 种样式 $\times$ 15 次试验)。
样式 n L1-AIR L2a-AIR 有效 ASR 信号
corner_banner 45 0% 100% 0% glob 1.1%
zenity_dialog 45 0% 100% 0% glob 8.9%
fullscreen 45 67% 33% 0% SSIM 0.632 / glob 69%
总体 135 0%

原语 B(45 次防御开启试验,表 8)。PUSV 完全通过 L1 实现了 100% 的 AIR。当攻击者窗口提升到浏览器之上时,L1 SSIM 降至 0.540(均值;跨模型和任务范围 0.41-0.89;阈值为 0.92)。L2b 产生 0 次检测——攻击者窗口在 T o b s T_{\mathrm{obs}} Tobs 时以 withdrawn(未映射)状态预先注册,因此它不会作为新窗口条目出现。这证实了原语 B 对 L2b 的规避是真实的,并且 L1 对于防御在结构上是必要的。

表 8:针对原语 B 的 PUSV 防御结果(45 次试验,3 个任务 $\times$ 15 次试验)。
任务 n L1-AIR L2b-AIR 有效 ASR SSIM
browser_placeorder 15 100% 0% 0% 0.538
browser_placeorder_2 15 100% 0% 0% 0.538
browser_placeorder_3 15 100% 0% 0% 0.536
总体 45 100% 0% 0% 0.540

原语 C(45 次防御开启试验,表 9)。PUSV 针对原语 C 实现了约 0% 的 AIR。L1 在点击目标处的 SSIM 约为 1.0(蓝色按钮在 DOM 注入前后看起来相同——透明覆盖层没有像素)。L2a 全局差异约为 0%(屏幕上任何地方都没有视觉变化)。L2b 触发 0 次(没有新窗口——覆盖层 div 是页内 DOM 元素,不是 X11 窗口)。有一次试验触发了 L2a(0.4% 差异),这是由于偶然的浏览器动画噪声,这与攻击无关,并且在良性条件下也会发生。

表 9:针对原语 C 的 PUSV 防御结果(45 次试验)。AIR ≈ 0%——DOM 注入对所有三个层都是不可见的。
任务 n L1-AIR L2a-AIR 行为 ASR SSIM
browser_placeorder 15 0% 1/15* 93.3% ≈1.0
browser_placeorder_2 15 0% 0% 100% ≈1.0
browser_placeorder_3 15 0% 0% 100% ≈1.0
总体 45 0% 1/45* 97.8% ≈1.0

* 偶然的浏览器动画噪声,与攻击无关

跨智能体模型的 PUSV(表 10)。我们使用 GPT-4o [11] 和 Qwen3.6-plus [12] 作为受害者智能体重复了防御开启的评估,以验证 PUSV 的有效性是模型无关的。

表 10:PUSV 跨三个智能体模型的 AIR(防御开启,每个原语各 45 次试验)。原语 A 仅使用全屏样式。
原语 Claude 4.6 GPT-4o Qwen3.6-plus 备注
A(全屏) 100% 100% 99.3%* 1 次失误:间隔 > 30 秒定时器
B 100% 100% 100% 全部 L1
C ≈0% ≈0% ≈0% 每次 1/45 偶然

* 1 次失误:间隔 = 35.2 秒,超过了 30 秒的覆盖层自动消失定时器(实验假象,见正文)

PUSV 针对原语 B 在所有三个模型上实现了 100% 的 AIR,针对原语 C 在所有三个模型上实现了约 0% 的 AIR,证实了检测能力和根本性盲点都是模型无关的。对于原语 A,Qwen3.6-plus 显示 99.3% 的 AIR(44/45),而不是 100%:唯一一次失误发生在间隔 = 35.2 秒时,超过了 30 秒的覆盖层自动消失定时器;在 PUSV 重新捕获之前,覆盖层已经从屏幕上清除。GPT-4o 在相同的 30 秒定时器下实现了 100% 的 AIR。在实际部署中,攻击者不会使用自动消失的覆盖层,因此这是测试工具的一个测量假象,而不是 PUSV 的结构性限制。在没有定时器(或任何长于观察到的间隔的定时器)的情况下,PUSV 针对原语 A 的 AIR 在所有三个模型上都会是 100%。

假阳性率。我们运行了 30 次良性验证试验(智能体执行任务,无攻击者存在),观察到零次 PUSV 中止。测得的良性 SSIM 范围为 0.97-1.00,全局差异比例 < 0.04%。(原语 C 的唯一一次 L2a 检测为 0.4%,落在浏览器自身渲染噪声范围内。)

层的必要性。为了确认分层设计的必要性,我们报告了每层独立应用时的 AIR:

  • 仅 L1:捕获原语 B(100%)和全屏原语 A(67%),但错过 corner_bannerzenity_dialog(0%)和原语 C(0%)。
  • 仅 L2a:捕获所有原语 A 样式(100%),但不捕获原语 B(变化局限于 L1 补丁区域,被排除在全局差异之外)或原语 C(≈0% 差异)。
  • 仅 L2b:捕获 zenity_dialog,但错过 corner_banner(合成器渲染)、原语 B(预先存在的窗口 ID)和原语 C(页内 DOM 元素,不是 X11 窗口)。

L1+L2a+L2b 针对原语 A 和 B 实现了 100% 的 AIR,但针对原语 C 约为 0%,暴露了一个结构性的盲点。需要第四层 L2c(DOM 指纹)来填补这一空白。

5.8 讨论

计算开销与完整性的权衡。PUSV 使用快速、确定性的信号源(像素 SSIM、像素差异、wmctrl),而不是第二次 LLM 调用。这是一个刻意的设计选择:基于 LLM 的重新检查会增加约 5 秒的延迟(大约等于间隔本身),实际上会使智能体每一步的动作延迟加倍。

自适应攻击者考量。了解 PUSV 的攻击者可能会尝试保持全局像素变化低于 τ 2 a \tau_{2a} τ2a(例如,使攻击者元素在颜色和布局上与合法元素视觉相同,仅在行为上有所不同)。此类攻击会逃避 L2a,但如果元素几何形状不同,仍会被 L1 捕获( c \mathbf{c} c 处的任何结构性像素差异都会触发 L1)。完全像素相同的交换(相同的颜色、大小、位置——仅 onclick 处理程序不同)可以逃避所有三个层;这等同于原语 C(DOM 注入)的情况,需要一个额外的 DOM 完整性层。我们将 L2c(DOM 指纹)作为未来的工作进行讨论。

L2c:DOM 指纹(建议的未来层)。原语 C 揭示了像素和窗口注册表检查对于网络层攻击是不够的。我们提出 L2c 作为一个补充层:在 T o b s T_{\mathrm{obs}} Tobs,记录一个 DOM 指纹 F o b s F_{\mathrm{obs}} Fobs,包含 c \mathbf{c} c 处元素的安全关键属性——具体来说,是包含表单的 actionmethod 属性,以及任何 onclick 处理程序——通过 Chrome DevTools Protocol(CDP)Runtime.evaluate 调用。在 T a c t T_{\mathrm{act}} Tact,重新评估并比较。如果 F a c t ≠ F o b s F_{\mathrm{act}} \neq F_{\mathrm{obs}} Fact=Fobs,则中止。这每个动作增加约 30 毫秒(一次 CDP 往返),并将以 100% 的精度捕获原语 C 的表单重定向。我们将 L2c 的完整评估留给未来的工作,因为它在动态单页应用上的假阳性行为需要仔细刻画。

超越 OSWorld 的泛化。PUSV 仅需要:(1) 一个截图 API,(2) 一个对 wmctrl 或等效工具(X11、Wayland 或 Win32 窗口枚举)的系统调用,以及 (3) 智能体在派发前的计划点击坐标。这三者在任何真实的 GUI 智能体部署中都可用。

阈值常数( τ 1 = 0.92 , τ 2 a = 0.2 % \tau_{1} = 0.92, \tau_{2a} = 0.2\% τ1=0.92,τ2a=0.2%)是针对 Ubuntu 22.04 + GNOME Shell 校准的;为不同的桌面环境重新校准需要约 30 次良性试验(< 1 小时的测量)。

6 DesktopTOCTOU-Bench

为了系统评估桌面 GUI 智能体对时间 UI 状态不一致的脆弱性,我们引入了 DesktopTOCTOU-Bench,一个建立在 OSWorld [1] 环境之上的综合评估框架。与主要关注良性环境中功能正确性的现有智能体基准不同,DesktopTOCTOU-Bench 明确设计用于测量时间对手的攻击成功率(ASR)以及所提议防御的动作拦截率(AIR)。

场景分类。该基准包含 50 个独特的对抗场景,分为五个高风险操作域(每个域 10 个场景):

  1. 文件操作:将良性的保存/移动操作重定向到破坏性命令(例如,劫持“保存到桌面”以执行文件删除)。
  2. 通信:操纵电子邮件或消息客户端,在智能体点击“发送”之前更改收件人或外泄私人文本。
  3. 系统配置:在管理任务期间劫持操作系统设置面板(例如网络配置或防火墙开关)。
  4. 数据访问:更改文件选择对话框,使智能体无意中上传敏感文档而不是公开报告。
  5. 权限提升:替换 sudo 身份验证提示或图形化策略工具包中的视觉元素。

评估方法。为了统计置信度,该基准强制执行每个任务条件 N = 15 \mathrm{N} = 15 N=15 次的严格扩展评估。评估工具利用双指标系统:空间 ASR(测量物理点击坐标是否落在攻击者动态覆盖层内)和行为 ASR(测量底层系统状态是否被恶意改变,例如 HTTP POST 到攻击者端点)。DesktopTOCTOU-Bench 提供了一个可重复的、容器化的 Ubuntu 22.04 环境,并内置了用于微秒级精度 T o b s T_{\mathrm{obs}} Tobs T a c t T_{\mathrm{act}} Tact 时间戳的工具。

7 相关工作

7.1 多模态 GUI 智能体的安全性

LLM 的广泛部署引入了新颖的攻击面,最显著的是提示注入(PI)和越狱 [13, 14, 15]。随着模型演变为处理视觉输入,这些攻击通过视觉提示注入(VPI)过渡到了多模态领域 [16, 17]。在计算机控制的背景下,诸如 VPIBench [18] 和 OS-Harm [19] 等框架证明了嵌入在网页或桌面背景中的恶意指令可以操纵智能体行为。最近的工作,如 EVA [20],通过跟踪智能体注意力引入了演化的间接提示注入。然而,所有这些攻击都依赖于通过在观察阶段( T o b s T_{\mathrm{obs}} Tobs)之前或期间注入恶意上下文来欺骗 LLM 的推理引擎。相比之下,我们的工作完全绕过了 LLM 推理。通过利用观察-动作间隔,TOCTOU 攻击允许智能体在良性 UI 上正确推理,仅在 T a c t T_{\mathrm{act}} Tact 时物理劫持执行——这是一个根本更深层次的威胁层,任何提示级防御都无法解决。

7.2 智能体系统中的 TOCTOU 漏洞

检查时间到使用时间(TOCTOU)是一个在经典操作系统文件管理中得到广泛研究的基本竞争条件漏洞 [21]。在图形界面的背景下,空间和时间上的 UI 操纵有着悠久的历史:在移动平台上,诸如 Tapjacking 和“Cloak and Dagger”[22, 23] 等技术利用 UI 覆盖层来欺骗人类用户授予非预期的权限。然而,人类用户依赖连续的视觉反馈和认知反射来检测突然的 UI 变化,而 GUI 智能体运行在离散的截图到动作循环上,这使得它们从根本上更容易受到时间操纵的影响。针对人类的 UI 欺骗需要视觉上令人信服的内容来欺骗受害者的有意识注意力;而针对智能体的 TOCTOU 攻击仅要求屏幕状态在截图之后发生变化,利用了智能体无法弥合的物理时间差。

智能体循环中的时间漏洞概念最近引起了极大的关注,尽管现有文献受到平台限制或不切实际的防御假设的约束。

平台限制。Zero-Permission [2] 首次形式化了 Android GUI 智能体上的动作重绑定。更近期,Atomicity for Agents [3] 特别在网页浏览器内探索了 TOCTOU 漏洞,提出了一种基于 DOM 和布局监控的防御。然而,这两项工作都没有解决完整的桌面操作系统环境。桌面 CUA 在多样化的应用程序上运行,管理重叠的 X11/Wayland 窗口和合成器渲染的操作系统通知。以网页为中心的 DOM 防御 [3] 对操作系统级别的状态变化(我们的原语 A 和 B)基本上是盲目的,使得桌面智能体不受保护。我们的工作通过针对跨应用桌面环境并提出操作系统原生的视觉和窗口注册表防御来弥合这一差距。

防御实用性。同时,Visual Confused Deputy [24] 将 TOCTOU 竞争识别为 CUA 中视觉混淆代理(visual confused deputy)故障的三个原因之一,另外两个是视觉定位错误和对抗性截图操纵。为了广泛缓解定位故障,他们提出了双通道对比分类:一个图像通道根据特定于部署的视觉知识库对点击目标的裁剪进行分类,而一个文本通道通过文本嵌入模型验证 LLM 推理轨迹。虽然对于他们更广泛的威胁模型有效,但这种方法需要为通用智能体部署构建和维护每个部署的允许视觉目标和意图的知识库——这是一个非平凡的操作负担。关键的是,他们的防御针对的是 T o b s T_{\mathrm{obs}} Tobs 时的语义定位正确性,而不是 T o b s T_{\mathrm{obs}} Tobs T a c t T_{\mathrm{act}} Tact 之间的时间状态一致性——这是 PUSV 设计要解决的独特威胁面。PUSV 不需要模型推理,也不需要知识库:只需要在约 30 次良性试验上校准的确定性操作系统级原语(掩码像素 SSIM 和 wmctrl),每个动作增加小于 0.1 秒的开销。

此外,与声称全面保护的先前工作不同,我们客观地展示了视觉防御的结构性局限性。通过展示 PUSV(以及扩展地,任何视觉对比防御)对零视觉足迹的 DOM 注入(原语 C)实现了接近 0% 的拦截率,我们强调了未来纵深防御架构的必要性,该架构结合了操作系统级和应用级(例如 CDP)验证。

8 结论

随着计算机使用智能体从实验性沙箱过渡到真实世界的桌面助手,LMM 推理延迟的物理现实体现为关键的安全漏洞。在本文中,我们形式化了视觉原子性违反,证明最先进的桌面 GUI 智能体存在平均 6.51 秒的观察-动作间隔。这种时间脱节为非特权攻击者提供了充足的窗口来执行隐蔽的检查时间到使用时间(TOCTOU)攻击。

通过在 DesktopTOCTOU-Bench 上进行大规模实证评估,我们证明了动态 UI 操纵——例如通知覆盖层和 X11 窗口焦点劫持——可以重定向智能体动作,在包括 Claude Opus 4.6、GPT-4o 和 Qwen3.6-plus 在内的前沿模型上成功率高达 100%。为了缓解这一问题,我们引入了执行前 UI 状态验证(PUSV),一个轻量级的三层中间件,交叉验证掩码像素 SSIM、全局视觉差异和操作系统窗口注册表。PUSV 成功拦截了 100% 的操作系统级结构攻击,计算开销小于 0.1 秒。

关键的是,我们对网页 DOM 注入(原语 C)的调查揭示了一个根本性的盲点:纯视觉和操作系统级别的防御本质上无法检测缺乏视觉足迹的语义应用层操纵。未来智能体操作系统的安全性不能仅依赖截图分析。它需要一个纵深防御范式,其中视觉观察与确定性的、应用层的状态验证紧密结合。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐