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

我警告了 329 天

一个安全工程师的自述 · 警告 · 沉默 · 留证

(文中公司与人物均已匿名;时间线与技术细节来自作者亲手留存的正式记录。)

楔子

凌晨。屏幕的冷光打在脸上。

我盯着文件管理器,手指停在半空。education目录下,多出来几个我这辈子没写过的东西——

一个667 字节cuak.php。一个本该几 KB、却被撑到1.0 MBindex.php——我们的网站首页,被人整个掏空,塞进了一坨 webshell。还有一个陌生的 HTML 文件——攻击者拿着它,去 Google 站长后台,把我们的域名,认领成了他自己的

我没有慌。说来讽刺——我等这一天,已经等了整整329 天

一 ·「知道了,但这不是优先级」

我在马来西亚一家金融科技公司做技术。产品是个投资平台,就叫它V 平台吧。上面跑的,是真实用户的真金白银:姓名、邮箱、投资组合、账户余额、每一笔交易记录。

2025 年 7 月 15 日那天起,我和搭档老 K 就在干同一件事——把安全,一条一条,写下来,递上去。多环境部署、代码门禁、AWS 架构加固、SDLC……一次次在代码评审里标红,一张张工单,一份份正式文档,一遍遍当面升级。

换来的,永远是同一句回话:

「知道了。但这不是现在的优先级。」

我数过。329 天。从盛夏,一路数到 2026 年 6 月 9 日那个上午。我们说过了。我们写下了。我们上报了。只是——没有一个人,真的在听


图 1 · 329 天的升级时间线:从起草标准,到公开漏洞、正式警告,再到那场决议会议与随后的入侵。

二 · 我亲手挖的坑,被公司搬到了太阳底下

接下来这件事,魔幻到我自己都想笑。我不是「担心」数据库会出事——我是那个把这个数据库漏洞,亲手公开挂进国家漏洞库的人

编号CNVD-2026-13173,QuestDB 未授权访问。提交者,我。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 天的安全工程师

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

相关文章:

  • Windows 10 21H2+ 系统 HP 打印机驱动 1603 报错:注册表 DisableUserInstalls 值修复指南
  • 反向传播 3 大常见问题:梯度消失、爆炸与 ReLU 死区排查
  • UGUI Mask 与 RectMask2D 性能对比:基于 2021.2.3f1 源码的 2 种裁剪方案实测
  • Unity Timeline 2022.3 精准暂停控制:3种代码方案对比与 Cinemachine 兼容性实测
  • 联想拯救者 2024 款散热实测:双烤 45 分钟 CPU 温度对比 3 款竞品
  • Linux /etc/fstab 配置详解:5个关键参数避免重启后文件系统只读
  • APT 包管理深度解析:从E: Unable to locate package看4种软件源失效场景
  • Linux Anaconda 环境迁移排错:解决3类路径错误与权限问题
  • TC78H660FTG与MK60DN512VLQ10的电机驱动系统设计
  • LSTM 与 GRU 门控机制对比:3 种变体参数量与梯度传播效率分析
  • E-R 模型向关系模式转换:8种场景实战与 MySQL 8.0 建表示例
  • Windows CMD 与 PowerShell 7 网络命令对比:5个场景性能与功能实测
  • HP 1005 打印机驱动 2 种安装方案对比:HPLIP 官方包 vs 发行版仓库
  • 呼和浩特定制网站还是模板建站?适配 GEO 优化的官网选型攻略
  • Spark Shell 与 PySpark 性能对比:5种常见算子在不同数据量下的执行耗时分析
  • 数据分析中的决策树算法是如何工作的?有哪些优缺点?
  • 数据库物理设计实战:MySQL 8.0 索引与存储引擎选择的 3 个性能基准
  • 蒙特卡洛强化学习 3 大核心实现:首次访问 vs 每次访问 vs 增量更新
  • Ubuntu 22.04 apt 源配置:3步诊断与修复 E: Unable to locate package
  • Linux LVM 根分区 (/dev/mapper) 100% 排查:3步定位MySQL日志等大文件
  • 【硬核脑洞】16位实模式最后的疯狂:我们能否在 640KB 常规内存里手搓一个 MD 模拟器?
  • QAM调制原理与Python仿真:从16-QAM到4096-QAM的误码率曲线绘制
  • Ubuntu 22.04/24.04 软件源配置:3大国内镜像站(阿里/清华/中科大)实测速度对比
  • 武汉昆仑星为企业AI可见度提升的四个变量:信源、内容矩阵、平台覆盖与复盘优化
  • YOLO26 改进 - 注意力机制 ACmix自注意力与卷积混合模型:轻量级设计融合双机制优势,实现高效特征提取与推理加速
  • Linux 进程通信 6 大机制对比:管道、消息队列、共享内存、信号量、信号、Socket
  • 个人系统的RULE和SOP是否有意义?
  • 如何用番茄小说下载器打造你的个人数字图书馆:Rust高性能工具的终极指南
  • HP LaserJet M226/M128 驱动安装 1603 错误:3 步定位与修复 HpTcpMon64.msi 故障
  • 我有的几乎全世界独一无二的东西记录