第4章 红色警报
汇报会后的第四天,上午十点零三分。
林叙正站在二十二层茶水间的窗边,等咖啡机完成萃取。他手里拿着一只白色的陶瓷杯——那是他专用的杯子,杯身上印着一行小字:“Hello, World!”,是五年前他通过星澜终面时,导师送的入职礼物。
窗外阳光很好,但林叙眼睛里布满了血丝。
过去三天,他只睡了不到十五个小时。赵启明要求的一周实施计划,他必须要在周五下班前交出第一版。而这份计划,按照正常流程至少需要一个月。
他几乎把每分钟都拆成了两半用。
白天和技术团队开分解会,晚上一个人做技术架构设计,深夜写文档。咖啡从一天两杯变成一天六杯,现在他站在这里,等今天的第四杯。
机器发出“滴滴”的完成提示音。
林叙拿起杯子,滚烫的液体注入,浓郁的香气弥漫开来。他加了一小勺糖——破例了,他需要一点能量——然后搅拌,看着深褐色的漩涡在杯子里旋转。
就在这时,手机突然开始疯狂震动。
不是来电,而是连续不断的消息提示音。密集、急促,像是某种警报。
林叙皱起眉头,放下杯子,掏出手机。
屏幕亮了,上面弹出了几十条消息,全部来自“星澜集团全员紧急通知群”。这个群平时几乎没人说话,只有行政部会偶尔发一些全公司范围的通知,比如消防演习、空调维修。
但此刻,消息在疯狂刷屏。
“@所有人技术部紧急通知:天枢系统检测到异常数据访问,请所有相关项目组立即停止线上操作。”
“重复:立即停止所有线上操作!”
“安全中心已介入,正在排查。”
“请各部门负责人立即到28层大会议室集合,紧急会议!”
林叙的心脏猛地一沉。
他快速往上翻,看到第一条消息是两分钟前发的,来自技术副总裁张总的助理:
“【红色警报】天枢系统发生大规模数据泄露,涉及用户隐私信息。技术部所有P7及以上人员,立即中断手头工作,到22层A会议室集合。重复,立即!”
红色警报。
在星澜的技术体系中,警报分四个等级:蓝、黄、橙、红。红色是最高级别,意味着系统级重大事故,可能对公司造成不可估量的损失。
林叙手指有些发凉。他退出微信,打开公司内部的安全监控平台。
输入权限账号,登录。
平台首页通常是绿色的健康状态指示,但此刻,整个屏幕一片血红。正中央是一个巨大的警告图标,下面滚动着实时数据:
受影响用户数:1,243,857(持续增长中)
泄露数据类型:姓名、手机号、身份证号、住址、交易记录
泄露时间窗口:09:47 - 10:02(持续中)
攻击路径:未知
处置状态:已切断主数据库外联,正在追踪
一百二十四万用户。
林叙感觉喉咙发干。天枢系统是星澜智慧城市业务的核心,存储着超过八千万用户的实名信息。如果这些信息大规模泄露,不仅会造成巨额的经济赔偿,更可能引发监管部门的严厉处罚,甚至危及公司牌照。
他转身冲向办公室。
茶水间到工位不过三十米,但这三十米里,整个办公区已经乱成一团。
电话铃声此起彼伏,有人在大声质问:“为什么权限管控没生效?!”有人在对着电脑吼叫:“快点把日志导出来!”更多的人在惊慌失措地互相询问:“怎么回事?到底怎么回事?”
恐慌像病毒一样蔓延。
林叙跑到自己工位,抓起笔记本就往会议室冲。路上他撞到了周晓曼——她刚从座位上站起来,脸色苍白,手里紧紧握着手机。
“叙哥,这……”她张了张嘴,声音在发抖。
“先去会议室。”林叙没时间多说,侧身从她身边跑过。
推开A会议室的门,里面已经坐满了人。
技术部所有P7及以上的工程师、架构师、项目经理,加起来三十多人,挤在能容纳二十人的会议室里。空气闷热,气氛凝重得像要凝固。
技术副总裁张总站在前方,脸色铁青。他五十多岁,平时总是沉稳从容,但此刻,他握着激光笔的手在微微发抖。
“安静!”张总吼道,声音嘶哑。
会议室瞬间安静下来。只剩下空调出风口的嗡嗡声,和一些人压抑的呼吸声。
“情况大家都看到了。”张总深吸一口气,强迫自己冷静,“十分钟前,天枢系统的用户数据库被大规模拖取。泄露还在继续,我们已经切断了所有外部访问,但攻击者很可能已经拿到了足够的数据。”
他停顿了一下,目光扫过全场。
“现在,我需要知道三件事。第一,攻击是怎么发生的?第二,谁干的?第三,怎么补救?”
没有人说话。
几秒钟令人窒息的沉默后,安全团队的负责人李工站了起来。他是个四十多岁的中年男人,头发稀疏,眼袋很重,此刻额头上全是冷汗。
“张总,我们初步分析,攻击者应该是通过一个合法的API接口进来的。”李工的声音在发抖,“但这个接口的权限本应该是受限的,只允许内部系统调用。不知道为什么,它的权限被临时提级了,而且……”
“而且什么?”张总厉声问。
“而且攻击者似乎有完整的密钥链,绕过了所有的二次校验。”李工说完,几乎不敢看张总的眼睛。
会议室里响起一阵倒吸冷气的声音。
完整的密钥链——这意味着攻击者要么是内部人员,要么是拿到了内部人员的权限凭证。
“权限是谁提的?”张总的声音冷得像冰。
“正在查。”李工擦了擦汗,“但日志系统显示,提级操作是在今天凌晨三点左右完成的,操作账号是……是林叙的账号。”
所有人的目光,瞬间集中在林叙身上。
林叙愣住了。
他张了张嘴,想说什么,但大脑一片空白。凌晨三点?他在睡觉。而且他根本不知道哪个API接口需要临时提级。
“不可能。”林叙站起来,声音很干,“我的账号密码只有我知道,而且我昨晚十一点就下班了,今天早上八点半才到公司。有打卡记录可以证明。”
“账号共享过吗?”张总盯着他。
“没有。”林叙斩钉截铁。
“那你怎么解释日志记录?”张总走到投影前,示意李工把数据投出来。
屏幕上出现了一行行系统日志。时间戳:03:14:22。操作类型:权限提级。目标接口:/api/v2/user/export。操作账号:linxu@xinglan.com。IP地址:113.87.XX.XX。
“这个IP查了吗?”张总问。
“查了。”李工的声音更低了,“是林叙家的IP。宽带运营商确认,今天凌晨三点左右,这个IP有活跃的网络连接。”
林叙感觉全身的血液都在往头上涌。
“有人盗用我的账号。”他说,每个字都说得很用力,“我家里的电脑昨晚是关机的,而且我从来不会在家里操作生产环境。这是常识。”
“那你怎么解释IP?”张总反问。
“我不知道。”林叙说,“但肯定有问题。我要求调取完整的操作日志,包括登录方式、会话令牌、操作轨迹。我的账号是双因素认证,光有密码不可能登录。”
“已经在调了。”李工说,“但认证服务器的日志有五分钟的延迟,还需要一点时间。”
会议室里再次陷入沉默。
但这次的沉默里,多了很多复杂的目光。怀疑的,同情的,幸灾乐祸的,事不关己的。林叙站在这些目光的中心,感觉自己像被剥光了扔在舞台上。
“继续。”张总说,“攻击路径。”
安全团队的另一个成员站起来,开始讲解。
攻击者通过提级后的API接口,以合法身份进入系统。然后利用一个“补丁包”中的漏洞,绕过了数据导出的数量限制和频率限制,在十五分钟内,分批拖取了超过一百二十万条用户数据。
“补丁包?”张总打断,“什么补丁包?”
“是……”讲解的人看了一眼手里的平板,声音小了下去,“是昨天下午上线的一个热修复补丁,编号HF-2023-0720-01。用于修复天枢系统的一个边界条件处理BUG。”
“谁提交的?”张总问。
会议室里,至少有一半人,看向了林叙。
林叙的心脏像被一只冰冷的手攥住了。
他想起来了。
昨天下午,测试团队报了一个BUG:在天枢系统处理特定类型的并发请求时,有极低概率会发生死锁。问题不严重,但需要修复。他花了一个小时,写了一个修复补丁,在下午四点左右提交到代码库,五点半通过测试,六点上线。
那是一个很小的补丁,总共不到五十行代码。他检查了至少三遍,确保没有问题。
“是我提交的。”林叙说,声音还算平稳,“但那只是个简单的死锁修复,不可能导致数据泄露。”
“把补丁包的代码调出来。”张总说。
代码被投到大屏幕上。
林叙只看了一眼,就感觉全身的血液都凉了。
那确实是他写的修复代码,但中间多了几行——他绝对没有写过的几行。
在原本的锁超时处理逻辑后面,插入了这样一段:
#临时调试代码,用于验证性能优化效果
if request.params.get('debug_mode')=='true':
bypass_export_limit = True
logging.info('Export limit bypassed for debug purposes')
就这四行代码,让整个补丁包变成了一个后门。
如果请求中携带
“debug_mode=true“参数,系统就会绕过所有的导出限制。而攻击者显然发现了这个后门,并利用了它。
“这不是我写的。”林叙说,声音已经开始发抖。
“Git提交记录显示是你。”李工调出另一个屏幕,“看,昨天下午16:07,账号linxu提交了这次修改。提交备注是‘修复天枢系统死锁BUG’。代码差异里,就包括这几行。”
“我提交的时候,没有这几行!”林叙几乎是吼出来的。
“那这几行代码是怎么进去的?”张总盯着他,眼神锐利得像刀,“代码库有完整的版本控制,每一次修改都有记录。如果这几行不是你写的,那会是谁?鬼吗?”
林叙张着嘴,却说不出话。
他脑子里一片混乱。昨天下午,他确实提交了代码。提交前,他确实检查过。当时绝对没有这几行。但Git记录不会说谎,白纸黑字,那几行代码就在他的提交里。
唯一的可能是——有人在他提交后,篡改了代码库的记录。
但这需要极高的权限。至少是代码库的管理员权限,而且要知道如何不留痕迹地修改Git历史。
能做到这一点的人,整个技术部不超过五个。
“我需要看完整的Git操作日志。”林叙强迫自己冷静下来,“看除了我之外,还有谁动过这个补丁包。”
“已经在看了。”李工说,“但Git服务器昨晚十点到今早六点在进行例行维护,部分日志可能不完整。”
巧合太多了。
林叙账号凌晨三点被“盗用”,家里IP“恰好”有活跃记录,他提交的补丁包“恰好”被插入了恶意代码,Git服务器“恰好”在案发时段维护,日志“恰好”不完整。
这不像意外,更像一个精心设计的局。
“张总,”林叙说,声音平静得连他自己都意外,“我请求公司立即启动内部调查,并且报警。这是一起有预谋的、针对公司核心系统的攻击,而且有人试图栽赃给我。”
“报警?”张总眯起眼睛。
“对。涉及一百多万用户的隐私泄露,这已经构成刑事犯罪。让警方介入,才能查清真相。”林叙说。
会议室里响起一阵窃窃私语。
报警意味着把事情闹大,意味着媒体会知道,股价会暴跌,监管部门会介入。对公司来说,这是最坏的选择。
“事情还没查清,报什么警。”一个声音从门口传来。
所有人转头。
赵启明走了进来。他脸色阴沉,但步伐沉稳。他走到张总身边,低声说了几句什么。张总皱了皱眉,点点头。
“林叙,”赵启明转向他,表情痛心疾首,“我知道你现在很慌,但越是这样,越要冷静。公司会调查清楚,如果真有人陷害你,一定会还你清白。但现在最重要的,是止损,是修复系统,是防止更多数据泄露。”
他说得很诚恳,很顾全大局。
但林叙从他的眼神里,看到了一丝别的东西。
那是警告,是威胁,是“你最好闭嘴”的潜台词。
“赵总,”林叙迎着他的目光,“我的账号被冒用,我的代码被篡改,我是最大的嫌疑人。如果公司不报警,不进行彻底调查,我怎么自证清白?”
“清者自清。”赵启明拍了拍他的肩膀,力度很重,“你现在要做的,是配合调查,是好好想想,有没有把账号密码告诉过别人,有没有在什么不安全的电脑上登录过,有没有……”
“我没有。”林叙打断他。
赵启明的脸色沉了下来。
“林叙,现在不是闹情绪的时候。”他的声音冷了下去,“系统是你负责的,补丁是你提交的,现在出了这么大的事,你第一个要做的,是承担责任,是解决问题,而不是在这里质疑公司的调查程序。”
承担责任。
林叙听懂了。赵启明的意思是,让他认了。认了账号管理不善,认了代码审查不严,认了这起事故的主要责任。
然后呢?然后公司会“从轻处理”,他会“戴罪立功”,事情会“内部解决”。
至于真相,至于谁在背后搞鬼,不重要了。重要的是尽快平息事态,保住公司的声誉,保住某些人的位置。
“如果我拒绝呢?”林叙问。
会议室里的空气凝固了。
所有人都看着他,像在看一个疯子。在星澜,没有人敢这样对赵启明说话,尤其是在这种场合。
赵启明盯着他,看了足足五秒。
然后,他笑了。那种冰冷的,没有温度的笑。
“林叙,你还年轻,可能不太懂职场的规矩。”赵启明缓缓地说,“在事情查清之前,为了配合调查,也为了避嫌,你需要暂时停职。等调查结果出来,我们再谈下一步。”
停职。
林叙的心沉到了谷底。
这不是惩罚,这是隔离。把他从系统中剥离,让他失去所有的信息渠道,让他无法为自己辩护,让他成为众矢之的。
“我反对。”林叙说,“停职等于默认我有问题。我要求继续工作,我可以用技术手段协助调查,我可以……”
“这是公司的决定。”赵启明打断他,转向张总,“张总,您看呢?”
张总看着林叙,眼神复杂。有同情,有无奈,也有决断。
“林叙,你先回去休息几天。”张总说,“等调查清楚了,如果没问题,再回来工作。这也是为你好。”
为你好。
三个字,轻飘飘的,却彻底堵死了林叙所有的路。
他站在那里,看着会议室里一张张熟悉或陌生的脸。那些曾经一起加班、一起讨论技术、一起解决问题的同事,此刻都避开了他的目光。他们低着头,看着手机,或者盯着桌面,没有人敢与他对视。
除了一个人。
周晓曼坐在角落,也低着头。但她的肩膀在微微发抖,像是在哭。偶尔抬头看林叙一眼,眼睛红红的,满是担忧和同情。
但只有林叙注意到了,她握在桌下的手,握得很紧,指节发白。
那不是恐惧,也不是悲伤。
那是紧张,是兴奋,是猎物即将落网时的战栗。
林叙突然明白了。
这一切,从他交出竞品分析脑图的那一刻,就已经开始了。那个脆弱的、需要帮助的周晓曼,那个感激涕零的周晓曼,那个说要记住他一辈子恩情的周晓曼,是假的。
全都是假的。
“好。”林叙听到自己说,声音出奇的平静,“我接受停职。但我保留报警的权利。如果公司不能在三天内给我一个公正的调查结果,我会自己报警。”
他说完,转身,拉开会议室的门。
门外,走廊里站满了人。都是技术部的同事,他们听到动静,都围了过来。看到林叙出来,所有人都下意识地后退了一步,让开一条路。
那是一条孤零零的,被目光包围的路。
林叙走过人群,背挺得很直。
他回到工位,开始收拾东西。笔记本电脑是公司配的,不能带走。私人物品很少:那支印着“Hello, World!”的杯子,几本技术书籍,一个便携式键盘,还有那盆绿萝。
他把这些东西装进自己的双肩包。
背包很沉,但更沉的是心情。
他最后看了一眼工位。电脑屏幕还亮着,上面是他昨晚写的天枢2.0实施计划。已经完成了70%,再给他两天,就能完成第一版。
但现在,没机会了。
他关掉屏幕,拿起背包,转身。
周晓曼站在不远处,欲言又止。
“叙哥,我……”她开口,声音带着哭腔。
林叙看了她一眼。
就一眼,很短,很平静。但周晓曼像被烫到一样,猛地移开了目光,低下头,肩膀抖得更厉害了。
林叙没说话,从她身边走过。
走出办公区,走进电梯,下楼,走出大厦。
阳光刺眼。
他站在路边,看着街道上熙熙攘攘的人流。这个世界还在正常运转,没有人知道,就在刚才,他的人生被彻底改变了。
他拿出手机,打开通讯录。
翻了一遍,不知道能打给谁。
父母在老家,不能让他们担心。朋友……他已经很久没有跟工作之外的朋友联系了。同事?现在所有人都觉得他是罪人。
他收起手机,走向地铁站。
背包很沉,脚步也很沉。
他不知道要去哪里,也不知道接下来该怎么办。他只知道一件事:有人陷害他,而且那个人,或者那些人,就在星澜大厦里。
他要找出真相。
不惜一切代价。
而在二十八层的会议室里,紧急会议还在继续。
赵启明站在投影前,表情凝重:“各位,事已至此,我们要做的,是最大限度减少损失。我已经安排公关部准备对外声明,就说系统遭受了‘高级持续性威胁攻击’,我们正在全力修复。对内,要统一口径,就说还在调查中,不要传播不实信息。”
“那林叙那边……”张总问。
“先停职,看他的态度。”赵启明说,“如果他识相,愿意配合,等风头过了,可以给他换个部门,从新开始。如果他不识相……”
他没说完,但所有人都听懂了。
“那补丁包的代码,到底是谁改的?”安全团队的李工小声问。
赵启明看了他一眼,眼神冰冷。
“这还需要问吗?Git记录清清楚楚,是林叙提交的。至于他为什么要那么做,可能是因为压力太大,可能是想走捷径,也可能是……”
他停顿了一下,声音压得更低。
“我听说,有几家猎头最近在挖他,开价很高。”
会议室里一片哗然。
原来如此。林叙故意在代码里留后门,然后盗取用户数据,卖给竞争对手。这样一切就说得通了。
“这只是猜测。”张总皱起眉。
“但也是最合理的解释。”赵启明说,“当然,最终要等调查结果。但在结果出来前,我们要做好最坏的准备。”
他顿了顿,环视全场。
“这件事,关系到公司的生死存亡。我希望在座的每一位,都能以公司利益为重,不要传播谣言,不要妄加猜测。一切,等调查结果。”
众人纷纷点头。
会议结束,人群散去。
赵启明回到办公室,关上门。
他从抽屉里拿出那个黑色的U盘——周晓曼给他的,装着天枢系统密钥文件的那个。他插上电脑,输入密码,打开文件。
密钥库完好无损。
他删除了文件,格式化U盘,然后拉开抽屉最底层,那里有一个小小的强磁铁。他把U盘放在磁铁上,停留了十秒。
这样一来,U盘里所有的数据都会被彻底破坏,无法恢复。
做完这一切,赵启明靠在椅背上,长长地吐出一口气。
窗外的阳光很好,天空很蓝。
一切都很完美。
除了那个不识相的年轻人。
但没关系,很快,他就会学会职场的第一个,也是最重要的规则:
有些游戏,你玩不起。

