手机屏幕的光刺得眼睛发涩。
那个名字静静地躺在对话框里。李帆。宋体字,黑色,规整得像印刷出来的一样。陈默盯着它,雨声在耳边嗡鸣。
他手指悬在键盘上方。
停了很久,才敲下回复:“确定吗?”
消息发出去,屏幕暗下去。映出他自己模糊的脸,还有窗外流淌的雨水。光斑在脸上晃动,像水底。
几秒后,屏幕又亮了。
沈清澜回复:“日志记录很清楚。账号是他创建的,权限设置成临时访客。创建时间昨天下午三点零二分。”
陈默靠在椅背上。
皮质表面冰凉,透过衬衫渗进来。他听见自己的呼吸声,很轻,混在雨声里几乎听不见。头顶的日光灯管发出低低的电流声,滋滋的。
他打字:“动机?”
“还在查。”沈清澜很快回复,“但他母亲的医疗费是个缺口。预支的工资可能不够。”
陈默没再回。
他放下手机,屏幕朝下扣在桌面上。金属外壳碰到木头,闷闷的一声。窗外一道闪电划过,惨白的光瞬间照亮整个房间。
然后雷声滚过来。
轰隆隆的,像远处有巨石在碾。雨势更大了,砸在玻璃上噼啪作响,水幕完全遮住了外面的灯光。
电脑屏幕忽然闪了一下。
右下角弹出一个红色的警报窗口。三角形标志,里面是个惊叹号。陈默身体前倾,鼠标点过去。
窗口展开。
是公司新部署的网络安全监测系统。红色的文字滚动着:“检测到异常数据访问企图。
陈默的手指停住了。
10017204。那是李帆工位的固定ip地址。他看了眼时间,现在刚过十一点五十。也就是三分钟前。
警报还在继续。
又一条弹出来:“异常行为特征匹配:非工作时间访问,权限越权尝试,高频请求。风险等级:高。”
陈默抓起手机。
拨通沈清澜的号码。铃声响了两声,那边就接了。背景很安静,只有轻微的键盘敲击声。
“你也收到了?”沈清澜的声音很紧。
“刚看到。”陈默说,“他在线上?”
“我在看实时监控。”键盘声更快了,“他正在尝试绕过访问控制。用的还是那个临时访客账号,但加了权限破解脚本。”
“能拦住吗?”
“系统自动拦截了三次。”沈清澜停顿了一下,吸气的声音,“但他换了种方式,现在在尝试端口扫描。目标服务器是存放核心文档的那台。”
陈默站起来。
膝盖撞到桌沿,疼得他皱了皱眉。他走到窗边,雨点打在玻璃上,密密麻麻的水珠炸开又流下。外面的世界一片模糊。
“远程桌面给我。”他说。
“好。”
几秒后,电脑屏幕上弹出连接窗口。沈清澜共享了安全监控中心的界面。深蓝色的背景,左侧是实时流量图,右侧是警报日志。
红色的线条正在飙升。
代表李帆工位ip的那个节点,流量曲线像心跳骤停后的急救线,猛地向上冲。旁边标注着请求频率:每秒87次。
“他在暴力破解。”沈清澜的声音从听筒里传出来,有点失真,“文档库的访问密钥每周更换,上周五刚换过。他应该不知道新密钥。”
“但他在试。”
“对。”沈清澜敲了几下键盘,“系统记录了尝试内容。他在用字典攻击,词库很专业,是行业术语和项目代号的组合。”
陈默盯着屏幕。
流量曲线又跳了一下。每秒103次。这个频率已经触发了二级警报,监控界面边缘开始闪烁黄色的光。
“要不要锁定他账号?”沈清澜问。
“再等等。”陈默说,“看看他到底想拿到什么。文档库里最新版本是v37?”
“是。但真正在用的是v38的测试版,那份文档没放在这个库里。他拿到的v37是半个月前的版本,里面有几个关键参数是错的。”
陈默明白了。
沈清澜早就做了准备。重要的东西不会放在明面上。这个文档库像是个诱饵,里面半真半假,专门钓那些不安分的人。
屏幕上的攻击还在继续。
请求频率稳定在每秒九十多次。警报日志一条条刷新,记录着每一次失败的尝试。时间戳精确到毫秒,23:51:03,23:51:04……
“他急了。”沈清澜低声说。
确实。攻击模式变得杂乱,开始同时尝试多种破解方式。端口扫描的范围扩大了,从文档库服务器蔓延到邻近的几台测试机。
但那些机器都是空的。
里面只放了些无关紧要的测试数据,还有几份加了水印的假文档。水印是隐形的,只有特定工具才能检测出来。
陈默坐回椅子上。
皮面还是凉的。他握着鼠标,点开了另一个监控窗口。那是大楼内部的网络拓扑实时图,每个节点都亮着光。
李帆工位的节点闪着红光。
旁边还有几个节点亮着,是张锐和王浩的。但他们的流量都很平稳,只是在浏览技术论坛,或者看视频。
只有李帆这里在疯狂攻击。
“要不要通知第三方安全服务?”沈清澜问。
“先不用。”陈默说,“我们自己能处理。你把攻击路径录下来,所有的尝试记录都保存。这是证据。”
“已经在录了。”
屏幕右下角又弹出一个新警报。
这次不一样。红色的窗口更大,字体加粗:“检测到外部渗透企图。来源ip:(境外代理)。目标:公司主防火墙。关联内部ip:10017204。”
陈默坐直了身子。
内外联动。李帆在内部尝试破解,同时有外部攻击在配合。两边的目标不一样,但时间完全同步。
“他在给外面的人开门。”沈清澜的声音冷了下来。
“能追溯到真实的境外ip吗?”
“正在反向追踪。”键盘敲击声密集得像雨点,“代理服务器在跳转,但第一个节点在美国洛杉矶。攻击特征匹配……是职业化的渗透团队。”
陈默看着屏幕。
内外两条攻击线像两条毒蛇,一条从内部啃噬,一条从外部撞击。防火墙的负载曲线开始上升,从平时的百分之五涨到了百分之三十。
雨声更急了。
窗玻璃在震动,嗡嗡的响。陈默感觉手心在出汗,黏糊糊的。他擦了擦,在裤子上留下浅浅的湿痕。
“外部攻击强度在增加。”沈清澜说,“他们用了分布式拒绝服务攻击做掩护,真正的渗透流量混在里面。”
“能分辨出来吗?”
“系统自动识别了一部分。”沈清澜停顿了一下,“但有一部分伪装得很好。已经有三条渗透请求通过了第一层过滤。”
陈默握紧了手机。
塑料外壳硌着掌心。他听见自己的心跳,咚咚的,和雨声叠在一起。屏幕上,防火墙的负载又跳了五个百分点。
三十五了。
“启动备用防御节点。”他说。
“好。”
沈清澜那边传来快速的敲击声。几秒后,监控界面上出现了新的绿色节点,分布在网络拓扑图的边缘。它们像卫星一样拱卫着核心服务器,开始分流攻击流量。
负载曲线慢慢降下来。
三十二,三十,二十八……最后停在二十五左右。外部攻击还在继续,但大部分流量被引导到了那些备用节点上。
那些节点是虚拟的。
里面什么都没有,只有一套精心设计的陷阱系统。任何渗透进去的攻击者,都会以为自己拿到了有价值的东西,但实际上那些数据都是假的,而且带着追踪标记。
“内部攻击停了。”沈清澜忽然说。
陈默看向李帆的节点。
流量曲线断崖式下跌,从每秒九十多次直接掉到零。节点还是红的,但已经不再发送任何请求。时间戳显示:23:58:41。
“他发现了?”陈默问。
“可能。”沈清澜调出最后几条记录,“他在尝试访问文档库的日志系统,想查看自己的操作记录。但日志系统是只读的,他看不到删除记录。”
“然后呢?”
“然后他就停了。”沈清澜放大了时间线,“停得很突然,像是收到了什么指令。外部的攻击也在同一时间减弱了。”
确实。
外部攻击流量也开始下降。那些代理ip一个个断开连接,最后只剩下零星几个还在试探。防火墙负载降到百分之十五,然后百分之十。
雨好像小了一点。
砸在玻璃上的声音不再那么密集,变成了淅淅沥沥的滴答声。窗外的灯光透过水幕,晕开成模糊的光团。
陈默靠在椅背上。
疲惫感忽然涌上来,从脊椎骨往上爬。他揉了揉眼睛,指尖冰凉。屏幕上的警报窗口一个个自动关闭,最后只剩下监控界面还亮着。
深蓝色的背景,绿色的节点。
一切都恢复了平静,像什么都没发生过。只有警报日志里那几百条红色记录,证明刚才确实有一场战斗。
“都录下来了。”沈清澜说,声音里也透着累。
“嗯。”陈默看着屏幕,“李帆那边有什么动静?”
“工位的网络连接还在,但流量为零。他可能还在电脑前,或者在……等消息。”
等谁的消息?
陈默没问出口。他盯着李帆的那个红色节点,它静静地亮着,像一颗凝固的血滴。窗外又一道闪电划过,把房间照得惨白。
雷声迟迟没来。
只有雨声,渐渐沥沥的,像在窃窃私语。陈默拿起扣在桌上的手机,屏幕亮起来,还停留在和沈清澜的对话框。
李帆的名字还在那里。
他看了几秒,然后打字:“明天正常上班。什么都别说,什么都别问。”
沈清澜回复:“明白。”
“今晚的攻击记录,导出加密副本。存到离线硬盘里。”
“已经在做了。”
陈默放下手机。他关掉远程桌面连接,监控界面从屏幕上消失。电脑回到桌面,壁纸是一张很简单的星空图,深蓝色的,点点星光。
他站起来。
走到窗边,额头贴在玻璃上。冰凉的感觉顺着皮肤渗进来,让人清醒。楼下的街道空荡荡的,积水映出路灯的光,一片片破碎的金黄。
雨还在下。
但已经小了很多,细密的雨丝在风里斜斜地飘。远处有车灯划过,红色的尾灯拖出长长的光痕,然后消失在转角。
陈默站了很久。
直到手机又震动了一下。他拿起来看,是第三方安全服务发来的自动报告:“检测到针对贵公司的协同攻击企图,已成功阻断。详细分析报告将于明早发送。”
他把手机塞进口袋。
金属外壳贴着大腿,有点凉。他走回办公桌,关掉电脑。屏幕暗下去,最后一点光消失在黑色的液晶里。
房间彻底暗了。
只有窗外透进来的路灯光,朦朦胧胧的,照出桌椅的轮廓。影子拉得很长,在地板上交错,像某种无声的密码。
陈默拿起外套。
布料有点潮,可能是空气里的湿度太大。他穿上,拉链拉到一半停住了。手指在金属拉链头上摩挲,粗糙的触感。
他走到门口。
手握住门把,又回头看了一眼办公室。黑暗里什么都看不清,只有雨声还在响,淅淅沥沥的,不停不休。
他拉开门。
走廊的感应灯亮了,苍白的灯光照下来。地毯吸走了脚步声,只有他自己的呼吸声,很轻,很缓。
电梯下行。
数字一格一格跳。17,16,15……轿厢里的镜子映出他的脸,眼底有血丝,下巴上冒出青色的胡茬。
一楼到了。
门打开,大堂的灯光比走廊亮得多。保安还坐在那里,抬起头看见他,愣了一下:“陈总这么晚才走?”
“嗯,有点事。”
陈默走过去。皮鞋踩在大理石地面上,发出清脆的回响。保安站起身,走到玻璃门边,替他推开。
雨夜的空气涌进来。
潮湿的,带着泥土和植物的味道。风不大,但很凉,吹在脸上像冷毛巾擦过。陈默走出大门,站在屋檐下。
雨丝飘在脸上。
细细的,凉凉的。他抬头看了看天,乌云还是很厚,看不见星星。只有路灯的光在雨幕里晕开,一圈一圈的光晕。
他走进雨里。
雨点打在头发上,很快湿了一片。外套的肩头开始变深,布料吸了水,沉甸甸的。但他走得不快,一步一步,踩在积水里。
水花溅起来。
打湿了裤脚,黏在小腿上。他走到路边,拦了辆出租车。拉开车门坐进去,座椅的皮革味混着空调的冷气。
“去哪儿?”司机问。
陈默报了地址。车子启动,雨刷在挡风玻璃上来回摆动,刮开一片清晰的视野,又很快被雨水覆盖。
他靠在后座。
闭上眼睛。脑子里还是那些红色的警报,跳动的曲线,李帆那个红色的节点。还有沈清澜的声音,紧的,冷的。
手机在口袋里震动。
他没拿出来看。车子在雨夜里行驶,轮胎碾过积水,哗啦哗啦的声音。窗外的灯光流过去,一条条光带。
雨好像又大了一点。
敲打着车顶,砰砰的响。司机打开了收音机,里面在播深夜节目,主持人的声音低低的,说着些无关紧要的话。
陈默一直闭着眼。
直到车子停下。他付钱,下车,走进公寓楼。电梯上行,楼道里的声控灯一层层亮起,又一层层熄灭。
他打开家门。
玄关的灯自动亮了,暖黄色的光。他脱下湿外套,挂在衣架上。水珠顺着布料滴下来,在地板上聚成一小滩。
他走到客厅。
没开灯,直接倒在沙发上。布料的味道,淡淡的灰尘味。他躺着,看着天花板上的阴影,模糊的,晃动的。
雨声从窗外传进来。
淅淅沥沥的,像永远不会停。他翻了个身,脸埋在沙发靠垫里。布料粗糙的触感,还有一点点洗衣液的味道。
手机又震了。
这次他拿出来看。是沈清澜发来的消息:“离线备份做好了。放在你办公室的保险柜里,密码只有你知道。”
陈默回了个“好”。
他盯着屏幕,光刺着眼睛。几秒后,他又打字:“明天早点到公司。我们得谈谈。”
“谈什么?”
“谈下一步。”陈默发送出去,“他今晚失败了,但不会停。我们得让他继续,直到拿到我们想让他拿的东西。”
沈清澜没立刻回。
过了半分钟,消息才来:“我明白了。陷阱已经准备好了,对吧?”
“对。”
陈默放下手机。他坐起来,在黑暗里摸索着找到开关。灯亮了,客厅里的一切清晰起来。沙发,茶几,电视,书架。
一切都和平时一样。
但他知道,有些东西已经不一样了。从今晚开始,从那些红色警报开始。游戏进入了新的阶段,更危险的阶段。
他走到窗边。
雨还在下。窗玻璃上水流纵横,外面的世界扭曲变形。他看见自己的倒影,模糊的,在雨水后面晃动。
然后他转身。
走向卧室。脚步很轻,踩在地板上几乎没有声音。他需要休息,哪怕只是几个小时。明天还有很多事要做。
很多很多事。
雨声渐渐远了,像隔着一层厚厚的玻璃。他躺在床上,闭上眼睛。黑暗涌上来,带着雨水的凉意。
最后的意识里,是那个红色的节点。
静静地亮着,像一只眼睛。