# 第十章:写入通道已经浮出水面
周五早上,闻人屿到公司的时候走廊里站着两个穿深色西装的人。
他们站在核心网络机房门口,一个在看手机,一个在和副主管说话。说话的声音不大,隔着半条走廊听不清楚内容,但副主管的姿态闻人屿一眼就认出来了——背挺得很直,双手交叠放在身前,下巴微微内收。那种姿势他见过很多次,通常是面对"比你高了不止一个级别的人"时才会出现的身体语言。
他走过他们身边时没有转头。脚步声均匀,表情平直。
刷卡、进大办公室门、走到工位、坐下、开机。屏幕亮起来之前他快速扫了一遍桌面——所有东西都在昨天离开时的位置,帆布包拉链的朝向和他习惯的方向一致,水杯离鼠标垫的距离没变,键盘右下角那枚他顺手贴上去的便签条边缘没有翘起。
没有人翻过他的东西。
他放下包,手指搭上键盘。工单系统里今天第一条任务显示"正常排期",没有紧急标记。他往下滚了两行,看到通知栏里有一条新的系统公告,发布时间是今天早上七点零二分。
"总部技术部将于今日启动核心系统日志深度复查,期间可能会对个别账号进行权限复核,请各岗位配合。"
"个别账号"四个字被放大了字号,在整段公告里显得突兀,像一行标准字体里突然挤进来一个加粗的声调。
闻人屿关掉公告,开始处理工单。键盘声平稳,跟任何一个普通的周五早晨没有区别。但他的听觉已经调到高灵敏度——走廊里那两个人在磨砂玻璃门外的对话穿过半扇门之后变成了模糊的声波,他提取不出具体内容,只能分辨语调和节奏。那个在说话的男声没有笑,语速偏快,句与句之间的间隙很短。副主管的声音更慢,偶尔插一句短促的回应。
八点五十分,那两个人从机房门口离开了。经过大办公室门口时其中一人的头部朝内部偏了一下,但闻人屿的工位在角落,从这个角度只能看到他的耳廓边缘和一小片下颔线。然后两个人都走了过去,脚步声朝电梯口方向远去。
副主管跟在他们后面快步走回来,经过闻人屿工位时顿了一步。他侧过身,声音压得比平时低:"总部在查上周维护窗口期间的日志变动,可能会复核到你的权限记录。你正常干活就行,不用紧张。"
闻人屿打字:"好的。"朝副主管点了一下头。副主管走回自己工位,脱外套挂椅背的时候衣架抖了一下才挂稳。
九点二十分,内部通讯系统弹出一条消息。发件人是南宫珩。
内容比以往任何一次都长:"核心机房上周五凌晨有人通过维护权限执行了一次数据导出。导出目标路径指向一个空存储区。操作者留下了授权令牌,令牌上的工号信息归你所有。但这枚令牌的元数据特征和你本人的账号行为模式不匹配,差值超过阈值。"
闻人屿看到最后一行时,手指在键盘侧边停了一瞬。
南宫珩说的"差值超过阈值"是一句技术判断,意思是系统行为分析模型判定那枚令牌不是闻人屿本人的操作记录。他打了个通俗的比方给那个判断安了个框架:就像一份文件上签着你的名字,但笔迹鉴定报告说这字不是你写的。南宫珩那边的技术团队已经把侵入行为的特征细化到了"行为模式分析"的层面,并且得出了初步结论:不是闻人屿。
但南宫珩还没有完全排除他。"你本人"和"账号行为模式"这两个词用的是并列式——他在区分"闻人屿这个人"和"闻人屿的账号"两个不同的实体。这个区分本身说明南宫珩已经在考虑"栽赃"的可能性。
闻人屿回了一行:"那枚令牌的签发时间是什么时候?"
"凌晨零点十九分。和你账号上次登录的时间间隔超过十二个小时。"
"我那天晚上没碰过内网。凌晨的时候我在睡觉。"
"我知道。"南宫珩回这三个字没有停顿,像在键盘上敲完就直接发了过来。隔了大约五秒他补了第二行:"但你要证明这件事。"
闻人屿看着那七个字。
这是一道考题。出题人知道答案一半在明面上一半在暗处,他想看的是被考的人怎么把暗处那一半端到桌面上来,端得足够干净、足够让人信服。
他打字:"那个空存储区的配置日志可以查到修改时间。我上周四下午三点左右改过一份存储路径配置,改的是测试环境。如果有人把测试环境的配置模板复制到了核心系统里,配置日志的时间戳会差一整天。"
发出去之后他等了几秒。南宫珩那边没有立刻回复,对话框顶端出现了"对方正在输入"的提示,出现、消失、又出现,最后停在"已读"状态。那条消息被读了,对面在打字和停手之间反复了几次。
最终弹出来的回答是:"存储路径配置的日志我会调出来比对。你先工作。"
闻人屿把这行字看了一遍,把对话框最小化了。
上午十一点左右,加密通道闪了一下。钟离。
"有个新动向。军方那边有人在翻'天枢'底层的审批档案,权限级别很高,像是内部自查。你那边有没有感觉到什么异常?"
闻人屿回了一句:"总部今天在做深度日志复查。有人在查核心机房的维护操作记录。"
"那就对了。"钟离说,"自查的时间点和你这边的复查重合了。你最近动过什么太显眼的东西没?"
闻人屿想了一下那条路径重定向指令和蜜罐容器的运行日志。都藏在外置硬盘里,办公网络内没有留下可追溯的痕迹。唯一可能被外部捕捉到的信号,是他和南宫珩之间通过内通系统传输的那几段文字对话。但内通系统日志属于总部技术部的核心管控范围,以南宫珩的权限如果他要封存那些记录,别人拿不到。
但他突然想起一件事。钟离提到的军方自查时间点,跟南宫珩查到的存储配置修改时间之间存在一个他之前没注意到的错位。军方翻档案的权限日志如果追溯到底层访问记录,会显示一个和核心系统存储配置修改完全无关的目录——但那个目录恰好和"天枢"底层的一个冷备份区域共享同一组物理存储块。换句话说,有人在军方自查和核心系统复查两个独立动作之间制造了一个技术上的"重叠面",让两条调查线在存储物理层面上产生交集。
这个交集未必是巧合。
他回了两个字:"没有。"
钟离没有再追问。
午休时间闻人屿没有出去。他坐在工位上吃饼干喝水,目光落在窗外灰白色的天光上。今天的云层很低,压着楼顶边缘,空气里带着要降温的湿润感。他嚼完最后一片饼干,把包装纸揉成团塞进抽屉里,拿过手机看了一眼。
闻人正阳的对话框还停在那个"6"上,没有新消息。顾言舟一整个上午没有和他说过话,也没有从工位上转过来看他。那个人今天一直盯着自己的屏幕,键盘敲得比平时快,头低着,后颈弯成一条沉下去的弧线。闻人屿注意到顾言舟今天没带他那只黑色保温杯,桌面上放着的是一次性纸杯,里面的水已经凉了,杯壁外侧凝了一层细密的水珠。
他把手机放回口袋。
下午两点,内部通讯系统再次闪动。南宫珩发来一行新消息:"存储路径配置的日志我调出来了。修改时间戳显示是上周三凌晨三点,和你说的时间对不上。"
闻人屿看着这行字,脑中迅速排了一遍所有可能的解释。
上周三凌晨三点,正好是他凌晨四点多醒来发现那把刀生成日志的那一天。存储路径的修改不是他干的,但那段时间是维护窗口前两天的空窗期,机房终端机处于未锁定状态——任何有终端机操作权限的人在物理接入的情况下都可以修改配置。顾言舟那两个下午进机房的时候,完全有时间把测试环境的模板复制过来,故意把修改时间设在不属于任何人的窗口期,制造一条无主的异常路径。
但他没有立刻打出这段分析。他先回了一句:"上周三凌晨三点我在睡觉。但我可以查一下那段时间系统里有哪些账号处于活跃状态。"
"不用。"南宫珩回得很快,"活跃账号列表我已经拿到了。那天凌晨三点到四点之间只有两个账号在线,一个是值班运维的巡检账户,另一个是系统内置的自动备份服务。但系统内置服务的IP地址和终端机底层的物理地址不一致。有人修改了系统配置让备份服务从终端机侧发起了一次对存储路径的写入操作。那个操作不是自动的,是手动的。"
"也就是说,有人在用系统服务的身份掩体做手动操作。"
"对。"南宫珩发完这个字之后停顿了一下,然后补了一句,"你上周四上午做权限复核的时候,有没有发现终端机底层的物理地址有任何异常映射?"
闻人屿认真回忆了一下。上周四上午在机房终端机里看到底层配置时,他把注意力主要放在监控界面的日志数据和系统目录结构上,对硬件映射的部分扫了一遍但没做深度记录。他脑中重新翻找那片记忆画面,试图定位任何和物理地址异常相关的细节,但能提取到的只有一些边缘印象——当时终端机的响应速度比平时稍慢,像是后台有进程在占用资源,但他当时把它归结为系统本身的问题。
"我当时的注意力在日志上,没有特别检查硬件映射。"他如实回答。停了一秒,他又补了一句:"但终端机响应比平时慢了大约两秒。我当时没往硬件映射方向想。"
南宫珩那边过了一会儿才回复:"这个信息有用。两秒的延迟可能是映射表在被读取时产生的负载。行了,这周先到这里。下周我可能会再找你做一次底层的联合排查,到时候你带上你的只读权限来看。"
闻人屿回了一个"好"字,看着那个对话框慢慢变成离线状态。
下午三点半,他去茶水间接水。
走廊里空荡荡的,顶灯的白光均匀铺在瓷砖地面上,泛着一层冷调的亮。他接了水往回走,经过那间核心机房门口时脚步没有停,但他看到了门缝底下透出的光。不是正常的白色日光灯,偏暖一些,像操作台旁那盏台灯的光。
那盏台灯平时是关着的。
不是南宫珩。南宫珩在总部,不在子公司。也不是副主管,副主管今天下午在开部门例会。
闻人屿端着水杯走回工位。坐下之后他侧过头,用余光扫了一眼顾言舟的工位。那把椅子是空的,键盘前没有摆着水杯,外套不在椅背上,桌面上那只一次性纸杯还在,杯壁外侧的水珠已经干了,留下一圈淡淡的渍痕。
他打开机房监控界面的权限复核窗口,假装在做例行检查。系统后台显示机房门锁在三点二十六分被刷开过一次,刷卡人的工号属于技术部非运维岗位的一名普通员工。那名员工他没有任何印象,但工号激活日期是上周,正好是维护窗口前的那几天。
顾言舟用一个新激活的临时账号进了机房。
他已经意识到之前留下的后门被动过手脚,所以换了一个没有记录的账号来执行新的操作。他进去做了什么,闻人屿现在查不到,那个账号的操作日志被清除了。但他知道一件事:顾言舟在回防。他在修补自己之前那一步留下的痕迹,同时——很可能——在部署下一步的栽赃。
闻人屿关掉监控界面,拿起水杯喝了一口。水是温的,经过喉咙时没有刺激到瘢痕的位置。他看着屏幕右下角的时间,三点三十一分。距离下班还有两个半小时。
他的视线往屏幕左上角偏了一瞬,停在了系统状态栏里那个"存储服务状态"的图标上。绿灯,正常。但他脑中那条关于"写入通道"的线突然被刚才南宫珩那句"终端机底层的物理地址"重新激活了。他想起来上周三凌晨他第一次注意到那把刀生成日志的时候,系统存储服务曾闪过一次极短的状态波动——不到三秒,绿灯变黄又变回绿灯。当时他没有深究,以为是例行自检。现在看,那三秒的波动可能正是"写入通道"被打开和关闭的时间窗口。顾言舟今天进机房,也许不是为了修补之前的痕迹,而是为了确认那条通道在回防之后仍然可控。
他把这个判断放在脑中一个单独的区域,没有急着往下推。
下班前十分钟,闻人正阳的消息来了。这次的措辞比之前任何一次都短,只有一个字符:"?"
闻人屿看了两秒,回了一个"4"。这个数字对闻人正阳来说不是时间,是状态码。四代表"进行中,有进展但未完成"。这是原身和闻人正阳之间用过的一套简码,闻人正阳之前一直没用,今天用了问号来触发它。
对方回了一个"收"字,然后对话框沉寂了。
六点整,闻人屿收拾东西走出办公室。经过走廊时他朝机房方向看了一眼——磨砂玻璃门里面台灯的光已经灭了,只有系统的待机指示灯还在闪烁,幽蓝色的,像一只缩在黑暗中的眼睛。他收回目光走向电梯。
进电梯前他的手机亮了一下。一条新短信。同一个境外虚拟号段,内容比上一回更短,只有五个字:"别碰写入通道。"
他读完这行字时电梯门开了,里面站着两个其他部门的人,正聊天聊到一半看到他进来停了一下,然后继续刚才的话题。闻人屿走进电梯站好,把手机屏幕按灭放回口袋。脸上没有表情变化,心跳平稳。
但他知道这条短信的发送时间落在今天下午顾言舟从机房出来的那段时间里,两个时间窗口有重叠。三个小时前他透过门缝看到的那盏台灯的光,和这个号码发来的五个字之间,存在着一条他现在还看不清全貌的信息通路。
问题来了。那个神秘发件人知道"写入通道"的存在,并且正在保护它不被外人触碰。但"写入通道"这个概念闻人屿之前只在系统底层的边缘地带触碰过一次——那三秒的状态波动。如果连他都需要回溯才能确认它的存在,那么保护它的人是怎么知道他在查它的?
只有一个解释。顾言舟在机房里的操作触发了写入通道的某种状态变化,而这个变化被第三方捕捉到了。那个第三方认为触发变化的是闻人屿,于是发来了那条警告。
这意味着顾言舟已经把自己在机房里的行动痕迹成功嫁接到了一个看起来像"闻人屿在探查写入通道"的观察视角上。他在回防的同时又栽了一层赃。
电梯下行的时间里闻人屿站得很直,双手垂在身侧,目光落在楼层数字匀速跳动的红灯上。他把今天所有新信息在脑中做了一次分层归档:顾言舟用新账号进机房回防;神秘短信发送时间与顾言舟机房操作重合;军方自查与总部复查之间出现存储物理层面的交集;写入通道的三秒状态波动发生在刀日志生成同一天。五条线索各自独立,但其中三条的交汇点指向同一个时间窗口——上周三凌晨。
电梯到一楼的时候门开了,他走出去,走进十月的夜色里。
风比前几天都大,吹得路边的银杏叶扑簌簌地从树上往下掉,落在人行道上铺了一地金黄色。踩上去声音是脆的,轻轻一碎。他没有加快步伐,慢慢走了一段才转入地铁站的入口。台阶下行的时候他听到风在地面上方贴过的声音,低低的,含混的,像有人隔着很远的地方说一句听不清楚的话。
走进闸机刷卡,站到黄色安全线外面等车。他看着轨道尽头那团黑暗,列车进站带起一阵冷而干燥的风。车门打开,他跟着人流走进去,在靠窗的位置坐下来。车窗外的隧道壁开始移动,灯牌连成一条流动的亮线,一节一节掠过。
他靠着椅背,没有急着把那些线索连起来。信息够了,再多一条就过载了。他只需要确保所有碎片都在手里、在可控范围内,然后等它们自己形成连接。
地铁到站时他站起来走出车厢。站台上的风比隧道里小一些,但仍然是凉的。他拉上外套拉链往出口走。出站后停了一下,侧头扫了一眼街对面那个角落。今天那里没有车,没有穿深色羽绒服的人影。街角空荡荡的,只有一盏路灯把行道树的影子投在地上,斜斜的,被风吹得微微晃动。
他收回视线,走上回出租屋的路。
开门进屋后把外套挂在门边的钩子上,换了拖鞋,先把那盒润喉糖拿过来含了一颗。薄荷的凉意从舌尖一路滑到喉根,瘢痕的位置在室外干冷的空气里走了一趟之后有些涩,被凉意包裹住之后慢慢松了一些。他含着糖在桌前坐下来,没开工作站。
拿出手机,把"别碰写入通道"的短信截图存进加密文件夹,然后删除了原消息。屏幕暗下去之后他靠着椅背闭了一会儿眼。
然后他睁开眼,把那条短信和今天下午机房台灯的光在脑中并排放置。顾言舟在回防,那个神秘号码在阻止他碰写入通道。两条动作线方向相反,目标却指向同一个对象。这意味着写入通道本身至少牵扯着两股势力,而顾言舟只是其中一股派出来的执行层。
闻人屿把脑中的碎片全部铺开。暗蓝色网格里,一条轮廓线比其他线都亮——那条线上的节点正在以极慢的速度移动,方向不明,但它与存储物理地址的那个"重叠面"共享同一组坐标。他还没有看清那条线的全貌,但他知道它已经浮出水面了,正在吸引所有人的目光。
而那个真正的棋子,还不知道自己正走在一条被人清理过的路径上。
他睁开眼,窗台上那盒润喉糖旁边放着昨天剥剩的橘子皮,已经干缩了,边缘卷成浅褐色的硬片。他伸手把橘子皮拿起来扔进垃圾桶,把空碗和筷子放到厨房水槽里。做完这些去洗漱,刷牙时看到镜子里自己下巴上冒了一颗很小的痘,大概因为连续几晚没睡够。他用手指摸了摸,不疼,然后拿毛巾擦脸。
房间里安静下来。对面楼的窗灯灭了大半,只剩下零星几扇还亮着,像黑纸剪剩的破洞透出光来。他躺下来,把被子拉到下巴,闭眼的瞬间脑中那些碎片开始自动排列,轮廓线交织成的网格里那根最亮的线又往前移了一格。
他在那片暗蓝色的网格里沉入睡眠之前,最后一个念头是:明天是周六,不用去公司。有一天的时间在暗处把剩下的事做完。
窗外树枝刮了一下玻璃,发出一声轻轻的吱呀。
他没有听见。他已经睡着了。