电脑是公司配的,联想ThinkPad,i7处理器,16G内存,512固态,用了一年多,里面装着我所有的工作文件和开发环境。每天早上开机的时候,风扇会发出轻微的嗡嗡声,像是在叹气,又像是在抱怨这一天的活又开始了。我都习惯了。

那天早上我刚泡好速溶咖啡,杯子还没端到嘴边,隔壁工位的林晓就凑过来了。她穿着一件米白色的卫衣,头发随便扎了个马尾,脸上的表情带着那种让人不好意思拒绝的恳切。

“陈哥,我电脑崩了,急着要发一份报价给客户,能不能借你电脑用一下?十分钟就好。”她说这话的时候,双手合十,眉头微微皱着,像是真的遇到了什么天大的麻烦。

我犹豫了一下。说实话,我不太喜欢别人碰我的电脑。不是小气,是里面有太多东西了,各种项目的源码、数据库配置、服务器的SSH密钥,还有我自己写的那些半成品的爬虫脚本和自动化工具。这些东西倒不是什么商业机密,但就像日记本一样,总觉得被人翻看会有点不舒服。

不过林晓平时人挺好的,之前我请假的时候她还帮我收过快递,中午点外卖偶尔也会问我要不要一起凑单。这点小忙不帮,显得我太不近人情了。

“行吧,你用吧,”我把椅子往后推了推,站起来让出位置,“桌面那个报价模板的文件夹里就有空白表格,你自己找一下。”

“谢谢陈哥!你真是好人!”她眼睛亮了一下,快步走过来坐下。我端着咖啡杯往茶水间走,走到门口的时候回头看了一眼,她已经打开浏览器了,手指在键盘上飞快地敲着什么。

我没多想,去茶水间加了点热水,又和行政部的小周闲聊了几句。小周说公司最近在谈一个大项目,金额挺吓人的,好像是八位数还是九位数,反正对我们这种普通员工来说是天文数字。我说难怪最近张总监总是黑着脸,原来是有大活儿要干。小周笑了笑,说你的消息也太滞后了,这事儿都传了好几天了。

大概过了十五分钟,我端着咖啡杯回到工位。林晓已经站起来了,看到我过来,笑着说搞定了,谢谢你啊陈哥,改天请你喝奶茶。我说没事,举手之劳。她转身回了自己的工位,我重新坐到电脑前。

屏幕上一切正常,浏览器开着几个标签页,其中一个是企业邮箱的页面,已经最小化了。桌面上也没多出什么奇怪的东西。我随手晃了一下鼠标,

但就在我把鼠标移向IDE窗口的时候,我注意到了一个细节。

电脑的速度,变快了。

不是那种心理作用式的“好像快了一点”,而是非常明显的变化。我平时打开这个项目文件夹,因为里面有几十个子目录和几百个文件,资源管理器总要卡顿那么零点几秒,文件夹图标要挨个刷新一遍才能全部显示出来。但这次,没有一点延迟。

我的手指在鼠标上停了一下。

可能是刚重启过?不对,林晓用的时候我没重启。可能是她把一些后台程序关掉了?我按了一下Ctrl+Shift+Esc打开任务管理器,盯着进程列表看了几秒钟。

CPU占用率百分之三,内存占用率百分之二十一,这些都是很正常的数字。但我注意到进程列表里有一个叫“SystemMonitor”的进程,占用内存大概80MB左右,这个进程我之前没见过。

公司IT部门装的监控软件?不,我们公司根本没有IT部门,只有一个外包的技术支持,平时电脑坏了都是自己修,或者找楼下修电脑的大爷。这台电脑从拿到手的那天起,里面的系统就是我亲自装的,每一个软件、每一个服务、每一个开机启动项,我都能倒背如流。

我可以百分之百确定,昨天下午我关机之前,这个“SystemMonitor”进程是不存在的。

我的后背微微发紧。那种感觉很微妙,就像你回到自己家里,发现茶几上的遥控器角度变了,或者卧室的窗帘被拉开了一条缝,外人根本看不出任何异常,但你知道,有人来过。

第一个检查的是最近安装的程序,控制面板的程序列表里没有任何新增。第二个检查的是C盘根目录,也没有多出什么可疑的文件夹。第三个检查的是注册表的启动项,在那里我找到了“SystemMonitor”。

注册表路径指向C:\ProgramData\SystemMonitor\目录,我打开这个目录,里面有三个文件:一个exe可执行文件,一个config配置文件,和一个log日志文件。

我先打开了日志文件。里面记录着一行一行的时间戳,从今天早上八点四十七分开始——正好是我去茶水间的时候——每隔三十秒记录一次。日志内容不是乱码,而是各种系统信息:CPU温度、内存使用率、网络流量、进程列表、窗口标题,甚至还有键盘输入的次数统计。

这是一个监控程序。或者更准确地说,是一个信息采集程序。

我的心跳开始加速。我把config文件打开,里面是一个XML格式的配置,其中有一行引起了我的注意:

这是个内网IP地址。192.168.1.187,这个IP段是我们公司的局域网地址。有人在公司内部架设了一个接收服务器,通过这个监控程序收集我电脑上的信息。

我把鼠标放在桌上,手指微微发凉。脑子里飞速转着各种可能性:商业间谍?竞争对手安插的人?还是公司内部有人在搞什么名堂?林晓是不是知情的?她借电脑是真的需要发报价,还是被人当枪使了?

这些问题一个接一个地冒出来,但我没有时间深究。我现在最应该做的事情,是立即清除这个威胁。

我对电脑安全的理解不算特别专业,但也不是小白。我知道在这种情况下,简单的杀毒扫描或者卸载程序是不够的,因为你不知道这个程序有没有在其他地方埋下后门、有没有修改系统文件、有没有感染其他合法的进程。

最彻底、最安全的方式只有一个——重装系统。

说干就干。我先用另一台旧的备用笔记本——那台我放在抽屉里吃灰的上古神机——插上网线,然后用一个16G的U盘做成了启动盘。这个过程花了大概四十分钟,在此期间,我关掉了那台被借用的电脑,彻底断电,连电池都拆了下来。

“没什么,就是电脑有点卡,我重启一下。”我打了这行字发过去,没有提监控程序的事。

她回了一个“哦哦好的”的表情包。看起来一切正常,但我心里那根弦绷得更紧了。如果她没有主动安装什么,那这个程序是怎么进来的?

唯一的解释是——当她打开浏览器登录邮箱的时候,而要做到这一点,需要满足两个条件:第一,我电脑上的浏览器存在某个漏洞,可以被网页脚本利用;第二,攻击者知道这个漏洞,并且准备好了利用它的代码。

这不是普通的黑客行为。这是有针对性、有预谋的攻击。

我把U盘插上电脑,开机进入BIOS,设置从U盘启动,然后开始了系统重装。Windows的安装界面蓝底白字,进度条一格一格地往前走,我盯着屏幕,脑子里却在想另一件事。

那个内网IP地址——192.168.1.187——是哪台设备?

我们公司的网络结构很简单,一个路由器接光猫,然后所有电脑和打印机都连在这个路由器上。IP地址是自动分配的,一般来说,路由器的地址是192.168.1.1,打印机的地址是固定的192.168.1.100,其他的就随机了。

但我依稀记得,有一个人的电脑IP经常是固定的——技术部的张总监,张启航。

这个念头冒出来的时候,我自己都吓了一跳。张启航是公司的技术总监,管着整个技术部十几号人,平时虽然严厉了点,但为人还算正派,工作也兢兢业业。他为什么要监控我的电脑?

不对,不能这么想。也许那个IP地址是被伪造的,也许是别人的电脑恰好分配到了那个地址,也许这整件事和林晓的借用根本没关系,是之前就感染了什么病毒。

但我心里清楚,最后一种可能性很小。因为我这台电脑的安全习惯一直很好,不装盗版软件,不点不明链接,系统更新从来都是第一时间安装,防火墙和杀毒软件一直开着。如果不是林晓用的时候出的事,多了一个监控程序。

干净的Windows桌面,只有回收站孤零零地待在角落里。我开始重新安装必要的软件:Chrome浏览器、VS Code、Python环境、Git、Node.js。每装一个软件,确认哈希值无误后再安装。

声音来自总监办公室的方向。我站起来,透过工位之间的隔板望过去,看到几个穿着西装的人正站在张启航的办公室门口。其中一个人我认识,是公司的副总经理王涛,平时不怎么露面,专门负责和政府、大客户打交道。另外两个人我不认识,一个戴着眼镜,瘦高个,另一个身材壮实,看起来像是技术人员。

张启航的办公室门开了。他站在门口,脸上的表情说不上来是什么,像是困惑,又像是愤怒,但更多的是一种我从未在他脸上见过的神色——恐惧。

“张启航,请你配合一下,我们需要查看你的办公电脑。”那个戴眼镜的瘦高个说道,语气公事公办,但声音不小,整个办公区都能听到。

张启航张了张嘴,想说什么,但最终什么也没说出来。他往后退了一步,让那几个人进了办公室。

办公区瞬间炸了锅。

“什么情况?”“张总监怎么了?”“那些人是干嘛的?”同事们交头接耳,压低声音议论着。林晓从工位上站起来,一脸茫然地往总监办公室的方向张望。坐在角落的老赵推了推眼镜,小声说他早就觉得张启航最近不太对劲,经常一个人加班到很晚,周末也来公司,但具体在干什么没人知道。

我站在原地,手心全是汗。

192.168.1.187。这个数字在我脑子里不停地转。张启航的电脑IP是不是这个地址?如果是,那些人在查他的电脑,是不是跟这件事有关?如果不是,那真正的监控者又是谁?

我没有加入同事们的讨论,重新坐回工位,打开命令提示符,用arp -a命令查看局域网内所有设备的IP和MAC地址列表。重装系统之后,这个列表是干净的,都是现在在线设备的真实信息。

IP地址192.168.1.187对应的MAC地址是3C-58-C2-9A-4F-1B。

我把这个MAC地址记下来,打开浏览器,搜了一下这个MAC地址段。查询结果显示,3C-58-C2这个前缀对应的设备制造商是“惠普公司”。张启航用的那台办公电脑,正好是一台惠普的工作站。

事情正在朝着我最不愿意看到的方向发展。

总监办公室里传来更大的动静了。好像是抽屉被拉开的声音,然后有人提高了音量说话,但我听不清具体内容。大概过了十分钟,那个戴眼镜的瘦高个率先走了出来,手里拿着一个黑色的移动硬盘。他身后的技术人员抱着一台笔记本电脑——张启航的那台惠普工作站。

最后出来的是张启航本人,他的脸色白得像纸一样。王涛走在最前面,脸上的表情很复杂,像是愤怒、失望和某种说不清道不明的情绪混合在一起。

“所有人,”王涛站在办公区中央,提高了声音,“请大家暂停手头的工作,我有事情宣布。”

整个办公区安静下来,所有人都看向他。

“公司经过调查,发现技术部总监张启航利用职务之便,长期非法收集公司内部商业数据和员工个人信息,并将这些信息用于不正当目的。”王涛的声音在大厅里回荡,每一个字都像钉子一样扎进空气里,“今天上午,公司联合安全审计机构进行了突击检查,已经掌握了确凿的证据。张启航即日起被解除职务,后续将移交司法机关处理。”

安静了大概三秒钟,然后是一阵压抑的骚动。有人倒吸凉气,有人小声说“天哪”,还有人用难以置信的眼神看着张启航。

张启航低着头,从头到尾没说一句话。他被两个穿西装的人一左一右夹在中间,往公司大门的方向走去。路过我工位的时候,他突然抬起头,看了我一眼。

那一眼很短,大概只有一秒钟。但他的眼睛里有一种东西让我心头一紧。不是愤怒,也不是怨恨,而是一种说不清道不明的意味,像是警告,又像是——暗示。

然后他就被带走了。

整个办公区陷入了一种诡异的氛围中。王涛说了几句安抚的话,让大家不要惊慌,继续正常工作,公司会尽快安排新的技术总监到岗。但没有人能静下心来工作,所有人都在小声讨论刚才发生的事情。

我坐在工位上,手指放在键盘上,但一个字也敲不出来。

事情表面上看起来已经有了结果:张启航监控员工电脑,被公司发现,然后被开除。逻辑上说得通,时间线上也吻合——林晓借我电脑的时候,恰好触发了监控程序的安装机制,我发现了异常,然后重装系统,与此同时公司那边也进行了突击检查。

但有些细节对不上。

第一个疑点:如果张启航真的是那个监控者,他为什么要用自己电脑的IP地址作为接收服务器?192.168.1.187这个地址太容易被追踪到了,任何一个稍微懂点网络知识的人都能顺着这个IP找到他。他作为技术总监,不可能犯这么低级的错误。

第二个疑点:我在重装系统之后查到的MAC地址确实是惠普的设备,但这只能说明那台惠普电脑是数据接收方,不能证明张启航本人就是程序的安装者或使用者。如果有人盗用了他的电脑?或者伪造了IP地址?

第三个疑点,也是最让我不安的:张启航被带走时看我的那一眼,到底是什么意思?

我决定自己查一查。

下班之后,我没有走。等办公室的人都走得差不多了,我打开电脑,开始做一些基础的调查工作。

首先,我在重装系统之前,把被感染的系统中几个关键的文件备份到了U盘里——包括那个SystemMonitor程序的exe文件、config文件和log文件。虽然系统重装了,但样本还在。

我用另一台干净的虚拟机打开了这些文件,对exe文件进行了基础的分析。我不是专业的逆向工程师,但我能看到这个程序的一些基本信息:它是用C编写的,.NET Framework 4.5,编译时间大概在一个月前。程序的功能比较简单,就是定期采集系统信息,然后通过HTTP协议POST到指定的服务器地址。

config文件里的那个IP地址确实是192.168.1.187,但这并不能证明这个地址就是张启航的电脑。局域网内的IP地址是动态分配的,今天我查到的192.168.1.187是张启航的电脑,但一个月前、一周前,甚至昨天,这个地址都可能属于另一台设备。

我需要更多的信息。

我打开了log文件,仔细看了一遍里面的记录。这个日志记录的是我电脑上的信息,包括运行的程序、浏览的网页、文件操作等等。林晓使用的那十几分钟的记录也在里面。

她的操作记录显示:打开Chrome浏览器,输入企业邮箱网址,登录,打开收件箱,打开Excel表格,编辑内容,发送邮件,关闭浏览器。整个过程和她说的一模一样,没有任何异常。

但有一个细节引起了我的注意。在她打开企业邮箱登录页面的同一时间,日志里记录了一条“浏览器插件注入”的事件。具体来说,是Chrome浏览器加载了一个名为“OfficeOnlineHelper”的扩展程序,这个扩展程序在后台自动运行了一个脚本。

我立刻打开我的Chrome浏览器,查看扩展程序列表。系统重装之后,扩展程序是全新的,只有我自己安装的几个。但在被感染的系统里,我确实记得见过这个名字——“OfficeOnlineHelper”。这个扩展的图标是一个蓝色的文件夹,看起来很像微软官方出品的工具。

我记得安装这个扩展大概是两个月前的事情。当时我在做一个在线文档的项目,需要测试Office格式文件的在线预览功能,就在Chrome应用商店里搜了一下,找到了这个扩展。它的描述写得很规范,评分也不低,我就顺手装上了。

难道问题出在这个扩展上?

我搜了一下“OfficeOnlineHelper”的信息。在Chrome应用商店里,这个扩展已经被下架了,但在一些技术论坛上,我找到了关于它的讨论。有用户指出,这个扩展在某个版本更新之后,加入了信息收集的功能,会把用户的浏览数据、系统信息发送到一个第三方服务器。

但192.168.1.187是内网地址,不是第三方服务器。这说明,有人对这个扩展进行了二次开发,修改了数据上传的目标地址,把信息收集的目标从外部服务器改成了公司内部的一台电脑。

能做到这件事的人,需要具备几个条件:第一,他有能力修改Chrome扩展的代码;第二,他有办法让我安装这个被修改过的版本;第三,他能够访问公司内网,并且有一台设备可以作为数据接收服务器。

张启航满足前两个条件,他是技术总监,技术水平毋庸置疑。但第三个条件,他自己那台电脑作为接收服务器,风险太大了,不符合常理。

除非,他根本不在乎被发现。或者,这台192.168.1.187的电脑,根本就不是他的。

我越想越觉得不对劲。打开公司的内部通讯软件,找到了IT外包的对接人,一个叫阿杰的小伙子。我给他发了一条消息:“阿杰,问你个事,公司路由器的IP分配记录你能查到吗?我想查一下大概一个月前,192.168.1.187这个IP是哪台设备在用。”

阿杰回得很快:“陈哥你这是要查案啊?不过这个我真帮不了你,路由器的DHCP租期只有24小时,超过一天的历史记录就没了,除非有人专门做了日志记录。”

这条路走不通。

我靠在椅背上,盯着天花板的灯管发呆。办公室里只剩下空调的嗡嗡声和远处服务器机柜的风扇声。窗外已经全黑了,玻璃上映出我自己的影子,看起来有点疲惫。

如果192.168.1.187不是张启航的电脑,那会是谁的?公司的IP分配虽然没有严格的管理,但大致的范围是可以推断的。192.168.1.1到192.168.1.50是网络设备和服务器,51到150是员工的办公电脑,151到200是其他设备,比如打印机、监控摄像头、会议室的投影仪等等。

187这个数字,在151到200的范围内。也就是说,它可能属于“其他设备”。而这些设备里,有一部分是24小时在线的——比如监控摄像头。

我猛地坐直了身体。

监控摄像头。公司一共有六个监控摄像头,三个在办公区,两个在走廊,一个在门口。这些摄像头都是网络摄像头,连在公司的局域网上,每个都有一个固定的IP地址。

我打开了公司的设备管理表格——这个表格是技术部维护的,记录了所有IT设备的信息。摄像头的那一栏,六个IP地址赫然在列:192.168.1.180、181、182、183、184、185。

最接近187的是185,但185不等于187。我有点泄气,正要关掉表格,突然注意到表格的最下面还有一行备注:

“备用摄像头一台,未启用,预留IP地址192.168.1.190。”

190也不是187。但我注意到,这些IP地址的分配并不是严格按照顺序来的,中间有几个空位。其中一个空位就是187。

也就是说,192.168.1.187这个IP地址,在公司的设备管理表格里,是未分配的。是一个幽灵IP。

这就更奇怪了。一个本不应该存在的IP地址,却成了一台数据接收服务器。而且这台服务器至少在一个月前就已经在运行了。这说明有人偷偷地在公司网络中接入了一台设备,这台设备没有在资产表里登记,没有人知道它的存在,它就像幽灵一样隐藏在局域网中,默默地接收着从各个电脑上收集来的信息。

而张启航,也许只是一个替罪羊。

这个想法让我后背一阵发凉。如果我的推测是对的,那么真正的幕后操纵者还在公司里,此刻也许正坐在某个工位上,和我一样假装什么都没有发生。他可能看到了张启航被带走的那一幕,心里正在暗自庆幸——或者,正在计划下一步的行动。

我决定不把自己的发现告诉任何人,至少暂时不说。

第二天上班,办公室的气氛和平时明显不一样。张启航的办公室门锁着,百叶窗拉得严严实实。同事们小声议论着昨天的事情,各种版本的传言满天飞。有人说张启航把公司的技术方案卖给了竞争对手,有人说他在外面自己开了一家公司,用公司的资源做私活,还有人说他是被人陷害的。

林晓看起来有点心神不宁,一上午都在对着电脑发呆。中午吃饭的时候,她端着餐盘坐到我旁边,压低声音问:“陈哥,昨天你电脑是不是出问题了?是不是跟我用的时候有关?”

我夹了一块红烧肉,嚼了两下,说:“没有的事,就是系统更新了一下,你别多想。”

她看了我一眼,欲言又止。过了几秒钟,她说:“其实我昨天用你电脑的时候,有一个弹窗跳出来,说是什么浏览器扩展更新,我点了确定。我当时没在意,后来想想,会不会是这个……”

“你确定吗?”我放下筷子,“弹窗长什么样?”

“就是那种右下角的小弹窗,说OfficeOnlineHelper已更新到最新版本,让我重启浏览器生效。我当时急着发报价,就点了确定,然后刷新了一下页面。”她的表情有点紧张,“怎么了?是不是真的有问题?”

OfficeOnlineHelper。就是这个扩展。林晓的操作只是触发了已经潜伏在浏览器中的恶意扩展的更新,而这次更新激活了信息采集功能。即使没有林晓借电脑这件事,这个扩展迟早也会在某个时间点自动激活,只不过恰好在她使用的时候发生了。

她想了想,说:“没有吧,我电脑上东西很少的,基本就是办公用。哦对了,两个月前张总监说要统一安装一个办公效率工具包,给我们每台电脑都装了几个软件和浏览器扩展。我电脑水平不行,都是他亲自过来装的。”

“他每台电脑都亲自装?”我的声音不自觉地提高了一点。

“我没说什么。”我打断了她,“快吃饭吧,菜都要凉了。”

但林晓显然已经被自己的猜测吓到了。她低着头扒了几口饭,然后又抬起头,小声说:“可是张总监为什么要这么做?他是技术总监啊,工资那么高,为什么要冒这种风险?”

这个问题我也在想。如果真的是张启航干的,他的动机是什么?商业间谍?个人利益?还是被人指使?昨天他在办公室门口被带走时的那一幕,再加上他看我那一眼,我总觉得事情不像表面上那么简单。

下午,公司发了一封全员邮件。发件人是王涛,内容很简单,大意是张启航因个人原因离职,技术部暂时由副总监刘洋代理,请大家继续配合项目推进,不要受此事影响。邮件里没有提监控、调查、移交司法机关这些字眼,仿佛昨天那场风波只是一场误会。

但这封邮件反而让我更加警觉了。如果张启航真的涉嫌非法监控,公司为什么要用“个人原因离职”这个说法?为什么要淡化处理?那两个人昨天明明说要移交司法机关,为什么今天就变成了个人原因离职?

一种可能是,公司不想把事情闹大,影响正在洽谈的那个大项目。另一种可能是,公司发现了一些不便公开的东西,选择内部消化。

不管是哪种可能,都说明这件事的水比表面上看起来要深得多。

下午五点四十分,距离下班还有二十分钟。我收拾东西准备走的时候,手机震动了一下。是一条微信消息,发信人的名字让我心头一跳。

张启航。

他不是应该被控制起来了吗?怎么还能用手机?我点开消息,内容只有短短一行字:

“今晚八点,南山路星巴克,有东西给你。一个人来。”

我盯着这条消息看了很久。手指悬在屏幕上方,不知道该回复什么。理性告诉我,不应该去。一个刚刚被公司以“长期非法收集商业数据”为由开除的人,约你晚上单独见面,怎么看都不像是什么好事。而且如果公司知道了我和他见面,很可能会把我也牵扯进去。

但张启航被带走时看我的那个眼神,一直在我脑海里挥之不去。那个眼神里有一种东西,像是在说“事情不是你想的那样”。

我深吸一口气,回了一个字:“好。”

南山路的星巴克离公司大概四公里,我开车过去用了十五分钟。到的时候是七点五十分,我找了一个靠窗的位置坐下,点了一杯美式咖啡。店里人不多,两个学生在角落里戴着耳机看书,一个中年男人对着笔记本电脑敲键盘,还有一对情侣靠在吧台边上低声说话。

张启航是八点零二分到的。他穿着一件深灰色的夹克,头发有点乱,眼眶微微发红,看起来像是没睡好。他看到我之后,径直走过来坐下,没有寒暄,开门见山地说:“谢谢你愿意来。”

“你到底想说什么?”我保持着警惕,手里握着咖啡杯,杯壁的温度透过纸杯传到掌心。

他从口袋里掏出一个U盘,推到桌子中间。“这上面有所有你需要知道的东西。我之所以找上你,是因为昨天那条微信之后,你是唯一一个真的查了电脑的人。”

“你怎么知道我查了电脑?”

“因为系统记录显示,昨天上午你的电脑联网状态下,SystemMonitor进程的日志里出现了大量的系统检测行为——任务管理器、注册表编辑、文件浏览——这些操作的特征很明显,是有人在手动排查。”他看着我,语气平静,“然后你的电脑就断网了,半个小时后IP地址变了,设备名也变了。我猜你是直接重装了系统。”

“所以你一直在监控我的电脑。”

“不,”他摇了摇头,表情变得严肃起来,“监控你的不是我。那个程序是我写的,但不是我安装的,也不是我把数据上传地址改成公司内网的。”

他沉默了几秒钟,然后说:“你还记得两个月前,公司让我们技术部给所有员工安装办公效率工具包的事吗?”

我点了点头。那个工具包是公司管理层推动的项目,名义上是为了提高办公效率,包含了几个常用软件的扩展和脚本。张启航作为技术总监,负责执行这个安装任务。

“那个工具包里的OfficeOnlineHelper扩展,就是我写的监控程序的前身。”他说,“但最初的设计,数据是上传到阿里云服务器上的,而且只收集和办公效率相关的数据,比如常用软件的使用频率、文件类型的分布等等,目的是为了生成一份优化报告给管理层。这是我的本职工作,是经过公司批准的。”

“但那个数据接收地址被改了。”我说。

“对,被改了。”他的表情变得阴沉,“不是我改的。我查了服务器的日志,修改发生在工具包部署后的第三周。有人获取了云服务器的管理权限,在后台把上传地址从阿里云改成了内网的192.168.1.187。而且,那个人还修改了扩展的代码,把信息收集的范围从办公效率数据扩大到了全部系统信息——包括键盘输入、浏览记录、文件目录、甚至网络流量。”

“一开始没有。”他苦笑了一下,“因为那个云服务器上的Dashboard显示一切正常,数据量虽然有波动,但都在合理范围内。直到上周,我在做例行安全检查的时候,发现了内网有一台未知设备在进行大量数据收发,才顺藤摸瓜查到了这件事。我本来打算这周一向公司汇报,启动内部调查。结果周日晚上,我就接到了电话,说有人向公司举报我非法监控员工电脑。”

“所以你是被举报的?不是公司自己查出来的?”

“对。举报的时间太巧了,就在我准备调查的当天。”他的手指在桌上轻轻敲着,“而且举报人提供了非常详细的证据——包括那个监控程序的代码片段、数据上传的日志、甚至还有我电脑上的操作记录。这些东西不应该被任何人获取到,除非那个人自己就是这件事的参与者。”

我听明白了。张启航的意思是,真正的幕后操纵者发现了他的调查行动,于是抢先一步把锅甩给了他。而公司之所以愿意相信这个举报,是因为张启航确实写了那个监控程序——虽然他的初衷是合法的办公效率分析,但这个事实在举报中被扭曲了。

如果他说的是真的,那么那个真正的幕后操纵者,此刻还在公司里。

“你为什么找我?”我问。

“因为你是第一个发现异常并且立即采取行动的人。”他说,“你重装了系统,意味着你的电脑现在是干净的,那个监控程序已经不存在了。而且,你是开发部的人,和这件事本来没有直接关联。我需要一个干净的、可信的人,帮我找到那台幽灵设备。”

“192.168.1.187。”

他眼睛亮了一下:“你知道这个IP?”

“3C-58-C2-9A-4F-1B,”他重复了一遍这个MAC地址,“这确实是我那台惠普工作站的MAC地址。但这不可能,因为我在发现这个内网地址之后,第一时间检查了自己的电脑,确认上面没有运行任何数据接收服务。而且我查了路由器的ARP表,192.168.1.187这个IP对应的MAC地址和我电脑的MAC地址不一样。”

“不,是克隆了。”他缓缓说道,“有人克隆了我电脑的MAC地址。MAC地址克隆在技术上并不难,只需要一点网络知识就可以做到。克隆之后,两台设备在局域网内看起来是同一台,但实际上IP地址可以不同。真正的接收服务器在另一台设备上,它伪装成了我的电脑。”

“那台设备现在还在公司里吗?”

“不知道。我昨天被带走之后,没办法接触任何网络设备。但我可以肯定的是,那台设备在昨天上午还是在线的——就是在你的电脑被感染的那段时间。”

“林晓借我电脑的时候。”

他点了点头。“林晓只是一个偶然的触发因素。监控程序在每台安装了工具包的电脑上都有,但大多数人的电脑上它处于休眠状态,只有在特定条件下才会激活。林晓打开企业邮箱的时候,浏览器加载了一个特殊的脚本,激活了你电脑上的监控程序。这个激活过程是随机的,目的是避免统一激活时被批量发现。”

我脑子里飞速运转着。如果张启航说的是真的,那么这件事远比我想象的要复杂。公司里有一个隐藏在暗处的人,他掌握着相当高的技术水平,能够克隆MAC地址、修改云端服务器配置、部署幽灵设备、甚至抢先一步嫁祸给张启航。这个人的目的是什么?他在收集什么信息?收集给谁?

“U盘里有什么?”我指了指桌上的那个U盘。

“你为什么这么信任我?我们平时交集并不多。”

他沉默了一会儿,然后说:“因为你是我见过唯一一个会在发现电脑异常后,第一时间断网重装的人。大多数人的反应是杀毒、或者找IT、或者直接忽略。你的反应速度和判断力,说明你懂技术,而且谨慎。我需要一个这样的人。”

我把U盘收进了口袋里。

“最后一件事,”他站起来准备离开,“不管你查到了什么,先不要告诉公司里的任何人。包括刘洋,包括王涛,包括你的同事。因为我现在不确定,那个人到底是一个人,还是一个利益链条。”

“你还会回公司吗?”

“暂时回不去了。”他苦笑了一下,“公司和我的劳动关系已经解除了,虽然没有真正移送司法机关,但我身上背着这个污点,以后在行业里也很难混了。我现在唯一想做的,就是把真相查清楚。”

他转身走了。我坐在星巴克的椅子上,面前的美式咖啡已经凉透了。窗外城市的灯光在玻璃上氤氲成一团模糊的光晕,我突然觉得这个我工作了三年的公司,变得有点陌生。

第二天是周五,我没有立刻使用那个U盘。张启航说的话我需要时间消化,而且贸然在公司网络里运行一个来路不明的扫描工具,本身也是高风险的行为。我用了一整个白天的时间,观察公司里的每一个人,试图从他们的言行举止中看出一些端倪。

刘洋——代理技术总监,一个三十出头的瘦高个,平时话不多,技术上中规中矩,张启航在的时候他一直都是副手角色。张启航被开除后,他顺理成章地接替了这个位置。他今天早上开了技术部的第一次全体会议,语气沉稳,布置了几个项目的进度,看起来对这个变故适应得很好。

王涛——副总经理,昨天主导了张启航被带走的事件。今天他照常出现在公司,脸上看不出什么异常,甚至比平时更轻松了一些。上午十点左右,他带着两个客户参观了办公区,笑声朗朗地说着“我们公司的技术实力很强”之类的话。

林晓——她看起来还是有些不安,一上午去茶水间接了三次水,每次路过我工位的时候都会看一眼,像是在确认什么。中午吃饭的时候她没来食堂,听行政部的小周说她在工位上吃的外卖。

其他人的表现都很正常,至少表面上是这样。

下午三点,我决定行动了。

我没有在公司电脑上运行张启航的扫描工具,而是找了一个借口——说要给朋友修电脑,从仓库里借了一台退役的旧笔记本。我把这台笔记本带到工位上,插上网线,确保它能连接到公司内网,然后在上面运行了U盘里的扫描工具。

工具启动后弹出了一个黑色的命令行窗口,一行行白色的文字飞快地滚过屏幕。大概过了三十秒,窗口里显示出了局域网内所有在线设备的列表,包括IP地址、MAC地址、设备名称和厂商信息。

我一行一行地往下看。

192.168.1.1 - 路由器。

192.168.1.100 - 打印机。

192.168.1.101到162 - 员工电脑,每一台都对应着具体的工位和人名。

192.168.1.180到185 - 监控摄像头。

然后我看到了它。192.168.1.187。

和昨天张启航电脑的MAC地址一模一样。但此刻张启航的电脑已经被带走了,不在公司。也就是说,那台克隆了MAC地址的幽灵设备,现在还连在公司的局域网上。

工具还提供了更详细的信息——这台设备的物理连接端口是交换机的第23号端口。我们公司一共有两台交换机,23号端口对应的是办公区西北角的那排网线接口。

西北角。

我抬起头,朝办公区西北角望去。那里是一个小型的储物区域,堆着一些闲置的办公桌椅、纸箱和淘汰下来的旧设备。角落里有一个弱电箱,里面是网线和电话线的接口。平时很少有人会去那里,保洁阿姨一周打扫一次。

心跳加速了。我站起来,假装去储物区找东西,走到那堆纸箱旁边。储物区没有独立的照明,光线比办公区暗了不少,空气里有一股灰尘和纸张混合的气味。

我蹲下来,搬开了几个摞在一起的纸箱。在最里面的角落里,紧贴着弱电箱的位置,有一个黑色的盒子。

这个盒子大概巴掌大小,比普通的路由器还要小一圈,上面没有任何品牌的标识,只有一个电源指示灯在微弱地闪烁着绿光。一根网线从盒子后面伸出来,插进了弱电箱的网口里。

找到了。

就是它在接收所有电脑上传来的信息。

就在这时候,办公区的灯突然闪了一下。

只是一瞬间的闪烁,快得像是我的错觉。但紧接着,空调的声音变了,从平稳的嗡鸣变成了断断续续的突突声,像是发动机在挣扎着运转。然后,办公区所有电脑的屏幕同时闪了一下。

“怎么回事?”“我的电脑刚刚蓝屏了!”“我的也是,突然重启了!”同事们的声音此起彼伏地响起。

系统更新。

我脑子里同时跳出这四个字。我冲向自己的工位,屏幕上的画面让我倒吸一口凉气——Windows系统更新界面,齿轮图标在屏幕中央缓缓旋转,下面是一行字:“正在安装更新,请勿关闭计算机。”

不只是我这一台。环顾四周,整个办公区的几十台电脑,全部都在进行系统更新。有的显示百分之三十几,有的百分之五十几,进度不一,但它们都在做着同一件事。

“路由器的管理页面打不开了!”网络管理员小赵喊道。

“文件服务器也连不上了!”

有人立刻冲向防火墙,有人打手机的流量开着热点查看公司账户。我站在原地,盯着屏幕上的进度条,脑子里飞速转着。这不是意外,这是一次有组织、有计划的攻击。那个人在清除证据。

百分之六十七。百分之七十一。进度条不紧不慢地走着,像是在嘲讽所有人的惊慌失措。有人试图强制重启电脑,但重启之后系统自动回到了更新界面,没有任何绕过的办法。

我回头看去,是刘洋。他的表情异常难看,嘴唇抿成一条线,眼睛死死地盯着电脑屏幕上滚动的更新日志。

“这次的更新包,不是微软官方的。”他压低声音说,“有人伪造了更新包,这个更新包会替换系统文件,覆盖掉所有日志记录和缓存数据。”

“所以呢?”有人问。

刘洋没有回答,但他的表情说明了一切。所以那个监控程序的所有痕迹,包括安装记录、运行日志、数据上传记录,都将在这次“更新”中被彻底抹除。等电脑重新启动之后,整个办公区将变成一片信息的焦土,什么都查不到。

乔治·奥威尔在《1984》里写过一句话——谁控制过去,就控制未来。此刻正在进行的,就是一场针对“过去”的全面清除行动。

百分之九十一。百分之九十四。百分之九十七。

电脑陆续重启了。我的那台也进入了重启流程,Windows的logo在屏幕上亮起,转了几圈,然后进入了登录界面。一切看起来都很正常,桌面上的文件、图标、壁纸,都和更新前一模一样。

但我知道,有些东西已经不一样了。我打开事件查看器,安全日志栏一片空白,所有记录都被清零了。系统还原点全部消失了。浏览器的历史记录、缓存、Cookie,全部被清除得干干净净。

技术人员开始奔走,检查服务器和网络设备。小赵发现公司主路由器的配置出现了异常,有一台未知的MAC地址设备在更新前几分钟短暂接入过。

那个幽灵。

我已经知道答案了,但我还是问道:“那台设备还在线吗?”

物理证据,也没了。

我立刻起身,朝西北角的储物区走去。那个黑色的小盒子还放在原来的位置,网线也还插着,但电源指示灯已经灭了。我把盒子拿起来,它轻得出奇,塑料外壳摸上去还有点温热。

我把它翻过来,底部的标签上印着一行小字:型号DS-207,工业级嵌入式数据采集终端。除此之外,没有厂商名称,没有序列号,没有生产日期。

我把盒子放回原处,回到工位。张启航给我的那个U盘还插在旧笔记本上,屏幕上的扫描结果仍然定格在192.168.1.187那一行。我盯着那行数据,忽然想起了一件事。

我们公司的内部更新服务器,是用一台旧的戴尔工作站搭建的,上面运行着Windows Server Update Services。这个服务器的管理员权限,只有两个人有:张启航,和刘洋。

“这个更新包会替换系统文件,覆盖掉所有日志记录和缓存数据。”

也就是说,之前张启航给我的那些证据,那些服务器日志、代码修改记录、网络流量分析,可能已经在某种程度上被破坏了。我口袋里的那个U盘,也许是我手上仅剩的物证。

下班后,我坐在车里,插上了张启航的U盘,输入密码,打开了那个加密文件夹。

文件夹里有十几个文档,有Word格式的调查报告,有Excel格式的日志分析表格,还有几个pcap格式的网络抓包文件。我随便打开了一个抓包文件,用Wireshark查看里面的内容。

这个抓包文件记录的是公司内网在某个工作日上午的网络流量。我看到了大量的HTTP请求,目标地址都是192.168.1.187,请求的内容是经过编码的系统信息。发送这些请求的源IP地址涵盖了几乎整个办公区——每个员工的电脑都在往外发送数据。

但在这些流量中,有一个数据包是反方向的——从192.168.1.187发送到另一个IP地址。这个目标IP地址不是内网的。

192.168.1.187不是在收集数据,它只是一个中转站。真正的数据接收方,在外面。

192.168.1.187在收集到员工数据之后,并没有存储在自己身上,而那台外网服务器的IP地址,在抓包文件中清晰可见。

我打开浏览器,用IP地址查询工具搜了一下那个外部IP。

查询结果显示:该IP地址归属地为香港,托管服务商是一家名叫“StarCloud”的云计算公司。

StarCloud。

我第一次看到这个名字。

我靠在驾驶座的椅背上,脑子里一片混乱。一家香港的云计算公司,和一个藏在北京写字楼角落里的幽灵盒子,中间连着几十个普通上班族的电脑数据。这一切的背后,到底是谁?他想干什么?

手机响了。我拿起来一看,是林晓发来的微信。

“陈哥,你今天下班之后能跟我去一趟地下车库吗?我有东西给你看。”

“你先别问那么多,来不来?”

我犹豫了片刻。

地下车库B2层,灯光昏暗,空气里有一股潮湿的霉味。我找到林晓的时候,她站在一辆白色的本田旁边,脸上的表情紧张得像一只受惊的兔子。

“你看看这个。”她从副驾驶座上拿出一个袋子,里面是一叠打印出来的A4纸,足足有几十页,上面密密麻麻地印满了代码和英文注释。我接过来翻了翻,第一反应就是——这不是普通的文件。

这是公司在谈的那个八位数项目,客户的姓名、预算、方案细节、竞标策略——每一条都足够构成泄密案。

“你从哪儿弄来的?”我压低声音问。

“不是我弄来的,是人塞到我抽屉里的。”林晓的声音带着颤抖,“今天下午,我发现抽屉里多了这个,上面还贴着一张便利贴,写着‘交给陈宇’。我怕被监控拍到,没敢在办公室跟你说,所以才约你来这里,让你自己处理。”

便利贴。

我翻到文件最后一页,那里贴着一张黄底红字的便利贴,字迹潦草却又带着某种阴沉力道。我用手机手电筒照上去,仔细辨认着上面的字。

“收手,否则下一个就是你。”

我抬起头,看向林晓。车库的灯光在她脸上投下深深的阴影,她的眼睛里倒映着手机手电筒的白光,瞳孔微微收缩。

“陈哥,要不……咱们别查了?”

我把文件卷起来,塞进自己的包里。

“你先回家。”我说。

车子缓缓发动。尾灯亮起,红色光晕在灰色墙面上拖出长长的影。等那光芒彻底消失在坡道尽头,整个地下二层就只剩下我自己的呼吸声,和日光灯管发出的细微电流声。

我打开手机,给张启航发了一条微信。

“我需要知道StarCloud的所有信息。”

他很快回了。

“StarCloud?你怎么知道这个名字的?”

张启航沉默了很久,久到我以为他不打算回复了。然后消息来了。

“StarCloud不是一家普通的云计算公司。它背后是一家境外的商业情报机构。我查了三个月才查到这一步。你现在问这个问题,说明你已经看到了那些不该看到的东西。”

“那你为什么之前不告诉我?”

“因为我不能确定你是不是他们的人。”他回复道,“现在我能确定了。因为如果你是他们的人,你不会问StarCloud,你会直接删掉那个抓包文件,然后装作什么都没看到。”

我盯着屏幕上这行字,忽然觉得口袋里的那个U盘变得格外沉重。

“明天,我们见一面。”张启航又发来一条消息,“我把剩下的东西都给你。然后,我们该收网了。”

我把手机放回口袋,走出了车库。夜风凉得像是刀片刮在脸上,城市的天空被万家灯火映成一片浑浊的橘红色。远处的写字楼里,还有不少窗口亮着灯,一个一个小小的发光方格,像棋盘,也像笼子。

我不知道张启航说的“收网”是什么意思,也不知道事情到了最后会变成什么样子。但我清楚地知道一件事——从我在星巴克接过那个U盘开始,我就已经没有回头路了。

要么查出真相,要么,成为下一个被清除的目标。

我裹紧外套,走进了夜色里。

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。