首页 > 网游动漫 > 代码:烬 > 第6章 时间校准

第6章 时间校准(1/1)

目录

所有拼图都摆到桌面上之后,林劫发现一个被所有人忽略的问题——时间。三组DNS根节点要同时过载,三组变电站要同步跳闸,交通信号中央协调器要在电力波动触发的同一秒内注入逻辑炸弹。每一环都对精度有要求,差出一秒就可能让整个行动从“瘫痪系统”变成“帮系统做压力测试”。而偏偏在这个要命的节点上,他发现网络端和物理端走的不是同一个时钟。

网络端用的是龙吟系统自己的NTP授时服务,所有联网设备强制同步到龙吟系统内网的原子钟集群,精度能到毫秒级。僵尸网络那两百万台肉鸡受感染的时候已经从宿主设备上继承了NTP对时数据,彼此的时钟偏差最多不超过三十毫秒。但物理端完全不是这回事。马雄手下的人在锈带干活用的是黑市上淘来的老旧设备——老鬼改装的那几台可编程电压源本身倒是带了个温补晶振,精度撑死了能到每天漂移零点五秒左右,但触发必须依赖林劫从网络端发过去的加密脉冲,而加密脉冲从林劫的跳板服务器到锈带变电站的接收端,中间要走七个光纤节点。每个节点的转发延迟林劫都用网络仿真软件逐段跑过,算下来大约四十到六十毫秒——网络端完全能接受。真正棘手的不是网络延迟,是物理端自身的时钟基线根本不准。老鬼上次在二十毫安电流环上做时间戳标记的时候,用的参考时钟是一台从废品站淘来的旧GPS授时模块,最近一周锈带上空电离层扰动得厉害,GPS信号抖得跟帕金森似的,那台模块的时间误差已经从几十毫秒漂到了将近三秒。

三秒。在变电站跳闸这件事上,三秒意味着电压尖峰和主网解列窗口之间会错开整整三秒——要么备用电源已经切入完毕、断路器重新合闸,电网控制节点根本不会进入离线,要么电压尖峰还没来,林劫的攻击洪峰已经在网络层暴露了意图,龙吟系统的防御AI有充足的时间把异常流量模式标记并下发到所有边缘节点。

沈易把这个时间漂移的数据拿给林劫看的时候,林劫沉默了大概十秒钟,然后说了一句:“不能用GPS。用系统自己的时钟。”

这个想法乍一听很荒谬。龙吟系统的NTP授时服务是封闭的,所有合法的时间同步请求必须经过PKI认证,客户端需要有签名的数字证书才能从原子钟集群同步时间。而林劫在僵尸网络里对那些肉鸡做的时钟同步,本质上是用被感染设备自带的系统时间在硬抗——没有用龙吟系统的授时服务本身,只是把所有设备自己记录的时间强行对齐,时钟源是乱的,只是对齐之后乱得一致。但物理端需要绝对时间,需要跟龙吟系统的原子钟集群对齐到毫秒级,否则三组变电站的跳闸信号就会像交响乐团没了指挥一样各自为政。

解决方案是林劫在天快亮的时候找到的。他在龙吟系统的内部网络拓扑里翻出了一台次级授时服务器——这东西位于城东一个已经停用的旧通信基站里,物理设备还在机架上,供电也没断,但因为该基站三个月前被龙吟系统从主网里除名,这台授时服务器已经不在正规的NTP服务池里了。不在服务池里意味着不对外提供授时请求响应,却仍然通过光纤直连从主干原子钟集群同步自己的内部时钟。也就是说,这台机器自己知道准确时间,只是不对外说。

如果有人能物理接入这台机器——不需要认证,只要能碰到它的维护端口——就能从它的时钟寄存器里直接读取原子钟授时数据,精确到毫秒。然后再把这组数据手动同步给老鬼改装的那几台电压源。

问题是那个基站在主城区。锈带的人进不去,进去了也摸不到机架——基站虽然停用,但物理安保还在,巡捕的巡逻车每四十分钟经过一次,门口还有一台还在运转的人脸识别摄像头。沈易盯着林劫翻出来的那张基站结构图,手指在屏幕戳了戳那个维护端口的位置:“从这里到外墙大概十二米。如果能破开外墙的通风百叶窗,钻进去,沿着电缆桥架走大概八米,就能摸到机柜后面。维护端口就在机柜背板的左下角,是一个RJ45接口。”

“百叶窗是什么材质?”

“图纸上标注的是铝合金,但实际安装的时候会不会偷工减料就不知道了。”

林劫没再问。第二天凌晨他背了个工具包,换了身灰扑扑的工装——就是那种通信公司外勤维修工常穿的连体工作服,胸口还印着个模糊的公司logo,是他从黑市上花五十块买的二手货。坐马雄手下那辆破面包车到了基站外围,猫在对面一栋废弃居民楼的四楼窗户后面,用夜视望远镜盯着基站门口看了快一个钟头,把巡捕巡逻车的经过时间精确记下来。三点二十七分一趟,四点零六分一趟,中间间隔三十九分钟,误差不超过一分钟。摄像头是旧型号,红外夜视距离大概十五米,角度覆盖基站大门和侧面围墙,但有一个盲区——它拍不到基站背面那堵墙和墙上的通风百叶窗,因为背面紧挨着一栋同样废弃的旧仓库,两栋建筑之间只有一条不到一米宽的夹缝。

林劫从夹缝里摸进去的时候,后背蹭着两面墙的水泥面往前挪,挪到基站背面那堵墙下,抬头看——百叶窗离地面大概三米高,铝合金的,但固定螺丝锈得厉害,有一颗已经松脱,歪在一边。他用螺丝刀把那几颗锈螺丝挨个拧下来,手稳得像是拧自家水龙头,拧完最后一颗,百叶窗往外一拉就开了。里面是通风管,直径大概六十公分,勉强够一个人缩着肩膀爬进去。他把工具包叼在嘴里,双手撑着管壁往上蹭,蹭了大概两米,摸到了电缆桥架的铁质横梁。沿着横梁往右爬了大概八米,头顶出现了他在地图上看到的那个位置——机柜背面。

机柜的金属背板冰冰凉凉,左下角果然有个RJ45接口,上面还贴着张泛黄的标签,写着“维护端口-未授权禁止接入”。林劫把便携终端接上去,从工具包里拉出根卷好的网线,插上,终端屏幕亮起来。授时服务器的操作系统还是旧版本的Lux,内核没打过最新的安全补丁,登录界面也没设密码——因为这个基站已经不在主网里,运维人员早就把它忘了。他连Shell都不用提权,直接进了时钟寄存器的读取接口——当前原子钟授时时间以UTC格式显示在屏幕上,精确到毫秒,后面还跟着一连串跳动的小数点后三位。他把这组数据保存下来,用便携终端上的一个小脚本把UTC时间换算成瀛海市的本地时间,又额外记录了一个关键参数——这台授时服务器的时钟偏移量。从它最后一次与主干原子钟集群同步到现在,时钟偏移了大概四十七毫秒。四舍五入,不到零点零五秒。够用了。

他把数据打包加密,用预先铺好的低轨卫星短报文通道发给了沈易,发完之后把终端拔下来,网线卷好塞回工具包,顺着原路爬出去,再把百叶窗装回去,螺丝一颗一颗拧紧。整个过程从钻进夹缝到钻出来,一共用了不到三十分钟。巡逻车还没来。沈易收到数据之后,立刻用光纤直连跳板分发给三个变电站的接收端,老鬼在旧港区主变电站拿到授时数据之后用了不到十分钟就手动校准了那几台改装电压源的内部时钟,校准完之后还在加密频道里回了一条消息,语气不像是汇报工作,更像是自言自语:“误差零点零三秒。老子这辈子对时都没这么准过。”

锈带北和锈带南分站也同步完成了校准。马雄亲自守在锈带南那台接收终端前面,看到屏幕上跳出来的同步成功的提示,转头对旁边蹲在地上抽烟的疤头说了一句:“告诉兄弟们,时间对好了。谁手抖早按一秒,老子把他手指头掰了。”疤头把烟头往地上一摁,笑了笑,没说话。

同一天晚上,交通信号系统的逻辑炸弹注入端也做了最后一次对时测试。沈易在墨影旧服务器上那套“绿波”项目的残留代码里埋了个带时间触发条件的补丁,用博士去年申请的一次性授权密钥签了名。他自己反复测了四次,每次都是在预设触发时间到达后的四十毫秒内完成注入,全部落在林劫要求的同步窗口内。他盯着屏幕上第四次测试跑完的那行绿色状态码,发现自己手心里全是汗。不是紧张——是坐在屏幕前面连续跑测试跑太久了,手掌贴在键盘掌托上捂出来的。他把汗蹭在裤子上,截了张图发给林劫。

网络端的时间校准要比物理端更精细。两百万台肉鸡,每台设备的本地时钟都有自己的漂移量,虽然经过之前的集中同步已经对齐到彼此相差不到三十毫秒,但林劫还需要确保所有设备在发起洪峰请求的那一秒完全同步——不是在绝对时间意义上,而是在行动指令触发的意义上。绝对时间由攻击脚本里的触发时间戳控制,时间戳本身已经对齐到从授时服务器窃取的标准时间;指令触发则由一个轻量级的同步脉冲完成,脉冲本身通过僵尸网络内建的P2P传播协议以树状拓扑分发,从根节点到所有叶子节点的最大延迟经过之前两轮压力测试,压到了三百七十毫秒以内。这个数字还差了一点——理想目标是二百毫秒以内。

林劫花了一个下午重新优化了僵尸网络的同步脉冲分发拓扑,把树状结构改成了多层星型结构,在关键节点上加了几个专用的低延迟中继服务器——说是服务器,其实就是几台从马雄黑市上借来的高性能矿机,挖不了矿,但网络转发性能一流。改完拓扑之后重新跑测试,最大延迟从三百七十毫秒降到了不足两百毫秒。

至此,所有攻击节点的时间基准全部对齐到龙吟系统的原子钟集群,最大同步误差不超过零点三秒,远小于三秒的行动窗口。他把测试完的同步数据保存下来,关了屏幕,靠在椅背上闭了会儿眼。黑暗里,他能感觉到那两百万台沉睡的肉鸡像无数根拉满的弓弦,只等一个信号。窗外锈带的天又亮了,不知道是第几个没睡的夜晚。

目录
返回顶部