草根黑客 K0:梦想很贵,但值得一试
(一)
我叫K0,全称K0SH1,是一个草根黑客。
我喜欢赛跑,只要对手不是我爸。
十四岁的某一天,我爸正追着我满屋跑,鸡飞狗跳。要说原因,是我打了游戏。打游戏倒没什么大不了,只不过为了打游戏,我得去网吧;为了去网吧,我得逃课。
我打游戏的“理由”其实比一般人更充分:
1998年,我七岁,电视上反复显示着江南发生的那场千年不遇的大洪水。不过我更关心的,是另一块屏幕——我的电脑。一根电话线连接到电脑上,发出吱吱呀呀的声音,听起来就像谁在费力地打开一扇门。那扇门背后,是一个叫做互联网的世界。
就在那年,我开始了自己的网络游戏生涯,真正的小学生。从石器时代到CS,我好像对游戏有与生俱来的天赋,无论是游戏里的大局观,和不同队友的配合合作,执行力,还是个人技术。后来我打 CS 厉害到什么程度呢?就是传说中的甩狙,盲狙,弹无虚发。以至于后来上电脑课和同学们联机打CS,就有同学专门坐我旁边监督我,不让我选AWP(狙击枪),否则他们露头就死。
后来接触了很多很多网游,无论是什么类型的游戏,我都能很快上手,无论是击败BOSS,还是打跪对手。“只要再努努力就能成为职业选手”——至少我是这样想的。就在我接近“职业及格线”的时候,父母颁布了“调控新政”:只有周末的时候我才能玩两个小时游戏。为了自己的职业生涯,我只得去网吧“训练”,所以有了我爸的那次“追杀”。
印象中那是我爸最后一次“试图”打我。那之后的日子,我跑得越来越快,我爸却跑得越来越慢。其实最主要的原因是,我们之间达成了君子协定:十八岁之后,他就不再管我。作为交换,十八岁前我要好好学习。
2009年,高考之后的那个夏天,我正好十八岁。我像疯了一样为游戏“补课”,每天花16个小时在魔兽世界上,除了睡觉上厕所,连吃饭都在电脑前面。我在魔兽世界二区四组(多个服务器的竞技分组)迅速蹿红,很多顶尖的竞技场选手会来找我单挑。后来有了跨服的概念后,我会被邀请跨服到其他服务器挑战那个服务器的“门神”(单挑很厉害的人),还有一些厉害的人和我组队打竞技场。
如果成为职业选手是梦想的话,那个夏天是我最接近的时刻。遗憾的是,当时并肩作战的很多朋友,最终和我一样,都没能成为职业赛手,原因不一而足。
那年之后,我不再为游戏那么疯狂了。在七大姑八大姨口中,曾经我是网瘾少年,是他们教育孩子的反面教材,而这次却成了颇具教育意义的“改邪归正”,不过在我心里,这更像一次失之交臂。这段经历在后来的生活中,曾经几度跳出来警告我:梦想很贵。
也许是因为某种眷恋,我阴差阳错地选择了计算机专业。猝不及防地,大学为我打开了一个新的世界。四年的撩妹生涯告诉我,现实世界比网络空间多了无数温柔。
我开始爱上了炊烟袅袅,笑靥如花。于是时光飞逝,我从一个看对错的孩子成长为一个看利弊的成年人。
父母都在政府工作,我一毕业似乎命中注定一样进了北京一家事业单位,朝九晚五,住房不愁、福利优厚,一辈子衣食无忧。在外人眼中,我的生活很爽。而当时的我不这么认为,在我眼里,这种闲云野鹤的感觉不只是爽,简直TMD爽爆了,红红火火恍恍惚惚。。。
我的故事写到这里就可以结束了,如果没有2014年春天的那件事。
(二)
2014年春天,我有一个学弟要毕业,他需要写一个毕业设计程序,于是跪求天资聪颖玉树临风的我帮助他完成一个模块。
鉴于他对我这么精准的评价,我自然不能推脱。况且我那会儿每日闲的X疼,随手拯救学渣,胜造七级浮屠。
虽然大学四年的很多时间都花在了研究“少女心理学”上,但毕竟科班出身,我自认写代码的水平还不赖。然而这一次,无论我怎么调试,程序都像命中注定一样崩溃。我满脸黑人问号,在网上找到了一个词:“溢出”。
百度第一条,“缓冲区溢出”,来自看雪论坛。我点进去。就是这么轻轻一点,我的人生瞬间“溢出”了。我想直到许多年后,我依然会记得点击鼠标的那一瞬间。
我靠!通过控制“溢出”,可以让软件代码的执行流改变,进一步可以任意控制一台电脑,就像网络空间里的上帝!我好像被电流击中,坐在椅子上,让这种眩晕感在全身荡开,半天没有回神。
从那天起,我连女朋友都不看,只“看雪”。
看雪论坛二进制漏洞版块
我找到了很多有关黑客知识的基础帖,从简单的溢出实现控制开始研究,然后学到“Shellcode”,执行任意代码。遇到不会的地方,就到处搜索帖子来补充。我发现,自己的思路已经被代码占满了,朝思夜梦。
我把教室从家里“扩展”到了办公室里,在单位的电脑上搭建环境,开始每天利用工作的时间自己研究黑客技术,从早晨上班到夕阳西下,就这么盯着屏幕,一口水都顾不上喝。领导交给我工作,其实我很快就完成了,但当他过来询问我进度的时候,我使劲摇头。这样接下来的时间,我就又可以继续调试我的漏洞了。
就这样,冬春夏秋打了一个轮回。
2015年8月,我的朋友告诉我,有一个网络安全的会议叫做 KCon。这不是重点,关键是会议结束后有一个黑客摇滚之夜,是不需要票的。我欣然应邀,在八月夜晚的灯红酒绿里认识了生命里第一批黑客朋友。
我认识了一个叫傲客的人,此人三十有余,看起来却犹如肯德基爷爷那般慈祥和无害。他负责 i春秋——一个专门教人成为黑客的网站——的市场工作。他看到我的名字“K0SH1”,于是问我:你是叫“抠屎”吗?
虽然我对这个外号颇有微词,但这不重要。他介绍我认识了蔡晶晶、袁哥等一票黑客大牛和另一票漂亮的市场运营小姐姐。
从此,进入了一个黑客的世界,可以和圈子里的朋友一起研究网络安全技术。慢慢地我也认识了启蒙学校“看雪论坛”的各位版主。我最早看到的那个帖子出自看雪“二进制漏洞”版块,版主仙果成为了我的良师益友。这些事如梦幻一般。
K0 和安全研究员仙果(左)、幻泉(中)在一起
(三)
我开始认真研究“漏洞”这件事。
其实,所谓漏洞就是程序运行中可以被利用的错误。漏洞分为很多种,例如二进制漏洞、Web漏洞等等。我发现自己对二进制漏洞最为着迷。
所谓二进制漏洞,就是找到一套软件系统中隐藏的逻辑错误。找到它们的难度就犹如找到一幢古堡里的机关暗道。但只要你成功,就瞬间成为赛博世界的上帝——所有的一切都在我眼下,枝蔓开散,生杀予夺。赛博世界原来层峦叠嶂,拥有无限可能。每个幽暗的代码深处,都有可能藏着引爆世界的按钮。按下按钮,世界折叠,腥风血雨泛起丝丝甜意。
旧时光并没有那么死气沉沉地睡在我的记忆,我发现,游戏生涯把“技巧”“对抗”这些词汇深深烙刻在我的脑回路中。那个在离经叛道烟尘中的自己,从未走远。游戏是人和人的胜负,而漏洞,同样是人和人的博弈,只不过我和对手之间,隔了一层代码。这种对抗既让我热血沸腾又无比安全,简直是为我量身定做。
在看了无数漏洞利用的文章之后,在复现了无数别人找到的漏洞之后,我终于鼓起勇气寻找自己的漏洞。
这件事并没有想象中那么难。
2015年,老天终于给了我奖赏。经过测试,我发现了一个知名web 服务存在的一个二进制级漏洞,通过我写的exploit(漏洞利用代码),我就能控制部署了这个web服务的服务器。发现这个漏洞并没有耗费我太多的时间,当然我很幸运,但我觉得这个成果对得起我一年的努力。我把这个漏洞提交给漏洞平台乌云,很快就获得了一万块钱的奖励,我的漏洞被标注为三个“$”加打雷标志,等级非常高。
我在镜子前恭喜自己:“内存猎手” K0 诞生了!
2015年,粉丝 K0 拉住黑客大神袁哥,强行合影
从这开始,我一发不可收拾,接连挖到不少漏洞。在提交漏洞的同时,我还会分享平时自己的一些研究成果,形成文章在论坛和微博上,开始有人主动联系我,也有越来越多的人认识我,一路上有了更多的小伙伴同行。
我逐渐发现自己的心态发生了一些变化。
我开始享受在群里插科打诨,和别人斗图。渐渐地“水半个小时群,然后拉回精神看十分钟代码”成了我每天的日常。这样的日子持续了很久。而时光从来不等人。某天夕阳西下,我突然发现,这一整天我几乎什么都没做,几乎回到了一年前刚进事业单位的日子。我突然产生了对未来的莫名恐惧。
我咬咬牙,强制把自己塞进时间表。上班的时候就把手机扔回车里,回家之后就把手机交给父母。每天八点上班,坐在工位上调试漏洞,直到六点下班。吃完饭健身一小时,回家继续调试漏洞到十二点。
二进制安全研究需要做很多枯燥而基础的学习,就像武侠中的“筑基”一样,我庆幸自己在筑基的时候,及时“回头是岸”,没有成为一个浮躁的人。
这是 K0 在补天沙龙演讲现场。
(四)
2016年,我经历了生命中最艰难的时刻。
我决定放弃现在的工作,成为一名职业的安全研究员。但这个决定并不想随口一说这么简单。它的代价就是,放弃我的铁饭碗,放弃被所有人羡慕的福利、医疗住房保障、放弃未来孩子上学的优惠政策,这些东西的价值,我何尝不知。正是它们让梦想变得无比昂贵。
但更让我难以跨越的坎儿,是父母。
那段日子,每天我都和父母吵架。我好不容易用梦想支撑起走出去的勇气,却被他们反复用住房、福利、孩子上学、医疗保障拽回现实。每当我怒斥他们保守之后,回到房间却开始怀疑自己的勇气。
一架天平两边角力,却迟迟难以倒向一侧。我已经不堪重负,每晚辗转难眠。
“爱”这个字眼,此刻把最锋利的一面展示给我。曾经父母不鼓励我成为电竞选手的梦想,是为了我人生平坦;如今他们不鼓励我成为安全研究员,也是为了我岁月安稳。爱这件事我丝毫不怀疑。但这一眼能望到头的一生,就像那街道尽头凋零的老树,又真的如我所愿吗?
在某个夜里我忽然惊醒,我慢慢坐起来看着窗外星火熠熠。我突然想明白,嘴遁无用,我需要的是一个证明。父母需要这个证明,我自己也需要这个证明,每一个已经和将要认识我的人,都需要这个证明。
那天之后,我放弃了所有无关的事情,陷入了一种癫狂——每天除了研究技术挖漏洞之外不做任何事。我想起了十八岁的那个夏天。
那天我坐在角落的电脑前,读到一篇文章。作者分析了一个路由的缓冲区溢出漏洞。他把自己从挖到漏洞到成功利用漏洞的心路历程一点一滴地记录下来。逆向一个路由有多难,我当然知道。我仿佛看到了他在赛博世界里狼奔豕突,百转千回,声嘶力竭,几近无望。他用尽气力,最后一搏,蓦然回首,面前一片灯火阑珊。
读到最后一个字,我才发现泪水已经模糊了双眼。
也是那段时间,我几乎找遍了所有能复现能分析的二进制漏洞,Exploit-db上的上百种软件的二进制漏洞几乎被我分析殆尽,我手里握了上百篇分析文章。
那年秋天,我成为了 Seebug 漏洞平台的 Top10,并且在一些漏洞平台榜上有名。一年前还在 KCon 摇滚之夜蹭酒喝的那个小黑客,转年已经成为了补天沙龙的讲者,i春秋的课程讲师。虽然这些成绩微不足道,但我把它们视作自己的骄傲。我仿佛听到了一扇门锁簧弹开的咔哒声,我爱这个声音。
一天吃晚饭的时候,父亲突然跟我说,他的一个老同事很多年前离开了体制,现在混得很不错,你应该也可以。看着他的笑容,我知道我应该把辞呈交给领导了。
单位的同事和我吃饭时,知道我要离开的消息,他对我说:“其实我挺羡慕你的,有离开体制的勇气,有一些梦想在等待你实现。”
2016年“429”首都网络安全日, i春秋校长蔡晶晶把 K0SH1 的故事讲给现场观众,他称 K0 为“乐观的白帽”。
(五)
国内一些顶级的网络安全研究团队都向我发出了邀请。我唯一的忐忑,就是自己的技术是否配得上它们的声望。
也许现在的我需要更努力。
今年七月,我成功地拿到了人生第一批漏洞 CVE 编号(只有相对重要的漏洞才有能拥有权威机构配发的 CVE 编号)。十一月,我又拿到了第二批 CVE。当然,很多时候找到漏洞并不意味着它可以被利用。我很清楚。在技术这条路上,还有数不尽的山等着我翻过去。
我猜,也许某一天我可以跟随我的团队,跟随我强大的队友们一起去挖微软这样顶级厂商的漏洞,没准到那时,我就可以登上全球最顶尖的舞台,成为全球最顶尖的安全研究员,这也是我的梦想,我的“终极”。我很喜欢谷歌旗下的顶级安全团队: Project Zero。但我的梦想并不是加入他们,而是寻找中国的“Project Zero”,被我自己的国家所记住。
偶尔我会想起自己做的那个梦。
梦中我又回到了高中毕业的那个夏天。我站在十八岁的自己身旁,而那个少年,正在屏气凝神地打着游戏,好像全世界的生死都在他的手中。
窗外阳光灿烂,我拍了拍他的肩膀,他头也不回。
对了,作为文章作者我再自我介绍一下。我叫史中,是一个倾心故事的科技记者。我的日常是和各路大神聊天。如果想和我做朋友,可以加我微信,fungungun。
不想走丢的话,你也可以关注我的自媒体公众号“浅黑科技”。