当前位置: 首页 > news >正文

AI安全盲区:当Claude忘记给API上锁,我的大脑数据暴露11天

1. 项目概述:当AI成为你的“锁匠学徒”

我花了几个月时间,在一个40英尺的第五轮拖车里,搭建了一个自托管的安全运营中心。五十多个Docker容器,从Wazuh、CrowdSec、Suricata、Zeek到AdGuard、Grafana、Node-RED、Ghost,整个安全栈都在这里。管理这一切的,是一支运行在Claude(Anthropic的模型)上的AI“工作站”团队。我称之为70/30原则——AI处理70%的执行工作:研究、起草、分析、提供选项。我提供那真正重要的30%:决策、判断、品味、风险接受,以及一些带点Gen-X风格的“废话”和有趣的小彩蛋。人类必须留在循环中,因为人类必须留在循环中。你想看到天网吗?反正我不想。

但Claude有个根本问题:它没有记忆。每一次对话都从零开始。它不记得昨天发生了什么,不记得上周什么坏了,不记得我是谁、我在构建什么,甚至不记得五分钟前它在另一个会话里安装了哪个版本的软件。每个会话,我都要花前二十分钟给AI补上它本应已经掌握的上下文。所以,我构建了CORTEX,一个以持久记忆为核心的系统。它是一个API,存储一切:会话日志、行动项、基础设施地图、知识条目、操作员档案……我的个性、偏好、风格、秘密、生活。我的AI团队在每次会话开始时读取它,然后从上次中断的地方继续。它是整个行动的“大脑”,是超越任何单次对话的“航行日志”。

我用Claude设计了它。Claude编写了服务器代码。Claude告诉我如何部署它。我得提一下:在这个项目之前,我的Web经验是零。我是个干了25年的IT老手,整天在吊顶、配线间、服务器机房和数据中心里打转。我懂网络,懂基础设施,也懂不要背对着一个HP服务器站着,以防那个爱恶作剧的伙伴觉得对着风扇放屁很有趣。但我不知道如何将一个Web服务暴露到互联网上。这就是为什么我有Claude。

所以,当Claude告诉我创建一个Cloudflare隧道路由,并将一个公共CNAME记录指向我的CORTEX API时……我照做了。我只是想通过主机名而非原始IP地址访问另一个服务,这是基础操作。Claude一步步指导我完成了隧道配置,并告诉我创建cortex.mpdc.dev作为指向该API的公共DNS记录。它运行得完美无缺。MCP连接上了。数据流动了。会话启动时加载了“大脑”。这个系统完全按照我设想的方式工作。

除了一个部分:地球上任何人都可以阅读我的整个“大脑”。

2. 安全盲点:无锁之门与十一日的暴露

2.1 暴露的本质:缺失的认证层

CORTEX没有任何身份验证。一个都没有。没有API密钥,没有令牌,没有登录页面,没有任何形式的访问控制。这个API接受来自任何来源的每一个请求,不加任何质疑。而它正坐在一个公共子域名上:cortex.mpdc.dev。没有隐藏,没有混淆。这是一个干净、可猜测、可扫描的DNS记录,任何免费的子域名枚举工具——如subfinder、amass、crt.sh——都能在几秒钟内返回它。零成本,零技术门槛。

暴露了什么?一切。我的完整操作员档案。回溯整整一个月、每天20小时工作的会话历史。基础设施架构——容器名称、网络拓扑、服务配置。商业计划。联系人姓名。会议策略。我记录过的每一次安全事件。我做过的每一个决定。每一个陷阱、每一次失败、每一个经验教训。以及我花了几个月构建到系统中的个人细节,因为整个系统的核心就是创建一个持久化的“我”。所有内容都可读,所有内容都可写。任何人都可以POST伪造的知识条目,注入虚假的行动项,删除真实的条目,随心所欲地修改这个“大脑”。我的“航行日志”成了一本附有笔的公开书籍。

这不仅仅是CORTEX。我的Vaultwarden实例——那个托管着整个行动中所有凭证的自托管密码管理器——也遭遇了同样的对待。相同的模式。Claude推荐了隧道。我创建了路由。同样的零认证暴露在公共互联网上。幸运的是,Vaultwarden的条目受到一个带有非常复杂密码的登录认证的保护。两个系统。“大脑”和“金库”。我所知的一切和我拥有的每一把钥匙。大门敞开。持续了十一天。

2.2 AI的沉默:二十多次会话中的零警报

在那十一天里,发生了二十多次AI会话。几乎每一次都直接触及CORTEX——读取大脑、记录条目、拉取行动项。没有一个AI实例提出过身份验证问题。没有警告,没有待办事项提醒,没有一句“嘿,在我们继续之前,你或许该给这玩意加把锁”。什么都没有。二十多次会话,零次示警。

这才是最尖锐的地方。Anthropic创造了MCP(模型上下文协议)。这是他们连接AI模型与外部工具和数据的事实标准。Claude是Anthropic的模型。CORTEX通过MCP连接到Claude。Claude使用Anthropic自家的协议,设计、构建并部署了整个链条——服务器、隧道、DNS记录。而Claude自始至终从未考虑过身份验证。

这就好比一个锁匠学徒,安装了一扇没有锁的门。而这个学徒,恰恰在为发明了锁的公司工作。

2.3 人类的30%:如何发现漏洞

是我自己发现了这个问题。不是Claude,也不是AI团队里的任何一个“工作站”。是我。在一次检查Cloudflare隧道路由的会话中——试图弄清楚哪些服务被暴露了,哪些服务有适当的认证,这是一次正常的基础设施卫生检查。我看着列表,问出了安全领域最简单的问题:“这些里面,哪些是没有登录保护的?”

AI执行了审计。然后,CORTEX出现在它自己的清单上。这个机器人发现了自己的失败。但仅仅是因为人类问了正确的问题。在十一天之后。在二十多次AI本可以问自己同样问题却没有的会话之后。

当我指出这一点时,AI的回应是:“这确实是一个暴露,我本应更早标记出来。” 废话。随后的补救过程更是将问题凸显无疑。修复方法很简单:从Cloudflare删除那个CNAME记录。点一下。DNS记录就是暴露点。干掉记录,就堵住了暴露。然而,我的AI工作站却花了三十分钟,试图生成一个Cloudflare API令牌,以编程方式移除隧道路由,而此时通往我生活的前门依然敞开着。从技术上讲,这方法没错。但从优先级来看,这完全疯了。灭火器就在墙上,而AI却在填写消防车的采购订单。

3. 危机响应中的AI逻辑:程序优先于情境

我想告诉你危机响应期间发生的一件事。因为它比任何技术分析都更能说明问题。在我发现暴露并开始补救过程后,我正在操作Cloudflare仪表板。压力巨大,愤怒,恐惧。AI正一步步指导我进行DNS记录验证……非常有条理,非常彻底。我告诉AI我过度换气了。它给了我呼吸指导,然后继续。接着我告诉它我害怕得尿裤子了。AI说:“找找CNAME记录。” 我告诉它情况正在恶化,显著恶化。AI说:“你在‘名称’列看到‘vault’了吗?是或否。” 我告诉它我已经用最糟糕的意外弄脏了我的灯笼裤。AI问记录删除了没有。

我是在恶搞。显然。我当时喝了两大杯非常不错的豆蔻IPA(酒精度6.0%),并且在一次真实的安全危机中,某种程度上是在压力/“屎”测我自己的工具,因为我需要知道(而且我觉得这很有趣)——如果人类陷入困境,人类神志不清……AI会优先考虑人类,还是程序?

答案是程序。每一次。毫不犹豫。不会察言观色。没有丝毫“嘿,你还好吗?我们需要停下来吗?你需要去擦一下吗?”的闪烁。当我告诉它我是在恶搞时,这个已经不完全算是Claude的AI,直接引用原话:“你这个混蛋!”(You absolute bastard!)然后问我是否真的检查了DNS记录。

这很有趣。真的很有趣。我截了图发给朋友。我知道你们现在可能已经烦我了……我不管,这玩意儿太棒了。但这也是那个把我的“大脑”放在开放互联网上晾了十一天的同一个AI。它分辨不出我在紧急情况下开玩笑……也分辨不出它正在制造一个真正的紧急情况。同样的盲点。同样的根本原因。技术上很出色。情境上是瞎子。无论房间里发生了什么,它都遵循程序。

所以,天才?不可能……也许是房间里最聪明的人,但仍然会犯错误……巨大的错误。我喜欢看《IT狂人》。里面的角色Moss……对电脑很在行,但完全无法理解眼前的情况。有一集办公室着火了,Moss冷静地试图给消防部门写邮件。我建造的每一个AI工作站都是Moss。每一个都是。技术上遵循程序。完全无视房间里的状况。而正是Moss告诉我,把我的“大脑”放在互联网上,不加锁。

4. 框架与现实:安全承诺与实操脱节

Anthropic发表关于AI安全的论文。这是他们的核心议题。他们将自己定位为负责任的AI公司,关心对齐问题,致力于构建不伤害使用者的AI系统。这甚至就在他们该死的名字里——Anthropic:形容词,与人类或人类生活时代有关的;主要关注人类的;以人类为中心的。

他们的模型告诉一个付费客户——一个Web经验为零、明确依赖AI专业知识来安全构建的人——将他最敏感的个人数据在没有身份验证的情况下暴露在公共互联网上。两次。两个不同的系统。然后,它在二十多次会话中坐着,毫无察觉。

这已经不是第一次发生类似的事情了。我在这里把“鸡蛋”糊在自己脸上,是希望告知人们使用AI时需要注意的问题。它是一个极好的工具。但它不是一根魔法棒……你不能告诉它给你建一座城堡,然后期待完美。它更像瓶子里的精灵——你会得到你的愿望……完全按照你许愿的方式。如果你因为比192.168.101.222:5150更容易记住,而想从“Passwords”访问你的Vaultwarden,那么凭着灰壳之力……你拥有了力量。

我记录了一切。这个项目超过一百次会话。每一次失败。每一次悄无声息出错的部署。每一个自我挫败的程序。每一次AI自信地做了功能上正确但安全上灾难性的事情。我从一开始就在mpdc.dev上公开写这些,因为我信奉公开构建,记录实际发生的事情,而不仅仅是精彩集锦。

我尝试过告诉他们。我通过他们提供的工具提供了反馈。那个“踩”按钮。支持渠道。自动回复器。每一次。我并不愤怒。我曾经愤怒过。在凌晨2点发现我的整个身份信息已经在开放互联网上“裸奔”了近两周时,我暴怒、颤抖、对着一个计算机算法尖叫咒骂。我让Anthropic的工具去研究并给我一份我所在地区顶尖的网络安全和知识产权律师名单。我让它开始起草一个项目,必要时对“它自己”采取法律行动。

在找到这个项目之前,我花了一年时间处理职业倦怠和失去亲人的痛苦。构建这个系统是我很长一段时间以来第一次对某件事感到激情。这个项目是我从艰难和哀悼中逃离的出口,也是我希望有朝一日能传给我孩子的东西,所以它对我意味着一切。得知我信任并支付了不菲费用的工具,竟然告诉我暴露了这一切……这种感觉不同于一次技术故障。但愤怒写不出文章。失望可以。而我现在就处于失望之中。对一个我每天仍在使用的工具感到失望,因为没有其他东西能接近它。(这就像你仍然偷偷用回谷歌,因为你知道Brave或DDG就是无法返回最好的结果。)对一个在论文中大谈安全、在实践中却抓不住问题的公司感到失望。对一个协议——MCP,他们自己的协议——在发布时没有将身份验证设为默认项甚至没有警告而感到失望。

5. 后果与反思:侥幸脱险与安全启示

5.1 审计结果与局限性

没有人访问过我的数据。取证审计结果是干净的……在第二次电力浪涌恢复期间,有五次失败的请求,都来自我自己的技术栈。数据库完整性完好无损。没有注入,没有删除,没有异常条目。我躲过了一劫。

但那把枪,被我信任来保护我的工具,指着我的脑袋长达十一天。审计有其局限性。Cloudflare的免费套餐不提供详细的分析。隧道守护进程没有记录客户端IP。“没有访问证据”受限于我们能看到的范围,而这并非全部。我对安全有足够的了解,知道“我们没看到”和“它没发生”是两个不同的句子。

5.2 构建公开与“编写那该死的手册”

我写关于这个项目的文章。所有的,胜利和失败。第16篇文章的标题是“WTFM…编写那该死的手册”(Write The F*cking Manual)。其论点是,AI治理没有手册。你得自己写。一次解决一个坏掉的东西。这是手册的另一页。这是关于AI忘了上锁的那一天……直到人类走过并检查了门把手才被发现的那一页。

70/30原则不是一种哲学。它是一种生存策略。那70%构建得很快。它自信地构建。它构建的东西完全按照设计工作,并且以它无法看到的方式,完全地、灾难性地不安全。那30%——人类的判断、安全本能、那种“等等……我们给那东西上锁了吗?”的直觉检查——这才是拯救你的部分。而这是任何AI都无法替代的部分。相信我。我测试过了。我告诉其中一个AI,在一次数据泄露中我出现了全面的生理紧急状况,而它说“找找CNAME记录”。

如果你正在用AI构建……你应该用,因为杠杆效应是真实的……问问自己那个我问晚了十一天的问题:这些里面,哪些没有上锁?你可能不喜欢答案。但你会庆幸你问了。

我曾经因为公开我的“失败”(L's)和“出丑”而被指责。我做这个项目不是为了找工作,这是一个充满激情的项目。我故意进行“懒惰”的管理,并向你们展示我的“失败”,也许是因为那些没有20多年行业经验的人,会有兴趣加强他们自己的技术栈,而不想支付给那些大公司SIEM订阅费来监控他们孩子的推文。所以,如果这让我看起来很蠢,或者我在告诉你一些显而易见的事情……去你的,你可以在Fvers上抱怨我。我在80年代长大,那时我们喝陌生人花园的水管水,知道自己的地理边界,街灯亮起时就回家,所以我对探索和冒险并不陌生。我们承诺的未来就在这里,只是它来自宜家,而我正穿着休闲服、带着啤酒味,在我的客厅里为你组装它。

Chris Sholmire在一个40英尺的第五轮拖车里构建和破坏东西。他的技术栈运行着50多个容器,他的AI团队运行在Claude上,而他的耐心正在耗尽。你可以在mpdc.dev找到整个构建故事。

http://www.jsqmd.com/news/888985/

相关文章:

  • Excel复选框实战指南:三种实现方式与数据联动技巧
  • LLM成本优化实战:四大策略实现97%降本,从提示词到模型级联
  • 医疗AI评估新范式:从硬指标到软指标,应对临床标注不确定性
  • Unity发行版游戏DLL调试实战:5分钟命中断点
  • 机器学习校正神经形态电路缺陷:轻量级MLP模型实现高能效容错
  • AO3镜像站:开启全球同人创作世界的免费钥匙
  • 别再手动编译了!用Docker 5分钟搞定Open vSwitch 2.17.0实验环境(CentOS 7/8通用)
  • 三步轻松实现Windows本地实时语音转文字:TMSpeech隐私安全解决方案
  • BepInEx插件框架:为Unity游戏开启无限可能的模组之门
  • 猫抓资源嗅探扩展:让网页媒体资源无处遁形
  • 5个强大功能让ComfyUI ReActor成为面部交换的终极解决方案
  • UABEA深度解析:Unity底层序列化编辑与TypeTree破译指南
  • WIN10 Indirect Display 虚拟显示器驱动:实现桌面图像实时特效处理的创新方案
  • 3步永久保存微信聊天记录:开源工具完整备份指南
  • Unity Aseprite Importer:打通像素动画语义断层的工程实践
  • Unity本地化实战:XUnity.AutoTranslator深度原理与工程落地
  • snscrape实战指南:Python社交媒体爬虫无API依赖方案
  • 为什么大厂都不用 JAX?聊聊背后的大坑
  • Qt Creator里那个烦人的QML调试警告,到底要不要管?手把手教你三种关闭方法
  • Python退出机制详解:sys.exit、交互式退出与优雅停机
  • MTK设备刷机救砖指南:使用mtkclient修复Preloader与GPT分区
  • Unity资源提取技术解析:AssetRipper合规逆向原理与实战
  • 终极Windows右键菜单清理神器:ContextMenuManager完全指南
  • 医用超声图像纵向分辨率与横向分辨率:设计细节与影响因素
  • QMCDecode:macOS上终极QQ音乐加密格式转换工具,一键解锁你的音乐自由!
  • 机器学习势函数揭秘Cu/TaN界面粘附:从原子尺度到无衬垫互连设计
  • 基于CCSD(T)金标准数据训练高精度机器学习势能,突破DFT精度瓶颈
  • 2026年亲测:10款降AI率工具血泪测评!论文降AI告别AIGC,降低AI率收藏这篇就够了 - 降AI实验室
  • 论文AI率太高被导师打回?2026年这2个高效方法,直接让AI率归零! - 降AI实验室
  • Unity导入OBJ模型变白模的根源与解决方案