第五十二章:封管道
推荐阅读:八零老太逆袭,铁锹训子拍谁谁死 被偷听心声?神女在此,暴君也得给我跪! 盖世群英 穿越成合欢宗暗子,我靠宗 假如我们不曾有如果 梦倾紫宸宫 封神天决 一字封仙 神倾妖恋 诡异:家族群就我一个活人?
上午八点十二,天刚亮透,接收医院行政楼的玻璃幕墙像被水洗过一样冷。
林昼站在一层大厅的自动门旁,听着门外车轮碾过地面细碎的声响——两辆带监管标识的公务车停下,后面跟着一辆第三方取证机构的设备车。车门打开时,周负责人先下车,手里拎着一个灰色防震箱,箱体边缘贴着封条编号;监管联络人随后下车,脸色比昨夜更沉;最后下来的是两名穿便装、但肩背挺得很直的人员,其中一人胸口挂着工作证,证件上写着“网安技术支撑”。
封管道这一步,终于不再只是“审计建议”,而是“联合取证”。
林昼迎上去,周负责人没寒暄,直接问:“医院侧准备好了吗?我们要在中午前完成CI/CD镜像保全,越拖越危险。”
信息安全负责人也赶来,手里拿着一叠临时通行证与一张路线图:“医院这边没问题。供应商那边怎么进?”
监管联络人把文件夹一翻,抽出一张纸,纸上红章鲜明:“带着保全令与联合取证函过去。他们如果再拖,就按不配合处理,必要时现场采取强制证据保全措施。平台那边也会同步冻结他们对租户的任何远程发布权限。”
周负责人点头:“好。先把顺序再过一遍——到现场第一件事,不问原因,先固定系统状态:CI/CD主机、流水线配置库、凭据存储、构建产物仓库、制品发布记录。每一个都做只读镜像,哈希固化,然后再问‘谁’。”
信息安全负责人低声补了一句:“他们昨晚已经在找机会甩锅,可能会说‘外包维护’或‘第三方工具’。”
周负责人不动声色:“甩锅要有证据。管道里变量谁配置、凭据谁发、作业谁触发,系统都会记。”
林昼听着这几句话,忽然有一点恍惚——过去他最怕的就是“说不清”,怕人用话术把事实揉碎。现在他发现,真正的力量并不是谁口才好,而是谁能把事实放在桌面上,让所有解释都绕不过去。
大厅的钟指向八点二十七,联合取证小组出发。
---
九点零三,供应商在本市的运维中心。
这是一栋看起来很普通的写字楼,外立面干净,门口甚至摆着绿植,仿佛这里发生的一切都与“暗门”无关。但林昼很清楚,暗门从来不会写在门牌上,它写在变量里,写在权限里,写在“可选项”里。
前台看到监管函件,脸色立刻变了,电话打了三通才把人叫下来。合规负责人一路小跑进来,喘着气,先堆出一副客气的笑:“各位领导辛苦。我们已经在准备材料了,不过CI/CD系统涉及多个客户,镜像保全可能会影响其他业务,能不能——”
监管联络人直接打断:“不谈影响。保全令要求固定相关系统证据,你们可以在不影响其他客户的前提下做分区镜像,但必须保证可验证性。现在带我们去机房,立刻开始。”
合规负责人笑僵了一下:“机房不在这里,在云上。”
周负责人看着他:“云上也有控制台,有配置库,有日志。带我们到你们CI/CD控制台的实际操作席位,现场登录,先固定。”
合规负责人又想说什么,网安技术人员冷冷补了一句:“不要再用‘云上’当挡箭牌。云上更好固定,操作日志更完整。拖延只会增加你们的不配合记录。”
这句话像一把钥匙,直接把“谈条件”的门关死。合规负责人不再绕,领他们进了会议室。
会议室里已经坐着两名供应商技术人员,一名穿卫衣的年轻人,一名年纪偏大的运维主管。电脑屏幕上是CI/CD控制台首页,明显刚刚打开不久。林昼扫了一眼右上角,看到一个小字提示:**“近15分钟内发生配置修改:2次。”**
他心里一紧。
周负责人也看到了,语气没有变化:“谁改的?改了什么?”
年轻人下意识说:“可能是我们在准备配合,做了一些整理。”
监管联络人声音更冷:“保全令下发后,你们任何整理都可能构成证据污染。现在停止一切操作,先由取证员接管,按流程固定现状。”
取证员打开自带的法证工作站,接入只读录屏与操作日志捕获工具。周负责人把流程念了一遍:控制台登录使用只读账号,所有查询与导出操作在录屏下进行,导出文件现场计算哈希,见证方签字。
供应商运维主管想争:“只读账号权限不够,我们需要管理员才能导出某些日志。”
周负责人淡淡一句:“管理员可以,但必须在取证员控制下操作,并且先固定管理员账号的权限与登录轨迹。你们愿意用管理员,就等于愿意把管理员的责任链也摆上台面。”
运维主管嘴唇动了动,没再说。
登录开始。
第一项:固定流水线列表与最近七天触发记录。取证员输入关键字检索:RouteGuardian、Guardian-Prod、EmergencyAssurance。屏幕立刻跳出一条Job:**RouteGuardian-Prod**,旁边标着“高优先级 / 自动触发启用”。
取证员点开“最近触发”,列表刷出一串时间戳。林昼的目光被其中两条钉住:
* 18:52:Manual Trigger(触发者:devops_x)
* 04:05:Force Deploy(触发者:itil_admin)
04:05。
又是这个时间点,像一根反复出现的刺。
周负责人没有立即质问,先按流程让取证员导出“触发详情”:触发参数、环境变量、凭据引用、产物版本、发布目标。导出完成,现场哈希固化。
第二项:固定凭据存储。
控制台里有一个“Credentials”入口,打开后是权限树。取证员检索“HIGH_SCOPE”“itops”“route_admin”。页面跳出一个凭据条目:**HIGH_SCOPE_TOKEN**,类型为“密文引用”,最后更新时间:**04:03**。
04:03创建刷新凭据、04:05触发强制发布,这条时间链在这里终于握住了具体的“手柄”。
周负责人问:“这个凭据引用链接到哪里?是密钥管理系统还是本地加密库?”
年轻人急着解释:“我们用的是标准密钥管理,自动引用,不是手工——”
网安技术人员抬手打断:“别讲概念。导出凭据引用链:创建者、审批引用、用途标签、访问次数、访问来源。没有审批引用,记为违规。”
取证员点开凭据详情,字段弹出:
* Creator:itil_admin
* ApprovalRef:NULL
* Tag:token refresh fix
* AccessCount(24h):63
* AccessOrigin:Jenkins Agent Pool A / Agent Pool B
“ApprovalRef:NULL”像一颗冰冷的钉子,钉进会议室的空气里。
监管联络人盯着那一行,问合规负责人:“你们刚才还说在配合整理,为什么凭据创建审批引用为空?医疗客户的高危scope凭据可以无审批创建?”
合规负责人脸色发白:“这是……历史流程缺失,我们会补录。”
周负责人平静地说:“补录不改变事实。事实是:你们在关键时间点创建了无审批引用的高危凭据,并且该凭据在24小时内被访问63次。我们会把这条写进阶段报告。”
第三项:固定流水线脚本内容。
取证员打开RouteGuardian-Prod的Pipeline Script。屏幕上出现熟悉的几行:刷新token、绑定高危scope、触发恢复动作、冻结受阻则请求控制权变更。那句最刺眼的开关依旧在:
**AUDIT_REF_OPTIONAL=true**
这不是“可选项”,这是“默认绕过”。默认绕过意味着制度被设计成“可以不走”。
周负责人问合规负责人:“这个变量谁设置的?为什么是true?有没有安全评审记录?”
合规负责人咬着牙:“这可能是工程师为了效率临时加的。”
周负责人没有反驳,只看运维主管:“你是主管。你告诉我:这条流水线脚本是否经过你们变更管理?是否有审批?谁批准上线?”
运维主管额头汗冒出来:“我们……我们有变更流程,但自动化脚本改动有时——”
监管联络人直接把话截断:“‘有时’就是漏洞。你们今天必须提交变更流程证据:该脚本的版本历史、审批工单、评审记录。没有就记为流程失效。”
取证继续推进。
第四项:固定制品仓库与发布目标。
取证员打开制品仓库,找到18:52与04:05对应的构建产物版本。发布目标列表里出现两个环境:CN主环境、APAC回退环境。林昼看到“APAC回退环境”那行,胸口又是一紧——这意味着管道层面已经把跨区回退作为“可发布目标”,而不是临时手工操作。
更关键的是,04:05那次“Force Deploy”的发布目标勾选了“控制策略配置包”。也就是说,那次发布不只是代码更新,还可能重写策略配置。
这与“强制推送重写代码历史”的疑点,彼此照应:他们在同一时间点,既动了代码历史,又动了发布管道。
周负责人要求把04:05的发布详情全量导出:发布包内容清单、变更差异、发布审批链、回滚记录。系统提示:审批链字段为空。
又是空。
空不是偶然,空是习惯。
---
十点二十六,最尖锐的问题终于落到“谁”的层面。
网安技术人员要求提供itil_admin账号的登录轨迹。控制台显示:过去24小时内,itil_admin账号有两次登录,一次来自供应商办公网段,一次来自海外公共出口;海外登录发生在凌晨02:18,失败三次后成功一次,随后触发了凭据访问与作业查询,但未触发发布。
海外公共出口、失败三次后成功一次——与平台侧“海外出口重试旧token”的线索相互咬合。
监管联络人问:“你们解释一下:itil_admin为什么会在海外登录?谁在海外?是你们员工出差,还是账号泄露?”
合规负责人声音发虚:“我们会内部核查,不排除账号被盗。”
网安技术人员冷冷说:“你们现在要做的是提供证据,不是给结论。提供:账号MFA是否启用、是否绑定硬件令牌、登录设备指纹、IP归属、成功登录后的操作序列。我们会判断是否为被盗或内部行为。”
取证员把登录设备指纹导出。设备指纹显示为一台虚拟机浏览器环境,User-Agent伪装普通Chrome,但设备标识与供应商内部标准终端不一致。更异常的是,成功登录后第一件事不是查看报警,而是进入“Credentials”页面,查询HIGH_SCOPE_TOKEN。
像是在确认钥匙还在不在。
林昼看着那条操作序列,后背一点点发冷。他意识到,这件事已经不是单纯的“供应商为了效率留下暗门”,更可能存在“有人在暗门上做了二次利用”:要么内部有人主动伸手,要么外部有人拿到钥匙伸手。
无论哪种,都意味着风险升级。
周负责人把所有导出文件当场哈希固化,监管与网安分别签字。合规负责人也被要求签字确认见证。合规负责人手抖得厉害,签名像一条被拉扯的线。
十点五十八,周负责人宣布:“CI/CD控制台证据固定完成,下一步做系统镜像。请你们提供Jenkins控制节点与Agent Pool的访问路径。若你们拒绝,网安将按程序介入。”
合规负责人终于扛不住,低声说:“我们需要上级批准。”
网安技术人员看了监管联络人一眼,监管联络人只说四个字:“现在申请。”
合规负责人拨电话出去,声音压得很低,但所有人都能听见他在说“保全”“网安”“强制”。电话那头沉默许久,最终回了一句:“配合。”
合规负责人挂断电话,像一下子老了几岁:“我带你们去。”
---
十一点二十五,供应商运维中心的机房通道。
门禁刷卡时,林昼注意到运维主管的手指一直在抖。门开的一瞬间,冷风迎面扑来,服务器风扇的嗡鸣像一片持续的潮水。周负责人没有看机器的“规模”,只看“定位”:控制节点、配置库、日志落地位置。
取证员开始做镜像。每一台关键主机都插入法证介质,走只读镜像流程。镜像过程中,系统显示某些日志保留策略仅为“7天”。周负责人立刻要求把备份策略与归档位置一并固定,因为日志保留短本身就是治理缺陷,且可能造成证据缺口。
运维主管试图解释:“我们有集中日志平台,会归档。”
周负责人说:“那就固定集中日志平台的索引与归档。”
镜像持续进行。林昼在机房边缘站着,听风扇声一阵阵掠过,像某种巨大的机器在呼吸。他忽然想到父亲说过的那句话——“他们怕你们急”。在这里,急没有意义,只有一步一步把证据拧紧。
十二点四十,镜像完成一半时,机房门外传来争执声。
一个穿西装的男人冲进来,胸牌写着“区域总监”。他进门就直奔监管联络人,语气强硬:“你们这样会影响我们所有客户服务,我们有商业秘密保护义务。没有法院令,你们不能拷走我们的系统镜像。”
监管联络人把保全令与联合取证函递过去,语气极稳:“这是行政监管与网安协同取证,依法依规。你可以对程序提出异议,但不得阻碍取证。”
区域总监冷笑:“那我现在就通知法务,后续你们承担后果。”
网安技术人员第一次抬高了一点音量:“你现在阻碍取证的每一句话都在录音录屏里。你要承担的后果可能比你想象的大。”
区域总监脸色微变,但还想硬撑:“我们也是受害者,账号被盗你们不去抓盗号的人,来抓我们?”
周负责人走过来,淡淡一句:“受害者也有治理责任。你们把审批引用设为可选、把高危scope交给自动化、把冻结受阻时改控制权写进管道脚本,你们在架构上给了盗号者武器。今天取证不是抓结论,是固定事实。事实固定后,谁是盗号者、谁是放武器的人,会由证据回答。”
区域总监噎住,最终只丢下一句“我们保留权利”,转身出去。
林昼看着他背影,忽然有一种很清晰的预感:当“商业秘密”挡不住取证时,对方会转向别的方式——把矛头指向具体的人,把复杂责任压到一两个“违规工程师”身上,然后说“我们已处理个案”。
个案替罪,系统继续存在。
这就是他们最想要的结局:承认几个错误,但保住暗门逻辑。
林昼在心里把这条预感写下来:**不能让责任被压缩成个案,必须把“默认绕过”定性为治理失效。**
---
下午三点,联合取证回到医院,召开临时复盘会。
周负责人把CI/CD取证结果用最简短的方式概括:
1)管道中存在高危凭据HIGH_SCOPE_TOKEN,创建审批引用为空;
2)管道脚本存在默认绕过审计引用开关AUDIT_REF_OPTIONAL=true;
3)04:05发生Force Deploy,审批链为空,发布目标含策略配置包;
4)itil_admin存在海外登录成功行为,操作序列指向凭据查询与作业检查;
5)上述事实与租户侧脚本逻辑、平台侧拒绝事件、异常签名请求相互闭环。
监管联络人听完,只说一句:“从整改走向调查。”
这句“调查”落下时,会议室里每个人都明白意味着什么:供应商不再只是“需要整改的合作方”,而可能成为“涉嫌违反网络安全管理义务的主体”,甚至可能存在更深层的违法线索。
网安技术人员补充:“接下来我们会做两件事:一,追海外IP归属与登录路径;二,排查是否存在凭据外泄链路。请医院协助保护证人,尤其是提供线索的人。”
提供线索的人——Q7。
林昼突然想起那封邮件的代号,想起“别回我”。那不是故作神秘,是害怕被定位。
他问:“能否确定Q7是谁?”
周负责人摇头:“我们不会让你去查。我们会通过邮件头与传输路径去追线索源,但在未确认前,任何猜测都可能害死线人。”
“害死”这两个字说得很重,却并非夸张。在这种对抗里,线人的职业生涯、收入、家庭都可能被摧毁。比起技术风险,人更脆。
信息安全负责人当场提出:“医院侧启动证人保护提醒:任何对证人施压、调岗、解聘、扣帽子,全部记录并上报监管与网安。我们也会安排心理支持与法律援助。”
监管联络人点头:“会下发提醒。”
会议结束时,周负责人把一份“阶段报告提纲”递给法务,重点标注了一条:**“默认绕过机制属于架构性风险,不得以个案处分替代整改。”**
林昼看到这句话,心里稍微松了一点。至少审计机构与监管没有被“替罪羊策略”牵走。
---
傍晚六点二十,风暴从另一个方向吹来——供应商的律师函。
法务把邮件打印出来递给林昼,标题写得很刺眼:《关于停止侵害商誉及不实传播的律师函》。内容大意是:要求医院与相关人员停止使用“暗门”“撬锁”“证据污染”等词汇,否则将依法追诉,并索赔经济损失。
林昼扫了一眼,差点笑出来——他们开始抓词,而不是抓事实。
抓词意味着事实已经不好解释,只能把战场拉到“表述是否恰当”。这是典型的转移:你只要开始辩词,就会陷入无穷无尽的语义泥潭,忘了最重要的东西是日志、哈希、审批链、变量默认值。
法务问他:“要不要回函?”
林昼说:“回,但只回事实框架。不要争词。写明:所有表述来源于取证记录与监管文件,均在程序内使用;如有异议,请通过监管与司法渠道核实证据。我们不对外传播细节,不评价动机。”
法务点头:“明白。”
信息安全负责人补了一句:“临床群里不要出现任何词汇攻击,统一用‘高危自动化动作’‘审批引用缺失’‘默认绕过’这些中性描述。让他们的律师函打在空气上。”
林昼同意。对方要打词,就让他们打空气;他们最怕的不是词,是数字。
---
晚上九点,病房。
父亲精神比前些天更好,能坐起来和他讲几句。林昼把今天发生的事讲得很简短,只说“去封存了供应商管道证据”,没有讲海外登录、也没有讲律师函。他不想让父亲的心跳因为这些东西加速。
父亲却像早就猜到风暴不会停,问:“他们是不是开始吓唬你们了?”
林昼沉默半秒:“是开始转方向了。”
父亲点头:“正常。门锁上了,他们就喊疼。喊疼的人,嘴最毒。”
林昼握住父亲的手:“但我们不跟嘴打,我们跟字打。”
父亲轻轻回握,声音很慢:“记住,你别急。你急,他们就赢。”
林昼低声说:“我不急。”
他走出病房时,手机跳出一条银行短信:信用卡本期应还金额提醒,逾期将产生违约金与影响征信。短信文字很短,却像针一样扎在他心口——他的债务不会因为取证进展而暂停计息。
他靠在墙边,闭了一下眼,胸口像被两股力量同时拉扯:一股是规则的重力,一股是生活的重力。
清算系统弹窗又跳出来,仍旧冷静:
【清算进度:41%】
【新增线索:管道默认绕过】(证据等级:高)
【下一任务:追责路径拆分】(建议:治理责任链 > 个案责任链)
【提醒:财务压力上升】(建议:冻结非必要支出,保持现金流)
他看着“财务压力上升”,忽然觉得可笑——连系统都在提醒他钱的事。但他也明白,这是现实:如果追不回来,他不仅失去公道,还会失去活下去的余裕。
他把短信删除,把弹窗关掉,重新挺直背,往法务室走。
---
深夜十一点半,新的告警又来了。
第三方平台协查联系人发来一条更新:海外公共出口的旧token重试虽已归零,但平台检测到一个新的“幽灵服务主体”在尝试发起控制权变更请求,主体标识显示为“GhostSigner”,来源IP仍是海外公共出口,且请求报文结构与供应商管道脚本中的“request_controller_change”高度一致。
这意味着:即便锁换了,仍有人在尝试用“同样的方式”开门,只是钥匙不再匹配。
更可怕的是,“GhostSigner”这个主体不像残留任务,更像有人专门写了一个“签**”,在外部不断试探系统边界。
信息安全负责人看到后只说一句:“这已经不是整改问题,是对抗问题。”
周负责人回复:“把GhostSigner报文样本固化,我们会在CI/CD镜像中寻找对应组件。若存在外部签**代码或镜像痕迹,性质进一步升级。”
监管联络人更直接:“网安已介入,今晚开始做溯源。医院侧继续保持双人复核签名机制,不得因疲劳放松。”
林昼盯着“GhostSigner”四个字,脑子里闪过一个判断:这场战斗的真正对手,可能不止供应商的合规部门,也不止供应商的运维团队。还有一个在暗处的人,拿着旧逻辑、旧工具、旧路径,想把门再开一次。
他把这一夜的记录写进索引,最后落下一行:
* CI/CD已封存,默认绕过证据确立;对抗升级为外部“GhostSigner”试探;下一步:溯源与责任链拆分,防替罪羊
写完,他合上本子,走廊尽头的灯发出轻微的电流声,像风暴前的低鸣。
他知道,门已经换锁,但有人还在门外摸索。
门外摸索的人,一旦找到新的缝,下一次就不一定只是在“试”。
(https://www.kenwen.cc/book/422022/41507237.html)
1秒记住啃文书库:www.kenwen.cc。手机版阅读网址:m.kenwen.cc