闭上你的眼睛,想象你是一束电流,在无边的迷宫里穿行。
你的面前有无数道门,而你每次只能选其一。每当你穿过一道门,又会进入新的房间。经过无数次的选择,你走出迷宫,仰望天日,从一个问题变成一个答案。
没错,你正在模拟一段代码输入一个系统的过程。
但是这个世界的奇妙之处就在于,它并不永远给出合理的答案。当你偶然打开一扇门,会发现周围的世界突然变得怪异,世界开始崩塌。
于是,你发现了一个漏洞。
然而这个迷宫如宇宙般庞大,你根本不可能穷尽所有的路线。一个横冲直撞的普通人可能穷其一生都无法遇到一扇漏洞之门。简单来说,一个黑客的全部手艺,就是比“愚蠢的人类”更知道怎样找到那扇奇特的门。
腾讯科恩实验室首席科学家吴石就是这样的一个人。但他又不仅仅是这样的一个人。
因为他暗色的披风背后,隐藏着一套神秘的武器——用一条条数学公式模拟出整个赛博世界。这个武器曾经帮助他找到微软、谷歌、阿里、腾讯核心软件中的总计数百个致命漏洞。
在这个世界上,几乎无人能出其右。
【吴石】
你可以认为计算机是数学的分支。因为编程常用的正则表达式和数学中的“Kleene 代数”是完全等价的。而现在所有的计算机都是图灵机,它在本质上和“Lamda 演算”是完全等价的。
吴石的眼神淡定而祥和,和那些看穿世界本质的先知别无二致。
对于一个拥有数百万行代码的程序来说,没有人可以用穷举的方法来判断它究竟是否存在漏洞。但是使用数学工具把它抽象出来,而且通过经验筛选,只模拟你关心的那一部分。这样就把一个穷举问题,转化成了运算问题。
吴石告诉雷锋网,由于公式和软件之间是模拟映射,所以很可能在同样的位置出现问题。
例如在数学中存在“除零”问题。如果零作为被除数,将会导致运算无法进行。如果在模拟的公式里出现了除零问题,那么在真正的软件里非常可能存在同样的问题。
“宇宙的秘密”在于:如何精确地为程序代码找到一组神似的数学公式。
最开始,我喂给这个程序随即的数据,看它是否会崩溃。
然后,我会详细学习程序语言,例如 JavaScript,根据程序能听懂的语言,构建一些奇怪的数据。
第三步,我会分析程序的处理过程,把输入数据可能产生的情况分类
最后,我会根据程序的结构对输入的数据做变化,让它尽可能地覆盖奇葩的运行状态。
面对不断涌来的奇葩数据,程序也许会招架不住,内心是崩溃的。这个崩溃的瞬间,正是吴石伺候已久的时机。在这个瞬间,赛博空间里突然闪现出一扇新的门。吴石打开它,从代码的海洋中猛然浮起,成为这个世界的上帝。
这就是这套系统打开漏洞之门的全过程。
想必你也猜到了,吴石绝不是一个学渣,他毕业于复旦大学数学系。数学对别人来说是计算工资的火柴棍,对于他来说,是轰开世界的迫击炮。
初二之前,我的数学非常差。但是那一年,我遇到一位很好的数学老师。从此对数学兴趣浓厚,一发不可收拾。高二的时候,我拿了全国数学竞赛的一等奖。
我就是一个学霸,吴石说。
怀着满腹信心,吴石进入了复旦大学数学系。在这里,他明白了一个词:绝望。“基础数学专业,你懂的。所有的人都是一等奖进来的,还有几个是国际上拿过奖的。我拼了命才能拿到中上的成绩,但是很多人只是考试前看一晚上书,就能考得很好。”
面对开挂的同学们,吴石对数学的一腔热情被兜头浇灭。大二的时候,他决定寻找一个新的“寄托”,计算机进入了他的视野。此时他人生的第一个漏洞已经近在咫尺了。
【MUD(Multiple User Domain)多用户虚拟空间游戏】
1996年,吴石痴迷于一个网络游戏,名叫“MUD”。这是一个历史悠久的纯字符结构的游戏。并不满足于正常游戏的吴石动起了“歪心”。他研究出了一种方法,可以黑进游戏的服务器,并且成功修改了自己的游戏数据。
这个漏洞带给了吴石极大的快乐,某种程度上说,计算机开始代替了数学在他生命中的位置。整个大三,吴石把全部的精力放在了去软件公司打工,以至于几乎没有上一节课,在考试中挂了一科便是他的代价。
然而后来的事实证明,上帝总会给天才留下一条道路。
只是在他找到这条路之前,难免头破血流。
吴石的第一份工作是软件研发,不过在工作之余仍然花很多时间在他喜欢的漏洞挖掘上,MSN、UC、QQ、旺旺等 IM 软件不幸进入了这个天才的射程。翻开当年的新闻,你依稀可以看到这些漏洞的威力。
只要给对方旺旺发送一条消息,就可以完全控制对方的主机。要命的是,旺旺可以给任何陌生人发消息,这就意味着掌握这个漏洞的黑客可以控制任何使用旺旺的人。阿里巴巴在修复的新版旺旺界面里,专门对吴石进行了致谢。
只要给对方的QQ发送一条消息,就能够得到对方电脑的权限,控制对方的电脑。这件事直接推动了 TSRC(腾讯安全应急响应中心)的成立。有趣的是,当年腾讯负责处理此事的,正是吴石的老友,现在 UCLOUD 的掌门人季昕华。
作为漏洞猎手的吴石,已经显露出锋利的光芒。
这些漏洞,让吴石获得了去杭州和深圳免费旅行的奖励。然而免费的旅行似乎远不敌这些漏洞的真正价值,因为黑产愿意为这些即时通讯软件的漏洞付更多的钱。
2006年的时候,季昕华告诉我,在南京有一个黑产小组,两三个月的时间赚了六千万。
吴石成功引起了黑产的注意。
当时经常有人托朋友找到我,说辞大概是:“给两个漏洞,我们一起挣点钱,然后分你一大笔。
只要给出漏洞,他甚至不用多动一根手指,就可以坐地分钱。但是吴石的选择是“躲得远远的”。至于原因,吴石也很坦诚:“我对金钱的渴望没这么严重,而且当时我对自己的现状很满意,不愿意冒这个风险挣这个钱。”
那些人碰了一鼻子灰,也不再对这个“油盐不进”的漏洞猎人抱希望。
彼时的吴石也许没有意识到,自己即将面对生活最为艰难的一年。因为在2006年底他选择了下海创业。
我辞职的那年,我的一位同事做到了部门 leader,他的年终奖拿到1000块,然而却要给20个同事分。公司在走下坡路,房价却越来越高。
这是吴石创业的理由,平凡一如你我。
他做了一款可以识别正常流量和p2p流量的系统,可以帮助运营商清洗迅雷和电驴类软件对带宽的占用。整整九个月,这款软件的销售额为“0”。商业社会用这种方式对这位技术大牛做出了残酷的评价。
我创业的九个月时间,总收入是五千块,这五千块还是我给别人做安全服务赚的,和我公司业务没关系。不能说穷途末路,但是是坐吃山空。
雷锋网好奇,在最艰难的日子,他如何保守初心没有被黑产所动摇。然而他的回答是:
在我最穷的那几个月,其实我挣扎过,但是很可惜那时候没有黑产找我。再后来我就开始一个月可以挣好几千美金,再后来一个月几万美金,就不用了。
所谓造化弄人,看来不过如此。
和美金做朋友,源自吴石偶然提交给微软的一个漏洞。这是一个非常高质量的漏洞,可以实现系统提权。伴随微软致谢函而来的,还有著名的漏洞团队 ZDI。
他们一开始向我询问一些这个漏洞的细节,末了非常遗憾地跟我说:“这么高质量的漏洞,应该给我们,我们会给你钱。”
吴石抱着怀疑的态度向他们提交了另外一个漏洞,他怕 ZDI 像国内的厂商一样:先拿到漏洞详情,再告诉对方这个漏洞不符合要求,我们不要。经过一个月的忐忑等待,吴石的账户里多了三千多美金。
“然后我用了一个月时间就找到了第二个漏洞。当你没饭吃的时候,你的动作会很快的。”从这一刻起,他再也不是那个致谢函就可以打发的白帽子,而成为了一个佩戴着智慧之矛和尊严之盾的赏金猎人。
热情被点燃的吴石开始着手用更通用的方法挖掘漏洞,那个在他脑海里盘旋数年的漏洞数学模型终于被付诸实施。连续三四个月的时间,除了每天下来两次买盒饭,睡几个小时觉,他所有的时间都在搭建这套系统。也许在冥冥之中他已经能感受到,这个系统可以改变网络安全的历史。
吴石就这样连续卖了数十个漏洞,然而由于这位大牛火力全开,一股脑提交的漏洞太多,甚至超过了微软自己的安全团队,这直接惊动了微软的“党中央”。在2007年的时候,微软找到了吴石,邀请他加入。
吴石的工作状态是这样的:
从来不去微软中国,也不去微软美国,每年部门领导从美国飞到吴石家里看他一次。而他每年20多个可用漏洞的工作量,累计用一个月就能完成。他用剩下的时间不断改进漏洞挖掘系统,读读书,看看电影。顺便用这些钱买了套房。
【2014年的 KEEN Team 陈良(左)方家宏(右)在 Pwn2Own】
KEEN Team 走进了吴石的生活。王琦、陈良、方家宏一众微软同事建立的这家公司,在2013年之前经营着并不赚钱的企业安全业务。
受邀加入公司的“漏洞批发商”吴石建议,可以用手上的漏洞去参加由 ZDI 举办的著名黑客大赛 Pwn2Own。话虽如此,但是包括吴石本人在内,几乎所有人都没有漏洞利用的经验,“奉旨”编写漏洞利用程序的陈良也满心忐忑。
然而,数学再一次拯救了吴石,还有 KEEN Team。
UAF 漏洞(Use After Free),是系统漏洞的一个类型,这种漏洞通过对两个函数进行操作,某个数值在第一个函数里被释放,却在第二个函数里被引用,由此造成崩溃,闪现出那道漏洞之门。
2013年8月的一天,吴石突然拍案而起。他发现了一种数学规则,可以让这种 UAF 漏洞大规模地被产生;而诸多的 UAF 漏洞,有一定比例可以在特殊情况下被利用。
当时除了我们还有一个老外在研究同样的利用方式,但是这种实现并不容易,他最后以失败告终。当陈良写出第一个应用实例的时候,我就知道这个事能成了。公司当时很穷,但我们还是在路边吃了烤串来庆祝。
吴石紧急找到了国内著名黑客会议Xcon的掌门人呆神,在会议开始前十几天要求“加塞”来演讲这个重大的成果。KEEN Team 由此声名鹊起,第二年全世界的黑客用类似方法掀起了挖掘 IE 漏洞的狂潮。
怀揣这样的“硬货”,团队决定参加当年11月举办的 Pwn2Own Mobile。甚至出乎自己的意料,他们用两种不同的姿势搞定了 Safari,拿到了数万美金的奖金。
就在团队回国不久,腾讯向他们伸出了橄榄枝。至此,包括吴石在内的 KEEN Team 的核心成员加盟腾讯,成立了科恩实验室。
【2016年 腾讯战队拿到 Pwn2Own 冠军】
从2013年开始,Pwn2Own 成为了科恩实验室的保留节目。2016年,团队达到了前所未有的高度。在3月的 Pwn2Own 大赛上,科恩实验室和腾讯电脑管家组成的联合战队 Sniper 一举拿下了 Edge、Safari、Chrome,总分38分,以超越第二名13分之多的优势摘得了“世界破解大师”。
“每一个破解过程都用到不止一个漏洞,所有的破解中都至少有一个我的系统跑出来的漏洞。”说吴石是科恩实验室的“兵工厂”毫不为过。
但是吴石仍然心存遗憾。
每次 Pwn2Own 之前, 厂商都会把他们掌握的漏洞在最后时候全部修复,目的就是为了让破解的团队措手不及。如果已经准备好的漏洞被修补了,那么留给团队重新发现漏洞、写利用程序的时间就只剩下几天了。
今年破解 Flash 的是赵泽光,比赛之前三天,Adobe 放出“大补丸”(漏洞补丁),熬夜下载补丁的赵泽光早晨告诉我,这个漏洞被修补了。虽然当时我们手里还有一堆 Flash 的漏洞,但是只靠他一个人时间已经不够了。于是我和几个年轻人都加入进来,三天三夜没睡觉,一直在尝试各种方法重新攻破 Flash。
在两天多的时候,我提出来一种新的利用方法,但是所有的人都已经没体力去验证了。最后的比赛,我们以失败告终。但是回来之后只用了两周,我们就采用之前提到的那种方法成功攻破了 Flash。
吴石转了转水杯,笑了。
那个看到数字两眼放光的学生,
那个在赛博世界里用漏洞射落美金的赏金猎人,
那个为了追赶房价而身赴商海的创业者,
那个曾为了生计而在黑产边缘挣扎的凡人,
那个四个月不出门和“0”“1”一起睡觉的疯子,
那个坐在路边一边撸串一边畅想未来的做梦者,
那个科恩实验室的首席科学家,
那个和无数漏洞战斗的吴石,
至此全部站到我们面前。