上午八点十二,天刚亮透,接收医院行政楼的玻璃幕墙像被水洗过一样冷。
林昼站在一层大厅的自动门旁,听着门外车轮碾过地面细碎的声响――两辆带监管标识的公务车停下,后面跟着一辆第三方取证机构的设备车。车门打开时,周负责人先下车,手里拎着一个灰色防震箱,箱体边缘贴着封条编号;监管联络人随后下车,脸色比昨夜更沉;最后下来的是两名穿便装、但肩背挺得很直的人员,其中一人胸口挂着工作证,证件上写着“网安技术支撑”。
封管道这一步,终于不再只是“审计建议”,而是“联合取证”。
林昼迎上去,周负责人没寒暄,直接问:“医院侧准备好了吗?我们要在中午前完成cicd镜像保全,越拖越危险。”
信息安全负责人也赶来,手里拿着一叠临时通行证与一张路线图:“医院这边没问题。供应商那边怎么进?”
监管联络人把文件夹一翻,抽出一张纸,纸上红章鲜明:“带着保全令与联合取证函过去。他们如果再拖,就按不配合处理,必要时现场采取强制证据保全措施。平台那边也会同步冻结他们对租户的任何远程发布权限。”
周负责人点头:“好。先把顺序再过一遍――到现场第一件事,不问原因,先固定系统状态:cicd主机、流水线配置库、凭据存储、构建产物仓库、制品发布记录。每一个都做只读镜像,哈希固化,然后再问‘谁’。”
信息安全负责人低声补了一句:“他们昨晚已经在找机会甩锅,可能会说‘外包维护’或‘第三方工具’。”
周负责人不动声色:“甩锅要有证据。管道里变量谁配置、凭据谁发、作业谁触发,系统都会记。”
林昼听着这几句话,忽然有一点恍惚――过去他最怕的就是“说不清”,怕人用话术把事实揉碎。现在他发现,真正的力量并不是谁口才好,而是谁能把事实放在桌面上,让所有解释都绕不过去。
大厅的钟指向八点二十七,联合取证小组出发。
---
九点零三,供应商在本市的运维中心。
这是一栋看起来很普通的写字楼,外立面干净,门口甚至摆着绿植,仿佛这里发生的一切都与“暗门”无关。但林昼很清楚,暗门从来不会写在门牌上,它写在变量里,写在权限里,写在“可选项”里。
前台看到监管函件,脸色立刻变了,电话打了三通才把人叫下来。合规负责人一路小跑进来,喘着气,先堆出一副客气的笑:“各位领导辛苦。我们已经在准备材料了,不过cicd系统涉及多个客户,镜像保全可能会影响其他业务,能不能――”
监管联络人直接打断:“不谈影响。保全令要求固定相关系统证据,你们可以在不影响其他客户的前提下做分区镜像,但必须保证可验证性。现在带我们去机房,立刻开始。”
合规负责人笑僵了一下:“机房不在这里,在云上。”
周负责人看着他:“云上也有控制台,有配置库,有日志。带我们到你们cicd控制台的实际操作席位,现场登录,先固定。”
合规负责人又想说什么,网安技术人员冷冷补了一句:“不要再用‘云上’当挡箭牌。云上更好固定,操作日志更完整。拖延只会增加你们的不配合记录。”
这句话像一把钥匙,直接把“谈条件”的门关死。合规负责人不再绕,领他们进了会议室。
会议室里已经坐着两名供应商技术人员,一名穿卫衣的年轻人,一名年纪偏大的运维主管。电脑屏幕上是cicd控制台首页,明显刚刚打开不久。林昼扫了一眼右上角,看到一个小字提示:**“近15分钟内发生配置修改:2次。”**
他心里一紧。
周负责人也看到了,语气没有变化:“谁改的?改了什么?”
年轻人下意识说:“可能是我们在准备配合,做了一些整理。”
监管联络人声音更冷:“保全令下发后,你们任何整理都可能构成证据污染。现在停止一切操作,先由取证员接管,按流程固定现状。”
取证员打开自带的法证工作站,接入只读录屏与操作日志捕获工具。周负责人把流程念了一遍:控制台登录使用只读账号,所有查询与导出操作在录屏下进行,导出文件现场计算哈希,见证方签字。
供应商运维主管想争:“只读账号权限不够,我们需要管理员才能导出某些日志。”
周负责人淡淡一句:“管理员可以,但必须在取证员控制下操作,并且先固定管理员账号的权限与登录轨迹。你们愿意用管理员,就等于愿意把管理员的责任链也摆上台面。”
运维主管嘴唇动了动,没再说。
登录开始。
第一项:固定流水线列表与最近七天触发记录。取证员输入关键字检索:routeguardian、guardian-prod、emergencyassurance。屏幕立刻跳出一条job:**routeguardian-prod**,旁边标着“高优先级自动触发启用”。
取证员点开“最近触发”,列表刷出一串时间戳。林昼的目光被其中两条钉住:
*1852:manualtrigger(触发者:devops_x)
*0405:forcedeploy(触发者:itil_admin)
0405。
又是这个时间点,像一根反复出现的刺。
周负责人没有立即质问,先按流程让取证员导出“触发详情”:触发参数、环境变量、凭据引用、产物版本、发布目标。导出完成,现场哈希固化。
第二项:固定凭据存储。
控制台里有一个“credentials”入口,打开后是权限树。取证员检索“high_scope”“itops”“route_admin”。页面跳出一个凭据条目:**high_scope_token**,类型为“密文引用”,最后更新时间:**0403**。
0403创建刷新凭据、0405触发强制发布,这条时间链在这里终于握住了具体的“手柄”。
周负责人问:“这个凭据引用链接到哪里?是密钥管理系统还是本地加密库?”
年轻人急着解释:“我们用的是标准密钥管理,自动引用,不是手工――”
网安技术人员抬手打断:“别讲概念。导出凭据引用链:创建者、审批引用、用途标签、访问次数、访问来源。没有审批引用,记为违规。”
取证员点开凭据详情,字段弹出:
*creator:itil_admin
*approvalref:null
*tag:tokenrefreshfix
*accesscount(24h):63
*accessorigin:jenkinsagentpoolaagentpoolb
“approvalref:null”像一颗冰冷的钉子,钉进会议室的空气里。
监管联络人盯着那一行,问合规负责人:“你们刚才还说在配合整理,为什么凭据创建审批引用为空?医疗客户的高危scope凭据可以无审批创建?”
合规负责人脸色发白:“这是……历史流程缺失,我们会补录。”
周负责人平静地说:“补录不改变事实。事实是:你们在关键时间点创建了无审批引用的高危凭据,并且该凭据在24小时内被访问63次。我们会把这条写进阶段报告。”
第三项:固定流水线脚本内容。
取证员打开routeguardian-prod的pipelinescript。屏幕上出现熟悉的几行:刷新token、绑定高危scope、触发恢复动作、冻结受阻则请求控制权变更。那句最刺眼的开关依旧在:
**audit_ref_optional=true**
这不是“可选项”,这是“默认绕过”。默认绕过意味着制度被设计成“可以不走”。
周负责人问合规负责人:“这个变量谁设置的?为什么是true?有没有安全评审记录?”
合规负责人咬着牙:“这可能是工程师为了效率临时加的。”
周负责人没有反驳,只看运维主管:“你是主管。你告诉我:这条流水线脚本是否经过你们变更管理?是否有审批?谁批准上线?”
运维主管额头汗冒出来:“我们……我们有变更流程,但自动化脚本改动有时――”
监管联络人直接把话截断:“‘有时’就是漏洞。你们今天必须提交变更流程证据:该脚本的版本历史、审批工单、评审记录。没有就记为流程失效。”
取证继续推进。
第四项:固定制品仓库与发布目标。
取证员打开制品仓库,找到1852与0405对应的构建产物版本。发布目标列表里出现两个环境:cn主环境、apac回退环境。林昼看到“apac回退环境”那行,胸口又是一紧――这意味着管道层面已经把跨区回退作为“可发布目标”,而不是临时手工操作。
更关键的是,0405那次“forcedeploy”的发布目标勾选了“控制策略配置包”。也就是说,那次发布不只是代码更新,还可能重写策略配置。
这与“强制推送重写代码历史”的疑点,彼此照应:他们在同一时间点,既动了代码历史,又动了发布管道。
周负责人要求把0405的发布详情全量导出:发布包内容清单、变更差异、发布审批链、回滚记录。系统提示:审批链字段为空。
又是空。
空不是偶然,空是习惯。
---
十点二十六,最尖锐的问题终于落到“谁”的层面。
网安技术人员要求提供itil_admin账号的登录轨迹。控制台显示:过去24小时内,itil_admin账号有两次登录,一次来自供应商办公网段,一次来自海外公共出口;海外登录发生在凌晨0218,失败三次后成功一次,随后触发了凭据访问与作业查询,但未触发发布。
海外公共出口、失败三次后成功一次――与平台侧“海外出口重试旧token”的线索相互咬合。
监管联络人问:“你们解释一下:itil_admin为什么会在海外登录?谁在海外?是你们员工出差,还是账号泄露?”
合规负责人声音发虚:“我们会内部核查,不排除账号被盗。”
网安技术人员冷冷说:“你们现在要做的是提供证据,不是给结论。提供:账号mfa是否启用、是否绑定硬件令牌、登录设备指纹、ip归属、成功登录后的操作序列。我们会判断是否为被盗或内部行为。”
取证员把登录设备指纹导出。设备指纹显示为一台虚拟机浏览器环境,user-agent伪装普通chrome,但设备标识与供应商内部标准终端不一致。更异常的是,成功登录后第一件事不是查看报警,而是进入“credentials”页面,查询high_scope_token。
像是在确认钥匙还在不在。
林昼看着那条操作序列,后背一点点发冷。他意识到,这件事已经不是单纯的“供应商为了效率留下暗门”,更可能存在“有人在暗门上做了二次利用”:要么内部有人主动伸手,要么外部有人拿到钥匙伸手。
无论哪种,都意味着风险升级。
周负责人把所有导出文件当场哈希固化,监管与网安分别签字。合规负责人也被要求签字确认见证。合规负责人手抖得厉害,签名像一条被拉扯的线。
十点五十八,周负责人宣布:“cicd控制台证据固定完成,下一步做系统镜像。请你们提供jenkins控制节点与agentpool的访问路径。若你们拒绝,网安将按程序介入。”
合规负责人终于扛不住,低声说:“我们需要上级批准。”