人畜
第12章 · 告警
举报材料是周二凌晨两点零七分发出去的。
陈岸盯着邮箱的“已发送”列表看了三秒,确认三封邮件都显示“投递成功”,然后把笔记本合上,放进双肩包,拉上拉链。他坐在图书馆的公共电脑前又等了一会儿,直到屏幕上跳出自动关机的倒计时,才站起来,把椅子推回原位。
出门的时候,他在门口的玻璃门上看到了自己的倒影。一个穿深灰色卫衣、背黑色双肩包的年轻男人,头发有点乱,眼睛下面两片青黑。看起来就像一个普通的熬夜赶代码的程序员。
他确实就是一个普通的熬夜赶代码的程序员。
只不过这个程序员刚刚把一份足以让一家公司破产的材料,塞进了四个不同的收件箱。
他把双肩包背好,推开门,走进了凌晨两点的街道。
风很大。路灯把他的影子拉得很长,然后又压得很短,交替着,像一条在地面上呼吸的蛇。他走了大概十五分钟,回到自己的出租屋——一间老式小区的两居室,在六楼,没有电梯,楼道灯坏了两个月,房东一直没来修。他摸着黑爬上去,用钥匙开门,走进去,把包往沙发上一扔,然后站在客厅中间,没开灯。
窗外有霓虹灯的光透进来,红色的蓝色的绿色的,在他脚边晃来晃去。
他突然觉得很累。
不是身体上的累。身体上的累,睡一觉就好了。是那种,当你把一个巨大的沉重的东西推了很久很久,终于把它推到它该去的地方,然后你发现——你的手上空了,但你的肌肉还记得推它的姿势。那种姿势留在你的骨头里,不肯走。
他走到窗前,看着楼下空无一人的街道。
“美丽说是第一道门。”他低声说,像是在确认什么,“推开它,后面还有第二道门。”
他把这句话说完,然后去洗澡,睡觉。
他没有做梦。或者做了,但醒来就忘了。醒来的时候是上午十点,手机上有十几个未接来电,全部来自公司。他看了一眼,没回。今天是周三,他请了年假,理由写的是“家中有事”。
他煮了一壶咖啡,端着杯子坐到电脑前,打开了笔记本。
他想做的第一件事,是检查萤火数据库的API访问日志。
萤火是他给那个从星辰传媒后台“借”出来的数据库起的名字。当时他为了拿到那些内容模板和账号数据,顺手在对方的后台留了一个自己才看得懂的记号——一个被轻微修改过的API接口文档,正常情况下不会有人注意到。但如果有人真的去翻后台日志,顺着那条接口查上来,就会看到一个指向外部的异常请求记录。
他当时留这个记号,是为了给自己留一条退路——万一哪天他需要再回来取数据,他不必重新破解一遍。
但现在,这个记号有可能变成一个指认他的证据。
所以他养成了习惯:每隔几天,登录一次那个被他做了端口转发的临时节点,检查API的访问日志。确认没有异常的来自外部IP的请求。
他喝了一口咖啡,打开了终端。
然后他的手停住了。
屏幕上,日志文件的最末尾,多了三行记录。
那三行记录的时间戳,分别是:周一 23:41、周一 23:43、周一 23:47。
也就是——他提交举报材料的前两个小时。
三条请求,来自同一个IP段。不是他见过的任何内部地址。请求的路径,正是那条被他修改过的本不该被触发的API接口。
陈岸的手指慢慢收紧,把咖啡杯的杯壁捏得发白。
“……有人来过了。”
而且,那个人来的时间,恰好就在他提交举报材料的前两个小时。
这不可能是一个巧合。
他的大脑在这一瞬间跑过了十几种可能性:对方的后台管理员在做例行巡检、某个自动化的安全扫描脚本、一个恰好在同一时间误触了接口的内部测试——每一条都被他自己在半秒内否决掉。因为那条接口的路径是他自己随手改的,改的地方很隐蔽,不是一个正常巡检会扫到的位置。能触碰到它的人,要么是和他一样熟悉那套后台代码的人,要么是——有人专门在找它。
而“专门在找它”这件事,只有两种解释:要么星辰那边已经发现了数据被盗,正在反向追踪;要么……有人在他之前,就已经在那里了。
陈岸把咖啡杯放下,打开了一个IP解析工具,把那三段地址输进去。
查询结果跳出来的时候,他盯着屏幕看了五秒。
三个地址,全部落在同一栋写字楼。
深城,南山区,科技园南路 18 号,星河世纪大厦,B座,27层。
他把这个地址抄在一张纸上,然后打开浏览器,搜了一下这栋楼。
星河世纪大厦。深城比较有名的甲级写字楼之一,租金不便宜。27层,目前入驻的公司,根据物业公开信息,是两家
一家叫“博远商务咨询有限公司”。
另一家叫“锐锋网络安全技术有限公司”。
陈岸看着这两个名字,嘴角慢慢扯了一下。
商务咨询。网络安全。
前者是用来做反侦察和调查的壳,后者是真正干活的人——负责追踪数据流向、逆向分析入侵路径、找出是谁动了他们的后台。
“……找死。”他把纸折起来,塞进钱包,“居然还留了个网络安全公司在楼里。”
他原本以为,美丽说的后台只是被一个普通的运维团队维护着,水平有限,反应迟钝。这也是他敢动手的原因之一——他评估过对方的技术能力,认为自己在被发现之前有足够的时间窗口完成任务。
但现在看来,他低估了对方。
27层,两家公司,一明一暗。这已经不是“普通的运维团队”了。这是一个专业的反制单元。它的存在本身就在说明一件事:星辰集团的数据安全,是被当成一回事来做的。而那些数据——那些内容模板、账号体系、结算结构——值得被这样保护。
陈岸关掉IP解析工具,靠在椅背上,看着天花板。
他的耳朵里,滤波器又开始工作了。
它把刚才发生的一切,自动翻译成了一个他更熟悉的东西——一个安全模型:
他(攻击者)在一次成功的行动后,没有彻底清除痕迹(防守方失误);
防守方拥有一个专业的IR(事件响应)团队(防守方优势);
防守方在攻击者再次上线时,会尝试溯源(必然发生);
他此刻的IP、设备指纹、行为模式,可能已经被对方捕获(风险项)。
前两条是既成事实。后两条,还没有发生——但随时会发生。
如果他现在继续用这台笔记本、这个网络环境,去访问任何一个跟星辰相关的节点,对方只要布好了溯源的坑,就能顺着网线爬过来。
他站起来,在客厅里走了两圈。
然后他做了一件他早就该做的事:他把这台笔记本的硬盘做了一次全盘加密,换了一张新的SIM卡,重新注册了一个新的匿名邮箱。他用现金在楼下便利店买了一张充值卡,给新号码充了值。
接着,他去了一趟电脑城。
深城的华强北,全世界最大的电子产品集散地之一。他在那里花现金买了三样东西:一台二手的ThinkPad、一张全新的无线网卡、一个号称“可以绕过所有流量识别”的微型路由器。
卖家是个满脸胡茬的中年男人,一边给他装机一边问:“小伙子做什么用?”
“写代码。”陈岸说。
“写代码用不着这么折腾吧?”
陈岸没回答。他付了现金,拿上东西,转身走了。
回到家,他用那台全新的二手ThinkPad,连上那个微型路由器,再通过路由器跳到一个他用加密货币租的境外VPS上。整条链路做了三层跳板和流量混淆。
这套配置,就算对面是锐锋网络那个所谓的“网络安全公司”,想顺着网线找到他,也得花上不少功夫——更重要的是,会留下他们正在溯源的痕迹。
他之所以这么做,不是为了躲一辈子。是为了争取时间。
在他被找到之前,先把该拿的东西拿到。
做完这些,已经是下午四点。他坐在那台二手电脑前,重新打开了萤火数据库的访问日志。
现在,他换了一个思路。
既然对方已经来过了,既然那个IP段属于27层的锐锋网络——那么反过来,对方在这套系统里留下的痕迹,也一定还在。
他开始在日志里倒查。不是查自己,而是查“除自己之外的一切异常”。
他把时间范围拉大到过去三个月,把请求来源做聚类,把请求频率做统计,把请求路径做拓扑排序。他把所有“不符合正常用户行为模式”的请求单独拎出来,放进一个新建的文件里。
三个小时之后,他把那个文件缩小到了四十七条。
四十七条异常请求,分布在过去三个月里,全部来自外部IP,全部集中在少数几个关键接口上。其中一部分,他一眼就认出来,是自己当初探查时留下的。但剩下的——大概三十条左右——手法比他更干净,路径比他更刁钻,目的性也更强。
那些请求的聚焦点,不是内容模板,不是账号列表。
是资金流向。
具体地说,是那张“五合一账户”也就是他在 00号文档里标记为“资金通道”的那张结算卡——的所有上下游交易记录。
有人在查那张卡。
而且,根据请求的时间分布,那个人已经查了将近两个月。断断续续,小心翼翼,但从来没有真正停下来过。
陈岸靠在椅背上,看着那三十条记录,忽然有了一个非常不舒服的感觉。
他一直以为,自己是在追查那个设计了这一切的人。
但从这三十条记录来看,对方——那个真正设计了这一切的人——似乎也一直在被某个人追查着。
而那个追查他的人,比陈岸更早开始,也更隐蔽。
“……还有别人?”陈岸皱起眉头,把这个疑问写进了 00号文档。
但他很快把这个念头压了下去。不管有没有别人,他手上的事没有变:美丽说的举报材料已经发出去了,无论结果如何,第一道门已经被推开。而第二道门后面是什么——那个五合一账户的另一头,那个接收星辰系公司每月大额转账的账户持有人——现在成了唯一重要的事。
他把那四十七条异常请求的来源IP也做了一次聚类。
结果出来的一瞬间,他的瞳孔微微缩了一下。
那三十条“比他更干净”的请求,来源IP,同样落在深城。
但不是星河世纪大厦27层。
是另一个地址。
他把那个地址查了出来——这一次,他没有笑。
深城,福田区,益田路 5999 号,赛格广场,38层。
那一层,只有一家公司入驻。
公司名叫:星辰投资控股有限公司。
陈岸看着这个名字,沉默了很久。
所以,整件事的结构,比他以为的要更复杂一点:
星河世纪大厦27层,锐锋网络——是防守方。他们是星辰系雇佣的安全团队,负责保护数据不被外人(比如陈岸)偷走。
赛格广场38层,星辰投资——是中心。他们是这套东西的所有者,也是那个“设计了这一切的人”所在的地方。
而那个在后台悄悄查了两个月资金流向的比陈岸更早开始追查的神秘人
就藏在星辰投资自己的大楼里。
或者,更直接地说:有人在星辰投资的内部,用自己的权限,调取自己公司的资金数据,在查自己的老板。
陈岸把笔放下,揉了揉眼睛。
“一片森林。”他低声说。
白教授说得对。他以为自己在砍一棵树,但他往下挖,发现它是一整片森林。而森林这种东西——你永远不知道,在你看不见的地方,还有多少双眼睛,也在盯着同一棵树。
他把这些发现全部整理进 00号文档,新增了一个章节,命名为:
“【插曲】告警:存在第三方观测者。身份未知,立场未知,进度领先于我。威胁等级:无法评估。”
写完这一行,他犹豫了一下,又在末尾加了一句话:
“注意:这个第三方,如果是站在我这一边的,那我就是多余的。如果是站在对面那边的——那他查资金流向的目的,就绝不只是‘好奇’。”
他关上文档,看了一眼时间。
晚上九点二十。
窗外,深城的夜景铺展开来,密密麻麻的灯光像一张巨大的发光的网。在这张网的某一个节点上,一个他不知道是谁的人,可能此刻也正坐在电脑前,看着同样的数据,想着同样的问题。
陈岸希望那个人是站在他这边的。
但他活了二十八年,早就学会了一件事:希望这种东西,从来都不能拿来当证据用。
他只相信两样东西:数据,和他自己。
而此刻,数据告诉他——他不是唯一的猎人。
第13章 · 回响
举报材料发出去之后,陈岸以为自己会失眠。
但他没有。他那天晚上睡得很好,甚至比之前几周都好。好像把那封邮件按下去的瞬间,有什么一直绷着的东西松开了。
第二天上午,他没有急着去看举报有没有被受理。他去做了一件更无聊的事:他把家里的窗帘拉上,把手机调成静音,把笔记本放在桌上,然后坐在沙发上,盯着天花板,什么都不干,干了整整一个小时。
他需要知道,当那块石头离开他的手之后,他自己会发生什么。
答案是:什么都没发生。
没有警察敲门,没有陌生号码打来,没有从窗户射进来的狙击镜反光。窗外的城市照常运转,楼下早餐店的蒸笼照常冒着热气,隔壁的夫妻照常为了谁去接孩子吵了一架。
世界没有因为他按下了发送键,就突然改变运转的轨道。
这让他有一种奇怪的失落感。他花了这么多天,这么多精力,把自己整个人都投进去——然后他发现,对这个世界而言,他做的这件事,轻得就像往一条河里扔了一粒沙子。
他不喜欢这种感觉。
但他也知道,这种感觉恰恰说明一件事:他做的事情是对的。 如果一个人在做了这样一件事之后,世界立刻就给了他巨大的回响,那通常意味着他卷入了一个他自己根本控制不了的东西。而现在这种“什么都没发生”,反而是一种保护。
他打开手机,看了眼时间。十一点零六分。
然后他做了一件他之前一直忍住没做的事:他打开了新闻App。
如果举报被受理,如果市场监管部门或者税务局真的开始动作,那么在公开信息层面,一定会有蛛丝马迹。哪怕只是最微小的一条。
他把关键词输进去:美丽说、传媒、查处、调查、封号。
搜索结果跳出来,密密麻麻,但大部分都是旧闻——美丽说旗下网红的带货视频、合作品牌的通稿、“独立女性成长”的软文。
他把时间筛选调到“过去24小时”,又搜了一次。
这一次,结果少了很多,但排在第三位的,是一条来自一个叫“电商观察”的行业自媒体的短消息,发布时间是今天早上七点二十分。
标题只有一句话:
《传美丽说传媒被立案调查,旗下多名头部主播账号异常》
陈岸的手指停了一下。
他点进去。
正文也很短,不到三百字。大意是:据知情人士透露,某头部MCN机构因涉嫌虚假宣传、偷逃税款等问题,已于近日被相关监管部门立案调查。消息人士称,该机构在多个平台的多名头部主播账号出现“异常状态”。文中没有点名,但用了“独立女性”成长”变美”等关键词,还配了一张打了马赛克的明显是办公大楼的照片。
陈岸放大那张照片,看了三秒。
马赛克下面,是“星河世纪大厦”几个字的轮廓。
他的心跳,在这一瞬间,漏了一拍。
“……受理了。”
不是猜测,不是希望。是事实。
他把那条短消息翻来覆去看了好几遍,确认自己没有看错每一个字,然后把手机放下,坐在沙发上,看着对面的墙。
墙是白的,什么都没有。
但他脑子里,此刻像有一块巨大的显示屏被点亮了——所有他之前梳理过的东西,此刻开始以极快的速度重新排列组合:
举报材料 → 四个收件箱 → 至少一个被认真对待 → 立案 → 行业自媒体放风 → 账号异常 → 调查启动。
这条链条的每一环,此刻都有了对应。
而最让他感到一种近乎生理性的战栗的,是那个时间线
他周二凌晨两点发出材料。
那条行业消息,是周三早上七点二十分发出的。
中间隔了大约二十九个小时。
二十九个小时,足够一个材料从一个匿名邮箱,经过转手、甄别、汇报、立案,再到消息被某个“知情人士”透露给自媒体——然后还要再等一个晚上,等一个合适的发布窗口。
这套流程走完,二十九个小时,不仅不是慢,甚至可以说……很快。
快得不正常。
陈岸作为一个在大公司待过的人,太清楚一个材料从“被收到”到“被立案”通常需要多久。那种事的正常节奏,是按“周”来计算的。而他这份材料,从发出去到出现回响,只用了一天多。
这意味着一件事:在他之前,已经有人把同样的东西,或者比他更完整的东西,送到过那些人的桌上。
他的举报材料,不是在开辟一条路。
是他在走到一条已经被人踩出来的路上,补了一个脚印。
“……那个第三方。”他低声说。
那个在星辰投资的内部、悄悄调取资金流向的神秘人。如果那个人真的存在,如果那个人比他更早开始追查——那么这条“异常快”的时间线,就有了最合理的解释:
是那个人,先动的手。
陈岸感到自己的胃,在这一刻,轻轻地沉了一下。
不是因为害怕。是因为一种他很难定义的更复杂的情绪——像是你以为自己是一个人走进了一片黑暗,结果走到一半,发现黑暗里还有别人,而且那些人,可能比你还早到。
你不知道他们是敌是友。你甚至不知道,你自己在这件事里,还算不算主角。
他把手机拿起来,打开通讯录,找到白教授的号码。
他想了很久,才按下拨出。
电话响了四声,接起来。白教授的声音听起来和平时一样,有点含糊,像是刚从某个深夜里抬起头。
“陈岸。”
“白老师。举报被受理了。”
“我知道。”
陈岸愣了一下。“……您知道?”
“网上都传了。”
“您怎么知道是我”
“我没说我知道是你。”白教授打断了他,声音里带着一点极淡的几乎是笑意的东西,“我只是说,我知道它被受理了。”
陈岸沉默了两秒,意识到自己问了个蠢问题。白教授这种人,如果想知道一件事,渠道多的是。
“那件事,”陈岸换了个话题,“关于‘一片森林’。我这几天查了一下,发现事情比我以为的复杂。”
“说说看。”
陈岸把过去两天发生的事,简明扼要地讲了一遍:萤火数据库的API告警、星河世纪大厦27层的锐锋网络、赛格广场38层的星辰投资、以及那四十七条异常请求——尤其是那三十条,手法比他更干净、聚焦在资金流向上的请求。
他讲得很克制,只讲事实,不加推测。
讲完之后,电话那头沉默了很久。
久到陈岸以为电话断了。
然后白教授开口了。他没有问任何细节,也没有评价陈岸的判断,而是说了一句听起来完全不相干的话:
“陈岸,你有没有想过,为什么是‘资金流向’?”
“……什么意思?”
“你第一次找上他们,是因为语言。因为话术。因为那些‘黑洞的口红色号’。”白教授的声音很平,“那个第三方,如果真的存在,他跳过语言,直接去了钱。”
“所以?”
“所以你们要找的东西,可能不是同一个。”白教授停了一下,“你要的是‘为什么’。他要的是‘多少’。”
陈岸握着手机,没说话。
“这两个问题,有时候会指向同一个答案。”白教授继续说,“有时候,不会。”
“……您的意思是,他可能是为了钱。”
“我没有这么说。”白教授的声音又变得含糊了,像是要挂电话,“我只是提醒你——从明天开始,你要进入一个完全不同的战场。你之前对付的,是话术。是内容。是可以用代码分析、用论文拆解的东西。”
“那之后呢?”
“之后你要对付的,是钱。”白教授说,“钱这种东西,比话术麻烦得多。因为它会流动。会藏在名字后面。会穿过好几层公司,最后出现在你完全想不到的地方。”
他停了大概两秒。
“你会需要帮手。”
电话挂断了。
陈岸看着手机屏幕上“通话结束”的字样,在沙发上坐了很久。
“帮手。”
他知道白教授指的是什么。他一个人可以写代码,可以分析数据,可以在深夜的图书馆里对着屏幕推导链条。但他没法一个人去对付一个完整的庞大的有律师团队和网络安全公司护驾的金融集团。
钱这种东西,确实会流动。而要把它抓住,你需要的不只是代码——你需要有人懂法律,有人懂金融,有人能在那些层层嵌套的股权结构里,一眼看出哪一笔钱是非法的哪一份合同是无效的哪一条利率是超过了法定上限的。
他打开笔记本,新建了一个文档,命名为“帮手清单”。
他在里面只写了两个名字。
第一个,是林晓冉。
第二个,是他大学时的一个朋友,叫赵明哲。赵明哲现在在一家律所工作,做的是金融合规和消费者维权相关的案子。陈岸跟他不算特别熟,大学时是同一个社团的,毕业后只在微信群里说过几次话。但如果他要找一个既懂法律、又愿意听他讲一堆“听起来像阴谋论”的东西的人——赵明哲是最合适的人选。
他把这两个名字看着,想了一会儿。
林晓冉是情感锚点,也是动力来源。但她不适合、也不应该被卷进接下来这件事的核心。她刚刚才从那个坑里爬出来,他不能再把她往回推。
所以真正能用、也该用的,是赵明哲。
他拿起手机,找到赵明哲的微信,发了一条消息:
“在吗?有个事想跟你聊聊,关于金融合规方面的。如果方便,能不能见一面?”
消息显示已读。
过了大概一分钟,赵明哲回了一个字:
“行。”
然后又补了一句:
“你那边方便说话吗?”
陈岸看着“方便说话”这四个字,愣了一下。
这不是一个普通的老同学叙旧的语气。这是一个已经意识到事情不简单的人的语气。
他把手机放下,忽然又想起了白教授的那句话
“你会需要帮手。”
以及那句没说出口的但明显藏在后面的潜台词:
你可能已经来不及自己一个人做这件事了。
窗外,深城的夜色越来越浓。霓虹灯把整座城市染成一种暧昧的紫红色。在这片紫红色的某两个坐标点上,一个在星河世纪大厦27层,一个在赛格广场38层——有人正在看着和他一样的数据。
陈岸希望,至少其中一部分,是站在他这边的。
他把“帮手清单”关掉,打开 00号文档,在“告警”那一节的末尾,加了一行:
“结论:举报受理速度异常(≈29小时)。推测存在先于我的动作。该第三方目前仍只是影子,无身份、无动机、无立场。继续观察。”
写完,他靠在椅背上,闭上了眼睛。
在他的耳朵里,滤波器还在工作。但此刻它捕捉到的,已经不只是语言了。
它开始捕捉钱的声音。
而钱的声音,比语言安静得多,也危险得多。