谁才能盗取Leland服务器集群上的项目文件?很显然,能内部访问的人。服务器的记录文件可以显示谁什么时候登录过。
除非他们能抹去痕迹。不过他立即意识到这些其实是虚拟服务器——云的一部分。而且就算不是这么回事,计算机科学系也充斥着黑客。这群家伙可以在鸡尾酒纸巾的背面设计出微芯片。如果他们不想让你找到证据,那你就根本找不到。
他到底在想什么?能访问服务器的内鬼?如果是有人从不小心落下的USB驱动器上偷走的呢?或者从笔记本电脑或者家庭无线网络?是谁说斯特里克兰德把事情搞砸了?如果是普拉卡什呢?这个混球总是喜欢委过于人。
斯特里克兰德用舌头舔了舔前面的牙齿,有一颗牙松了。嘴上已经消肿,但如果他没有喝醉的话,可能疼得够戗。
确实没有多大机会知晓代码是怎么泄露出去的。他不是计算机取证专家。也许普拉卡什和他阔绰的家庭可以雇一个,不过他们雇一名律师起诉斯特里克兰德的可能性更大。
一个想法突然击中了他。偷他们代码的人会不会还在继续偷呢?
斯特里克兰德直直坐了起来。
他能在源代码中加入点什么东西,可以在他们偷代码的时候让代码“给家里打个电话”。微笑滑过他的嘴唇,不过疼痛刺伤了他,他立即停止微笑。他扫开桌上的葡萄酒瓶,摇摇晃晃地走向最近的工作站。哥们儿,他实在醉得厉害。
斯特里克兰德登录上斯坦福大学网,然后导航至自己在Leland服务器集群中的共享。他在那里存储了好几个版本的“说书人”C++源代码。他精读过好几个cpp文件。如何着手呢?普拉卡什的代码结构太严整细密了,而斯特里克兰德已酩酊大醉。得把事情弄简单一点,混蛋。这是最好的策略。不过,现在斯特里克兰德能做的,就是加入一些代码,与“说书人”同时运行。
他现在可写不出什么后门程序。他感觉自己好像是在酒精海洋里拼命往上浮。他摇头晃脑地盯着屏幕。集中注意力,你这个蠢蛋。调动所剩无几的清醒脑细胞已经耗去他所有的专注力。
软件在启动的时候连接远端的主机并非罕见。检查更新可是大事。没什么值得警觉的。他可以写一个小小的远程过程调用,通过HTTP传回他想要知道的一切客户端信息,而不用管软件在哪里执行。无论是谁偷到代码,首先是搞到他的IP地址。也许还有攻击主机的操作系统和语言等细节。也许还有网络共享列表以及——
别,别整那么多。一个小小的XML远程过程调用客户端发送数据就可以了。他手边就有个C++库,他可以加到“说书人”的底层代码中。通过这种方法,他可以毫不费力地把自己需要的信息藏在程序里。然后他在自己的网络服务器上建立了一个远程过程调用服务器,这样就可以拾取任何客户端发送过来的XML消息。这点HTTP流量在窃贼的防火墙看来就像是标准的网络冲浪。
但是,他们难道不会注意到斯特里克兰德加了些代码么?也许不会。如果有人偷了“说书人”软件,就意味着他们相信这些源代码,对吧?而且这些“给家打电话”的代码只需要成功执行一次。只需要一次,就能知道它被偷到哪里去了。
斯特里克兰德启动Emacs文本编辑器,想了想该首先打开哪个C++目标文件。他应该在哪儿对代码做出变更呢?他决定把代码塞到“说书人”的一个辅助服务里——图像跟踪库。他加入了一个新的子线程,可以生成XML,收集客户机的IP地址、当地时间以及本机的操作系统。然后把消息发送到他将要建立的远程过程调用服务器上。最后,他把“说书人”项目版本号往上加了一点——还加了一条注释,说修正了一个可能的内存泄露。他使用了普拉卡什的名字缩写,以防引发任何怀疑。毕竟,他极少对项目代码做任何变更。事实上,他不得不承认,他从未对代码本身做出任何有意义的贡献。不过,这种情况到此为止。
斯特里克兰德花了大半个小时编写远程过程调用服务器,使其可以探测并处理任何他加入的代码“发回家里”的Ping信息。花了这么长时间,主要是因为他醉得厉害,敲键盘都很困难。他把这个服务放到库比蒂诺某家创业公司的服务器上,他曾在那家公司做过暑期实习生。这一招似乎能奏效,任何发送过来的信息都会被写入一个文本文件中。
现在要把他修改过的“说书人”源代码粘到网上。就像以前一样,斯特里克兰德手动复制了这个版本,按照以前的文件夹命名传统粘到新的目录中。就像以往一样,他是在正式版本系统之外操作的,所以新目录树对于任何监视共享的软件来说都不会有什么不对劲的地方。斯特里克兰德以前也干过这种事,主要是不想让普拉卡什还有其他人知道他对代码花了多长时间进行分析,才能跟得上他们的进度。
嗯,做完了。这个陷阱代码已经粘贴完成。斯特里克兰德盯着屏幕,然后单击一下,关闭了窗口。骰子已经掷了出去,他正焦急地盯着桌面。不管现在晚不晚,他都决定不回到自己的公寓——回去也只能看着墙上的廉价滑稽画。再过几年,这幅画看上去就不那么滑稽了。相反,他决定建立一个服务,对任何偷偷“给家打电话”的代码所发出的信息给出提示。重新写软件的感觉真好,于是他决定用C#写探测服务。普拉卡什总是抱怨.NET,说真正的程序员根本不用.NET。
斯特里克兰德在他的研究域中建立了一个应用,该应用会把Ping入的IP地址放到世界地图上。这样也可以让软件漂亮一点。
一切都已搞定,他点了点头。他对自己感觉很好。和超级天才们混在一起的时间太长,很容易忘记玩点小花招可以弥补智商上的差距。也许他不是下一个谢尔盖·布林或者拉里·佩奇,但他会没事的,他会从这次打击中恢复过来。
他盯着屏幕,过了一会儿,脑袋一歪,睡着了。
口袋里的iPhone在响,斯特里克兰德猛地一醒——他为“往家打电话”的代码所发送的信息设置了专门的音效。他摇了摇头,想让自己清醒一点,铃声又响了一遍。他看了看实验室,发现依然没人。现在几点了?
又是铃声。他从口袋中抽出手机,毫无疑问,他的网络服务给他发送了一封电子邮件。这时候离他把修改过的“说书人”代码粘贴到Leland共享点上还不到三十分钟。
三十分钟。
有人——或者软件机器人——在监视他对共享点的变更。这意味着他已经被攻破了。但这是谁干的?斯特里克兰德打开桌面,登录进去,然后查看地图映射网页。在那个数字地球上,他看到了IP地址,运行修改过的代码的主机地址解析到了:俄罗斯莫斯科。
他看着屏幕,几分钟一动不动。俄罗斯人在窃取“说书人”的源代码。他们在斯坦福大学网站上开了个后门。斯特里克兰德在沉思下一步该怎么做的时候,铃声又响了。他瞄了一眼手机。另一条信息。他点了一下网页上的刷新按钮,出现了另一个地址,而且也解析到了地图上。这个地址在美国首都华盛顿特区。
他妈的,怎么回事?
几秒钟后铃声再次响起。接着又一次响起。斯特里克兰德又点了一下地图的更新按钮,现在地图上的点分布于俄罗斯圣彼得堡和美国科罗拉多州斯普林斯市。
又是一个铃声警报。刷新。现在这个点位于印度的海德拉巴。几分钟之后,斯特里克兰德发现他们的视觉智能软件散布到了全世界。天还没有亮,地图上已经有了二十个点,分布于美国、欧洲、俄罗斯和日本。这是一个隐秘的网络刺探渠道地图。
这些人到底是谁?
斯特里克兰德对华盛顿特区那个点的IP地址做了一下域名查询,看到那个域由一家名为“镜像策略”的公司注册。再做一下快速查询,发现这是家公共关系公司。不过,更大的可能是他们在不知情的情况下被用作代理——最有可能的就是他们也被那些偷取源代码的人攻破了。也许他们的网络被用作存放从全球盗取来的文件。窃贼甚至可能远程重新编译了源代码,以增强安全性。斯特里克兰德无从知晓谁在幕后操纵——俄罗斯人还是美国人?谁说得准呢?甚至有谁能说这不是某国政府在背后操纵的呢?也可能是网络犯罪团伙,可能是像他这样的研究生在为别国政府充当劫掠者;或者干脆就是无聊恶作剧的黑客。
天啊。斯特里克兰德的大脑飞速运转。这意味着什么?好吧,至少可以证明一件事:他们的工作成果已经被窃取,而且现在依然在被窃取。这意味着他们可以避免学校的纪律措施制裁。等等——他们甚至可以就这一点起诉大学。斯坦福大学会不会承诺将努力找出谁对他们干了这些勾当?找到该为此负责的人、公司或者是政府?事实上,国防部高级研究计划署也需要知道。国防部也需要知道——这涉及国家安全。
斯特里克兰德需要做的第一件事是给团队打电话——他的团队。不管普拉卡什是否对他发火,他们都需要集思广议,找出行动路线。斯特里克兰德把代码贴上去还不到三十分钟,代码就出现在半个地球之外。有人在系统性地把他们作为目标,这显然是间谍行为。斯特里克兰德是最弱一环,但很可能就算不是他犯下这个错误,对方也会一直搜索,直到找到办法攻进来。
从乐观的方面看,斯特里克兰德不应对此完全负责:这不是偶然的疏漏——这是什么人的任务。有意为之,目标明确,间谍行为。有人带着极大的兴趣关注他们的研究,这意味着这里很有价值。
斯特里克兰德拿起手机,看了下时间——凌晨四点半。这事不能等,所以他给团队里最冷静的人——杰哈德·科伊普勒打了电话。也许科伊普勒会说服团队的其他人再开个会……
令人发指的是,斯特里克兰德花了二十四个小时才把整个团队召集起来。只有普拉卡什一个人顽固得很,科伊普勒和卡什耶夫合力游说,最后甚至再加上雷莉教授出面,才说服他现身。王宝荣和查特吉倒不是问题。就像斯特里克兰德一样,他们实际上并不是真正重要的团队成员。他们想听听谁能站出来挽救危局——还有他们的学术生涯。
斯特里克兰德只是告诉他们自己发现代码被盗了——还有是谁偷的。实际上,这个发现让他有些偏执,以至于他拒绝在他们自己的办公室开会。相反,他坚持在纪念教堂北边的一个院子里的公共广场开会。广场上铺着地砖,中心矗立着一尊莲花座。他们站在黎明前的晨曦中,偶尔有大学教工从旁边经过,去教堂或者其他什么地方。他们在这里可以看到从很远的地方过来的人。
卡什耶夫没有掩饰自己的表情。“你的脸怎么了,约什?”
他一整天都没想自己的脸被打肿的事。“没事,我没事。”
雷莉教授用胳膊肘碰了下普拉卡什。“我觉得你应该对约什说点什么。”
普拉卡什不耐烦地叹了口气,说话的时候也没看着斯特里克兰德的眼睛。“我打了你,我道歉,约什。我做错了,我很后悔。”
斯特里克兰德点了点头。“这听起来……像练习过。但我接受你的道歉。”
雷莉教授抬起眉头。“我们在这里开会,为什么,约什?因为你觉得我们的办公室被窃听了?”
斯特里克兰德点了点头,“大学网络已经被攻破——可能是外国政府干的。我有证据。”
普拉卡什瞪着眼睛。“哦,现在是外国人干的好事了。”
雷莉教授插话道:“维贾伊,让我们听他说完……”
“为什么我们要相信他的屁话?”
科伊普勒恼火地看着维贾伊。“得了吧,维贾伊。”
“约什可能编织了一个间谍故事,这样他就可以脱身,好像自己是个英雄。”
斯特里克兰德觉得自己承受了天大的冤枉。“有人对我们的工作非常感兴趣,维贾伊。难道这很难以置信吗?我们都知道这个东西能值多少钱。不过有人也发现了这个东西的价值,然后想方设法得到了我们的软件。”
“而且他们发现了你。”
“也许这是真的,不过这并不意味着团队里的其他人没有被攻破。这儿的其他人难道没有把‘说书人’的源代码存在什么地方吗?”
团队成员面面相觑,突然安静下来。
“我无须多说,一切有利的证据将支持我的陈词和观点。雷莉博士,我们需要大学提供支持——悄悄地干,这样偷取代码的人就不知道我们已经明白自己被攻破了。可现在这是一个关乎国家安全的问题。”
她点了点头。“你有什么想法?”
“我说,我们去找出那些人究竟是谁。大家齐心合力,揭露他们的身份,然后看看国防部想要如何。忘记律师吧,我觉得律师可帮不到我们。”
其他人交换了一下眼神。
卡什耶夫摇了摇头。“晚了,约什。代码已经泄露出去了。”
“有可能,但这不意味着这件事已经完了。这不是普通的网络破解。我们的工作可以应用在防务上,而且这关乎国家安全——这意味着军方可能会帮我们。”
其他人低声交谈。
雷教授看上去有些怀疑。
“我认为你不知道你在干什么,约什。”
“我们已经在这个工作上投入太多,不可能就这么撒手不管。如果有人偷走了我们的未来,那我们就应该回击。”他看着其他人,“你们和我一起干,还是就这样认栽?我,至少我这个人,不会善罢甘休。”
他们互相看着,有些犹豫。
普拉卡什第一个开口,不过还是先恼火地叹了口气。“算我一个。你可能是个白痴,不过至少你愿意做点事情。”
斯特里克兰德回了个“饶了我吧”的眼神。
普拉卡什耸了耸肩。“只要能拿回本该属于我的东西,我干什么都行。”
斯特里克兰德点了点头。普拉卡什严肃地回点了一下。
“好吧,如果维贾伊和我都可以在某件事情上达成一致,你们其他人呢?”
斯特里克兰德没有听到回答。
现实本身突然在他们周围碎裂开。
不到四百米之外的胡佛塔观景平台上,奥丁放下他的利奥波特双筒望远镜,露出浓密的胡子和红袜棒球队帽檐下的蓝色眼睛。他一直在侦察纪念教堂旁边的主广场,就在刚才那几个人站着的地方,现在似乎只剩下烟火、尸块和鹅卵石。教堂的玻璃裂开,左侧的棕榈树熊熊燃烧。远方传来喊叫声和汽车警报声,只是院子里没有动静。
他抬起头,黎明前的天空依然点缀着星星。过了一会儿,他看见远方传来的火光。奥丁收起望远镜,轻轻数数。“一千零八,一千零九,一千零一十……”
他边数边从夹克中拿出手机,把数字敲了进去,记下来。
远处爆炸的轰鸣在大厦之间回响,好像铁锤在猛砸。达到“一千零一十二”时,他停止计数,标记了爆炸方向。奥丁等爆炸响声消失之后才对耳机说话:“我们的客户刚刚收到航空邮包。”他听了一会儿,然后说,“办公室里没有人了。我需要坐下一班飞机回去。”
他说话的时候,一只大乌鸦扑闪着翅膀停到他旁边的扶手上。乌鸦的腿上系着一个小型发射机应答器,脑袋上还缠绕着几乎看不见的细线耳机。奥丁伸出手,这只黑鸟粗哑地嘎了一声,爬上他的胳膊。它抖了抖喉咙上的羽毛,发出喀喀的低鸣。
他举起乌鸦,对着手机说话的时候仔细看着乌鸦。“尽快安排下一次会议。我们的最后期限要提前到来了。”
他朝胡佛塔的台阶走了几步,乌鸦依然停落在胳膊上。他的身后是黎明天光下的一股浓烟,还能听到惊恐的尖叫声和急速驶来的救护车发出的呜呜声。
法国规定只有香槟地区产的葡萄酒才能叫香槟,其他地方酿制的葡萄酒只能叫发泡酒。
谷歌的创始人。
第五章
凶兆
这就是战争了。她已经对这个行为进行了建模,并且探测到了诱因。但尽管如此,攻击之迅猛还是让她大吃一惊。也许协同机制的传播率还需要调整一下。
琳达·麦克金尼教授专心致志地看着大马哈鱼色黑眼织叶蚁的战果,它们的路线就像血细胞沿着支血管前进。它们沿着芒果树皮的裂缝急速前进,好像在一条只有它们能看得见的高速公路上奔跑,冲上去与比它们大数倍的黑蚁战斗——它们淹没了敌手。视频以超高解析度记录了这场大屠杀。尸积如山。
织叶蚁——拉丁名为Oecophylla longinoda。除了人类,它们是地球上少数几种进行种族灭绝的物种——这意味着它们有意搜寻并摧毁对手的组织(包括同种族),以确保对自己领地的绝对控制。
麦克金尼放大了视角,一个织叶蚁组成的蚁群越来越大,几十只工蚁淹没了一只大得多的黑蚁——一只成年烈蚁,也就是行军蚁中的武士种族(当地人管它叫斯亚夫)。怪兽一般的黑蚁把一只织叶蚁放到下颚上,但更小更快的织叶蚁抓住了敌人,这座体积庞大的入侵者动弹不得,然后织叶蚁撕下它的脚。它们把烈蚁放到死尸中间,然后奔向下一个敌人。
袭击斯亚夫军蚁可不是无聊的小事。在非洲的这个地方,甚至连人类面对斯亚夫军蚁也要绕道而行。它们有时候会像波浪一样涌进小屋和农场,数量多达两千万只。任何无法及时逃命的东西只有死路一条。斯亚夫军蚁会杀死路边晕倒的醉汉、无人照看的婴儿,还有拴住的牛羊,这些已有确切的记录。首先是千万只蚂蚁涌进他们的嘴和肺使他们窒息,之后,挣扎着的受害者的血肉会在几小时内被吞噬一空,留下的只有骨头。蚁群不会停下。你只能乖乖让路。而最可怕的是,斯亚夫军蚁也会对织叶蚁敬而远之。
织叶蚁的攻击性太强,以至于麦克金尼穿过芒果园的时候都可以听见它们踏在树叶上的沙沙声——好像在下雨——这是它们在向同伴发出警报,调集军队。它们齐心协力统治了非洲的树冠。而它们的近亲,黄猄蚁则统治了亚洲和澳大利亚的丛林。令麦克金尼更加入迷的是,它们的统治已经持续了一亿年之久,人类文明在它们的雷达屏幕上连个点都算不上。
织叶蚁的社会有极强的耐久性和适应性,这些蚂蚁挺过了冰河时代、大灭绝级别的事件——比方说六千六百万年前白垩纪结束时导致恐龙灭亡的彗星撞击。事实上,它们何止是挺过去,还极大地繁荣起来。就生物量而言,它们现在已与人类势均力敌。就数量而言,它们动辄以百亿计数。它们是地球表面最成功、最持久的物种——这是她在成年后研究织叶蚁的原因之一。这种大规模保持史前知识的能力,人类只有仰望的份儿。而且它们在其他方面也让人目瞪口呆。
麦克金尼一开始被蚂蚁学吸引,是因为这种群居昆虫独特的进化策略。很多生物只有一个躯体,而膜翅目——群居昆虫的序列包括黄蜂、蜜蜂和蚂蚁——事实上它们是一个拥有数百万躯体的生物。刘易斯·托马斯医生曾经描述蚂蚁是“一个大脑指挥数百万只脚”。这就好像你在做其他事情的时候,还能用手去拿什么东西。伟大的蚂蚁学家E·O·威尔森提议将蚂蚁称为“超组织”——一个超越了单个躯体限制、执行集体意志的组织。而这将带来超越单个蚂蚁本身的智能。这一切是怎么发生的还无从而知,不过这也正是麦克金尼投身这个职业所想要揭开的秘密。
她看着屏幕,在笔记本电脑上键入观察结果,通过麦克风向几英里外的一名研究生说话:“麦克,检查一下九号摄像机上的镜头。好像被挡住了,跟踪软件无法处理。”
“收到,里奇,你能不能把举升机靠近一点?”
电话线中传来另外一个声音:“马上。”
“多谢。”
麦克金尼看着屏幕,在全景高清监视器上显示着很多指甲盖大小的视频。这些视频排列起来的时候,正好勾画出整个一株芒果树的三维模型。她像在玩电子游戏里一样旋转整个模型——不同的是,这株芒果树是真实的,而且图像是实时的。芒果树耸立在马利基坦达研究站附近青葱的山坡上,麦克金尼的野外研究室就在这里。数十架独立的数字视频摄像机安装在芒果树周围的脚手架上,对芒果树的表面进行实时监视。软件把这些图像拼接成一个覆盖整棵树的实时三维图像。这棵树仅仅是这个蚁群的一个巢穴,整个蚁群统治了十几棵树,覆盖了将近八百平方米的地面,数量总计多达五十万只。她花了很多年时间进行研究和申请拨款,才建立起这个系统,并使之运转起来。这个系统能贴近观察整个织叶蚁巢穴的完整实时图像——那是一个活动中的超组织——而且能测试她对织叶蚁社会建立的软件模型是否准确。这个模型可能会为建立一个蚁群智能的一般模型打下基础,进而揭示智能本身的秘密。
麦克金尼打开跟踪层,发现单个织叶蚁上面闪着红色小点。她想要计算机视觉软件精确地确定个体织叶蚁,并且正确地把它们与更大更黑的斯亚夫敌手区分开。敌方蚂蚁在跟踪软件中用蓝点做出标记。在区分蚂蚁这件事上,软件干得不错。麦克金尼会利用来自数据集的红点分析织叶蚁的群体攻击——捕获织叶蚁的行动路线图,记录它们的群体行为,对比她的“盲从者”计算机模型进行分析。看着自己的行为算法得到验证,这是很有意思的事情。
她笑了。至少现在这个模型很棒。她终于获得了她所需要的原始数据,以改进她的模型,并理解昆虫社会的处理能力,以及智能如何从相当非智能的个体中产生,并聚集成为一个集体意志。
一只织叶蚁的大脑中只有二十五万个神经节,一只蚂蚁能“知道”的事情微乎其微——尤其与一个普通人脑中的一千亿个神经节相比。不过,五十万只蚂蚁相加之后,一个蚁群中的神经节数量开始接近人脑的原始集群处理能力。
当然,蚂蚁社会显示不出任何人类的复杂性,不过那里的确存在独特的智能,这个智能能列出计划,然后有意识地执行。她以前见过其他的蚂蚁种群,比方说巴西的切叶蚁,它们挖出的巨型聚集地深达二十英尺,其中的“居民”数以百万计。它们构建的“城市”可以调节氧气流和温度,能够养殖真菌,还能处理垃圾。
但是,麦克金尼在犹如国家般的织叶蚁群中见到了集体智能的证据。它们在战略要地所维护的自己编造的树叶巢穴不止一个两个,而是十几个,遍布自己的统治区;并且饲养“粉虫”(棘缘粉介壳虫)作为家畜。外围的织叶蚁巢穴是“兵营”,驻在那里的蚂蚁准备随时迎击侵犯它们统治区的入侵者。如果出现了一个敌人,工蚁会从附近的城堡调集增援,几分钟内,就算是体积比织叶蚁大几千倍的入侵者也会被包围,然后被缠住、肢解、消化。但最有趣的还是织叶蚁倾巢而出,先发制人,对同类种族成员进行灭绝式的打击。在地球上,只有最复杂的社会——人类社会和蚂蚁社会——才会展示出这种行为。
假如信息处理达到临界量级,便会产生集体意志,这可以看作“奇点”,那么由单个蚂蚁所构成的蚂蚁群体的智能,是否就是这种“奇点”的原始的、可测量的表现形式呢?这个问题,还有其他问题让麦克金尼非常入迷,而她正利用“盲从者”计算机模型在寻找答案的道路上前进。