沃尔科夫网络安全公司的总部设在阿瓦隆市中心一栋翻修过的旧纺织厂里。红砖外墙保留着二十世纪初的工业痕迹,但内部被改造成了一个全玻璃隔断的现代办公空间。凯特和马库斯在前台登记后,被领进一间位于二楼的会议室,落地窗外是逐渐暗下来的城市天际线,室内唯一的照明来自墙上那面巨大的液晶屏幕。
尼古拉·沃尔科夫推门进来时比约定时间晚了四分钟。他大约五十岁,头发剪得极短,银灰色胡须修剪成整齐的短方型,穿着一件深蓝色开衫,没有系领带。他的步伐很快但很稳,握手时掌心干燥有力,眼神在镜片后面保持着一种不热情的礼貌。他不是那种会浪费时间寒暄的人。
“你们的邮件说涉及到恶意代码,”沃尔科夫在会议桌对面坐下,打开了自己的笔记本电脑,“具体是哪个仓库?”
马库斯把平板推到他面前。屏幕上显示着林奇在第十二段视频中提到的私有Git服务器地址,以及那个隐藏了恶意模块的代码库索引。沃尔科夫看了一眼,没有立刻说话,但他的下颌肌肉极细微地收紧了一下。凯特捕捉到了那个变化——不是惊讶,是确认。一个人在确认一件他怀疑已久的事情。
“这个仓库是我公司的内部测试库,”沃尔科夫说,语速比之前慢了半拍,“不对外开放。访问权限只授予了七个核心工程师。它被用来存储我们为阿瓦隆市政府开发的市政基础设施安全审计工具。电网、供水、天然气管道、交通信号,全部涵盖。”
“而林奇的恶意代码藏在这个仓库的底层依赖库里?”
沃尔科夫没有回答。他调出代码库的提交日志,手指在触摸板上快速滑动,眼镜片反射着屏幕上一行行滚动的代码。当他停下来时,他的表情已经从礼貌的克制变成了一种凯特很熟悉的东西——一个专家刚刚发现自己的专业领域被彻底污染时的那种压抑的愤怒。
“去年八月,有一个外部账户向这个仓库提交了一个合并请求。表面上是为工业控制系统增加一个加密通信模块,代码写得相当漂亮。我们的审核工程师批准了,因为那个模块的功能完全符合合同要求——加强SCADA协议的数据传输安全性。没有任何杀毒软件标记过它,没有任何恶意代码特征库匹配过它。它完美得像一个真正的安全更新。”
“但实际上?”
沃尔科夫将屏幕转向她们。屏幕上是一个被拆解的代码结构图,每一层都用不同颜色标注。最外层是正常的加密通信功能。第二层是一组高度复杂的网络扫描工具。第三层——被沃尔科夫用红色高亮标记——是一个专门针对物理基础设施的远程控制后门。电网断路器、供水阀门、天然气压力调节器,所有被SCADA协议控制的设备,都可以通过这个后门被接管。
“这个后门只有在被特定频率的电磁信号触发时才会激活,”马库斯戴上眼镜俯身靠近屏幕,“在它被激活之前,任何安全扫描都只会看到外层的正常功能。这就是为什么它能潜伏这么久。林奇设计的不是病毒,是定时锁。每一个被他污染的开源代码库都是一把打不开的锁。钥匙在外面。在某个电磁频率里,某个特定时间,某个特定的触发条件。而我们不知道那把钥匙长什么样,也不知道它在哪里。”
沃尔科夫摘下眼镜,用拇指和食指捏了捏鼻梁。那个动作让凯特想起马库斯在长时间敲键盘后擦拭镜片的习惯。同一种职业性的疲惫。
“我开始明白林奇想要做什么了,”沃尔科夫缓缓地说,“他不是要自己摧毁阿瓦隆的电网,他只是想要证明这一点——一个足够愤怒的人,花一年时间,可以在任何人都不知情的情况下把所有武器都就位。触发器的持有者不需要懂代码,不需要懂SCADA协议,甚至不需要知道克里斯托弗·林奇这个名字。他只需要在某个特定的时间,站在某个特定的地点,按下一个按钮。那个按钮可以是任何东西。一个手机App,一个车库门遥控器,一个儿童玩具上的开关。林奇把整个城市的命脉绑在了某个随机发出去的遥控器上。”
会议室里安静了片刻。窗外,阿瓦隆的夜景正在亮起来。街道两旁的钠灯依次亮起,写字楼的窗户里透出方方正正的白色光斑,远处的圣约瑟夫大教堂钟楼被泛光灯勾勒出细长的轮廓。城市像一台刚醒来的机器,所有电路、管道、信号都在黑暗中默默运转,大多数市民对此一无所知。凯特看着那台机器,忽然想到林奇在审讯中说的那句话——门不会因为聊天室的消亡而消失。门是一套理念,一套技术,一种把愤怒转化为代码的方法。林奇的肉体已经被锁进联邦监狱,但他的方法还散落在这些开源的沙滩上,等待任何人的脚底被割破。
“除了贵公司的内部仓库,林奇还在哪些地方散落了代码零件?”凯特问。
马库斯从公文包里取出另一份文件。“根据第十二段视频提供的线索,目前已经确认被污染的开源代码库有七个。三个是主流工业控制框架,两个是智能家居平台,一个是自动驾驶诊断工具,还有一个是供水系统压力传感器的校准软件。所有七个仓库的下载总量加起来超过六百万次。但需要强调的是——下载不等于被查看过底层代码。林奇的恶意模块隐藏得极深,普通用户即使下载了也不会发现。除非他本身是一个具备足够技术能力和足够愤怒的人,带着明确目的去翻动那些代码。”
“这就和林奇在审讯中说的一致。目标用户不是随机人群,而是被愤怒引导的特定个体。他们正在经历某种痛苦,正在寻找某种武器。然后他们在代码注释里找到了一行留言,或者一个文件命名方式让他们产生了某种联想,或者——只是纯粹的运气。”凯特接过话头,声音里带着一丝冷意。
沃尔科夫放下捏鼻梁的手,重新戴上眼镜。动作变得缓慢而谨慎,像一个人正准备进入雷区,每一步都需要全身心的专注。
“我的团队可以在今晚开始清理工作。但有件事你们需要提前知道。”他调出一份文件目录,屏幕上密密麻麻地列出了数百行文件名,“林奇的代码里有几处引用了一个外部信号源。一个被加密的射频信号,频率被锁定在某个特定值。当这个信号被广播到足够近的距离时,后门才会彻底激活——从休眠状态转入攻击状态。设计这套后门的人不是简单地把钥匙交给了后来者,而是把钥匙设计成可以和任何捡起锁的人配对。同一个信号,可以同时激活多个后门。电网、供水、天然气、交通信号,在同一个瞬间被激活,协同攻击。这才是林奇的最终目的。”
凯特的手指在桌面上轻轻敲击了两下,然后停住了。
“如果我们找到信号源,提前阻断它——”
“不行,”沃尔科夫打断了她,声音低沉但坚定,“信号源本身可以藏在任何地方。一个废弃的广播电台发射塔,一架携带射频设备飞越城市的无人机,甚至一个被丢弃在变电总站附近的自动定时装置。我们没有足够的时间将每个可疑频段都监控起来。”
马库斯合上笔记本电脑,靠在椅背上,镜片后的眼睛里闪烁着她已经很久没见过的兴奋与不安交替的光芒。
“有一个办法。”他说,“现在唯一能确定信号频率的人,此刻正坐在联邦监狱的单人牢房里。克里斯托弗·林奇。他知道触发频率是多少,知道信号源最可能藏在什么地方。如果他愿意说出来,我们可以在几小时内完成全面清扫。”
凯特站起身,走到窗边。玻璃上倒映出她的身影和身后会议室里两个男人的轮廓。远处的钟楼在夜色中依然矗立,尖顶上的红色航空障碍灯依旧有节奏地闪烁。她忽然想到,林奇在第十二段视频的最后对她说“从现在起,这是我俩之间的一场比赛”。那时她以为这是挑衅,现在她意识到他是在暗示——比赛还没有结束。即使他身陷囹圄,他仍然掌握着某些决定胜负的筹码。
“他不会说,”凯特说,“不是因为他不想帮我们。是因为这场比赛的规则从一开始就是他定的——他提供线索,但不能提供答案。答案必须由捡起贝壳的人自己找到。如果他把答案直接递给我们,整个项目在哲学层面就失败了。林奇在审讯中的每次供述都严格遵循着同样的模式。他会给你线索,但永远让你自己去拿钥匙。他相信只有那些因为愤怒而自己推开门的人,才配得上门后的武器。”
“那么我们现在只能做一件事。”马库斯站起身,“扫描一切可以扫描的频段。调动联邦通信委员会的全部监控站,覆盖阿瓦隆所有已知射频信号。如果林奇的触发器是一个电磁信号,它总会在某个频段、某个时间点被发射。我们赶在它激活后门之前捕获它。”
沃尔科夫也站起身。他的身形在会议室的暗淡光线里显得格外高大而消瘦,像一个被问题折磨了太久但终于找到解题方向的人。
“我的工程师团队今晚不回家了,”他说,“我们会逐行审查所有被污染代码库的每次提交,找出触发频率的确切参数。如果林奇在代码里留下任何蛛丝马迹,我们会找到它。”
凯特点头,拿起外套,向门口走去。打开门时停下脚步回头看向沃尔科夫。
“沃尔科夫先生。林奇的恶意模块在你的仓库里潜伏了将近一年。它曾被成功下载过。你能查出那些曾经反复访问过这个恶意模块具体代码行的人吗?能从下载用户中识别出谁曾多次查看、反复研究?”
沃尔科夫的表情在那一刻变得极为复杂。不是恐惧,不是愤怒,而是一种凯特在奥马利脸上见过的沉重——一个人承认自己曾站在悬崖边缘、往下看了一眼然后退了回来的人,在想到那些没有退回来的人时才会露出的神情。
“下载日志显示,在过去十一个月里,有七个注册用户多次访问了恶意模块底层的特定代码行。不是浏览,是访问——逐行查看,反复比较,花了大量时间钻研那些用来瘫痪电网和水管的攻击例程。其中六个来自阿瓦隆本地IP段。一个来自其他城市。”
会议室里的空气忽然变得很薄。窗外的城市依旧在正常运转,但此刻每一次灯光的闪烁在凯特眼中都变成了某种极其脆弱的、随时可能被夺走的恩赐。
“他们是谁?”凯特的声音压得很低。
沃尔科夫低头看着屏幕。他的手指悬在键盘上方,迟迟没有按下。
“我公司的代码仓库要求注册时提供真实身份信息。这七个用户——六个在阿瓦隆,分别是一名市水务局的SCADA系统管理员,一名发电厂的自动化工程师,一名州交通局的信号系统维护员,一名私立高中的计算机老师,一名退休的电信公司技术总监,以及一个十七岁的高中生。他的注册资料里写着,他的母亲去年冬天死于新冠并发症。他最后一次访问恶意模块是在今年九月。从那以后,他再也没有登录过。”
凯特闭上眼。十七岁,母亲死于疫情。比埃兹拉还小两岁,比回声小五岁。他最后一次访问恶意模块是九月。布莱克死在十一月。莫里森死在十二月。如果这个时间线意味着什么,那意味着他在九月就已经掌握了攻击所需的全部技术知识,但一直没有使用。为什么没有使用?他还在等什么?他的触发器是什么?还是他已经将武器传给了下一个节点?
“第七个人,”凯特睁开眼睛,“那个不在阿瓦隆的。在哪里?”
“纽黑文。注册身份是一个网络安全研究员,姓名和证件都是伪造的。他去年十月访问了恶意模块的核心代码区域,下载了一份完整的本地副本,然后注销了账户。从那以后,这个身份再也没有出现在互联网上任何已知的平台上,仿佛这个人从未存在过,只在那片代码的沙滩上蹲下来,捡起了一枚他觉得足够锋利的贝壳,然后消失在人群之中。”
走廊尽头忽然传来一阵喧哗。会议室里的三个人同时转头看向门外。一个年轻的分析师快步推门进来,手里举着一部正在显示紧急通知的手机,脸色因为奔跑而涨红。
“刚刚收到的消息,”他喘着气说,“纽黑文市第九巡回上诉法院的一名法官今晚在驾车回家途中失踪。他的自动驾驶专车在州际公路上被远程接管,偏离路线后驶入一处废弃的工业区。联邦调查局纽黑文分局在现场发现了一部被碾碎的智能手机,SIM卡已经物理销毁。但他们在现场留下的唯一完整物品是一张打印纸,上面的内容和之前阿瓦隆出现的威胁信字体完全一致。只有两个字——”
他咽了一口唾沫,声音在安静的会议室里格外清晰。
“第五使徒。”


暂无评论,来抢沙发吧!