上一回讲到,阿帕网的诞生给黑客们提供了新的大型“游乐场”。不过,由于在20世纪70年代初,阿帕网规模有限,用户数量较少,所以“爬行者”程序在网络上传播这种偶发事件,没有掀起太大的波澜,也没有引起计算机学界的高度警惕和强烈反应。
1972年,阿帕网的节点数量仅有40个左右,每个节点都是一台大型计算机。那么这些计算机之间,是如何通信的呢?
就像我们在开会时的发言有个基本的规则和顺序一样,计算机之间的通信,也有一套通信规则和约定——网络通信协议。
阿帕网最初使用的通信规则和约定是网络控制协议(Network Control Protocol,NCP)。而在当时,美军各军种、美国各科研机构陆续建立了本单位的分组交换网,这些机构的技术领袖和专家学者们非常关心,如何把自己所在机构的小网络,接入到阿帕网这张大网上面来。但是,阿帕网无法满足他们的愿望。
为什么呢?因为NCP并不完美。
NCP本质上是一种“主机对主机”的通信协议,只能在同构环境中,也就是在一个单独的分组交换网上运行。而不同网络之间,如陆军的分组交换网和海军的分组交换网之间,就无法使用NCP来传输数据。
为了解决这个问题,ARPA请来了网络通信专家罗伯特·卡恩。卡恩和他的工作伙伴温特·瑟夫 经过两年的潜心研究,在1974年发表了 A Protocol for Packet Network Intercommunication (分组网络互联协议)的论文,正式提出了为互联网奠基的伟大构想——开放的网络架构,以及能实现这个伟大构想的通信协议——TCP/IP协议。用罗伯特·卡恩自己的话,是这么解释的,他说:“IP地址可以让你在全球的互联网中,联系任何一台你想要联系的计算机,让不同的网络在一起工作,让不同网络上的不同计算机一起工作。”
TCP/IP协议的“沙漏”模型如图4-1所示
图4-1 TCP/IP协议的“沙漏”模型
然而,这个TCP/IP协议的提出,不可避免地会动了其他人的“奶酪”。因为,网络通信协议具有“非此即彼”“赢家通吃”的特点,一旦用户选择了TCP/IP协议,那就意味着,其他协议会被弃之不用,所以TCP/IP协议在诞生之初,就如同枪打出头鸟一般,受到其他协议推动者的强烈抵制。
尤其是在1978年,TCP/IP协议在完成基础架构搭建之初,国际标准化组织就推出了著名的开放系统互连(Open System Interconnection,OSI)七层参考模型。相形之下,显得比较简陋的TCP/IP协议又被拿出来奚落了一番。
但是,卡恩和瑟夫并没有放弃,他们借助阿帕网的影响力不断与各方交涉、积极斗争。同时,他们采取了开放路线,将TCP/IP协议免费授权给所有的计算机厂家使用。
1982年,为了提升TCP/IP协议的标准化水平,卡恩和瑟夫发布了TCP/IP协议规范。规范的出台,使市面上各种各样的计算机硬件和操作系统之间都可以进行通信。
这个时期,在整个计算机产业中,形成了一股支持TCP/IP协议趋势,各个计算机厂商也因此不得不适应这种变化,不断生产支持TCP/IP协议的产品。
不过,此时的TCP/IP协议还没有完全确立其在计算机网络通信协议领域的主导地位。
帮助TCP/IP协议迈向顶峰的重要幕后推手,是UNIX操作系统。
之前提到过,UNIX操作系统是20世纪六七十年代“黑客文化”的巅峰之作。事实上,UNIX操作系统的第一个版本,是在1969年“高大上”的马提克斯操作系统项目宣告搁浅之后,由马提克斯项目组成员、贝尔实验室的“传奇人物”肯尼思·汤普森自己折腾出来的。用汤普森自己的话说,那段时间刚好他老婆带孩子去外地休假,他就在实验室里加了3个星期的班,用汇编语言做了一个马提克斯操作系统的简化版。UNIX最早是叫UNICS,后来简化为UNIX 。
1973年,另一位创造了C语言的传奇人物丹尼斯·里奇,和汤普森一起,用C语言重新编写了UNIX操作系统的核心代码,使得UNIX能够很容易地移植到其他计算机上,UNIX也成了第一个可以脱离它的原始硬件而存在的主流操作系统。
当时,开发操作系统相当困难,只有极少数大型计算机厂商才拥有自己的操作系统,而其他众多生产计算机的硬件厂商,只能使用别人开发的操作系统。自然而然地,UNIX操作系统开始向实验室之外传播。
同样在操作系统领域,我们都知道,微软通过售卖Windows操作系统的授权,成了最赚钱的IT公司之一。但贝尔实验室的母公司AT&T并没有意识到UNIX是一个能赚钱的产品,AT&T公司在1973年决定,一些高校只需要支付象征性的费用,就能得到UNIX操作系统的使用权。贝尔实验室也希望用户能对UNIX操作系统加以改进,还向这些高校提供了UNIX操作系统的完整源代码。
不过,无心插柳柳成荫。没过几年时间,美国高校中就出现了大量会用UNIX操作系统进行编程的学生,他们从学校毕业后,又将使用UNIX操作系统的习惯带到了企业,从而让UNIX操作系统更快地普及开来。
20世纪80年代初,随着计算机用户的快速增长,UNIX操作系统迎来了自身发展的黄金时期。1980年,ARPA将UNIX操作系统推荐为首选的操作系统。1983年,加利福尼亚大学伯克利分校发布了UNIX操作系统的一个新版本,先人一步地整合了TCP/IP协议,实现了“最受欢迎操作系统+最便捷网络协议”的强强联合,凭实力赢得了用户的青睐。
图4-2给出了UNIX操作系统的“进化”史。
图4-2 UNIX操作系统的“进化”史
随着新版本UNIX操作系统的成功,TCP/IP协议成为与UNIX操作系统深度绑定的默认网络协议。这时候ARPA顺水推舟,正式决定在阿帕网上淘汰NCP,由TCP/IP协议取而代之。这个决定,彻底断送了来自欧洲、日本等地区极力推广的类似网络协议的前程。
这一次的“赢家通吃”影响非常深远,ARPA通过TCP/IP协议,在某种程度上掌控了互联网通信规则未来发展的路径。
在快速发展、大获成功的光鲜之下,其实暗藏着各种各样的问题。伴随着用户规模的增长和网络规模的扩张,新的安全隐患也在悄无声息中滋长着。
当初,卡恩和瑟夫在设计TCP/IP协议时,阿帕网的规模很小,用户也都来自军事部门、科研院所等核心单位,他们希望抓紧解决NCP的局限性问题,让更多的网络连接起来,所以并没有过多地考虑安全方面的问题。
这就造成,TCP/IP协议存在大量的设计缺陷。一个最典型的例子是,表示主机网络身份的IP地址,竟然可以通过某种手段进行伪造,而这个设计缺陷,会直接导致IP地址仿冒和IP地址欺骗(见图4-3)两类安全隐患。
图4-3 IP地址欺骗
计算机网络协议这么不安全,用户该怎么办呢?只好指望操作系统了。让人失望的是,UNIX操作系统的安全性也不能让人放心。
第二回在介绍第一个安全操作系统马提克斯时提到,马提克斯操作系统的开发经费非常充足,设计也非常科学合理,采用了圆环形的多级安全系统,但仍然没有通过“老虎队”的评估认证,最终只好接受失败的命运。
后来,不撞南墙不回头的早期安全研究人员,又花了很长时间去论证“理想的安全操作系统”,却始终无法推出一个能被市场认可的产品。
谁也没想到,真正走出来、被用户广泛接受的,竟然是UNIX操作系统这样一个实验性质的“小”项目。但UNIX操作系统不是商业产品,压根没有接受过商业软件那样严格的测试。丹尼斯·里奇直言,因为在开发过程中并没有高度重视安全性,UNIX操作系统出现大量漏洞是必然的。
1981年开展的一项对UNIX操作系统安全性的学术研究,发现了6大类21个新漏洞。奇怪的是,虽然这份研究报告在计算机安全研究圈子里流传甚广,但人们对如此严重的安全隐患,却不约而同地选择了视而不见的“鸵鸟”态度 ,更不要说去身体力行地研究解决方案了。
著名的墨菲定律 告诉我们,有可能出事的地方,早晚会出事。几年之后,TCP/IP协议的安全隐患和UNIX操作系统的漏洞,以一种戏剧性的方式来了一场技惊四座的表演。
1988年11月2日,一段99行的程序,通过麻省理工学院的计算机进入阿帕网,最终感染了超过6000台计算机,几乎让美国的网络陷入瘫痪,堪称计算机发展史上的重大灾难。
引发这场灾难的始作俑者,是来自康奈尔大学的一年级研究生——罗伯特·塔潘·莫里斯(Robert Tappan Morris)。
1988年,阿帕网已经拆分为军用网和民用网两部分,成为一个拥有6万台计算机的大型网络。这6万台计算机彼此连通,开辟了一个高效协作的崭新空间;但对于安全威胁,基本处于不设防的状态。
那么,这会带来怎样的后果呢?
莫里斯是个计算机天才,他在好奇心的驱使下,利用UNIX操作系统的邮件发送程序漏洞,加上从他在美国国家安全局工作的父亲那里弄来的一段神秘代码,编出了一个能够在网络上传播、猜测UNIX操作系统密码并获得操作系统控制权的99行的小程序。按照他的设计,这个程序能够在阿帕网上到处“游走”,这样一圈下来,他就可以知道阿帕网上到底有多少台计算机了。
1988年11月2日这天,莫里斯的小程序上线了。让他万万没有想到的是——这段程序会重复感染同一台计算机,不断消耗计算机的资源,直到计算机彻底瘫痪!
这时莫里斯才发现问题的严重性,他赶紧在网络论坛上发帖道歉,并给出防止病毒感染的解决方案;但覆水难收,一切为时已晚。
当晚,从美国东海岸到西海岸,美国国家航空航天局以及许多军事基地和研究机构的计算机,一批又一批地接连瘫痪了。
事后,这个震惊世界的小程序被定名为“莫里斯蠕虫”,成了蠕虫病毒的开山鼻祖。莫里斯也因此成为第一个依据美国《计算机欺诈和滥用法》被起诉并定罪的人。
“莫里斯蠕虫”的出现,震惊了整个计算机圈子。随着99行小程序的传播,计算机病毒这个幽灵,被解除了封印,开始在计算机网络中扩散。
各单位的安全研究人员感受到了真实的压力。政府在第一时间决定组建计算机应急响应小组(Computer Emergency Response Team,CERT),系统管理员们则开始对计算机网络和操作系统进行更为深入细致的安全检查,思考更为有效的安全防护解决方案。
然而,摆在人们面前的难题是,随着网络用户规模变得越来越庞大,被发现的系统漏洞也越来越多。人们发现,仅仅依靠系统管理员,已经很难保证每一台计算机的安全了。这时候,另一个“英雄”登场了!他是谁呢?
(1)NCP本质上是一种“主机对主机”的通信协议,只能在同构环境中,也就是在一个单独的分组交换网上运行。而不同网络之间是无法使用NCP来传输数据的。为了解决这个问题,罗伯特·卡恩和温特·瑟夫发表了 A Protocol for Packet Network Intercommunication ,正式提出了为互联网奠基的伟大构想——开放的网络架构,以及能实现这个伟大构想的通信协议——TCP/IP协议。
(2)TCP/IP协议和UNIX操作系统赢得了市场和用户,但在它们设计之初未重视安全性,安全问题逐步暴露。
(3)“莫里斯蠕虫”是一个能够在网络上传播、猜测UNIX操作系统密码,并获取系统控制权的99行小程序。
[1]袁载誉.互联网简史[M].北京:中国经济出版社,2020.
(1)震撼世界的“蠕虫”病毒案。(知乎)
(2)TCP/IP协议竟然有这么多漏洞?(知乎)
1.判断题
IP地址可以用于唯一标识互联网上的某台主机,无法被伪造。( )
2.单选题
相较于NCP,TCP/IP协议最主要的贡献是解决了什么问题?( )
(A)无法连接更大规模的计算机
(B)不同网络之间无法通信
(C)网络通信速率慢
(D)计算机间的通信安全
3.单选题
以下关于TCP/IP协议和UNIX操作系统安全性的说法,正确的是( )。
(A)TCP/IP协议设计之初重视安全性,但是UNIX操作系统设计之初并未重视安全性
(B)UNIX操作系统设计之初重视安全性,但是TCP/IP协议设计之初并未重视安全性
(C)UNIX操作系统和TCP/IP协议设计之初都非常重视安全性
(D)UNIX操作系统和TCP/IP协议设计之初都并未重视安全性
4.多选题
以下关于“莫里斯”蠕虫的说法中,正确的是( )。
(A)“莫里斯”蠕虫能够在网络上传播
(B)“莫里斯”蠕虫能够猜测UNIX操作系统的密码
(C)“莫里斯”蠕虫能够取得操作系统的控制权
(D)“莫里斯”蠕虫能够重复感染同一台计算机