当前位置: 首页 > 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.gsyq.cn/news/1643913.html

相关文章:

  • 反向传播 3 大常见问题:梯度消失、爆炸与 ReLU 死区排查
  • 所谓异常机制也就是指的语言平台支持异常这种错误处理模式的机制,比如c#里的Exception对象,try{}catch{}finally{}结构,throw抛出异常的语句,等等,均为c#语言里对异常机
  • UGUI Mask 与 RectMask2D 性能对比:基于 2021.2.3f1 源码的 2 种裁剪方案实测
  • Spark Shell 与 PySpark 性能对比:5种常见算子在不同数据量下的执行耗时分析
  • TC78H660FTG与MK60DN512VLQ10的电机驱动系统设计
  • LSTM 与 GRU 门控机制对比:3 种变体参数量与梯度传播效率分析
  • 数据库物理设计实战:MySQL 8.0 索引与存储引擎选择的 3 个性能基准
  • 【硬核脑洞】16位实模式最后的疯狂:我们能否在 640KB 常规内存里手搓一个 MD 模拟器?
  • Linux 进程通信 6 大机制对比:管道、消息队列、共享内存、信号量、信号、Socket
  • 个人系统的RULE和SOP是否有意义?
  • Python如何使用OpenAI调用Llama模型(Llama2/Llama3/Llama3.1通用教程)
  • InnoDB vs MyISAM 存储引擎深度对比:3大场景下的性能与特性抉择
  • Linux 内核日志 ring buffer 大小调整:从 128KB 到 2MB 的 3 种配置方法
  • PyTorch DDP多进程训练:OMP_NUM_THREADS=1 配置详解与4节点性能对比
  • 如何用d3d8to9让老游戏在Windows 10/11上焕发新生:终极兼容性解决方案
  • RL-frenet-trajectory-planning-in-CARLA
  • AI 入局技术圈,所有工程师的工作效率都被改写了
  • apt-get update 与 upgrade:解析Ubuntu 20.04/22.04软件包管理的2个核心命令
  • SEIR 传染病模型 Python 实战:基于 2020 新冠数据拟合与参数灵敏度分析
  • /proc/kmsg 与 /dev/kmsg 深度对比:实时内核日志捕获的 2 种方案与 3 个陷阱
  • 3种人体关键点算法对比:OpenPose vs AlphaPose vs MobilePose 在行为识别中的精度与速度权衡
  • VFX Graph vs. Shuriken 粒子系统:10万火花特效性能与工作流深度对比
  • CH348 Linux驱动 v1.0 在树莓派5上部署:Ubuntu 24.04 内核头文件缺失的3步修复
  • 2026最新5款AI编程工具权威实测合集|Cursor中文氛围开发低成本平替决策指南
  • 3款古汉语BERT模型对比:bert-ancient-chinese vs SikuBERT vs GuwenBERT,38K词表与6倍语料实测
  • Cangaroo:开源CAN总线分析利器,让汽车电子调试变得简单高效
  • MariaDB 10.5.4 二进制包安装:CentOS 7 逻辑卷(LVM)配置与多实例脚本实战
  • UE4/5 资产重定向器(Redirector)创建逻辑解析:4个条件与1个核心函数
  • 2026国内企业级智能体推荐:6款主流产品功能、适用场景全对比
  • 小产和流产有什么区别?