本机不等于安全:AI 助手和桌面应用之间的通道怎么设防
本机 MCP 连接为什么还要设防:只给当前用户的命名管道、首实例独占、128 位令牌、常量时间比较,以及出错就不发布的控制文件。
要点速览
- AI 助手和桌面应用之间的本机连接,照样可能被同一台电脑上的其他用户、远程客户端,以及抢先占用通道名字的程序碰到。
- 在 Windows 上,KwaFlux 的通道是一个只有你的账户能打开、由 KwaFlux 抢先独占、并且拒绝远程客户端的命名管道;在 Mac 上,是一个只对你的账户开放权限的 socket。
- 每条连接都要先出示一个 128 位随机令牌,用常量时间比较,令牌不进日志,并且可以在设置里重置。
- 把令牌交给 MCP 服务的那个文件,是以原子方式、只给属主权限写出的;权限设不上,KwaFlux 就干脆不发布它。
AI 助手通过你自己电脑上的一条通道和 KwaFlux 对话,人们很容易以为别人碰不到这条通道。其实不一定。在 Windows 上,按默认设置创建的命名管道,任何用户都能读,能从网络上连进来,谁先创建就归谁。
KwaFlux 把这几扇门一扇扇关上了,本文逐一说明怎么做的。
本文会讲本机通道被人碰到的三种途径、KwaFlux 针对每种途径的防护、令牌怎样安全地交到 MCP 服务手里,以及本机通道防不住什么。
目录
- 什么是本机 IPC 通道?
- “本机”出问题的三种途径
- 第一层:谁能打开管道
- 第二层:每条连接都要令牌
- 第三层:发布令牌而不泄露
- 第四层:给客户端设上限
- 通道防不住的事
- 我们怎么测
- 常见问题
什么是本机 IPC 通道?
本机 IPC(进程间通信)通道,是让同一台电脑上的两个程序不经过网络协议栈、直接互发消息的连接。Windows 上的命名管道和 macOS 上的 Unix 域套接字都是常见的例子。
在 KwaFlux 的 MCP 架构里,你的 AI 助手启动 KwaFlux 的 MCP 服务,用来处理文件修复、格式转换这类任务,这个服务再通过这样一条通道连到正在运行的 KwaFlux。它在各层中的位置,见控制面这篇。
“本机”出问题的三种途径
| 风险 | 具体场景 | 为什么要紧 |
|---|---|---|
| 同一台电脑上的其他账户 | 家庭共用电脑、共享工作站、多人登录的远程桌面服务器 | 微软文档写明,命名管道的默认安全描述符会“向 Everyone 组成员和匿名账户授予读取权限” |
| 远程客户端 | 命名管道可以按名字从网络上打开 | 微软说明,接受远程客户端的管道只按其安全描述符来检查对方 |
| 抢注 | 另一个程序在 KwaFlux 启动之前,先创建了同名管道 | MCP 服务会把请求连同令牌一起交给冒充者 |
这些都不需要什么高深的攻击手法,全是默认设置带来的。
第一层:谁能打开管道
KwaFlux 在 Windows 上创建管道时用了三项设置,分别对付上面三种风险:
- 只给你的账户的安全描述符。 默认描述符会把全部控制权交给系统和管理员、把读取权限给 Everyone;KwaFlux 的管道访问列表里只写当前用户。
- 只认首个实例。 KwaFlux 创建管道时带上
FILE_FLAG_FIRST_PIPE_INSTANCE。微软文档说,带这个标志时,“第一个实例创建成功,再创建下一个实例就会以 ERROR_ACCESS_DENIED 失败”。如果名字已经被别人占了,KwaFlux 能发现,也不会在不属于自己的管道上提供服务。 - 不接远程客户端。 管道使用
PIPE_REJECT_REMOTE_CLIENTS,微软对它的描述很直接:“来自远程客户端的连接会被自动拒绝。”
在 macOS 上,应用监听的是一个文件权限为 0600 的 Unix 域套接字,只有你的账户能打开。
补充: MCP 规范的安全指南对本地服务给的建议也是这些:用 stdio 传输,把访问限制在 MCP 客户端;如果服务还用了别的传输方式,就要求授权令牌,或者使用“访问受限”的 IPC。KwaFlux 两样都做了:宿主通过 stdio 连 MCP 服务,MCP 服务再通过带令牌、访问受限的通道连应用。
第二层:每条连接都要令牌
权限决定谁能打开通道;令牌证明另一端就是 KwaFlux 亲手配好的那个程序。
- 生成。 KwaFlux 启动时,用操作系统的密码学随机数生成器生成一个 128 位令牌。
- 握手。 每条连接都必须先发一条带令牌的 hello 消息。握手成功之前,应用在这条连接上什么都不接。
- 常量时间比较。 KwaFlux 逐字节比对令牌时,不管错在第一个字节还是最后一个字节,耗时都一样,所以没法通过响应时间判断猜对了多少。
- 不进日志。 令牌不会写进 KwaFlux 的日志,也不会出现在设置里的调用记录中。
- 重置。 设置里的 重置 Agent 访问令牌 会把它换成一个新的随机值。现有的 Agent 连接会被断开,已配置好的宿主下次调用时会用新令牌重连。如果怀疑旧令牌被别的程序读到过,就用它。
第三层:发布令牌而不泄露
MCP 服务需要拿到令牌,它从 KwaFlux 启动时写出的一个小控制文件里读取。这个文件要是处理得马虎,就是整条链上最薄弱的地方,所以对它最谨慎。

- 创建控制目录,放在你的用户目录下。
- 只开放给你的账户。 目录的访问列表只写当前用户,不从上级目录继承更宽的权限。
- 核对属主。 KwaFlux 确认这个目录归当前用户所有,别人事先放好的目录不会被信任。
- 写入临时文件,同样只开放给你。
- 以原子方式替换控制文件,读取方看到的要么是旧文件,要么是新文件,不会读到写了一半的。
关键在出错时怎么办。早先的版本是先写文件、再收紧权限,收紧失败也只记一条警告。现在,只要权限设不上,KwaFlux 就不发布这个文件。修好之前 MCP 用不了,这是值得的取舍:连接断了你看得见,令牌被人读走你看不见。
第四层:给客户端设上限
即使是正规通过认证的客户端也有上限,因为它背后的 AI 可能被读到的内容带偏:
| 限制项 | 数值 |
|---|---|
| 同时连接数 | 8 条 |
| 单条消息大小 | 上限 64 KiB |
| 空闲连接 | 5 分钟后断开 |
| 新任务 | 全局每分钟 10 个,单条连接 6 个 |
| 任务控制 | 只能控制这条连接上的 Agent 自己提交的任务 |
| 总开关 | KwaFlux 里一个设置就能关掉全部 Agent 访问 |
这些是用来兜住一个糊涂了或被操纵了的助手的。路径与隐私这篇和 SSRF 这篇从别的角度讲了同一件事。
通道防不住的事
边界我们想说准,因为夸大的安全承诺比不说更有害。
这条通道的防护,挡的是其他用户账户、其他电脑,以及想抢占管道名字冒充 KwaFlux 的程序。它挡不住已经以你的账户身份在运行的恶意软件。以你的身份运行的程序,本来就能读你的文件、浏览器数据和你能读的一切;没有哪个本地应用能把自己和这类程序隔开。把这类软件挡在电脑外面,是操作系统和安全软件的事。
补充: 第三层的加固和令牌重置先在 Windows 上发布。Mac 版已经在用只对属主开放的 socket 和令牌握手;其余几项在 Mac 上发布后,我们会更新本文。
还有一项改动排在后面:一种双方各自证明身份、而秘密本身不经过通道的握手。暂缓是因为它要同时改两端的协议,握手一出错,所有人的 MCP 都会用不了;而它要防的情形,大半已经被首实例独占和服务端的存活校验挡住了。
我们怎么测
控制面的请求处理有 341 项断言。另有一套端到端测试,会启动真实的控制面和真实的 MCP 进程,跑 12 组安全用例,覆盖本文讲到的通道和路径检查。两者都是 KwaFlux 自动化测试的一部分,削弱其中任何一条规则的改动,都会以测试失败的形式暴露出来。
结语
“只在本机监听”是本机通道安全的起点,不是终点。限定谁能打开,确保名字归你,每条连接都要认证,秘密要么谨慎发布、要么不发布,再把防不住的范围讲清楚。KwaFlux 就是这样守住 AI 助手和应用之间这条线的。
一个认真对待安全的本地 MCP 服务
KwaFlux 通过一条只有你的账户能打开的通道连接 Codex、Claude、Cursor 等 MCP 应用。AI 处理在你自己的 GPU 上运行,媒体文件不会为了处理而上传。可在 Windows 10(64 位,1809 或更新版本)、Windows 11,以及搭载 Apple Silicon 的 macOS 12 或更新版本上运行。导入文件和浏览应用都不需要账号。仅在导出、转换、文件修复和从链接下载文件时需要登录并购买付费方案。
用你自己的素材试试效果
下载 KwaFlux,付费前先用自己的素材免费预览效果——无需注册,在你的 GPU 上处理,处理不需要上传媒体文件。 视频预览可选 1、3或5 秒;防抖预览可选 5、15或30 秒。
常见问题
Windows 的命名管道安全吗?
要看怎么创建。用默认安全描述符创建的管道,Everyone 可读,还接受远程客户端。显式设置访问列表,再加上 PIPE_REJECT_REMOTE_CLIENTS 和 FILE_FLAG_FIRST_PIPE_INSTANCE,它就只对这台电脑上你的账户开放。
命名管道能从网络上访问吗?
能,默认就可以。Windows 允许客户端按名字打开另一台机器上的管道,而接受远程客户端的管道只按安全描述符检查对方。创建时传入 PIPE_REJECT_REMOTE_CLIENTS 就会拒收。
什么是命名管道抢注?
就是某个程序赶在另一个应用启动之前,先用对方要用的名字创建管道,让客户端连到冒充者那里去。创建管道时带上 FILE_FLAG_FIRST_PIPE_INSTANCE,真正的服务端就能发现名字已被占用。
为什么令牌要用常量时间比较?
因为普通的比较遇到第一个错字节就停,猜对的字节越多,耗时就略长一点。测量这点差别,就可能一个字节一个字节地把秘密试出来。常量时间比较不论对错,耗时都一样。
用本地 MCP 服务,我的数据就不会被别的程序碰到了吗?
部分是。做得好的本地服务能挡住其他账户、其他电脑和冒充的程序,但挡不住已经以你的身份运行的恶意软件,它能读你能读的一切。见本地应用能护住什么、护不住什么。
参考资料
- Microsoft Learn, "CreateNamedPipeA function" (FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_REJECT_REMOTE_CLIENTS, default security descriptor) (2026-10-25 查阅)
- Microsoft Learn, "Named Pipe Security and Access Rights" (2026-10-25 查阅)
- Model Context Protocol, security guidance for implementers (2026-07-28; Local MCP Server Compromise) (2026-07-28 查阅)


