柯林回到出租屋的时候,戴克不在客厅。笔记本电脑合着放在茶几上,电源线还插着,指示灯一明一灭地闪烁。厨房水槽里的面碗多了一只,水龙头没拧紧,水滴砸在碗沿上,隔几秒响一声,像一座计时钟在倒计时。
他推开戴克的房门。戴克坐在地板上,背靠着床沿,膝盖上摊着一本翻到卷边的纸质笔记本,手里握着一支铅笔,正在纸上画什么东西。柯林走近了才看清,那不是画,是一张手绘的网络拓扑图,密密麻麻的节点和连线,每一个节点旁边都用极小的字体标注着IP地址和端口号。
“你什么时候开始用纸笔了?”柯林在他对面蹲下来。
“从我发现奥托的监控合约有第三层嵌套结构开始。”戴克把铅笔夹在耳后,抬起头。他的眼镜片上沾着指纹和灰尘,眼睛下面挂着两团明显的乌青,像是已经连续几十个小时没睡过觉,“电子设备上做的任何记录都可能被追踪,纸不行。纸是最后的安全区。”
柯林把快餐店里发生的事情简明扼要地说了一遍。戴克听着,手里把铅笔转来转去,转得越来越快,在柯林说到莉娜提出用全部份额换豁免权的时候,铅笔啪的一声断成两截。
“所以她把我们卖了。”戴克的声音很平静,但握着断笔的手指节发白。
“她把已经暴露的信息卖了一个好价钱。”柯林纠正他,“凯斯勒在我们分赃之前就已经锁定了我们三个人。莉娜做的事不是出卖,是在敌人已经包围了房子之后,主动打开门谈条件。区别在于,开门的人手里至少还握着一点主动权。”
戴克沉默了一会儿,把断掉的铅笔扔进床头柜旁边的废纸篓里。“她现在在哪?”
“回便利店了。今晚她值夜班,按原计划照常上班,不能让凯斯勒的人察觉我们已经做了应对。”
“应对?什么应对?”
柯林从外套内侧口袋里掏出那个被奥托改造过的加密钱包,放在戴克面前的笔记本上。金属方块压在拓扑图上,遮住了最核心的几个节点。“这个钱包里的追踪协议已经被奥托替换掉了,国防情报局收到之后会以为资产已被安全回收。明天早上八点我会把它交给凯斯勒。”
“然后他们就放过我们了?”
“奥托说会。”
“你信?”
柯林没有回答。他站起来走到戴克房间的窗户旁边,窗帘拉得严严实实,但他没有掀开。楼下的那个穿连帽卫衣的人影已经不在了,取而代之的是一辆停在街对面的灰色面包车,车窗全部封死,车顶伸出一根极细的天线,在夜风中微微晃动。他不知道那辆车是监视他们的,还是监视奥托的,又或者两者都是。
“我不信任何人。”柯林转过身来,背靠着窗户,双臂交叉在胸前,“所以我要你帮我做一件事。”
戴克从地板上站起来,活动了一下僵硬的脖子。“什么事?”
“在奥托的监控合约里找漏洞。”
“什么类型的漏洞?”
“能让我们在被监控的情况下,把资产转移到一个没有人知道的第四地址的漏洞。”柯林把声音压到几乎耳语的程度,“不是现在用。是备着。如果明天交付顺利,凯斯勒撤销监控,我们就正常生活。如果事情往坏的方向发展,我需要一条退路。”
戴克摘下眼镜,用衬衫下摆慢慢擦拭镜片。不戴眼镜的时候他的脸看起来完全不同——颧骨更高,眼眶更深,像一个被关了很久的人突然看到了铁窗外的一小片天空。
“你知道合约的代码量有多大吗?”他把眼镜重新戴好,语气变得异常严肃,“奥托写的这份智能合约,核心代码超过一万两千行,嵌套了七层权限管理、三层监控环路和一套自动触发机制。在这套系统里找漏洞,相当于在一座迷宫里找一扇暗门。”
“所以你找不到?”
“我没说找不到。我说的是,”戴克重新拿起一本新的铅笔,在纸的空白处飞快地画出一个矩阵结构图,“需要时间。奥托设下的互相监控窗口是一百八十天,凯斯勒的追索期限我们不清楚。如果两边都掐着我们的脖子,我就得同时破解两套系统。”
他把矩阵图画完,在中央画了一个圈,写上“W”代表柯林。又从圈里引出三条线,分别标注H、S、V。“漏洞一定在接口处。不同权限层级之间的调用接口,是代码审计最容易被忽略的地方。奥托用标准框架写的合约,标准框架的接口有通用漏洞。我需要进暗网的漏洞库查资料,但凯斯勒的人很可能在监控我的网络流量。”
“用我的电脑。”柯林说,“我有一台从来没连过出租屋路由器的旧笔记本。”
戴克的眼睛亮了一下。“在哪?”
“衣柜最底层,一堆旧军装下面。”
柯林回自己房间把那台二手笔记本拿出来,递给戴克。戴克接过去打开,检查了系统版本和防火墙设置,满意地点了点头。他把笔记本连接到自己用废旧零件组装的便携式信号屏蔽器上,然后通过一个物理隔离的加密路由器接入暗网。
“大概需要多久?”柯林问。
“找到通用漏洞框架,三小时。适配奥托的具体合约代码,再加三小时。如果顺利,天亮之前我能给你一个可用的后门。”
柯林看了一眼手机上的时间——凌晨一点四十分。距离和凯斯勒约定的交付时间还有六小时二十分钟。他拍了拍戴克的肩膀,走出房间,轻轻带上了门。
客厅里日光灯管还在明灭不定地闪烁。柯林在沙发上坐下来,把手机放在茶几上,屏幕向上,然后闭上眼睛。他需要睡一会儿,但大脑不听使唤,各种念头像受惊的鱼群在意识深处乱窜。
莉娜主动联系凯斯勒的事,他理解但不等于接受。奥托自称是国防情报局的受害者,但奥托的每一个行为——主动找上他们、签署合约、替换追踪协议——都是从自身利益出发的精密计算,不是善意。戴克在技术上可靠,但戴克和莉娜之间有过多少他不清楚的私下沟通,他至今没搞清楚。
还有那个不断发加密邮件警告他的匿名者。那个人知道奥托的前客户死于心脏起搏器被远程修改,知道凯斯勒的每一步行动,知道莉娜和凯斯勒在快餐店里坐了多少分钟。匿名者对所有人的行踪都了如指掌,却从不露面。
柯林忽然睁开了眼睛。
他想起了一件事。在数据中心第一次见奥托的时候,奥托临走前站在门口问了他一句话:“你在海军哪个部门?”当时他说是机修兵。奥托嘴角那个接近于微笑的弧度,分明是在说“我知道你在撒谎”。但他没有追问。
一个国防情报局的退休合作者,为什么会关心一个拆船工在海军哪个部门服役?
柯林拿起手机,打开加密邮箱,翻出那个匿名者之前发来的所有邮件,按时间顺序重新读了一遍。第一封警告钱包主人会找上门,第二封披露奥托的背景,第三封警告前客户的死因,第四封通知莉娜和凯斯勒会面。每一封邮件的内容都精确到令人不安的程度。
他盯着发件地址那一串乱码,忽然灵光一现——不是灵光,是被压抑了很久的一个猜测终于浮上了水面。
他在回复框里打了一行字:“你到底是谁?”
犹豫了整整一分钟,按下了发送。
回复几乎是瞬间到达的。快到不可能是手打,只有可能是预设的自动回复,或者对方一直在等他问这句话。
邮件正文只有三个字:
“你的人。”
柯林盯着那三个字,后脑勺的血管又开始突突跳。他正在思考这三个字的意思,戴克的房门突然打开了。戴克冲出来,手里拿着那台二手笔记本,屏幕上的代码行疯狂滚动。
“找到了。”戴克的声音因为兴奋而微微发抖,“奥托的合约在第二层权限管理和第三层监控环路之间的调用接口,有一个竞态条件漏洞。”
“说人话。”
“合约在执行资产转移和监控权限校验的时候,中间存在一个极短的时间窗口。在这个窗口里,监控校验以为自己已经完成了,但资产转移还没被记账。如果有人在这个窗口期发起一笔转账,监控日志里不会留下记录。”
柯林站起来,走到戴克身边看着屏幕上那些他看不懂的代码。“这个窗口有多短?”
“零点一四秒。但我的脚本可以自动抓取,重复发起请求,只要时间校准精确,三次之内就能成功。”戴克抬起头,鼻尖上冒着细密的汗珠,“柯林,这意味着什么你知道吗?”
柯林知道。零点一四秒,足够让一笔钱从被监控的钱包里消失,而监控者看到的只有一片空白。奥托用零点三毫秒的冷启动漏洞偷走了钱包里的数据,现在戴克用零点一四秒的竞态条件漏洞偷回了被监控的资产。
用漏洞打漏洞。用技术反制技术。
“明天交付之后不要急着用。”柯林按住戴克的肩膀,“等监控解除,等凯斯勒的人离开,等所有人都认为这件事已经结束了。然后我们再动。”
戴克点头,把笔记本合上,抱在怀里,像是抱着一件易碎的古董。
凌晨三点,柯林回到自己房间,躺在床上盯着天花板上那条从灯座蔓延到墙角的裂缝。他把明天要做的事情在脑子里过了一遍:八点去船厂,把假钱包交给凯斯勒,确认豁免条款;然后回出租屋,等戴克确认监控解除;最后三个人分别离开湾景市,消失在阿卡迪亚共和国的三个不同方向。
计划是清晰的。但清晰不等于安全。
凌晨四点,他的手机屏幕再次亮起。依然是加密邮件,依然是不知名的发件人。但这封邮件的语气和以往完全不同:
“凯斯勒今天不会一个人来。他带了一支四人技术小队和一套现场验证设备。如果钱包在验证时被鉴定为篡改品,他会当场实施控制措施。奥托替换追踪协议的手法有一个细微的时序偏差,在静态检查中看不出来,在凯斯勒的动态扫描下一定会暴露。”
柯林从床上坐起来,握紧手机,指节咔咔作响。
窗外,凌晨四点的湾景市还浸在最深的黑暗里。那辆灰色面包车依然停在街对面,车顶的天线在微光中轻轻摇晃,像一根正在嗅探空气中危险气味的触角。


暂无评论,来抢沙发吧!