第10章 暗藏危机,软件有后门
门把手转动的声音响起。
陈默抬头,看见许文远探进半个身子,手里拎着两杯咖啡,眉头拧成一个“川”字。
“你慢点。”他下意识看了眼桌上的U盘,确认还在内袋里才松了口气,“出事了?”
“不是我出事,是代码。”许文远把咖啡放下,一屁股坐在椅子上,手指敲了三下桌面——这是他们内部约定的“紧急信号”,代表系统有异常。
“哪个模块?”
“不是模块。”许文远调出后台日志,屏幕一闪,跳出一串加密请求记录,“是已经发给客户的安装包里,藏着一段不该存在的远程调用指令。”
陈默站起身,绕到他身后盯着屏幕。那串请求伪装得极好,路径指向一个第三方CDN,看起来像是资源加载,但触发频率和参数结构完全不对劲。
“这玩意儿什么时候埋进去的?”
“初步排查,应该是测试阶段。”许文远声音压低,“我们当时为了方便调试,开了个临时端口,没设白名单。现在看,有人顺着那个口子进了开发环境,塞了后门。”
陈默眯起眼:“你是说,在‘老张记’签约前,软件就已经被污染了?”
“对。”许文远点头,“而且它不常驻内存,只在特定条件下激活——比如用户登录财务账号、或者导出报表的时候,就会悄悄上传本地数据快照。”
空气一下子沉了下来。
这意味着什么,两人都清楚:客户以为买的是记账工具,实际上却成了别人的数据探针。一旦被曝光,别说刚签下的五万合同,整个团队的信誉都会当场炸裂。
“有多少客户中招?”陈默问。
“目前能确认的,三家。”许文远打开客户列表,“都是昨天刚完成部署的门店,包括‘老张记’总部。”
“立刻停服。”陈默语气干脆,“所有在线客户端强制下线,推送维护公告。”
“可咱们还没准备好补丁……”
“那就先断网。”陈默走到白板前,抓起笔刷刷写下几个动作项:
1.回滚到无漏洞版本
2.封闭开发环境,启用物理隔离机房
3.所有对外接口重新鉴权
4.向已交付客户发送紧急通知
写完,他回头:“你现在最担心的是什么?”
许文远苦笑:“是不是陆子鸣干的。”
“不是他,还能是谁?”陈默冷笑,“上次他派人来套话,被我们晾在会议室喝了一小时白开水。现在反手就给我们下套,典型的报复性渗透。”
“但他怎么知道我们的测试地址?”
“问题就在这。”陈默缓缓摘下眼镜,用衣角擦了擦镜片,“开发环境的访问链接,只出现在内部文档里,连GitHub都没提交过。除非……有人从我们电脑上直接扒走了日志。”
许文远脸色变了:“你是说,早期开发时,有人远程控过我们的机器?”
“不一定非得控。”陈默重新戴上眼镜,“只要装个轻量级监听程序,就能捕获剪贴板、记录浏览器历史。比如某个伪装成插件的小工具。”
两人同时想起两周前,有个“技术交流群”里推荐过一款“自动代码格式化助手”,界面简洁,功能强大。许文远当时差点就要下载,还是陈默拦住了他。
“还好没装。”许文远喃喃道。
“但现在的问题是——”陈默盯着屏幕上的请求链路,“这个后门不只是偷数据那么简单。”
他放大流量分析图,指着一处隐藏字段:“你看这里,每次上传都会附带设备指纹和网络拓扑信息。这不是普通爬虫,这是在为下一步攻击做测绘。”
“测绘?”
“收集目标系统的软硬件配置、权限层级、甚至管理员操作习惯。”陈默声音冷下来,“等摸清了底细,下一波就是精准爆破。”
办公室安静了几秒。
许文远忽然抬头:“所以他们真正想搞的,不是我们现在这点客户,而是……将来接入的更多商户?”
“聪明。”陈默点头,“我们现在像个小池塘,但他们盯的是整条供应链。只要拿下我们的平台,就能顺藤摸瓜,掌握全城中小餐饮的财务命脉。”
这已经不是商业竞争了,这是赤裸裸的生态劫持。
“那怎么办?”许文远问,“报警?”
“没证据。”陈默摇头,“这种级别的操作,肯定经过多层跳板,IP地址早洗干净了。我们现在唯一能做的,就是抢时间。”
“抢什么时间?”
“修复漏洞,重建信任。”陈默拉开抽屉,取出另一枚U盘,“我昨晚备份了纯净版核心库,可以用来做可信源。你现在立刻开始重打包,我去联系客户。”
“你现在就去?”
“越快越好。”陈默拿起外套,“第一印象毁了还能救,要是让客户觉得我们遮掩问题,那就真完了。”
许文远看着他穿上衣服,忽然喊住他:“等等。”
“怎么?”
“如果我们这次处理得好,会不会……反过来变成一次机会?”
陈默脚步一顿。
“你想啊,”许文远眼睛亮起来,“别人都在吹功能多强、界面多好看,结果一出事就甩锅给‘技术风险’。但我们不一样,我们敢主动承认问题,还第一时间上门解决——这不就是你说的‘反卷思维’吗?别人藏雷,我们排雷。”
陈默沉默两秒,嘴角微扬:“行啊,你这觉悟赶上产品经理了。”
“那当然。”许文远咧嘴一笑,“我可是天天看裴姐直播学运营。”
陈默没再说话,转身推门出去。
走廊灯光打在他背上,影子拉得很长。
许文远坐回工位,深吸一口气,打开虚拟机,开始搭建隔离编译环境。他知道接下来的十二小时会很熬人,但这一次,不是为了赶工期,而是为了守住底线。
他一边敲命令行,一边自言自语:“老子写的代码,绝不当别人的后门砖。”
就在他准备签名打包新版本时,屏幕右下角弹出一条系统提醒:
>【检测到异常进程调用】
>来源文件:config_loader.dll
>行为模式:尝试读取注册表HKEY_CURRENT_USER\Software\CredStore
许文远瞳孔一缩。
这个路径,正是存储用户登录凭证的地方。
“还没完?”他猛地按住键盘,“这玩意儿居然还有二级触发机制?”
他迅速截取内存快照,反向追踪调用栈,发现那段代码竟然嵌套在资源加载器里,伪装成字体渲染模块的一部分。
更可怕的是,它的唤醒条件不是固定时间,而是依赖外部信号——只要某个特定域名返回HTTP 200状态码,就会立即激活。
“这是个定时炸弹……”许文远额头渗出汗珠,“而且钥匙不在我们手里。”
他抓起手机就要拨陈默电话,手指刚碰到屏幕,又停住了。
如果现在打过去,陈默一定会回来。
可他已经出门了,正赶往第一家客户那里。
这个时候让他分心,只会让两边都陷入被动。
许文远咬了咬牙,关掉手机通知,重新戴上耳机。
他调出反编译工具,一行行逆向解析恶意代码,嘴里低声念叨:“想靠这种阴招赢我们?你也太小看程序员的脾气了。”
时间一分一秒过去。
窗外天色渐暗,城市灯火次第亮起。
办公室只剩下键盘敲击声,密集如雨。
突然,许文远在一段混淆过的脚本里,发现了一个未加密的字符串:
`v5.update.mingcloud[.]net`
他心头一震。
明云科技——陆子鸣控股的一家“技术服务商”,名义上做云存储,实际干的全是数据清洗和舆情操控的活儿。
“果然是你。”他冷笑一声,截图保存证据链,然后打开防火墙策略编辑器。
既然对方喜欢玩远程控制,那他就干脆把这条路彻底封死。
他新建一条出站规则,屏蔽所有指向该域名的流量,并设置告警机制,一旦检测到同类特征立即锁定进程。
做完这些,他又检查了一遍新版本安装包的哈希值,确保每一个字节都干净。
最后,他在发布说明里加了一句:
>本次更新修复了一项高危安全漏洞(CVE-2024-XXXXX),建议所有用户立即升级。
>我们始终相信:真正的效率,建立在安全之上。
点击“生成安装介质”按钮后,他靠在椅背上,长长吐出一口气。
就在这时,电脑突然弹出一条即时通讯提示:
【客户“老张记锅贴”发起远程协助请求】
许文远立刻坐直身体,接通连接。
屏幕上出现财务主管的脸,神情严肃。
“你们那个软件……是不是有问题?”
许文远心跳漏了一拍。
“您说。”
“刚才系统自己退出了,还跳出一个红色警告框,说什么‘证书无效’。”
“那是我们在强制更新。”许文远迅速切换屏幕共享,“您现在看到的是安全机制在起作用,说明我们的防护生效了。”
对方皱眉:“听着挺玄乎。我就问一句——我的账本数据,还在吗?”
许文远顿了顿,认真回答:
“在。而且比以前更安全。”

