## 第三十六章:顾言舟察觉异常,开始布局“反向栽赃”
周三早上闻人屿到公司的时候,加密笔记里躺着一条钟离发来的消息,发送时间凌晨三点十七分。内容简短到只有一行字:旧入口监控脚本的未匹配特征码昨晚被调用了第二次。调用者和上一次不是同一个权限层级,这次是底层扫描。特征码和设备型号做了关联匹配。
他站在工位旁边看完这条消息,没有急着坐下。他把手机放进外套内袋里,先脱了外套挂好,然后坐下来开机。屏幕亮起来的过程中,他把这条消息的时间和顾言舟那条备用授权凭证的周期做了对齐。第二次调用的时间比第一次更深入了一层。从“调取查询”进化到了“关联匹配”——顾言舟正在尝试把那组未匹配设备指纹和某类具体的设备型号或系统版本绑定起来。
他打开工单系统,先处理完一条例行日志归档任务。然后开始做今天真正要做的第一件事:把昨天下午拉取的后半段数据和前半段做时间轴对齐。他的手指保持在“工位模式”的节奏上——和昨天下午在机房里敲键盘的速度完全不同。稳的,有间隔的,像是被人刻意放慢了倍速播放的录音。
对齐工作持续了一个多小时。他把两组数据按时间戳逐条比对,找出三处存在微小偏移的记录段,做了手工校准,生成了合并版校验位更新报告。报告末尾的结论栏填的是“所有更新记录均与系统标准生成逻辑一致”,不包含任何额外信息。他提交了报告,把它挂在之前那两条复核任务的完成状态下面,关掉了终端窗口。
十点二十分,南宫珩的一条内通消息弹进来:“合并报告我看过了。对齐工作做得干净,没有漏项。”
他回了一个“嗯”字。然后站起来去茶水间接水。端着杯子往回走的时候经过走廊那扇窗,他放慢了一步。街对面的角落里停着一辆深灰色的轿车,车型和上周末看到的那辆不同,但前窗贴着同样深色的膜。看不出驾驶座有没有人。他收回视线走回工位。
下午的工作更少一些。他处理完剩余的几条工单,把桌面整理了一下,三点左右起身去了核心机房。他没有提前收到南宫珩的消息,但有些事不需要等指令。他需要确认备用电源模块区那张临时表在被读取之后的残留状态——是否已经彻底覆盖干净。
他走到第三组机柜的操作台前,用本地直连的方式查看管理模块区的本地存储目录。那张临时表已经不在原处了。系统缓存区的存储空间被新数据覆盖过,之前的条目没有任何残余。他断开了连接,没有在系统层留下任何访问记录。
走出机房的时候在走廊里遇到了副主管。那人手里拿着一份文件,看到闻人屿从机房方向出来,随口问了一句“巡检?”闻人屿点头,晃了一下手上的平板,屏幕上亮着工单系统的已完成列表。副主管看了一眼没多问,继续往办公室方向走去。闻人屿站在原地多待了一两秒,确认副主管走进办公室的路线不在他身后,才转向回工位。
下班之后他在出租屋里煮了晚饭,吃完后坐在桌前打开办公笔记本,把今天所有的操作汇总核对了一遍。合并报告已提交,备用电源模块区的缓存确认已覆盖清零,第二条条件的全部环节已经走完。他在便签纸的“2”后面画了一个圈,对折夹进笔记本里。然后靠着椅背坐了一会儿。窗外的天光暗了大半,房间没开顶灯,只有桌面的台灯亮着,光圈的边缘刚好落在笔记本封面上。
然后钟离的第二条消息到了。这次比早上那条更具体:
“关联匹配的结果出来了。未匹配特征码对应的设备型号是一台定制过系统版本的工作站。型号和配置和你在旧入口停用前用过的硬件一致。”
他把这行字读完,把手机放在桌面上。屏幕自动熄灭之后他仍然看着那块黑色的玻璃。经过他做过系统偏移的硬件特征码,在没有通过BIOS层级被捕获的情况下,正常只能追踪到设备类型和系统版本的大类。但如果对方手里的那组未匹配特征码的采集深度超出了系统层级的范围,他们匹配到的就不仅仅是设备型号——而是这台硬件具体的配置序列码。他在那台工作站上做过的伪造处理覆盖了MAC地址和序列号的系统层映射,但没有覆盖BIOS硬件ID。一旦匹配完成,对方手里就有了一个直接指向那台物理设备的指纹数据。
他拿起手机,给南宫珩发了一条:
“旧入口监控脚本昨晚做了一次底层扫描。未匹配特征码和设备型号做了关联匹配。”
回复等了大约三分钟,比平时慢。
“匹配结果指向什么。”
“指向我之前用过的那台工作站。系统层的偏移处理没有被穿透,但BIOS层级的数据被关联上了。”
“BIOS层级的硬件ID匹配意味着对方有直接访问硬件层信息的权限。常规的暗网监控脚本做不到这一点。这要么是需要物理接触才能植入的底层探测工具,要么是权限高到可以无视系统内核保护的后门程序——无论哪一种,都意味着他面对的不是一个普通的追踪者。”
闻人屿把这段话看了两遍。“如果手里有可以直接读取硬件ID的工具,拿到的不只是一个设备型号。还有这台设备在整个供应链上留下的所有访问记录。”
“工具来源可能是军方分支或者军工供应链。不在零售渠道流通。”南宫珩的回复到这里停了一下,隔了大约十秒又补了一行。“你那条旧入口停用之后,所有新的访问已经切换到了不关联旧密钥的设备上。他匹配到的那台工作站现在处于断连状态。”
“我知道。但断连状态不会改变他已经拿到硬件指纹这个事实。”
“他手里有指纹,但没有当前活跃的关联路径。那个指纹对应一台已经不在线、不联网、不产生新信号的设备。他在找到这台设备和现在活跃账号之间的连接之前,指纹只是一条死线。”
闻人屿把这行字读了两遍。断连状态确实让硬件指纹失去了和当前活跃数据的动态关联。但在长期取证的过程中,断连设备的硬件信息在某些监管框架下仍然可以作为历史行为分析的一部分归档。对方不会因为设备断连就放弃它。他们会换一个方向去寻找曾经使用这台设备的人。他盯着对话框里“死线”两个字,指腹按在手机侧边框上。南宫珩用词向来精确,他把一条线索称作“死线”,意味着他判断这条线索在当前的逻辑框架里不构成直接威胁。但闻人屿清楚,死线只是还没被接上电。
他回了一句:“如果他找不到当前活跃关联路径,他会去查这台设备最近一次在线的时间窗口内有哪些账号处于活跃状态。那个时间窗口正好是我在那台工作站上停用旧密钥和移交机器之间。”
“那个时间窗口里的活跃账号列表我已经封存在离线存储里了。他不会在系统层级的日志里找到它。”
“但固件存储区分支节点里和那个窗口对应的访问记录是完整的。”
“那个窗口对应的访问记录里有三条和你的工单账号相关的访问痕迹。分布在三个不同的日期。每条都以标准复核任务的形式生成,没有独立的异常标记。如果他把这三个时间点和设备指纹做一次对齐,他能在时间轴上形成一个重合区。”
“重合区就是他现在在找的东西。”
“对。”
闻人屿把手机屏幕按灭,放在桌面上。房间里的台灯亮着,光圈的覆盖范围和平时一样。他靠在椅背上,视线落在桌角那台合上的办公笔记本上。然后他在脑海里把仍然活跃的数字痕迹过了一遍——工单账号、附加参数、审计任务记录、以及那三条例行复核任务完成时留下的系统日志。每一条都以标准格式存在,没有独立标记,没有异常签名。但它们的访问时间点共同围成了一个区域,和硬件的最后活跃窗口做对齐,能看到一条稳定的活动轨迹。那条轨迹不指向“Silence”这个身份,但它指向一个在特定时间段内持续活动的账号。那个账号在他移交工作站和停用旧密钥的过渡期内持续存在并正常运行。
他重新拿起手机。
“那三条复核任务的时间戳分布,匹配度可能不只是一个重合区。如果他在我的访问记录和他的设备指纹之间找到了精确的时间对齐,就能把两者绑定成一个持续活动的身份轮廓。”
那边隔了大约二十秒才回。比之前任何一次都长。
“你三个复核任务分别在什么时间点。”
“第一条在上周四下午两点四十一分。第二条在本周二上午十一点零八分。第三条在今天上午九点五十二分。”
“五天内三条记录。时间间隔不均匀,但落在正常工作时段内。任何一条单独看都是正常的工单完成痕迹,但三条合并之后能构成一条持续五天的活跃轨迹。”
“他如果找到了这条轨迹,他就找到了在当前系统里还在持续活动的、和硬件指纹在时间上对齐的账号。”
“你的账号在那三个时间点确实活跃。但如果他在固件存储区的访问记录里找到的是三条以标准格式存在的工单,他没法证明那些工单的访问内容和硬件指纹的关联程度。他能证明的只是‘在同一时间段内有一个账号在活动’。”
“但对他来说,这个结论已经足够让他开始缩小搜索范围了。”
南宫珩没有再回文字。闻人屿看着对话框里最后一行字。他需要自己来推理顾言舟那边的下一步行动方向——如果顾言舟已经通过监控脚本和设备指纹匹配确认了硬件在工作站移交前最后活跃的时段,并且从固件存储区的访问记录中锁定了三条时间坐标与之重合的工单记录,他会形成一个判断:这台设备的使用者目前仍在系统内活动,且在固定时间段内持续执行与固件存储区相关的操作。
那个人会围绕那三个时间坐标开始构建下一步计划。
周四上午到公司的时候,闻人屿坐定之后第一件事不是打开工单系统。他先点开了核心机房底层日志的一条自动推送——那是他之前设定的一个微弱的监控节点。只要有人在固件存储区那三条访问记录附近进行任何查询操作,系统就会生成一条标准格式的通知推送到他这里。不触发任何告警,只以“日志归档完成”的状态出现在推送栏里。
今天早上推送的状态是“有更新”。更新内容是有人在昨天深夜对上周四下午两点四十一分的时间段做了一次定点查询。查询者是系统内置的自检模块账号。查询路径指向固件存储区的分支节点。
他把推送窗口关掉,没有截图,没有转发。顾言舟在昨晚用自检模块账号做了第一次定点查询,目标正是第一条复核任务的时间窗口。他确认了一个具体的时间点,然后会把它和他的硬件指纹的最后活跃窗口做比对。如果比对结果吻合,他会继续查询第二条和第三条。
然后呢?闻人屿在脑中往下推。顾言舟在确认三个时间窗口都和硬件指纹的活跃时段对齐之后,他会开始在这三个时间窗口的上下文里寻找更精细的关联——比如这些时间段内是否有系统调用指向了某个特定的操作者签名,或者是否有同一账号在这三个时间点都出现了某个共同的访问模式特征。闻人屿的那三条例行复核任务的共同特征是:每一条都在完成后自动生成了一条标准格式的日志归档记录,归档记录的末尾都带有一组相同的系统内部标记码。标记码本身不指向任何身份信息,但它三处出现的位置完全相同。
如果顾言舟沿着这条线往下走,他会发现三处标记码的位置在系统日志中的分布具有高度一致性。那会成为一个新的锚点,把他从“一个账号在活动”推进到“一个账号在按照固定的模式活动”。
闻人屿在脑中把标记码的生成机制重新检查了一遍。标记码是系统在每次提交完成状态时自动生成的随机序列。但三处标记码末尾的字节排列在系统日志的缓存区里留下了相同的偏移模式——不是标记码本身被复用了,而是在生成过程中,系统缓存区的写入位置产生了三次完全相同的位移。就像三封不同日期的信,笔迹和内容都经过精心伪装,但投递员总是不自觉地把它们折成同样的形状塞进同一个信箱缝隙里。那个位移模式和键盘录入习惯无关,和账号权限无关。纯粹是系统日志写入机制的一个微小缺陷。但一个足够细心的观察者可以通过这个模式把三条记录捆绑成同一组事件序列。
午饭的时候他没有下楼,在工位上吃了一个饭团。嚼饭团的时候他看着窗外灰白色的天光在楼群之间铺开。他把顾言舟当前的进展状态重新标了一次——三条时间坐标、一组硬件指纹、以及一个可能正在形成的模式匹配。他的布局速度比闻人屿预想中更快。从监控脚本部署到设备指纹匹配,再到定点时间查询,只用了不到一周。
顾言舟这种速度不像是一步步摸索,更像是早已在地图上标记好了所有可能的时间坐标,现在只是在逐一排查。耐心,且不容错漏。
下午快下班的时候南宫晚棠发来一条消息。一条普通的问候:“今天经过十六楼,看到茶水间窗台上那盆绿植长了一片新的小叶子。你这边最近忙不忙。”他回了一句“忙”,然后补了一句“但还在正常范围内”——这是他们之间早已约定的回复格式,用于确认一方未被监听或监控。她回了一个笑脸,没再追问。
他放下手机,屏幕边缘滑出一条系统通知——内部系统的自动推送,提示固件存储区分支节点有一条新的访问请求,来源账号为系统内置自检模块,目标时间为本周二上午十一点零八分。第二条复核任务的时间坐标。顾言舟在确认第一个时间点之后,不到二十四小时又确认了第二个。
他坐在工位上,把那杯已经凉了的水端起来喝完。现在还有一条时间坐标没有被查询。但如果顾言舟的进展速度保持不变,第三条坐标的查询会在今天深夜到明天凌晨之间完成。到那个时候,对方手里会有三条对齐的时间坐标、一组硬件指纹、和一个通过缓存区写入位移形成的模式锚点。
他需要在第三次查询完成之前决定一件事——是继续沿着现有的工单框架在系统的可见范围内活动,还是把自己从这些时间窗口的后续访问中抽离一段时间。前者意味着保持观察但不创造新痕迹。后者意味着主动中断自己的数据流,让对方手里现有的三组时间坐标在后续的关联查询中无法得到新的增量数据。
他在脑中权衡两者。然后打开内部通讯系统,给南宫珩发了一条:
“他确认了第一条和第二条时间坐标。第三条会在今晚到明天凌晨之间完成查询。我在考虑是否在第三条查询完成之后暂停所有涉及固件存储区的工单操作,直到他的注意力从这些时间坐标上移开。”
南宫珩回得比之前任何一次都快,像是已经在等这个问题。
“暂停工单操作会在系统日志里留下一个活动断层。那个断层本身也会成为一个可被识别的特征。”
“我知道。但断层至少不会提供新的时间坐标。”
“你需要在数据流中断和数据流持续之间选择一个。两者的信号强度不同,但都会被他读取。”
闻人屿看着屏幕上这行字,把手机放在桌面上。他低头看了一眼自己搭在键盘上的手指。无名指的位置已经稳定在调整后的新角度上。此刻他没有敲任何键,只是让指尖轻轻触碰着键帽表面。他在想:如果继续操作,顾言舟会捕获新的坐标;如果中断,顾言舟会注意到断层的存在。两条路都是信号,区别在于信号的用途不同。前者是燃料,后者是路标。
窗外的天光在傍晚的偏斜中逐渐暗下去。他坐了一会儿,然后拿起手机给南宫珩回了一条:
“我选择数据流中断。从明天开始,三天之内我不会提交任何涉及固件存储区的工单。”
那边回了一个“收到”。然后对话框安静下来。
闻人屿把手机放回口袋,站起来收拾好东西走出办公室。下台阶的时候晚风迎面吹过来,他拉上外套拉链走向地铁站。经过路灯底下的时候光亮刚换上,有点刺眼,他眯了一下。街对面那个角落空了,行道树的枝杈在初冬的晚风里安静地立着。
深灰色的轿车已经不在了。这个变化让他停了一步,然后继续往前走。车撤了,但路灯亮了。他不知道这轮换意味着什么——暂时安全,还是对方已经拿到了想要的东西,不再需要肉眼确认他的存在。但他知道一件事:从现在开始,未来七十二小时内,他在系统里的痕迹会变得安静。而这安静本身,将会被顾言舟读到。
他走进地铁口的时候晚风被挡在了外面。台阶往下,空气变得闷了一些。他刷卡进站,在站台上等车的间歇拿出手机看了一眼——没有新消息。他把手机放回去,车门打开,走进去,找了个靠门的位置站着。列车启动的时候他透过车窗看到站台上的广告灯箱一排排往后退,他的脸在车窗玻璃上映出一个模糊的轮廓,和身后那些乘客的倒影重叠在一起,看不出谁是谁。
这大概就是他接下来三天想要的状态。在数据流里,让自己成为那个无法被单独辨认的倒影。