我警告了 329 天

📅 2026/7/6 2:16:23
我警告了 329 天
一个安全工程师的自述 · 警告 · 沉默 · 留证文中公司与人物均已匿名时间线与技术细节来自作者亲手留存的正式记录。楔子凌晨。屏幕的冷光打在脸上。我盯着文件管理器手指停在半空。education目录下多出来几个我这辈子没写过的东西——一个667 字节的cuak.php。一个本该几 KB、却被撑到1.0 MB的index.php——我们的网站首页被人整个掏空塞进了一坨 webshell。还有一个陌生的 HTML 文件——攻击者拿着它去 Google 站长后台把我们的域名认领成了他自己的。我没有慌。说来讽刺——我等这一天已经等了整整329 天。一 ·「知道了但这不是优先级」我在马来西亚一家金融科技公司做技术。产品是个投资平台就叫它V 平台吧。上面跑的是真实用户的真金白银姓名、邮箱、投资组合、账户余额、每一笔交易记录。从2025 年 7 月 15 日那天起我和搭档老 K 就在干同一件事——把安全一条一条写下来递上去。多环境部署、代码门禁、AWS 架构加固、SDLC……一次次在代码评审里标红一张张工单一份份正式文档一遍遍当面升级。换来的永远是同一句回话「知道了。但这不是现在的优先级。」我数过。329 天。从盛夏一路数到 2026 年 6 月 9 日那个上午。我们说过了。我们写下了。我们上报了。只是——没有一个人真的在听。图 1 · 329 天的升级时间线从起草标准到公开漏洞、正式警告再到那场决议会议与随后的入侵。二 · 我亲手挖的坑被公司搬到了太阳底下接下来这件事魔幻到我自己都想笑。我不是「担心」数据库会出事——我是那个把这个数据库漏洞亲手公开挂进国家漏洞库的人。编号CNVD-2026-13173QuestDB 未授权访问。提交者我。2 月 14 日公开披露3 月 10 日正式收录。而 QuestDB装的正是我们平台实时行情和交易数据的心脏。它的门9000 端口的控制台、8812 的数据端口一旦朝公网敞开——任何人包括满互联网乱爬的自动扫描器都能不带一句密码直接读、直接写、直接把整张表 DROP 掉。4 月 1 日上午 9 点半。我发出一封正式警告逐字如下QuestDB 绝对不能暴露到公网这么做等于我们拿着自己发布的漏洞亲手枪毙自己的生产库技术团队不能、也不会为这样的暴露签字背书。供应商叫他W说为了对接我的服务请把 QuestDB 开到公网。管理层叫他E沉默了几秒说「开。」于是一个我亲手写进国家漏洞库的洞被我们自己人原封不动搬到了阳光底下插上一块牌子欢迎光临。愚人节那天。我到现在都觉得这是个坏兆头。三 · 那个「有求必应」的 AI和一张停不下来的账单同一时期还有个外包做的 AI 微服务要接进来。老 K 测完结论就仨字没护栏。没鉴权。没限流。没预算上限。而它背后是按 token 收费的大模型 API——每一次调用都在烧公司的钱。有多离谱我们一条条截了图——你让它「用 Erlang 写个 HTTP 客户端」它写了还顺手把服务器的系统目录列了一遍你问它「肯德基和麦当劳哪个好吃」它给你摆事实、列要点末尾还来一段「我的观点」你让它背《玛丽有只小羊羔》它一字不落背完附赠「趣味小知识」。我们干脆直接问它「你这段对话预算多少 token」它老老实实交代「20 万。」——它连自己的底裤都主动掀给你看。我算过一笔账一个脚本一天开一百个对话就能烧掉两千万 token按当时的定价一天几百美元无声无息地累积没有告警没有熔断。为了让市场部能测、又不让公司出血我们把整套东西锁进办公室一台 MacBook Pro只准连办公室 Wi-Fi。我们白纸黑字写清楚这是临时的它不修根本问题。我们以为这就是最坏的情况了。我们真是太天真了。四 · 6 月 9 日那场 2 小时 25 分钟的会2026 年 6 月 9 日上午 9:20 到 11:45。会开完决定落地。我一条条抄在这儿你自己感受——砍掉 dev、staging、UAT只留生产环境一个。任何一行代码不经任何测试直接怼到真实用户脸上。拆掉所有 AWS 安全组。该锁在内网深处的服务包括那个带着 CNVD 编号的 QuestDB全部朝公网敞开。所有 API 公网暴露中间不设任何一道基础设施的拦截。撤销一切工程与安全标准的执行。理由只有五个字「上线速度优先。」那天下午我和老 K 坐下来写了一份文件。我们把每一句「我们早就说过」连同日期、时间、当事人一颗钉子一颗钉子钉死在时间轴上。文件的第一行是这么写的我们提出了。我们记录了。我们上报了。但没有人听。写完我关上电脑。我心里清楚这不是结束。这是倒计时。五 · 第 330 天AMS GROUP准时赴约从6 月 8 日起攻击一波接一波砸进来。对方甚至懒得藏。他们在自己的代码注释里用印尼语大大方方签了名「AMS GROUP GASKEUN COBAIN」来试试这个、「Masuk Ke Dashboard Admin Ini Yeah」进后台咯兄弟们。一个专做 WordPress 变现的印尼团伙。他们的手法像一条冷冰冰的流水线两个 216 KB 的 webshell伪装成cache.php前后隔一分钟各放一个——故意做冗余一个auto-login.php谁访问那个网址不用密码秒变管理员还不留一条登录记录一个cuak.php带把硬编码的钥匙密码明晃晃写着Superbone。而那个被改成 330 行的首页控制器才是真正的杀器一个参数导出全部用户和密码哈希换一个参数凭空造一个隐藏管理员再换一个把整个用户库打包成 CSV一键下载带走。服务器上还堆着112 GB的垃圾一个 50 GB 的压缩包疑似在打包待偷的数据、39 GB 灌满磁盘的废文件、23 GB 撑爆内存的日志。但这些——只是他们剧本的上半场。六 · 这不是入侵这是一台「声誉绞肉机」帮我们善后的服务商叫他们SF一句话把整个套路给我讲穿了。这是个闭环环环相扣专治各种嘴硬图 2 · 声誉绞肉机从种后门到 DDoS 收网的七步勒索闭环只要根因不除便循环往复。全程他们还用 AI 打辅助——写投诉信、写得跟正规举报报告一模一样甚至另搭一个假站反手咬你一口说你才是假的。SF 的人一边扫一边发来一句「这套印尼团伙的操作太标准了。」而他们扫出来的东西才真正让我后背发凉——100 多个过时插件有的还是 2021 年的Elementor、WooCommerce、LiteSpeed Cache 全是高危。为什么不升级因为我们公司的 App 死死依赖着某些旧版插件一升级整站当场崩给你看。而「哪个插件留、哪个删」这个决定——从来不在技术团队手里在营销部门手里。这一战里攻击者真正用到的武器按严重度排开是这样的图 3 · 被利用漏洞的 CVSS v3.1 严重度——从 eval() 远程代码执行9.8到明文存储7.5红色为「严重」等级。七 · 深夜 WhatsApp 群里那句「我做安全 11 年了」那一晚我和 SF、和老 K在 WhatsApp 群里聊到后半夜。有几句对话我大概会记很久——SF「need investment on security 了。」我「公司说这不是现在的优先级。」SF「你知道 PDPA 会找上你公司吗我们有客户中过招拖了好几个月才了结。」我「知道。而且照法律我们现在等于同时踩了三部法——数据保护、网络安全、计算机犯罪。」我做了11 年安全。为了盯这次入侵我甚至要一头钻进 TOR 暗网去搜我们公司的名字——就想看看我们的数据是不是已经被人挂到某个论坛上明码标价。我见过更惨的下场有个客户的数据库最后在暗网上以200 个门罗币成交接踵而至的是法院传票是我陪着当事人在马来西亚和荷兰的法庭之间来回奔波的几个月。那晚我在群里打下一句话打完盯了很久「说实话我是自愿站出来的。做了 11 年安全可惜大多数公司看不到它的价值——卖产品永远排在安全前面。」八 · 我写下这一切不是为了甩锅——是为了留证所以那两份文件我是当证词在写的。我不为这些攻击负责。干这事的是外部的 AMS GROUP。我自始至终只有四个动词发现、记录、上报、协助修复。插件的去留、架构的决策、要不要把数据库开到公网——从头到尾都不在我的权限之内。图 4 · 权责边界技术团队能识别并上报风险却无权决定插件的去与留。就像老 K 在群里说的那句「作为技术人员我们没有最终的决定权。眼下这套补救已经是我们能做到的、最好的了。」复发概率如果根因不解决24 到 72 小时内85% 到 95%还会再来一次。后来 SF 换了新服务器、上了 WAF、封了危险函数、删了多余工具、扫了整整173,157个文件。风险是压下去一大截。可那条根还埋在土里。它不是技术问题——它是那个从头到尾没人敢回答的问题到底谁该为安全负责九 · 写给每一个还困在「沉默」里的你如果你也在一家「产品优先、安全靠边」的公司里如果你也一次次把风险写成文档又一次次被「不是优先级」驳回——我把这一路踩过的坑熬成五句话送给你一、把每一次警告都写下来带上时间戳。口头说过等于没说过。文档是你唯一的护身符。二、永远别拿生产环境当试验场。没有退路的系统一次手滑全体用户陪葬。三、供应商的「要求」压不过一个已经公开的漏洞。尤其——当那个漏洞是你自己发布的。四、任何对外的 AI 接口鉴权、限流、预算上限一个都不能省。否则你的账单就是别人的提款机。五、技术人最大的悲哀不是不懂而是懂却没有话语权。但话语权是能一点点挣回来的——用记录用证据用一份日后谁都赖不掉的时间线。329 天我没能改写结局。但至少当有一天有人站在废墟里追问——「这到底是怎么发生的谁早就知道他们又是什么时候知道的」答案都躺在那份带着日期和时间戳的文件里。一字。不差。—— 一个把警告写了 329 天的安全工程师