第1章
手机屏幕亮了一下。
七百元。
我看着工资卡余额变动短信,把手机翻了个面,扣在工位上。旁边格子间的老周伸过头来:“到账了?多少?”
“七百。”
老周嘴里的茶叶沫子喷出来:“七百?年终奖?逗我呢吧?你上个月不是帮技术部把那个等保测评的漏洞全堵上了吗?赵总在会上怎么说的来着——‘表现突出,年终从优’。”
“从优。”我重复了一遍这两个字,把工牌从脖子上摘下来,开始收拾桌面。
“你干嘛?”
“下班。”
“现在才几点?还有二十分钟才六点。”
我没回答,把用了三年的保温杯拧紧,放进包里。桌面收拾得很干净,干净得像从来没坐过人。行政部的小刘踩着高跟鞋小跑过来,手里拿着张单子:“陈默,赵总让你去趟办公室,年终面谈。”
“谈什么?”
“不知道,就说让你过去。”
我把包拉链拉上,起身。小刘愣住:“你背包干嘛?”
“面谈完直接走。”
赵总的办公室在走廊尽头,磨砂玻璃门半掩着。我敲了两下,里面没声音。又敲了两下,才传来一声“进”。
赵德海坐在大班台后面,手里拿着我的绩效表。他抬头看我一眼,目光在我背着的双肩包上停了两秒,没说话,低头继续翻那两张纸。
“小陈啊,坐。”
“不用,站着说。”
赵德海笑了笑,把绩效表往桌上一拍:“行,年轻人有性格。年终奖看到了?”
“看到了。”
“有什么想法?”
“没有。”
“没有?”赵德海往后一靠,椅子发出吱呀一声,“你去年刚来的时候,我觉得你挺有想法的。怎么,干了三年,想法干没了?”
我没说话。
“七百块,确实不多。但公司今年效益你也知道,融不到钱,项目回款慢,能发出来就不错了。你看王总监,年终奖也就八千。你一个普通安全岗,给七百,不寒碜。”
他顿了一下,目光在我脸上逡巡:“而且,你今年表现……怎么说呢,中规中矩。上面要求强制分布,C档就是这个数。你要理解。”
“理解。”
“真理解还是假理解?”
“真理解。”
赵德海眯起眼睛。他不喜欢这种让他接不住的对话节奏。他拿起茶杯喝了一口,放下的时候故意用了点力:“你去年主导的那个漏洞修复方案,后来被集团安全中心拿去当范本了。这事你知道吧?”
“知道。”
“但那是去年的事。今年,你做了什么?”
我看着他。他也在看我。我忽然觉得这一幕很可笑,一个连防火墙规则和入侵检测日志都分不清的人,坐在这里问我今年做了什么。我今年拦截了十七万次针对性攻击,其中三次来自境外APT组织。我发现了供应链软件里的零日漏洞,没上报,私底下修了,因为上报了也没人管。我把整个核心数据库的备份策略重新设计了一遍,上一次全量恢复演练,只用了四十七分钟。
但这些话,一句都不会从他嘴里得到。
“没做什么。”我说。
赵德海露出一种“果然如此”的表情,拿起绩效表抖了抖:“行,你签字确认吧。对结果有异议可以走申诉,你知道流程。”
我拿起笔,签了名。字迹潦草,像一条死蛇。
“行了,去吧。”赵德海摆摆手,已经低头看手机了。
我走到门口,他忽然开口:“陈默,有句话送给你——年轻人,别太把自己当回事。公司离了谁都能转。”
我停了一下,没回头,也没说话。
走出办公楼的时候,天已经黑透了。冷风往脖子里灌,我把羽绒服拉链拉到最高。手机震了一下,是同事群。有人在里面问:“默哥年终奖多少?透露一下。”紧接着有人发了个坏笑表情:“听说今年安全岗全是C。”
我把手机塞进口袋,走了两步,又拿出来,给部门群发了一句:“七百。”
群里安静了三秒,然后炸了。有人发“草”,有人发“离谱”,有人发了一串省略号,还有人私聊我:“哥你认真的?七百够干啥的?”
我没再回,沿着园区小路往地铁站走。经过大门口的时候,保安老张从岗亭里探出头:“陈工,这么早走?今天不加班了?”
“不加了。”
“哟,稀罕啊。慢走啊。”
我冲他点了点头,继续走。
地铁上人很多,我站在车厢连接处,看着窗外飞驰而过的广告灯箱。手机再次震动,这次是陌生号码。我挂掉。又震,又挂。第三次震的时候,我接起来。
“陈默,我是技术部李强,你现在在哪?回公司一趟行不行?出事了——”
“什么事?”
“电话里不方便说,赵总的意思,让你马上回来。”
“我下班了。”
“陈默,这不是开玩笑的时候,真的很急——”
“我年终奖七百。”我说,“七百块买不了我下班时间。”
挂掉电话,我关了机。
地铁摇摇晃晃往前开。我没有回家,在一个我很少下车的站点出了闸。这附近有一家二十四小时书店,我走进去,点了一杯最便宜的美式,坐在靠窗的位置。
窗外的城市灯火通明。
手机一直黑着屏。我知道开机之后会有什么——几十个未接来电,无数条消息,可能有更高层的人发来的带有威胁意味的文字。但我不知道的是,就在我关机的这四十分钟里,公司的核心数据库正在被一种从未见过的勒索病毒逐层加密。
二十三亿条核心业务数据,涉及三千万真实用户。
而那个病毒的控制端,有一个非常特殊的触发条件。
它只在检测到特定条件时才会启动。
那个条件,和我每天下班打卡的时间,一模一样。
第2章
手机是在凌晨一点零七分开的机。
我没看错,六百多通未接来电,最早一条从昨晚七点十二分开始,间隔最密集的时候,一分钟三四个。微信未读消息四百多条,短信直接炸了,最后几条已经发不进来,提示我短信功能被运营商临时限制。
最新一条短信来自赵德海,时间零点五十八分,只有四个字:
“接电话。急。”
我把手机放回口袋,继续喝那杯已经凉透了的美式。
书店里只剩我和收银台后面打瞌睡的店员。窗外有辆警车闪着灯过去,没拉警笛。
手机又震了,这次是微信电话。我看了眼,技术部李强。挂掉。三秒后又响,还是他。我再挂。然后一条语音消息弹出来,我没点,直接转成文字。
“默哥我求你了,公司真出事了,数据库全锁了,所有服务都停了,赵总已经发火摔了两个手机,集团安全中心的人都在赶来路上,你赶紧回个电话行不行?”
我把手机扣在桌上,指尖有一下没一下地点着杯壁。
核心数据库被锁。勒索。能锁住那套做了双活容灾和异地灾备的数据库,对方要么拿到了最高权限,要么早就埋伏在系统里。集团安全中心那帮人,应付监管检查写报告还行,真遇到这种级别的攻击,大概率要傻眼。
但这跟我有什么关系?
我年终奖七百。
凌晨两点,我叫了辆车回家。出租屋不大,一室一厅,桌上还放着昨晚吃剩的半碗泡面。我把面倒进马桶,洗了把脸,准备睡觉。刚躺下,门被敲响了。
急促的敲门声。像在砸。
我躺着没动。敲门声持续了将近一分钟,然后变成了踹门。我穿上拖鞋,走到门口,从猫眼看出去。赵德海的司机小王站在外面,后面还跟着两个穿西装的人,其中一个正在打电话。
我打开门。
小王一看见我就叫起来:“陈工!你怎么不接电话啊!赵总都快疯了!”
“什么事?”
“上车说,赵总在公司等你。”
“我明天还要上班,现在凌晨两点。”
两个穿西装的人里,那个打电话的挂了电话,往前一步,掏出一个证件在我面前晃了一下:“市局网安支队,张锋。陈默同志,你们公司今晚发生重大网络安全事件,我们需要你配合调查。”
我看着他。
“配合调查”,这个用词有意思。
“我是公司员工,不是嫌疑人。”我说。
张锋把证件收回去,脸上没什么表情:“没人说你是嫌疑人。但你是负责安全岗的,出了事当然要找你了解情况。走一趟吧。”
我看了眼自己身上的T恤和短裤:“让我换身衣服。”
张锋犹豫了一下,点了点头。我关上门,换衣服的时候顺手把手机开机,看了眼时间。如果我真的是嫌疑人,他们不用等到凌晨两点来敲门。他们需要我,而且很急。
下楼的时候,小王一路小跑跟在旁边:“陈工,你在车上没接电话,赵总气得把茶几都掀了,你到了别跟他顶,听着就成,公司这次真的摊上大事了。”
我嗯了一声,拉开后座车门坐进去。
到公司的时候,凌晨两点三十五分。办公楼灯火通明,门口停了三辆警车和一辆黑色奥迪。楼下大厅里,几个穿着集团安全中心马甲的人抱着笔记本电脑跑来跑去。前台没人,访客登记表横在台面上,笔掉在地上。
我跟着张锋坐电梯上到十二楼。走出电梯的那一刻,整层楼都像炸了锅。电话铃声此起彼伏,有人在大声说“备库也在锁”,有人在喊“快联系云厂商”。空气中弥漫着一种带着汗味和焦虑的气味。
赵德海从会议室冲出来,头发乱糟糟的,领带扯得只剩半截。他一眼看到我,脚步顿了一下,然后大步走过来,手指几乎戳到我鼻尖上。
“陈默!你他妈的干什么去了!电话不接消息不回!你是安全岗!你是负责安全的!出了事你关机!你什么居心!”
整层楼安静了一秒。所有人都在看我。
“我下班了。”我说。
“下班?公司出了这么大的事,你跟我说下班?”
“赵总,我年终奖七百。”我看着他,“七百块钱,买不来我二十四小时待命。”
赵德海的脸色从铁青变成酱紫。他的嘴张了张,像一条搁浅的鱼。
“你——”他指着我,手指在抖,“你信不信我现在就开了你!”
我点点头:“你现在就可以开。”
气氛凝固了。
张锋咳嗽一声,插进来:“赵总,陈默,现在不是追究责任的时候。先解决问题。”他看向我,“陈默,你是公司安全岗,有些情况我们需要跟你了解。你们的安全监控系统,最后一条告警记录是什么时候?”
“你们看到的是什么时候?”
张锋沉默了一下:“你们的安全监控系统,连续三个月没有产生过有效告警。数据库加密行为没有触发任何警报,被黑客抹掉了。我们要你协助,看看是不是有人从内部做了手脚。”
我明白他的意思。
一个公司的安全监控系统三个月不产生有效告警,只有两种可能:要么系统彻底失效,要么有人从中做了手脚。而能做这个手脚的人,整个公司只有我一个。
“赵总刚才说,要开了我。”我看了眼赵德海,“我现在还算公司员工吗?”
赵德海的脸颊肌肉抽动了一下。
“你算。”他几乎是从牙缝里挤出这两个字。
“行。”我走向我的工位,电脑还在。我坐下,打开屏幕。整层楼的人围了过来,像看一个外星人一样看着我。
我没有登录,先敲了一条命令,调出近三十天的系统审计日志。
屏幕上刷出密密麻麻的记录。我往下翻了几页,停住了。
“安全监控系统不是失效。”我说。
“那是什么?”
“被人重定向了。”我指着其中一行,“所有告警都指向了这个外部接收地址。你们看到的‘没有告警’,只是系统后台没显示出来。实际上,这三个月,系统一直在报。”
张锋凑近来看,脸色越来越沉:“这个地址……是境外。”
“对。”
赵德海站在人群最外面,脸上的表情像个被人当众扒了裤子的局长。
而我盯着屏幕上那个重定向地址,心里却想到了另一件事。
那个地址,我见过。
三年前。我入职的第二天。
第3章
整个十二楼陷入了一种诡异的安静。
张锋打了个电话,让人查那个境外地址。电话那头估计在劝他别报太大希望,这种地址多半是跳板,查到最后也就是个被黑的肉鸡。挂了电话,他走过来,压低声音问我:“这个重定向什么时候开始的?”
“日志显示是三个月前。”我敲了几下键盘,把时间线拉出来,“最早一条是去年十月十七号凌晨三点。有人用管理员权限修改了告警转发规则。”
“管理员权限?”张锋眯起眼睛,“你们公司有几套管理员账号?”
“三套。我一套,赵总一套,集团安全中心一套。”
赵德海在后面叫起来:“你什么意思!你怀疑我?!”
我没回头,继续对张锋说:“日志显示,修改操作用的账号是赵总的那套admin_F。登录IP是内网地址,具体到楼层和工位。”
张锋转身看向赵德海。
赵德海的脸白了一下,又红了:“不可能!我他妈连你们那个什么管理后台都记不住密码!我怎么可能去改什么告警规则!”
“赵总,我没说是你本人操作。”我调出那条登录日志,“账号是你的,密码也是正确输入的,二次验证通过的是你手机收到的短信验证码。”
赵德海从口袋里掏出手机,像捧着一个定时炸弹:“我、我没收到过什么验证码啊!”
“你收到了。”我说,“只是你没看。”
“什么意思?”
“短信验证码是自动填充的。”我看着他,“有人在你的手机上做了手脚。你把手机给谁用过?或者,你有没有点过什么链接?”
赵德海开始冒汗。汗珠从额头滚下来,滑过太阳穴。他用手背擦了一下,声音有点抖:“我……上个月收到过一条短信,说是我女儿学校发的成绩查询链接,我就点了一下……”
“那就对了。”我转回屏幕,“手机被种了木马,验证码被截获,账号被控制。攻击者用你的权限,把整个安全监控系统变成了瞎子。这三个月所有告警都发到了那个境外地址,本地没有任何记录。所以你们看到的是风平浪静。”
会议室里静得能听见空调出风口嗡嗡的声响。技术部李强站在人群里,脸色惨白,喃喃自语:“三个月……三个月我们都在裸奔……”
张锋看着我,眼神变了。他之前看我的眼神是“找到嫌疑人”,现在的眼神是“找到关键人物了”。他拉了把椅子坐下来,往我这边凑近了些:“陈默,你能追踪到攻击者吗?现在数据库被加密,解密要多少钱?他们有没有留下勒索信?”
我敲开系统日志,又调出病毒样本的哈希值。屏幕上弹出密密麻麻的十六进制代码,我扫了几眼,脸色越来越难看。
“对方没有留下勒索信。”我说,“这不是勒索软件。”
“那是什么?”
“从代码特征看,是定制化的破坏程序。没有赎回通道,没有比特币地址,没有谈判方式。”我停了一下,转头看向张锋,“对方的目标不是钱,是彻底毁掉公司数据。”
张锋的脸色瞬间变了:“你确定?”
“确定。这种加密算法不可逆,密钥在加密完成后直接被销毁。对方从一开始就没打算恢复。”
这句话像一颗炸弹。
赵德海腿一软,身子靠在了墙上。李强一屁股坐在地上,双手抱着头。集团安全中心的几个人面面相觑,其中一个小姑娘看起来刚毕业没多久,眼眶已经红了。
张锋刚要开口,我的手机突然响了起来。
所有人都看向我的手机。我看了眼来电显示——未知号码。
张锋冲我使了个眼色,意思让我接。我按下接听键,打开免提。
“陈默,很久不见。”
电话里传来一个男人的声音。低沉,带着一种刻意的从容。
我握手机的手不自觉地紧了。这个声音,三年前我听过。
“你是谁?”我尽量让自己的声音保持平静。
“你看到那个地址了吧?”对方避而不答,“就是我当年用过的那个。怎么样,三年过去了,你觉得自己混得如何?”
整层楼的人都在看我,眼神里有惊讶,有恐惧,有审视。赵德海瞪大了眼,嘴里念叨着:“认识……他们认识……”
我没有理赵德海。手机里沉默了一会儿,对方又开口,语气里带着一种怜悯:“老陈,你看看你现在。在一个破公司当安全员,年终奖七百块。你当年在的时候,我们多风光。你要是不走……”
“闭嘴。”我的声音不大,但像刀片一样划过去,“我已经辞职了。三年前就退了。以后也不会再碰。”
“那你现在在干什么?”对方笑了,笑得像撕裂的金属,“给我当调查员?帮着一群外行看日志?陈默,你忘了你以前说过的话了?你说要亲手终结所有逃逸在网络里的罪。你现在终结了什么?一个被重定向的告警系统?”
我的手指在鼠标上捏得发白,指尖陷进塑料外壳。
张锋盯着我,表情越来越冷:“陈默,你认识对方?”
我没有回答他。电话那头的男人似乎听到了张锋的声音,又笑了一下:“我不为难你。今晚的事,是我给你准备的一份礼物。这个世界不需要你这种人了。你可以继续当你的小职员,拿着七百块钱过年。但你要明白,这些东西——这些数据,这些人,它们什么都算不上。”
我死死盯着桌上那个打开的审计日志页面。屏幕上,病毒程序的代码里夹杂着一串字符串。那串字符串被反复注释,像一句加密过的暗语。别人看不出来,但我一眼就认出来了。
那是我三年前写的代码。
攻击者用的病毒,有我的指纹。
“你干的?”我对着电话问。
对方沉默了两秒,然后说:“你猜。”
电话挂了。
我站在原地,手机还贴在耳朵上。整层楼的目光像无数根针扎在我身上。张锋站起来,脸色铁青:“陈默,你今天不能走。我需要你跟我回局里,说清楚你跟这个人的关系。”
我慢慢放下手机,看着屏幕上的代码。
那个病毒确实有我的代码痕迹。
但只有一半。
另一半,我认不出来。
第4章
我没有跟张锋走。
准确地说,是他走不了。就在他准备把我带出公司的时候,整层楼的灯突然闪了一下,然后全灭。应急照明亮起来,惨白的光打在每个人脸上,像一群刚从地下挖出来的尸体。
下一秒,更恐怖的事情发生了。
“不好了!灾备中心也出事了!”
一个技术员连滚带爬地从楼梯间冲出来,脸色青得吓人。他扶着墙,上气不接下气:“异地容灾……异地容灾的副本正在被覆盖!数据在丢失!从最后一个节点开始往前推,已经没了百分之十七!”
这句话比刚才的病毒分析更让人绝望。如果说核心库被锁是被人捅了一刀,异地容灾被毁就是把这个公司最后的血袋给拔了。
赵德海一个踉跄,差点栽在地上。小王赶紧扶住他。赵德海嘴唇哆嗦着,整个人像被抽掉了骨头:“怎么……怎么会……那个灾备中心不是断网的吗?不是物理隔离的吗?怎么会……”
没人能回答他。
我快步走到一台没受影响的终端前,切进灾备专线监控。屏幕上,数据同步的进度条在诡异地倒退,像一桶水正在从底部漏空。
“不是从外部入侵。”我说,“有人在下班前,把灾备中心的例行同步任务给篡改了。时间一到,自动触发覆盖,用空数据副本反向同步到主节点。物理隔离没用,这是内部发起的任务。”
张锋一步跨过来:“能停吗?”
我试了,手指在键盘上飞快敲击,调出任务管理器的最高权限。屏幕上弹出一个对话框,需要二次认证。
而那个认证手机,是赵德海的。
张锋扭头冲赵德海吼:“把手机拿过来!”
赵德海手忙脚乱地掏手机,手指抖得连密码都输不对。我在旁边等着,心里却没有把希望完全寄托在他的认证上。如果对方拿到了他的手机权限,这个认证也保不住。
果然。密码输对,验证码弹出,系统提示“认证已通过”。可就在我准备中止任务的那一瞬间,屏幕上跳出一行字:
“您没有足够的权限执行此操作。”
我盯着那行字,脑袋里嗡了一下。
我被降权了。
有人在数据库被锁之前,就从后台把我的管理员账号给降级了。时间精准到分钟。也就是说,这个局从它启动的那一刻起,就把我算进去了。
张锋发现我不动了,催促道:“怎么了?你快点啊!”
我松开键盘,声音很平静:“我操作不了。权限被拿了。”
赵德海猛地转过头来,像是终于找到了一个可以推卸一切的出口:“被拿了?你什么意思?你自己的账号被降权了?你自己是安全员!你连自己的权限都保不住,现在跟我说操作不了?!”
我看着他。
“赵总,三个月前,有人用你的手机拿到管理员权限的时候,您没有发现。三个月里,有人用你公司的服务器当跳板,传输了四个T的脱裤数据出去,您没有发现。三个月后,有人把炸弹埋好,等着今天一起引爆。您现在问我为什么保不住权限?”
赵德海被我堵得说不出一个字。
张锋揉了揉眉心:“现在别吵了。陈默,还有没有别的办法?任何办法都行。”
我没有说话,重新看向屏幕。那个没有权限的提示还在那里,一闪一闪。
办法是有的。
我有另一套权限。
那是一套不在公司系统里的、从未启用过的后台通道。三年前,在我入职的第二个月,我就发现了公司核心系统的架构缺陷。当时我把这个漏洞封了一半,留了半扇门。这扇门绑定的是我的生物特征,不经过公司的任何账号体系。
但张锋在旁边,赵德海在旁边,满层楼的人都在看。如果我现在用这扇门,他们就会知道,我这个拿七百块年终奖的安全员,居然在公司系统里留了一个只有我自己知道的后门。
这是违反公司规定的。
严格来说,这可能违法。
但我看了眼大屏幕上那个还在倒退的数据同步条。灾备数据已经丢了百分之三十一。
“都退后。”我说。
张锋愣了一下。赵德海也愣住了。
我站起来,把椅子往后一拉,走向那台灾备专线的物理控制台。在所有人错愕的目光中,我蹲下身,掀开控制台侧面的一块挡板。里面有一个不起眼的USB接口,接口旁边贴着一张被撕掉一半的资产标签。
我从钱包里摸出一样东西。
那是一个指甲盖大小的黑色存储芯片。我把它插入接口,然后在控制台的触摸屏上划出一个图案。
屏幕上弹出一个全新的登录界面。
那个界面,不属于这家公司。
赵德海盯着那个界面,眼珠子都快瞪出来了:“这……这不是我们的系统!这是什么?!”
我没有理他。张锋脸色复杂,想阻止我,但看了眼还在丢失数据的灾备进度,又忍住了。
我的手指在触摸屏上飞快跳跃,嘴里说了一句话,声音低到只有我自己能听见:
“如果这是他们送给我的礼物,那我就亲手拆了它。”
屏幕上的数据流开始反向逆转。灾备节点的覆盖进程被强制冻结,原本已经丢失的数据,从日志中开始回滚。大屏幕上,那个往回退的进度条停住了,然后开始缓慢前进。
百分之三十一。百分之二十七。百分之十九。
赵德海张大了嘴。
张锋的瞳孔在收缩。
而就在这时,我的手机又响了。
还是那个未知号码。
我接起来,不等对方开口,直接说了一句:
“玩够了吗?”
电话那头沉默了很长时间,长到我以为对方挂了。
然后,那个声音再次响起,带着一种我从未听过的疲惫:
“陈默,你以为我是在整你?你以为我是在报复你?”
我握着手机没说话。
“我不是在整你。”他一字一顿地说,“我是在给这台服务器发信号。你刚才插进去的东西,就是我要找的东西。现在,信号发出去了。”
我手指悬在屏幕上方,突然停住了。
“什么信号?”
“你猜。”
对方又挂了。
而就在这一秒,我面前的控制台屏幕上,那个我自己打开的隐藏界面里,弹出了一行红色小字。
那行字很小,但像烧红的铁一样烫进我的眼睛。
“全球节点已启动。目标:所有已存活的影子副本。倒计时:23小时59分。”
我的后背凉了。
这不是一次针对公司的攻击。
这是一场冲着我来的、以二十三亿条数据为起爆点的全球性事件。