“黑客”(Hacker)这个词,最早出现在霉国麻省理工学院(MIT)的计算机文化中,被创造的时候,完全是一个正面的称呼。
1961年,MIT得到了第一台PDP-1计算机,学院技术模型铁路俱乐部(TechModelRailroadClub,TMRC)的成员把它作为最时髦的科技玩具,最能干的聪明人会自豪地称自己为“黑客”。他们认为,要完成一个hack,就必然包含着高度的革新、独树一帜的风格和出色的技术。后来,这些黑客,成为了MIT人工智能实验室的核心成员。《Hackers》的作者史蒂文·利维,把他们称为计算机革命的英雄。
然而,随着计算机的普及,计算机病毒泛滥,黑客开始和计算机犯罪联系在一起。业内有些人在使用“黑客”一词时略带贬义,要么暗指有点书呆气的无法融入社会的人,要么暗指那些专爱编写恶意的、“不标准的”计算机代码的“非专业”程序员。
为了澄清“黑客”的概念,传统意义上的黑客认为只有拥有高技术水平和职业道德的人才能被称为Hacker,那些恶意入侵计算机系统的人应该被称为骇客(Cracker,入侵者)。
2003年,华国能被称为真正传统意义上的“黑客”的人屈指可数,但园哥绝对是当之无愧。
从98年开始陆续发现win9x共享密码漏洞、UNICODE、DECODE等windows致命漏洞,被公认为国内漏洞挖掘行业的奠基者。尤其Unicode漏洞不仅被评为2000年十大漏洞之首,同时也是“华霉两国黑客大战”中的主角。
一开始,园哥积极地把发现的漏洞提交给微软,但那时的微软并不是之后几年那个愿意为漏洞买单的微软,面对微软不置可否的态度,他逐渐丧失了提交的热情,以至于2001年发现了这个可以用来攻击任何一台windows电脑的RPC服务的致命漏洞时,他选择了沉默。
不过这并不妨碍园哥对网络安全的探索,在很长一段时间,每天吃饭、睡觉、上厕所的时间都在思考,考虑的最核心的命题是——能否用一个通用的安全模型来辅助甚至代替自己挖掘漏洞。
要做到这一点非常难。有些人类很好理解的逻辑,想要用程序自动化求解,就需要很复杂的逻辑描述。而且针对每一个细小的逻辑点,其后都可能跟随着极多的路径层级,在这种情况下同样有无数的可能性存在,这就涉及到约束求解的数学问题。
园哥是个迷恋数学的人,从小学就开始看数学理论书籍,到了中学开始研究“布尔代数”、“对称恒等式”,甚至于研究生才学的“群论”。以至于严重偏科依靠数学和物理接近满分的成绩进入鲁东大学数学系后,几乎所有专业课程都已自学过,于是在特色一个能让他着迷的新目标的时候,计算机走进了他的世界。
大学时代的园哥不仅对各种编程语言烂熟于心,还从计算机病毒身上见识了对这些语言最为诡谲精巧的运用。例如当时著名的幽灵病毒,可以自动变形,这就突破了依靠病毒特征码查杀的规则;例如DIR病毒,可以彻底绕过防毒卡的机制,创造出一个新的感染方式。
园哥觉得这些电脑病毒非常有意思,就想要搞明白是怎么回事。以园哥的个性,一旦想要搞明白某件事情,那就是真的要搞、明、白!于是就有了华国挖洞第一人的园哥。
当初听闻市面上出现了一款能防住DDOS攻击的软件时,他是不信的,所以没有太关注。直到最近,LSD公布的漏洞和他之前找出的漏洞非常相似,同在绿盟的同事告诉他说这款软件利用的可能也是同一个漏洞,这才引起他的注意。
这款名为“龙傲天”智能防御软件真的实现了防DDOS的功能,只不过是采用了一种非常剑走偏锋的方式,不过这个软件本身有很多值得研究的地方。第一个是软件靠什么分析出正常的访问和DDOS攻击。第二个是后台发起的真正攻击对漏洞的利用方式。此外,他还想知道,当这个漏洞被堵上的时候,这个软件还能有什么作为。
园哥一下切中了这款软件的最关键之处。识别正常的访问和DDOS攻击是非常困难的,尤其攻击者还可以伪造数据包和进行协议欺骗,再不济模拟正常的访问流量以硬碰硬,靠带宽的优势来压倒目标。
防跟踪的功能难不倒园哥,花了一些时间,他进入到了软件的核心逻辑代码,通过反编译观察软件的处理流程。经过几天几夜的研究,他就弄清楚了大概的流程。
原来软件在接受请求的时候,首先会去查一下本地的黑名单库,这个黑名单库是从后台服务器传送过来的。如果请求来源地址在黑名单之中,软件会直接将此请求过滤掉。如果请求被某种机制判断为可疑时,会将相关信息上传到后台服务器中处理。
后台服务器对信息进行确认,如果确为DDOS攻击,则将此来源地址加入黑名单,下发回软件客户端,并发动反击。园哥通过sniffer工具捕捉到反击的数据流,通过事件发生的时序证实了这一点。
这套系统最精髓的就是请求的判断机制和后台服务器的处理了,园哥开始研究判断机制的代码。可惜毕竟没有拿到源代码,单靠汇编语言一时之间难以窥得这种机制实现的全貌。他初步判断这段代码应该有机器学习的功能,进而推断这个软件也许具有一定的人工智能。
后台服务器用的是UNIX系统,安全防护做得比较到位,一时之间没法攻破,不然如果拿到后台的服务程序,可以更快速深入了解整个处理机制。
再来研究通过捕捉到的漏洞利用代码,整个过程非常的利落,精心设计的溢出数据,化数据为指令,利用缓冲区溢出的数据修改PC指针的值,指向希望执行的代码,提升权限,完成攻击,没有一点冗余的动作。
那段执行并提升权限的代码很精妙,就像在另一个更高维的空间里做出动作,所有人都无法看到动作的过程,只能承受动作的结果。这很像他一直在苦苦追寻的通用漏洞利用模型,他决定要把这件事搞明白。
</br>
</br>