题图:美国国家航空航天局格伦研究中心配备的IBM 370 Mainframe计算机,1981年
虽然在机核社区里大部分时候以尼龙佬的形态出现,但其实我本人在此前的十几年来一直都从事网络安全相关工作,而且长久以来有一个愿望,希望能在这里和大家聊聊当今计算机和网络安全相关的内容。
这系列文章原本作为播客稿件编写,由于一些客观因素未能完成录制,现将稿件重新编辑整理之后作为连载文章发布。讲解技术历史无可避免地会涉及讲解具体的技术原理,这部分我会安排在连载的最后,读者可自行选择是否阅读。
从公众认知角度来看,提到计算机和网络安全,第一个浮现在脑海中的可能就是计算机病毒,连载的第一期咱就聊聊有关计算机病毒的历史。
计算机“病毒”(Virus)这个概念显然是从微生物学里借鉴过来的,在计算机领域里指的是一类具有自我复制能力和破坏性的程序或代码。有一个观点认为计算机病毒的理论来自冯·诺依曼在1966年发表的论文《可自我复制的自动机理论》(Theory of Self-Reproducing Automata),这篇论文基于他在1949年的一篇演讲。在论文里冯诺依曼设想了一种可以实现自我复制的自动机。而计算机病毒的传播行为就是在软件层面实现的“可自我复制的自动机”。冯·诺依曼这个名字在后边还会继续提到。
而后在1969年。美国科幻作家Gregory Benford发表了一篇名为《The Scarred Man》的科幻小说。在这个小说里第一次明确提到了“计算机病毒”(Computer Virus)这个词以及它可以自我复制的特性。这个作家写计算机病毒可不是瞎写的,和后来那些写赛博朋克的作家不同,Benford在科幻小说作家之外的另一个身份是物理学家。
1969年他写The Scarred Man这篇小说时正在加州的劳伦斯放射实验室(Lawrence Radiation Laboratory,现劳伦斯伯克利国家实验室,奥本海默也曾经在此工作)当博士后,使用Fortran语言编写程序来模拟等离子体现象。当时还在使用打孔卡片作为数据和程序的介质,计算机还是中心化架构(即Mainframe),用户使用终端机访问中心大型计算机。当时他在想,如果有人写代码的时候不小心写错了,这段代码就会执行非预期的指令。但如果万一有人故意这么做呢?甚至为了扩大影响,让这些“故意的”代码具有传播功能呢?
为了验证这个想法,他在自己写的Fortran代码里加了几行,功能很简单:将这些附加代码再附加到其他的代码里。然后只过了几个小时,这段附加代码就开始传播,等到第二天的传播就已经失控了,一些毫不相关的文件也被“感染”了。于是他不得不联系其他受到影响的人,将影响消除。事后他把这次事件报告给了计算机专家,提醒他们这种行为可能会被用于更有恶意的用途。而后他继续思考,如果另外有一个“疫苗”程序可以处理这种传播,那是不是可以从中牟利呢?他把这些想法写进了小说《The Scarred Man》,并在1970年五月发表在科幻杂志《Venture》上。
关于Benford最后多说一句,他的作品翻译和引进的不多,主要写硬科幻。1980年凭借《Timescape》获得星云奖和约翰·坎贝尔奖。他和大卫·布林是好朋友,两人曾经合作写过小说并发表。国内读者能接触到他的作品可能是阿西莫夫《基地》系列的《第二基地》三部曲,这三部曲是阿西莫夫去世之后他的遗孀委托其他三位作家续写的,另外两位作家是葛瑞格·贝尔(Greg Bear)和我们都很熟悉的大卫·布林(David Brin)。Benford编写的那本叫《基地的恐惧》(Foundation's Fear,1997年出版,国内好像还没有引进),计算机病毒以及病毒传播的情节也出现在这一部小说里。
“蠕虫”(Worm)这个概念也起源于科幻小说,出自1975年的一本题为《The Shockwave Rider》(冲击波骑士)的科幻小说。书中提到的“Worm”的概念上类比的是现实中的 猪肉绦虫 ,这种恶意程序由一个负责总控的头部和渗透传播进入网络各个角落的海量的破坏性程序构成。而现实中的猪肉绦虫由一个头部和成百上千个节片(也叫妊娠节)构成。正如绦虫的妊娠节从母体分离的时候会生出更多的绦虫一样,每一段破坏程序都有自传播能力。
在小说中,这种蠕虫几乎是不可能被清除的,因为即便可以将单个节点下线清理,但只要网络上还有一个蠕虫存活,它就仍然可以在短时间内再传染遍整个网络。甚至书中还提到了另一个人用和蠕虫相同的方式去杀死蠕虫。而所有以上这些事情后来在现实中全都发生过。所以现在我们用“蠕虫”这个看起来有些奇怪的名字来指代这一类通过网络传播的高传播性的恶意程序。
最后是特洛伊木马(Trojan Horse),这个词更多的是描述恶意程序的伪装方式:通过伪装或者潜藏在正常的程序里的方式骗取用户的信任,从而获得执行的机会。1974年“特洛伊木马”这个术语在就已经出现在美国空军对于计算机系统安全性和漏洞分析的报告中。
现在”木马“这个概念一般特指远程控制木马(Remote Access Trojan,RAT),作为曾经的行业从业人员,远控木马闭着眼都能报一堆菜名:netspy、灰鸽子、中国菜刀、冰蝎、哥斯拉、蚁剑、Cobalt Strike……这些木马不仅有针对Windows系统的,还有基于Web服务的,后者也被称为Webshell。
病毒、木马和蠕虫,在当今时代它们的边界变得模糊了,一般都会被统称为”恶意软件“(Malware)。一般认为,无法独立运行,需要感染操作系统或者附加到其他可执行程序的恶意程序是病毒;着重通过网络大量复制传播,而且可以独立运行的是蠕虫;使用伪装手段骗取用户信任或绕过检测手段,在目标系统里运行并接收来自外部指令的被称为木马。这种分类方式是根据恶意程序的传播方式进行区分的,而现在恶意软件的形态几乎完全取决于其目的,不再拘泥于特定传播方式,传统分类方式现在也逐渐不再使用了,现在主要根据恶意软件的目的进行分类。
接下来我打算聊聊一些开创性或者有影响力的恶意程序。
首先是公认的世界上第一个蠕虫,名叫Creeper(爬行者),它诞生于1971年,通过ARPANET传播。ARPANET就是当今互联网的前身,由美国国防部高级研发计划署资助,最初用于连接军事目的(连接北美防空网络)研发的。
Creeper有两个版本,最初的版本只是通过ARPANET在各个大型机之间移动。计算机学家Ray Tomlinson对它进行了一些修改,让它不仅能够移动,还会在经过的大型机上留下一个自己的副本并继续传播,这个改进的版本被认为是世界上第一个计算机蠕虫。Creeper是为了研究计算机程序自我复制和传播可能性而被创造出来的(这又回到刚开始冯·诺依曼的自我复制自动机理论),它只会在经过的计算机的终端上留下一行字,叫“I'M THE CREEPER : CATCH ME IF YOU CAN”,除了留下一行字之外并没有破坏性。
因为是用于研究目的,Creeper的传播是受到控制的。它只感染了最多28台计算机,而且是经过管理员许可之后才这么做的。Creeper还催生了世界上第一个反病毒程序。第二年,也就是1972年,还是Ray Tomlinson,编写了一个叫Reaper程序,专门用来在ARPANET上清除Creeper程序。
关于Ray Tomlinson这个人还可以再多说两句,他现在主要以电子邮件之父的身份被大众认知。现在我们用的电子邮件地址的格式“用户名@主机名”就是他发明的。2022年美国设立了一个纪念日叫“电子邮件国家纪念日”(National Email Day),定为每年的4月23日,也就是Ray Tomlinson的生日。除此之外,他对于计算机和网络领域另一个贡献更为重要,但可能并不为公众广泛认知,那就是他设计了TCP建立连接时的三次握手机制(SYN-SYN/ACK-ACK)。
然后是第一个被有意开发出来的恶意计算机程序,它没有名字,是1971年一名伊利诺斯大学的研究生写的。它的作用就是循环检测计算机上的可用存储空间,然后建一个和这块空间一样大的文件,把可用空间全部占满。如果此时用户往磁盘上写文件,系统就会报告存储空间不足,请删除部分文件。而用户要是真的删除了一些文件腾出空间,它会立刻继续把这部分空间也占满。但这个恶意程序它没有传播能力和驻留能力,系统重新启动它就不再运行了。
时间来到1974年,这一年诞生了一个名叫“兔子”(Rabbit,或者Wabbit)的恶意程序。它只做一件事:利用操作系统的fork指令在死循环里创建海量的进程分支,直到把系统资源耗尽。这个恶意程序取名“兔子”寓意其像兔子那样可以快速增殖。
fork是unix系统里创建进程分支的命令,Windows操作系统不支持这个功能。我年初在机组发过一个类似原理的玩意,也是通过递归的方式无限创建进程,可以在一分钟之内把计算机的资源耗尽。
就目前我查到的资料来看,事实上的第一个同时具备传播能力和破坏功能,也就是真正意义上的“计算机病毒”,已经不太可考了。但第一个在大学和科研机构之外的社会面传播的计算机病毒是知道的,叫Elk Cloner,是由一个15岁的高中生在1982年写的。这是一种感染APPLE II电脑的APPLE DOS操作系统的引导区病毒。
它的原理大概是这样的:由于APPLE II电脑没有硬盘,依靠操作系统软盘启动。系统启动完毕之后再换其他的软件软盘。而Elk Cloner运行之后会常驻计算机内存,一旦检测到插入了没有被感染的软盘,就感染这张软盘的引导区。而如果这张软盘后来再被用于引导计算机,它又可以继续运行并常驻内存,感染其他软盘。这小孩最初就是为了好玩,把自己写的这个病毒和一个游戏捆绑到一起,当这个游戏累计运行了50次的时候病毒就会触发,在电脑屏幕上显示一首他写的诗。这个病毒本身除了感染引导区和显示这首诗之外其实并没有更进一步的破坏行为,但感染引导区的行为会覆盖软盘的保留扇区,导致数据丢失。这个病毒的历史意义在于它是第一个社会面传播的计算机病毒,再加上当时根本就没有所谓杀毒软件这个玩意,导致Elk Cloner病毒造成了相当大范围的传播。
计算机病毒也被用于政治对抗。1982年,CIA主导了一个名为“欺骗”的计划(The Deception Program)。CIA利用了KGB渗透到北美的间谍,任由他盗取了由加拿大开发的包含逻辑炸弹的天然气管道控制软件。这个逻辑炸弹的作用是在特定的条件下会将管道的压力提升一倍,但依然显示正常读数。1982年六月,西伯利亚天然气管道发生了严重的爆炸事故,这起爆炸事故被认为是当时“有史以来最猛烈的非核爆炸和火灾事故”(据说甚至可以从太空轨道上看到爆炸的火光)。美国方面一些人认定这次事故是“欺骗”计划的成果,但CIA并未对此予以证实,苏联方面则予以否认,相关人士表示当时苏联境内的天然气管道全部都是人工控制或者模拟系统控制的。并且苏联方面称爆炸并未造成严重后果,而且在一天内得到修复。不过无论成功与否,这次行动标志着针对计算机系统的攻击和计算机病毒早已被用于政治目的。
第一个能够感染现代个人电脑的计算机病毒诞生于1986年,名为Brain(大脑),它可感染IBM PC安装的MS-DOS操作系统。在一些资料里称Brain是世界上第一个计算机病毒,但实际上它只是世界上第一个感染IBM PC个人电脑的病毒。Brain也是一种引导区病毒。根据编写者的说法,它最初是用作一款医疗监控软件的防盗版措施,本应只感染使用了盗版软件的电脑。但可能是程序逻辑不严密,导致发生了意料之外的传播。
DOS时代早期的另一个知名的计算机病毒叫耶路撒冷,我们更熟悉的是它的别名:黑色星期五。顾名思义,病毒的触发条件是当前系统时间是13号而且是星期五,首次发作是在1988年5月13日,效果是用户每运行一个文件,病毒就会删除这个文件,还会大幅拖慢系统运行速度。
然后就是我们熟悉的“CIH”病毒。这个病毒一般被提到的时候会被称为“第一个可破坏计算机硬件”的病毒。最初版本的CIH被设定为每年4月26日触发恶意行为,和切尔诺贝利核电站事故是同一天。它感染Windows95/98/Me系统下的可执行文件,并采取了一个规避检测的手段:它将自己分成若干片段,写入PE文件的全零字节的填充段里,因此被感染的文件的长度不会发生变化。CIH有两种破坏手段,首先是用零字节覆盖硬盘0号扇区的前1MB内容,直接将分区表抹除;其次就是“恶名远扬”的破坏BIOS芯片的功能。它会用垃圾数据填充BIOS芯片的FLASH ROM存储,直接导致计算机无法启动。但实际上CIH抹除FLASH ROM的功能仅限特定的芯片,并非在所有的硬件上都可实现。
时间来到1995年。这一年微软的办公软件Word 6.0的新版本Word 95随着Office 95正式发布,同一年也诞生了世界上第一个广泛传播的Office宏病毒(Macro virus):Word concept。先说说什么是宏(Macro),这是一个自动化功能,在1989年被引入Word 5.0版本。它可以“录制”并“回放”用户的操作,宏的底层实现是一套基于BASIC语法的Office应用专用的编程语言,就像Quake C那样。在Office 97之前这个语言被称为WordBASIC,Office 97开始更名为Visual Basic for Applications(VBA)并一直使用至今。
说回到Word Concept,这个病毒没有恶意或者破坏行为,只会在文档打开的时候弹出一个消息框,显示一个数字“1”。如果打开这个病毒的代码,会发现在主函数里只写了一行注释:“That's enough to prove my point”(这足够证明我的想法)。它的传播方式是感染Word的模板文件normal.dot,这样任何通过“另存为”功能保存的doc文档都会携带这个病毒。由于之前没有先例,Word Concept在当年造成了相当广泛的传播,甚至曾经出现在微软发送给其他公司的Windows 95兼容性测试光盘里,1997年还一度占了报告的病毒事件总数的一半。从这里开始,一直到今天,使用VBA实现并通过Office文档传播的宏病毒成为病毒类型中的一个大类,在其后造成了很多重大的病毒传播事件,或者作为攻击渗透的重要环节。
随着互联网的普及,千禧年前后诞生了很多传播范围很广造成很大危害的蠕虫,比如爱虫、求职信、HAPPY99等,但我想挑其中我认为最有意思的一个来说。可能一些“老网虫”还有印象,2003年的时候有一个很有名的蠕虫病毒叫“Blaster”(冲击波)。
“Blaster”蠕虫是一个很典型的“N-day”漏洞利用范例:它利用的其中一个漏洞是通过对微软发布的Windows补丁包进行逆向分析发现的(也就是说,通过对补丁进行逆向分析,查找补丁所修补的对象,对比补丁替换之前和之后的库文件的差异发现的),这是一个DCOM RPC服务的可实现远程执行(Remote Code Execution,RCE)的缓冲区溢出漏洞。也就是说,在蠕虫传播的时候,它利用的漏洞实际上已经被官方修补过了。但大家也都知道,2003年的时候网络远没有现在这么发达,一般用户不太会用宝贵的拨号上网时长去微软官网下载补丁,所以互联网上还有大量的主机存在这个漏洞。
“Blaster”蠕虫会利用这个漏洞将自己上传到受害主机上并运行,将自己加入注册表开机启动项实现驻留。和当时广泛利用邮件传播的蠕虫不同,“Blaster”蠕虫通过扫描本地局域网的其他主机实现传播。它的危害主要是会控制受害主机在设定的时间段向微软的Windows Update网站发起DDoS攻击,导致网站无法访问,从而进一步阻止用户获得能修补漏洞的更新。
有意思的地方在于这件事的后续,国内有人利用和“Blaster”完全相同的漏洞和传播手段,做了一个“反制Blaster”的蠕虫。这个“反Blaster”蠕虫首先会清除本地已经感染的“Blaster”病毒,从指定的网站下载一个简易的修补程序,然后尝试从微软官网下载漏洞修补补丁。之后它也会像“冲击波”病毒那样,扫描本地网络,使用相同的漏洞传播到其他主机,做完这些之后这个反制程序会删除自身。在编写本文期间我找到了这个“反Blaster”蠕虫的业务控制部分代码。
听上去很美好,但实际并非如此。原版的“Blaster”病毒的攻击功能有所节制,仅在每天下午发动DDoS攻击,而且会设置长达数分钟的间隔;而这个反制修补程序会开300个线程疯狂PING扫描内网网段以及尝试从微软官网下载补丁,造成了比原“Blaster”蠕虫更严重的网络带宽占用和DDoS流量,这一点明确写在了代码里。而“ 利用和蠕虫病毒相同传播方式的反制蠕虫 ”精确应验了1975年那本小说里提到的情节。
还有一个有趣的事情是,在“反Blaster”蠕虫的代码里有一句带有拼写错误的英文:“Welcome Chia”,作者想写的其实是“Welcome To China”。所以这个蠕虫在英文世界里被命名为“Welchia”而不是“Anti-Blaster”“Kill Blaster”之类的。
2007年初,在国内的网络上有一个现在我们很熟悉的蠕虫开始流行,那就是熊猫烧香。受到感染的计算机的图标都变成了一只烧香叩拜动作的熊猫。熊猫烧香蠕虫在当时造成了相当范围的传播,但它其实并没有利用任何系统漏洞(所以当时的黑客圈子都很鄙视这个病毒的作者)。
在驱动器根目录建立autorun.inf文件设置自启动,如果在资源管理器里直接双击点开硬盘,病毒就会自动运行,这也是最常用的U盘病毒传播方式;
病毒运行后会利用Windows共享服务在局域网内横向移动。用自带的口令字典扫描局域网内的其他主机。如果能够使用弱口令成功登录,就将自己复制到远程计算机上实现扩散;
病毒除了感染本地的可执行文件,还会感染.html和.asp等Web页面和Web应用文件,将病毒的下载链接注入到这些文件中,实现“挂马”。如果被感染的主机是一台Web服务器,那么所有访问该服务器的客户端都会被感染,这也是熊猫烧香最为强力的传播方式。
此外,熊猫烧香还采用了多种手段对抗杀软。比如在操作系统中搜索运行中的杀软进程并尝试将其关闭。病毒作者还架设了专门的升级服务器用于更新,每当杀毒软件捕获了病毒特征,他就在服务器上部署新的免杀版本,最频繁时一天更新八次。
今天,计算机和互联网较千禧年那会儿已经发生了很大变化,病毒、木马、蠕虫等这些能够破坏计算机系统的程序,其目的也不再仅仅是破坏,而是有了更复杂的目的。在后边我们还会再提到这些。
首先要明确一个事情,就是“杀毒软件”和“防病毒软件”本质是两个东西,在行业早期只有杀毒软件,它只能清除已经感染的病毒,并且在一定程度上修复病毒造成的破坏(比如修复被感染的可执行文件以及被破坏的引导区)。早年用过江民KV200或者KV300的朋友可能还有印象,这套软件分为两张软盘:一张盘用于启动系统,另一张盘是杀毒工具以及病毒库。后来软盘空间不够,增加了一张光盘。之所以需要用自带的软盘启动,就是为了消除可能的潜在的引导区病毒的影响。
杀毒软件实际上的工作原理很简单:比对文件内容是否匹配已知的病毒库特征,一旦匹配,就使用相应的清理功能将病毒代码删除,修复被感染的文件,或者使之失能。而这个特征大多数情况下是一段有独特性的数据或者字符串,也可能是整个文件的哈希。
这里还有个有意思的事。2003年,初中时候的我拿VB6写了一个恶作剧小程序,作用是将自己复制到system32文件夹下,并加上/d的启动参数添加到开机启动项里。功能就只有一个:关机。写完之后我拿exe捆绑机把它和当时很流行的皮卡丘打排球的小游戏捆绑到一起,发到论坛上去了。
然后过了一阵子,我发现升级完自己电脑上的KV3000病毒库之后杀毒软件把我硬盘上编译好的这个恶作剧程序当做病毒杀了,还给了一个分类码:joke.vb6.destroy(destroy是当时我给这个玩意起的名字,但没用作文件名,只出现在模块名里)。想来应该是有人把它作为样本上报给杀毒软件了。我就忽然很好奇杀毒引擎的原理,因为自己就有这个程序的源码,我就在其中随便添加了几行无关的垃圾代码,再编译之后杀毒软件就认不出来了。现在看来当时杀毒软件扫描这个文件时应该是通过整个文件的哈希来判断是否是病毒的。现在的杀毒软件一般会从多个维度做判断和检测(例如PE文件的导入表哈希),减少误报和漏报。
在说防病毒软件之前可以先聊一聊七月份微软整的大活儿。7月19日,在世界范围内的Windows系统开始批量蓝屏。导致这一现象的是一个名为csagent.sys的驱动文件,这是企业版(主要是外国企业使用的)Windows预装的CrowdStrike公司出品的主机防护软件Falcon的监控驱动。而错误代码是PAGE_FAULT_IN_NONPAGED_AREA,我一看再熟悉不过了。十年前我们做Windows主机监控驱动的时候经常遇到这个问题,这是由于驱动在内核层读写了错误的内存地址造成的。
但是这就有了一个问题:为什么防病毒软件的监控一定要运行在内核层呢?这出了问题电脑直接蓝屏连用都没法用了不是耽误事么?我们日常用的Windows以及大部分操作系统分为用户层和内核层两层。绝大多数正常的应用程序运行在用户层(在Windows里也叫ring3),一般情况下无需关心系统底层原理和硬件层的资源是什么样的,只需要通过系统提供的编程接口(API)调用就行了。但这也限制了应用程序的权限以及能够获取到的信息。如果需要获得系统更底层的状态,或者需要和硬件打交道,那就需要进入内核层,或者也叫驱动层(在Windows里也叫ring0)。
以窗口服务打比方的话,应用层程序相当于来窗口办理业务的顾客,所有的请求都需要通过窗口业务员(也就是应用层API)沟通,通过他们调配所需的资源和信息,窗口业务员能够提供的服务和内容是相对有限的,而且会屏蔽一些细节,比如操作系统的内部状态;而驱动层程序则相当于顾客跑到柜台后边,想要什么直接自己拿,这样就可以获得更多应用层API无法获得的操作系统内部信息以及其他顾客的信息。
由于在应用层难以获得同时运行的其他进程的信息以及操作系统内部状态信息,杀毒软件必须进驻操作系统的内核层才能获取到维护系统安全所必须的监控数据,比如应用程序的网络连接、域名访问、文件操作、注册表操作以及对其他进程的行为(是否存在可疑的进程注入等)。而恶意软件也同样会通过各种手段进入操作系统的驱动层,以获取更大的控制权和敏感信息。
由于杀毒软件的存在,使得病毒的开发者也要想办法避免被查杀(现在一般叫“免杀”),比如通过变换、加密、压缩以及“加壳”等方式抹除数据层面的静态特征,让杀毒软件无从判断。因此防病毒软件应运而生。这类软件会监视系统的运行状态,并且会对重要的目录、文件和内存空间实施保护,一旦有进程产生了危险或者可疑行为就会触发告警。
这里可以做一个实验:试着在电脑上用浏览器访问这个URL:
https://iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com
如果你的电脑装的是卡巴斯基,访问的时候很可能会提示你检测到恶意行为或者访问可疑网站。这个域名是在2017年爆发的利用“永恒之蓝”漏洞的勒索软件Wannacry的kill switch,目前已经被网络安全公司接管,不包含任何有害内容。第一版Wannacry病毒会先尝试请求解析这个域名,如果无法解析成功,就会实施接下来的加密勒索行为。
当时英国的一名安全研究员在分析样本的时候发现了这个行为特征,于是就自己把这个域名注册了下来,让它能够被解析成功,缓解了wannacry的第一波破坏行为。这个实验的目的是想告诉大家,防病毒软件的监控是全方位的,在本例里就是通过对DNS请求内容的监控捕获到带有病毒特征的域名请求行为。在wannacry病毒刚刚爆发,漏洞还没有修补的时候,各大杀毒软件公司都临时更新加了类似这条域名请求特征触发的检测规则。后来随着漏洞修补和病毒特征进一步明晰,大部分安全厂商都撤掉了这条规则,但少数厂商的病毒特征库中还保留着。
第一期我们介绍了关于计算机病毒的发展史,第二期将关注网络攻防相关的知识,敬请关注。
https://en.wikipedia.org/wiki/Computer_virus
https://en.wikipedia.org/wiki/Computer_worm
https://en.wikipedia.org/wiki/Trojan_horse_(computing)
https://en.wikipedia.org/wiki/ARPANET
https://en.wikipedia.org/wiki/Gregory_Benford
https://en.wikipedia.org/wiki/The_Shockwave_Rider
https://en.wikipedia.org/wiki/Creeper_and_Reaper
https://en.wikipedia.org/wiki/Ray_Tomlinson
https://en.wikipedia.org/wiki/Fork_bomb
https://en.wikipedia.org/wiki/Elk_Cloner
https://en.wikipedia.org/wiki/Morris_worm
https://en.wikipedia.org/wiki/ILOVEYOU
https://en.wikipedia.org/wiki/Happy99
https://en.wikipedia.org/wiki/Melissa_(computer_virus)
https://en.wikipedia.org/wiki/Welchia
https://www.youtube.com/watch?v=u3k-8kJ54sg
https://tech.sina.com.cn/soft/2000-04-14/141.html
https://tech.sina.com.cn/i/2007-09-25/02191759477.shtml
https://www.secrss.com/articles/72594
评论区
共 6 条评论热门最新