第17章:熟悉的幽灵(1/2)

我们马上记住本站网址,www.ri4.net,若被浏/览/器/转/码,可退出转/码继续阅读,感谢支持.

路容点击周哲发来的链接,远程桌面界面在屏幕上展开。周哲的共享屏幕已经开启,显示着密密麻麻的日志文件和实时监控图表。他的声音从耳机里传来:“能看到吗?异常数据包主要集中在最近二十分钟,解密失败率突然飙升。”路容调整麦克风,声音平稳:“看到了。先从解密失败的数据包开始分析吧。”她的手指放在键盘上,目光锁定屏幕上那些被标记为红色的条目。那些加密负载格式错误的数据包,那些触发告警的异常记录——每一行代码,每一个时间戳,都可能藏着三年前的真相。而此刻,周哲就在屏幕另一端,等待她的专业判断。

“我拉取了最近三十分钟的详细日志。”周哲的声音带着熬夜的沙哑,背景里传来他敲击键盘的清脆声响,“你看这个,198.51.100.23这个源地址,连续发了十七个数据包,payload字段的加密格式都不对。AES-256-GCM的认证标签缺失,解密服务直接拒绝了。”

路容放大日志窗口。

屏幕上的文字在昏暗的房间里泛着冷白的光。她的眼睛快速扫过每一行:

```

[2025-03-18 01:07:23.451] INFO 解密服务 - 数据包ID: DL-20250318-014723-8876 源IP: 198.51.100.23 状态: 解密失败 原因: 认证标签校验失败 (错误码: AES_GCM_AUTH_FAIL)

[2025-03-18 01:07:24.112] INFO 解密服务 - 数据包ID: DL-20250318-014724-1123 源IP: 198.51.100.23 状态: 解密失败 原因: 加密负载长度异常 (错误码: PAYLOAD_LEN_INVALID)

[2025-03-18 01:07:24.889] INFO 解密服务 - 数据包ID: DL-20250318-014724-8890 源IP: 198.51.100.23 状态: 解密失败 原因: 初始化向量格式错误 (错误码: IV_FORMAT_ERR)

```

“这些错误码……”路容轻声说,声音通过变声器处理后显得平静克制,“看起来像是加密流程本身有问题。密钥轮换出错了?还是这个数据源用的根本不是我们的标准加密库?”

“我查过了。”周哲那边传来鼠标滚轮滚动的声音,“密钥服务日志显示,轮换正常。而且这个IP段是今晚刚接入的测试渠道,按理说应该使用和我们其他数据源一样的SDK。除非——”

“除非有人故意发送格式错误的数据。”路容接上他的话。

耳机里沉默了两秒。

“有这个可能。”周哲说,“但为什么?测试环境的数据又没什么价值。”

路容没有回答。她的目光停留在那些错误码的排列方式上。AES_GCM_AUTH_FAIL,PAYLOAD_LEN_INVALID,IV_FORMAT_ERR——每个错误码后面都跟着一个括号,括号里的描述用下划线连接单词,首字母大写。这种命名习惯……

她感到喉咙发紧。

“我们看看这些数据包被标记为异常后的处理流程。”路容说,声音依然平稳,“你的过滤规则触发后,系统是怎么处理这些‘异常’数据包的?直接丢弃?还是进入待审核队列?”

“我设置了进入待审核队列。”周哲说,“毕竟可能是误判,需要人工复核。我调一下后台服务的日志。”

屏幕切换。

新的日志窗口弹出,显示的是“数据质量审核服务”的记录。路容看着那些时间戳和操作记录,呼吸逐渐变缓。

```

[2025-03-18 01:08:15.332] INFO 审核服务 - 收到异常数据包队列 批次ID: ABN-20250318-010815 数据包数量: 1274

[2025-03-18 01:08:16.001] INFO 审核服务 - 开始处理批次: ABN-20250318-010815 处理线程:审核线程-3

[2025-03-18 01:08:16.445] INFO 审核服务 - 数据包DL-20250318-014723-8876 审核结果: 标记为“疑似恶意格式” 处理动作: 隔离存储 (存储路径: /data/quarantine/20250318/014723-8876.bin)

[2025-03-18 01:08:16.778] INFO 审核服务 - 数据包DL-20250318-014724-1123 审核结果: 标记为“疑似恶意格式” 处理动作: 隔离存储 (存储路径: /data/quarantine/20250318/014724-1123.bin)

```

路容的指尖开始发凉。

不是因为这些内容——这些流程很正常。而是因为日志的格式。

时间戳的写法:[2025-03-18 01:08:15.332]

日志级别的标注:INFO 审核服务 -

破折号后面的空格:一个空格,不多不少。

错误描述的括号格式:(存储路径: /data/quarantine/20250318/014723-8876.bin)

冒号后面也是一个空格。

她的心跳开始加速,在胸腔里撞击出沉闷的声响。耳朵里传来血液流动的嗡鸣,盖过了周哲在耳机里说话的声音。她只能看见屏幕上的文字,那些排列整齐的日志条目,那些深入骨髓的格式习惯——

“若溪?”周哲的声音把她拉回来,“你在听吗?我说,这些数据包被隔离后,系统还生成了审计记录,需要我调出来看看吗?”

路容深吸一口气。

出租屋里的空气带着灰尘和陈旧木料的气味。窗外的城市已经彻底沉睡,只有远处高架上偶尔驶过的车辆传来模糊的呼啸。她面前的电脑屏幕是房间里唯一的光源,照亮了她放在键盘上微微颤抖的手指。

“调出来。”她说,声音比刚才低了一个度,“我要看完整的处理链条。”

“好。”

新的日志窗口。

这次是“系统审计服务”的记录。路容的眼睛死死盯着屏幕,瞳孔在昏暗的光线中放大。她看着那些条目,一行,两行,三行——

```

[2025-03-18 01:08:17.112] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014723-8876 审计ID: AUDIT-20250318-010817-001

[2025-03-18 01:08:17.334] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014724-1123 审计ID: AUDIT-20250318-010817-002

```

时间戳。

日志级别。

服务名称。

破折号。

空格。

操作描述。

执行服务。

目标标识。

审计ID。

每一个字段的位置。

每一个标点的用法。

每一个空格的间隔。

路容的呼吸停止了。

三年前。

天启科技。

“灯塔”项目。

服务器机房恒温空调的低沉嗡鸣。

屏幕上滚动的实时日志。

那些她看了无数遍的、记录着“数据泄露”发生前后所有操作的日志条目。

她颤抖着手,移动鼠标。

不是去操作远程桌面——而是点开了自己电脑本地的一个加密文件夹。输入三十二位密码,确认。文件夹打开,里面是几十个按日期命名的截图文件。她的手指在触摸板上滑动,指尖冰凉,几乎感觉不到触控板的摩擦。

找到它。

2022年。

7月。

15日。

那个日期像烧红的铁烙在她的记忆里。

文件:20220715_天启_服务器日志_片段_03.png

双击打开。

图片在屏幕上展开。

同样是日志。

同样是时间戳。

同样是服务记录。

```

[2022-07-15 22:31:45.887] INFO 数据导出服务 - 接收到导出请求 请求ID: EXP-20220715-223145 用户: lujian (李剑) 导出数据集: 灯塔_用户行为_样本_202207

[2022-07-15 22:31:46.112] INFO 数据导出服务 - 开始处理导出请求: EXP-20220715-223145 处理线程:导出线程-2

[2022-07-15 22:31:47.334] INFO 数据导出服务 - 导出完成 请求ID: EXP-20220715-223145 输出文件: /export/灯塔_样本_20220715_223145.zip 文件大小: 2.3GB

[2022-07-15 22:31:47.889] AUDIT 系统审计 - 操作: 数据导出 执行用户: lujian 目标数据集: 灯塔_用户行为_样本_202207 审计ID: AUDIT-20220715-223147-001

```

路容的视线在两个屏幕之间来回移动。

左边,是星耀集团“深蓝计划”的审计日志。

右边,是三年前天启科技“灯塔项目”的日志截图。

时间不同。

项目不同。

公司不同。

服务名称不同。

但格式——

[2025-03-18 01:08:17.112] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014723-8876 审计ID: AUDIT-20250318-010817-001

[2022-07-15 22:31:47.889] AUDIT 系统审计 - 操作: 数据导出 执行用户: lujian 目标数据集: 灯塔_用户行为_样本_202207 审计ID: AUDIT-20220715-223147-001

时间戳的毫秒数用点分隔。

破折号后面永远跟着一个空格。

操作描述后面是冒号加空格。

执行者字段的写法。

审计ID的生成规则:AUDIT-年月日-时分秒-序号。

还有——

路容把两张图片并排放在一起,放大细节。

错误码的写法。

天启科技的日志里,有一次网络超时的记录:

```

[2022-07-15 22:30:12.445] WARN 数据传输 - 连接超时 (错误码: NET_TIMEOUT; 重试次数: 3)

```

分号。

错误码后面是分号。

但分号前面有一个空格。

NET_TIMEOUT;

她猛地切回星耀的日志窗口,搜索分号。

找到了。

在解密服务的某条警告日志里:

```

[2025-03-18 01:05:33.778] WARN 解密服务 - 密钥缓存未命中 (错误码: KEY_CACHE_MISS; 已触发密钥重新加载)

```

KEY_CACHE_MISS;

分号。

空格。

然后分号。

一模一样。

路容的整个身体开始颤抖。

不是冷——出租屋里的暖气还在工作,空气温热干燥。是那种从骨髓深处渗出来的寒意,沿着脊椎爬升,在头皮上炸开细密的刺痛。她的手指蜷缩起来,指甲陷进掌心。疼痛让她稍微清醒了一些,但视线依然模糊,屏幕上的文字在晃动。

“若溪?”周哲的声音再次传来,这次带着明显的疑惑,“你那边还好吗?我这边看到你的鼠标很久没动了。”

路容张开嘴。

她想说话。想说“我没事”。想说“继续排查”。但喉咙像被什么东西堵住了,声带僵硬,发不出任何声音。她只能听见自己粗重的呼吸,在安静的房间里显得格外刺耳。

“若溪?”

她用力吞咽,口腔里干得发苦。手指在键盘上摸索,敲出两个字:“在。”

“你找到什么了吗?”周哲问,“我这边倒是发现问题了。你看这个——”

屏幕切换回数据流监控界面。周哲用鼠标圈出一段代码:“你的过滤规则,第87行,边界条件判断有问题。`if (error_rate > 0.01 && data_volume > 1000)`,这里用的是逻辑与,但实际应该用逻辑或。因为只要异常率超过1%或者数据量超过阈值,就应该告警。你用与的话,必须两个条件同时满足才会触发。所以之前那些零散的异常数据包没触发告警,直到今晚这个新数据源涌入大量数据,两个条件才同时满足。”

他的声音轻松了一些,甚至带着点笑意:“小bug,我改一下就行。改完重新部署,告警应该就能解除。不过你设计这个规则的时候,是不是太谨慎了?怕误报太多?”

路容盯着屏幕上被圈出的那行代码。

她的代码。

她故意留下的漏洞。

她精心设计的鱼饵。

现在,周哲轻松地找到了问题,轻松地修复了。他以为这只是新手工程师常犯的逻辑错误。他不知道这行代码背后藏着什么。不知道这个漏洞是故意留下的。不知道这个告警是她等待的契机。

更不知道,就在他排查技术问题的这几分钟里,她已经看到了地狱。

“若溪?”周哲又问了一次,“你确定没事吗?你的呼吸声有点重。”

路容闭上眼睛。

三秒。

五秒。

十秒。

她重新睁开眼睛,手指在键盘上敲击,通过聊天窗口发送消息:“没事,刚才在对比日志。你说得对,是我考虑不周。谢谢指正。”

发送。

然后她关掉了麦克风。

她需要安静。

本章节未完,点击这里继续阅读下一页(1/2)