周负责人问:“medicaltenantoverride是谁配置的?什么时候配置的?有哪些租户id在列表里?”
供应商技术负责人低声说:“这个需要查配置库。”
“查。”周负责人说,“现在查。配置库导出,哈希固化。”
配置库导出很快完成,里面是一串租户id列表。监管人员看着列表,眉头皱起:“这批id里包含原医院的租户。”
会议室里空气像被抽走了一部分。供应商合规负责人试图解释:“医疗租户对投递及时性要求高,所以策略更积极。”
周负责人不做道德评判,只问:“更积极的策略是否评估过跨区与禁变窗口风险?是否告知过医院?是否有审批与签署?”
供应商沉默。
沉默比争辩更响。没有审批,没有签署,没有告知,那么“更积极”就是单方面决定。单方面决定在医疗场景里不叫服务优化,叫风险外溢。
取证员继续抽取关键时间段日志:转运当夜1800到0600。日志里出现一条条“degradationdetected”“autorecoverytriggered”。周负责人让取证员把1908前后五分钟的记录截取出来,与之前audit_export对齐。
190758,日志写:latencyl2detected(cnrelay)。
190803,autorecoverytriggered(medicaltenantoverride)。
190808,reduceprobewindow->5。
190811,settriggersensitivity->high。
190813,boostfallbackpriority->apac。
190815,changeapplied。
这串时间戳像一条极短却极硬的鞭子,把“人为审批”与“系统自动执行”绑在一起:190813在audit_export里已经出现过;现在日志证明它不是“某个人点了一下”,而是脚本按检测结果自动触发。审批角色opsmgr可能存在,但更关键的是:执行链已经自动化,且处于医疗覆盖模式。
供应商合规负责人终于忍不住:“这只是自动调整参数,不等于跨境传输,也不等于数据出境。”
周负责人看着他:“我们今天不讨论法律结论。我们只讨论事实链:你们的脚本在未完成审批引用、未绑定禁变窗口、未告知确认的情况下,自动把回退优先级指向apac,并缩短探测窗口、提高敏感度。事实成立,风险评估与告知义务就要重新计算。至于法律结论,由监管决定。”
监管人员点头:“事实链已记录。”
林昼在旁边听着,胸口像被压住,但同时又有一种奇怪的松动――松动来自于“事实终于完整”。完整意味着不再需要靠猜。猜测是最耗人的东西,事实反而能让人喘气。
---
中午十二点半,取证暂停,大家短暂休息。供应商的人走出会议室时明显在打电话,声音压得很低,但能听到“统一口径”“别乱说”几个词。
周负责人没有阻止,只对监管人员说:“建议监管同步下发‘禁止施压与反报复提醒’,尤其针对证人和内部人员。取证期间出现一致性声明或封口要求,会影响证据可信度。”
监管当场发了一条指令给供应商:“取证期间不得要求员工签署任何限制陈述事实的声明,不得以纪律处分威胁配合调查人员。违者纳入不配合记录。”
“写字让人不敢胡来。”林昼想起父亲的话。监管把提醒写出来,至少能让对方收敛一点。
---
与此同时,另一个战场在原医院的人事谈话室。
许景按约到了,接收医院法务安排了律师陪同。谈话开始时,人事负责人把一份《保密与一致性声明》推到桌上,语气像例行:“签一下,这是内部要求。签了我们再谈。”
律师立刻开口:“请问声明依据是什么?是否与监管取证冲突?声明是否限制陈述事实?”
人事负责人卡了一下:“这是保护医院与合作方商誉。”
许景按林昼给的模板,第一句就说:“我只陈述事实,不对结论作判断。任何要求我承认不当沟通的结论,我不签。”
人事负责人脸色变了:“你这是不配合。”
律师把监管刚下发的“禁止施压提醒”打印件放在桌上:“请注意,取证期间要求签署限制陈述事实的声明,可能构成不当施压。谈话可以继续,但不得以签署声明作为条件。”
人事负责人沉默片刻,最终把声明收回。谈话改成了问答,但每一个问题都被律师要求写进笔录。许景只回答自己做过什么、何时做、通过什么渠道提交给法务与监管。对于“你是不是故意对外泄露”,许景只说:“我通过医院法务与监管渠道提交材料,属于依法配合。其他不评价。”
谈话结束时,人事负责人想让许景在谈话记录上签“确认存在不当沟通”。许景拒签,只签“确认以上为谈话内容记录,不代表结论”。律师在旁边加了一句:“保留异议”。
笔录被带走,抄送监管。
许景走出谈话室时腿都在发软,但他没有倒。他知道自己没有赢,他只是没有被按下去。没有被按下去,证据链就不会断。
林昼下午收到法务的简报,只回了两个字:“做得好。”
这两个字不是夸奖,是确认:事实口径有效,施压落空。
---
下午两点,取证继续,周负责人进入“提交历史”审阅。
取证员把代码仓的提交记录拉出来,筛选关键日期:转运当日、以及补录发生的凌晨。列表里出现两个极刺眼的动作:
*1852,一次提交:mitmessage“hotfixemergencyassurancetuning”,修改了autorecovery阈值与fallbackregion默认值。作者显示为一个普通工程账号。
*0405,一次强制推送(forcepush)记录:重写了部分提交作者信息与message,随后0412出现补录申请单。
“强制推送”。
强制推送意味着有人尝试改写历史。代码仓不像区块链那样天然不可变,但企业级仓库会记录操作日志。只要有forcepush,就会留下痕迹。
周负责人问供应商技术负责人:“为什么凌晨0405发生forcepush?谁执行?目的是什么?”
技术负责人明显慌了一下:“可能是清理敏感信息。”
周负责人冷冷问:“清理敏感信息为什么要重写提交历史?你们有事后补录申请单,且补录被认定存在疑点。现在又出现重写代码历史的操作,你们认为这会被如何解读?”
供应商合规负责人急忙插话:“这是工程管理行为,与事件无关。”
周负责人把问题钉回去:“我们不接受‘无关’。取证只看时间线与关联性:0405重写历史,0412补录申请单,且0403创建token刷新凭据。三条线在十分钟内连续发生。你们需要给出可审计的解释:谁、为什么、依据何种流程、审批在哪里。否则记录为‘疑似证据污染行为’。”
“疑似证据污染”这六个字像砸在桌面上,会议室瞬间更安静了。监管人员没有说话,但笔已经开始写。
林昼的手心出汗。他明白这一刻意味着什么:供应商可能从“整改对象”走向“调查对象”。调查对象面对的不是整改清单,而是更严肃的后果。更严肃的后果会带来更极端的反扑。
周负责人像预判到了这种气氛,他没有继续刺激,只把下一步推进:“现在我们固定仓库操作日志与forcepush记录,导出原始字段并哈希。你们可以在后续提交解释材料,但今天先把证据固定。”
取证员导出日志,哈希生成,见证签字。历史被锁住了。
---
下午四点,周负责人开始重放“跨区回退优先级提升”与“冻结撬锁尝试”的调用链,把平台侧api轨迹与租户侧日志逐条对齐。
对齐结果很清晰:
*1908脚本触发提升apac优先级、缩probewindow、设高敏感;调用由svc_route_admin执行,但源头是routehealthguardian。
*1622与1623冻结后两次撬锁尝试,触发于“freezeblocksaction”分支,先刷新高权限token,再尝试改controller,均被平台拒绝。
*冻结启用前一小时高权限token异常刷新,确实存在,且approvalref为空。
*三个月前成功关围栏事件,approvalref为空,reasoncode=auto_recovery,触发为延迟劣化l3。
四条证据链合并后,一个轮廓变得异常清晰:这不是一套“临时救火”,而是一套长期存在的自动化权柄机制――以应急为名,持有超级权限;以恢复为名,牺牲边界;以效率为名,缺失审批引用;遇到冻结,就尝试夺回控制权。
这套机制存在的每一天,禁变窗口都只是“你希望它不要发生”;而冻结开关被按下之后,它就变成了“机制与机制的对抗”。
周负责人最后说:“取证阶段结论不做法律评价,但我们会在阶段报告里写明:存在**险自动化动作与权限过大问题;存在审批引用缺失情况下仍可执行的设计;存在试图修改冻结控制权的逻辑;存在疑似证据污染行为(forcepush重写历史)需进一步解释。”
监管人员接着补了一句:“供应商需在24小时内提交解释材料与整改措施。解释材料必须可审计,不得以口头替代。整改必须先收敛权柄,再谈效率。”
供应商合规负责人脸色很难看,却只能点头。
---
傍晚六点,林昼回到病房,父亲正坐在窗边晒一点落日余光。
父亲看到他,第一句仍旧是:“你今天吃了吗?”
林昼笑了一下:“吃了。真的。”
父亲不再追问,只说:“今天查得怎么样?”
林昼把话说得很短:“脚本不是误触发,它有一套自动动作,能关围栏、提apac、缩窗口,还会在被锁住时试图把锁夺回来。取证把它写在纸上了。”
父亲沉默了很久,眼睛望着窗外的光:“那就危险了。”
林昼点头:“是危险。但危险写出来,就不再是暗的。”
父亲缓慢地说:“暗的最吓人。明的……还能防。”
林昼握住父亲的手:“我们现在能防。”
父亲轻轻回握了一下,声音低低的:“你别逞强。你只要让他们写字,写到他们不敢乱动就行。”
林昼应了一声,没有再多解释。他知道父亲要的不是技术细节,而是一个可依靠的秩序感:事情正在被写成字,而不是被压成沉默。
---
夜里十点,供应商发来一份紧急“解释草稿”,试图把forcepush说成“误操作”,把medicaltenantoverride说成“保障名单”,把冻结撬锁逻辑说成“容灾自愈”。草稿里充满了“可能”“大概”“历史原因”“行业惯例”。
法务把草稿转给林昼,问他要不要逐句反驳。
林昼只回了一句:“不逐句。让他们把四样东西补齐:审批链、授权链、运行记录、回收证据。没有这四样,文字就是雾。”
法务回:“明白。”
林昼关掉手机,坐在走廊的长椅上,第一次真正感到一种近乎锋利的疲惫。不是因为事情太难,而是因为事情终于走到“必须承担后果”的阶段。承担后果的人会发疯。发疯的人会反扑。反扑可能更脏、更险。
但他也知道,取证进场的这一天,真正改变的是一个底层逻辑:从此以后,对方再说“误触发”,也要和代码对话;再说“紧急保障”,也要和权限清单对话;再说“行业惯例”,也要和审批引用缺失对话;再说“你们害的”,也要和forcepush时间戳对话。
话术仍会存在,但它的成本变高了。
他把今天的最后一条记录写进索引,笔尖划过纸面时发出轻微的声响:
*取证进场完成:封存iamtoken代码仓编排任务关键日志;固定1908自动动作链;固定冻结撬锁逻辑;发现medicaltenantoverride;发现0405forcepush疑点;要求补齐审批链与回收证据
写完,他合上本子,靠在椅背上闭眼。
黑暗里,他只剩一个清晰的判断:
“钥匙已经被点名,暗门已经被写字。接下来要看的,不是他们怎么解释,而是他们愿不愿意把钥匙交出来,愿不愿意亲手把暗门拆掉。”_c