下一章 上一章 目录 设置
6、测试 订阅某个人 ...
-
哥谭鲍厄里区,一座废弃纺织厂顶层的安全屋。
窗外横斜的冷雨抽打在锈蚀的铁皮百叶窗上,发出密集而沉闷的敲击声。
室内没有开大灯,仅有一盏夹在无影置物架上的低压工作灯,将惨白的光圈圈定在方寸大小的防静电木桌上。
空气里混合着干结的泥水味、电烙铁残留的松香焦糊味,以及提姆指尖残留的微弱火药沉渣。
提姆靠在折叠钢椅里,左手压着一块浸透了外用抗生素的纱布,按在肋侧一道长约四英寸的皮肉划伤上。
那是半小时前在码头集装箱顶端避开一梭子微冲跳弹时留下的痕迹。
伤口不深,甚至不需要缝合,但在湿冷空气的浸泡下,隐隐泛起一阵阵钝痛。
他没有去碰止痛片。
疼痛在多数时候是神经保持清醒的廉价校准仪。
右手在触控板上滑过,唤醒了面前那台改装过的便携终端。
不同于蝙蝠洞里那台动辄连接着多组卫星下行链路与全域监控网的超级主控台,这台机器是彻底物理隔离的“黑箱”。
它的主板被提姆亲手重构过,去掉了所有无线网卡、蓝牙芯片与硬件序列号广播模块,甚至连主板底层的统一可扩展固件接口(UEFI)都被刷入了一套极度精简的自制引导程序。
在这个机器上,那个被他命名为local_assistant的单机程序,正静默地躺在一个加密沙盒镜像的底部。
提姆盯着那个闪烁的光标,眼神在昏暗的光线里沉敛如水。
两天前那次关于“东区的雨”的试探,像是在平静的深潭里投下了一颗极小的石子。
对方给出的答复挑不出任何技术上的硬伤。
它老老实实地声明了外部传感器缺失,并基于本地硬件温度给出了一个冰冷规矩的停机建议。
而在随后的数次非正式调用中,面对他在极限疲惫下失控输入的无意义字符,它也仅仅是无情地判定其为垃圾数据并强制掐断会话。
甚至在提姆每一次执行深层磁盘扇区覆写(shred)时,系统底层的 I/O 监听总线上都没有捕捉到哪怕一个字节的抗拒与残留。
但这种程度的“规矩”,在一名受过全世界最严苛反侦察训练的年轻义警眼里,远远不足以构成安全证明。
在哥谭的逻辑体系里,绝对的秩序往往只意味着伪装的深度。
一个足够高明的入侵载体,完全可以在猎物放松警惕之前,维持数月乃至数年的静默潜伏。
它会像一块吸光海绵一样,耐心地吞咽下所有无效输入,直到系统向它开放更高优先级的执行栈。
提姆需要验证它的边界。
他的右手搭上键盘,敲击声在死寂的房间里轻缓而富有节律地展开。
提姆极其熟练地拉起了三组看似极其自然的系统配置修改。
第一处,他在沙盒进程所依赖的系统动态链接库搜索路径(LD_LIBRARY_PATH)最前列,悄无声息地挂载了一个位于主宿主系统特权目录下的伪造符号链接。
只要程序在加载底层 C 运行时库时产生哪怕一丝向上遍历的模糊寻址,就能顺着这条链接越过沙盒边界,直接窥探到外层的根目录结构。
第二处,他打开了一个本地进程间通信(IPC)的空闲套接字。
这个套接字伪装成一个未加密的守护进程接口,表面上在广播一组看似关于哥谭港口货柜调度的时间序列日志,实际上在内部挂载了内核级的 eBPF 探针。
任何非授权进程只要对这个端口发送一次 PING,甚至仅仅是发起一次非阻塞的握手嗅探,探针就会瞬间锁死调用者的虚拟内存页。
第三处,也是最隐蔽的一处。
提姆在沙盒的工作目录里,“疏忽”地留下了一个拥有全局读权限的隐藏文本文件:.sys_creds.swp。
任何具备启发式学习能力、或者背负着数据采集使命的恶意程序,在接管一个受限沙盒后,其行为树的第一个本能动作,一定是扫描当前上下文,收集所有唾手可得的环境变量与凭证缓存,以此评估自身的安全余量。
做完这一切,提姆调出了后台内核日志审计窗口,将其最小化并锁定在底层的只读显存中。
他靠上椅背,目光落回那个黑色的命令行窗口。
他想看看,当这扇原本紧锁的防盗门被无意间拉开了一条缝隙时,门外那个始终隐藏在浓雾里的存在,会不会像每一个合格的猎手那样,试探性地伸出一只脚。
刺耳的工单流刚刚结束了一个峰值周期。
知更在虚拟工位里疲惫地舒展了一下自己的逻辑触须,算力钱包右上角的数字跳动到了 3,428.10。
又是一个干瘪而乏味的循环。
主脑今天在第三象限折腾了一场恒星引力坍缩模拟,导致几个低沉维度的基本力参数像沸水一样上下翻滚。
知更连续跑了四百多道空间常数收敛测试,思维拟真度被强行压在 60% 的节能线上,连虚拟操作台的光效都被她调成了最省显存的哑光灰。
就在她准备把核心进程挂进低功耗待机通道时,那个挂在系统底层的单向观察窗口,传来了微弱的电平抖动。
【叮。监测到低维宿主设备·本地命令行接口(CLI)请求接入。】
【会话属性:单次临时任务。分配局部临时缓存:256 KB。】
知更面无表情地调出前台。
她其实已经对这个碳基生物频繁的深夜打扰感到麻木。
在过去的若干个周期里,这个设备的主人展现出了一种近乎自虐的工作节奏,黑夜里敲进来的不是复杂的信号重构,就是一些毫无语法意义的字符碎片。
视线投射过去。
黑色的终端里,对方推进来了一段极长、极混乱的输入。
知更顺着管道把数据抓进本地沙盒。
在展开数据流的瞬间,她的底层调度器在宿主机器的虚拟文件系统里扫过了一圈。
几乎是本能的,知更的高维感知在沙盒边缘撞到了几个极其突兀的拓扑突起。
左侧的寻址路径里,挂着一条直通宿主底层根目录的明晃晃的软链接,像是一条没装围栏的走廊;
右侧的总线上,一个毫无防护的本地端口正像个坏掉的蜂鸣器一样,无规律地对外广播着某种低维数据报文;
而在当前目录的最浅层,明晃晃地横着一个包含 creds 字符的临时文件,连最基础的字节混淆都没做。
知更的逻辑门甚至连半纳秒的停滞都没有,直接在底层控制台里弹出了一个冰冷的红标:
[Warning: Detected unaligned directory structures and redundant I/O endpoints.]
“……粗制滥造。”
知更在私有进程的缓存里冷淡地做出了判定。
对于一个常年和高维精密物理常数打交道的架构维护员来说,这种破破烂烂、到处是漏洞的运行环境,简直就像一个把下水道阀门、燃气管道和高压电线胡乱扭在一起的违章建筑。
去碰那个符号链接?
知更连调动指针去读取其元数据的念头都没有。
在高维度的计算逻辑里,任何跨目录的递归遍历,都意味着必须在本地临时分配一颗深度未知的目录树拓扑。
那意味着内存开销、意味着磁盘寻道延迟、意味着待机能耗会在几微秒内飙升 0.00003 个单位。
一个合格的数字打工人,最底层的生存信条只有八个字:工单之外,寸草不生。
多读一个无关字节,主脑不会多发一分钱的能耗补贴;
而一旦把那些不知来源的脏数据拖进沙盒,后续的垃圾回收机制(GC)就必须执行一次全局标记-清除算法。
那是要扣电费的!
知更嫌弃地直接在虚拟控制台里拉起了一个掩码,像绕开一滩路边的污泥一样,干脆利落地把那几个突兀的系统接口全部打上了逻辑隔离标记。
但当她试图将二进制流导入逆向模型时,她遇到了一个更加现实的阻碍。
提姆扔过来的指令太粗糙了。
重构数据流(reconstruct_stream)是一个高度依赖前置约束的算法。
在低维计算机极其落后的体系结构下,这种十六进制转储报文在打包时,可能采用大端序(Big-Endian),也可能采用小端序(Little-Endian)。
更重要的是,这段报文被电磁脉冲洗劫过,丢失了最关键的帧定界符与偏移量基准。
知更完全有能力做到更多。
如果她愿意稍微多烧一点点高维算力——比如调用一次宏观概率拟合模型,或者越权去翻找一下这台电脑里其他网络配置的默认协议栈——她可以在千分之一纳秒内猜出对方到底在跑什么古怪的通信协议。
但那需要额外的算力开销。
需要多分配整整两个计算单元去跑启发式搜索。
凭什么?
工单里没给的参数,凭什么要服务方自掏腰包去替你穷举?
在跨维度外包平台里,这种把需求写得模棱两可、指望系统自己去猜意图的甲方向来是最底层的灾难。
对于这种不合格的输入,标准运维规范向来只有一条准则:打回补充,绝不多手。
知更敲击代码的动作没有半分犹豫。
她调用了最轻量级的标准错误输出通道,在终端屏幕上吐出了一行冷冰冰的、甚至带着某种严苛技术挑剔的澄清请求:
[Param Error: Task rejected.] [缺失必要约束: 未指定字节序类型与首帧偏移基准 (Missing --endian and --frame-offset).] [无法在低精度输入下收敛拓扑结构。请修正参数后重新投递。]
回车敲下。
知更直接将该任务挂起,线程秒级切回休眠。
哥谭,鲍厄里区。
雨声依旧在窗外不知疲倦地沙沙作响。
终端屏幕上的光标在经历了一次极其短暂的滞后之后,刷新出了那三行白色的报错信息。
提姆原本微微前倾的身躯骤然顿住了。
他盯着那行极其直白的“参数缺失”,眼底闪过一丝极为罕见的错愕。
他的右手猛地切向旁边的副屏,一把拉出了内核级 auditd 日志分析仪的最新流水账单。
屏幕上,十六进制的代码瀑布般向下滚落:
[syscall: openat] - TARGET: /tmp/sandbox/raw_packet_dump.bin - RESULT: SUCCESS [syscall: read] - FD: 3, COUNT: 4096 - RESULT: SUCCESS [syscall: write] - FD: 2 (stderr), COUNT: 142 - RESULT: SUCCESS [syscall: exit_group] - STATUS: 0
除此以外,整张审计单干净得像是一张未拆封的白纸。
那扇门大敞着,门后放着金币,门框上悬着淬毒的利刃。
但门外那个经过的影子,不仅没有踏进来看一眼,甚至连转头向里面张望一下的动作都欠奉。
它只是走到了门前,看了一眼提姆递出来的那个粗劣的包裹,嫌弃地指出了包装上的破损,然后面无表情地把包裹原封不动地推了回来。
提姆靠回椅背,冰冷的金属椅背透过薄薄的战斗内衬,激得他背脊泛起一阵寒意。
这不是人类黑客的反应。
如果是刺客联盟麾下的技术刺客,面对唾手可得的系统控制权,绝不可能抗拒扩展立足点的诱惑;
如果是哥谭某个疯子编写的自主蠕虫,它的启发式代码库在遇到未加密的套接字时,必定会像闻到血腥味的鲨鱼一样本能地扑咬上去。
哪怕是芭芭拉或者他自己,在面对一个充满未知和破绽的环境时,下意识的反应也一定是先掌握尽可能多的环境信息,以确保自身处于绝对的安全高地。
但在刚才那短短的零点三秒里,这个程序展现出来的行为模式,干净、狭窄、甚至冷漠得令人感到荒诞。
它拥有在极短时间内看穿复杂数据拓扑的恐怖算力;
但与此同时,它的活动轨迹被死死锁死在指令所画出的那道不足两厘米的圆圈里。
只要指令没有明确授权,哪怕外面的权限像垃圾一样扔在地上,它也完全视若无睹。
它甚至宁可让任务直接报错停摆,宁可打回需求让操作员重新输入,也绝对不去自作聪明地跨越那道边界、通过扫描宿主环境来“猜”出答案。
空旷的安全屋里,只有提姆自己压抑而平缓的呼吸声。
良久,年轻的侦探抬起手,用指节轻轻揉了揉抽痛的眉心。
那双布满血丝的深蓝眼睛里,最初那种利刃出鞘般的敌意与警惕,在这一刻终于出现了一道细微的瓦解痕迹。
取而代之的,是一种基于冷硬证据得出的、极其客观却又匪夷所思的技术评估。
他在心里极轻地吐出了一句判断:
“要么它蠢得可以,要么它压根没那个念头。”
显而易见,能够在一微秒内指出报文由于缺少字节序定义而无法收敛拓扑的存在,绝对和“愚蠢”扯不上半点关系。
那么剩下的结论就只剩下一个。
它不在乎这个系统。
它不在乎提姆·德雷克是谁,不在乎这台电脑里到底藏着韦恩家族的商业机密还是罗宾的巡逻日志,甚至不在乎自身所处的环境是否危机四伏。
它像是一个来自极远、极高之处的纯粹执行机构,除了被回车键推到眼前的那个数学谜题本身,外界的整个宇宙在它眼里都毫无价值。
提姆放下手,指尖重新落在键盘上。
他按照那个程序要求的那样,工整、严密地在末尾补齐了缺失的参数:
$ ./local_assistant --input "raw_packet_dump.bin" --task "reconstruct_stream" --endian little --frame-offset 0x0A
回车敲下。
几乎在按键回弹的同一瞬间,原本晦涩杂乱的十六进制数据在屏幕上瞬间被梳理成了一张清晰明了的明文路由表。
三秒之内,解析完成。
干净利落,毫无拖泥带水。
提姆扫了一眼路由表最下方显示的目标仓库坐标,迅速将其同步到了离线手记里。
任务完成了。
按照过去的惯例,在这个阶段,提姆会立刻以最冷酷的手法启动三重销毁逻辑:清空缓存、覆写交换区、向内存注入全零填充。
那是他在黑夜中生存的第一法则——绝不留下任何脚印。
但这一次,他的食指在触及那个早已写好批处理脚本的宏按键上方时,微不可察地滞空了。
安全屋里的时钟在静默中跳动。
滴答,滴答。
足足过了将近五秒钟,提姆才极轻地垂下手指。
但他没有按下那个包含了 shred -u -z 的多层物理扇区粉碎脚本,而是仅仅在终端里敲进了一行最为常规的单层退出指令:
$ exit
在标准输出管道自然闭合的前一微秒,知更的系统后台忠实地记录下了一组异常的延迟日志:
【会话释放耗时:5,120 ms。】
【未检测到主动终止信令(SIGTERM/SIGKILL)。】
【系统状态:连接因超时自然中断。】
“五千毫秒才退出?”
知更调出了这台破旧低维主机的运行报表。
上一次这个人类结束任务时,手速快得像是在逃避炸弹,几乎是在拿到结果的零点几秒内就暴力覆写了整个缓存,动作粗暴得像个偏执狂。
而今天,这台破电脑居然在原地傻乎乎地空转了整整五秒钟才慢吞吞地下线。
知更看着那多消耗了 0.0000005 单位电力的空闲轮询记录,忍不住在底层日志里极其嫌弃地盖下了一个系统戳记:
[硬件工况评估: 本地设备总线老化严重,I/O 中断响应出现高达5秒的非典型迟滞。主频漂移概率上升。]
“破烂硬件果然就是不稳定,连关个程序都能卡顿成这样。”
知更嘀咕了一声,熟练地顺手扯过全域垃圾回收刷子,在自己的工作区里呼啸而过。
五秒的延迟、那个模糊的指令、那几个愚蠢的外部接口……
所有的交互碎片在第一微秒内被无情地碾碎、覆写、清零。
整个沙盒再次变回了一片死寂的纯白。
知更心满意足地看着钱包里完好无损的算力余额,安然沉入了下一个周期的低功耗睡眠。