美国前赛博安全主管Richard Clarke曾说:“如果你在咖啡上的开销比IT安全方面还要多,你将受到黑客的攻击,而且是咎由自取。”本文讲述恶意软件的历史和应对的基本措施,希望能提高大家的安全意识。

恶意软件的历史 到 20 世纪 80 年代晚期与 90 年代早期, PC 病毒已经是个大问题,并直接促使了反病毒软件编写与咨询行业的诞生。很多人都认为这种情况不能持续太久,从 DOS 变迁到“更正确的”操作系统 ( 比如 Windows) 将会解决这一问题。 然而, DOS 到 32 位操作系统的变迁也只是让人们短暂地缓了口气。很快,解释性语言的传播给恶意软件的滋生提供了更加肥沃的土壤。 20 世纪 90 年代后期流行的恶意 Java 小程序 (Java applet) 导致了新的攻击方法,因为人们发现了在浏览器中渗透Java 实现的方法。到了 21 世纪初,主要的病毒感染源是像Word这样的产品中的宏语言,而主要的传输机制已经变成了 Internet ;到 2000 年时,宏病毒成为几乎所有移动恶意代码的感染源。实际上,有内部人士声称网络“挽救”了反病毒产业 。另一种带有嘲讽意味的观点是反病毒产业并未受到威胁,因为用户总是希望共享他们的程序代码和数据,而且在缺少可靠的计算平台时,用户期望恶意代码之类的东西可以用来开发它们使用的共享机制。还存在一种观点是微软应该负责任,因为它们不顾后果地在诸如 Word 这类文字处理应用程序中引入了强大的脚本功能。正如他们所说的那样,每个人的想法不同。 恶意数据也是一个值得关注的问题。一个有趣的实例是关于 David Mazieres 和 Frans Kaashoek 的,他们在 MIT 开设了一个匿名邮件重邮器。这个设备破译从网上任何地方发来的消息,对其进行解压操作,之后再进行其他处理。有些人发给他们一连串 25Mb 的消息,而内容仅是不断重复的单行文本,这些消息压缩率很高,因此虽然输入只是很小的密文,但解压后会迅速地填满缓冲池,并导致系统崩溃 。还有针对其他执行解压功能程序 ( 比如 MPEG 解码器 ) 的类似攻击。然而,最严重的案例中涉及的不是恶意数据,而是恶意代码。 不管怎么说,恶意软件演化的下一阶段是 2000 年的“爱虫”病毒,实际上这是一种自传播的蠕虫,其传播方式是将其自身发送给目标计算机地址簿中的每个联系人,主题词“I love you”则是为了诱使人们打开邮件。理论上,公司可以通过过滤微软的可执行程序来进行防御,但在实践中不可能这么简单。一个有 85 000 名员工的加拿大公司采用了这种策略,但很多员工都有基于 Web 的电子邮件服务的私人账号,因此,爱虫病毒还是可以进入公司,并且没有经过防火墙中邮件过滤器的过滤。公司对员工的邮件客户端进行了配置,以便每个员工在其个人地址簿中都有完整的公司通讯地址目录。其结果是系统彻底崩溃,因为 85 000 个邮件客户端每个都试图向所有的85 000 个地址发送邮件。爱虫之后还有很多类似的蠕虫,这些蠕虫都是引导用户进行单击操作,主要是通过提供一些名人图片,比如 Anna Kournikova 、 Britney Spears 与 Paris Hilton 等。还有一种“闪存蠕虫”,这种蠕虫通过扫描整个 Internet 来寻找存在某种漏洞的计算机进行传播,并控制这些计算机;这种类型的蠕虫,比如红色代码与冲击波,会在数小时甚至数分钟之内感染所有存在漏洞的计算机,并会导致发出指示哪些防御可能会予以及时反应的警报 。 几乎与此同时, 21 世纪早期,我们看到了间谍软件与广告软件的迅速增长。间谍软件采用的技术是在未经计算机所有者授权的情况下收集并转发计算机使用情况的相关信息,或者至多有一个弹出框请求用户允许执行某些隐晦的操作,即便这样那些没有随便就点击的人也不会真正知道他们同意的是什么。虽然这并不符合欧洲数据保护与不公平条约法,但该法律没有得到强有力的实施。广告软件以不断弹出的广告来轰炸用户,并可以与间谍软件绑定在一起。这种软件的销售商甚至会与将其产品列入黑名单的公司打官司,这使得很多事情都复杂化了。 大概在 2004 年前后,情况发生了很大的改变。在此之前,我们看到了大量不同的病毒与攻击载荷,大多数病毒编写者的目的是为了搞笑、炫耀,以便打动他们的女朋友——  基本上都是业余的。但此后,有组织的信息产品犯罪经济学开始涌现,使得整个行业变得更加专业,恶意软件编写者的目的是获取可以卖给用于僵尸网络或其他攻击意图的计算机。 上世纪 80 年代与 90 年代的大多数病毒都是非常容易解决的;尽管报道有数万种不同的病毒,但实际上只有极少数真正广泛传播。编写一个可以正确传播的病毒实际上是非常困难的,如果传染性不是足够强,就不会传播,而如果传染性太强,就会很快被发现并处理。然而,那些真正能传播的病毒通常都会广泛传播,并感染数百万台计算机。 对十几岁的程序员来说,编写一个可以自我复制并广泛传播的蠕虫会带来巨大的自我满足感,但对于犯罪组织来说这并非是最优的选择。这样的蠕虫会变成头条新闻,并导致在几个小时之内,世界范围内的反病毒厂商都会对其产品进行升级,以便检测并清除这种病毒。媒体也一再向公众强调不要点击各种邮件中的任何链接。既然病毒编写者关注的是金钱而非炫耀,他们公开发布的都是危害有限的攻击方式。并且,他们不使用自我复制蠕虫——  这会导致 Internet 阻塞而引起关注——  现代的趋势是手工控制攻击活动。 2007 年 9 月,最大的僵尸网络或许是 Storm 网络,包含大约100 万台计算机,其拥有者还在通过各种手段不断地将更多计算机纳入其中。随着 9 月 6 号国家足球联赛的启动,他们在 9 月 9 号发送垃圾邮件,其内容只是简单声称
“Football ... Need we say more? Know all the games, what time, what channel and all the stats. Never be in the dark again with this online game tracker”
其中包含一个到指定 URL 的链接,点击链接后,受害者将会下载一个名为 tracker.exe 的文件,该文件会在用户的计算机中安装一个 rootkit 。使用类似这样的技术——实质上是专业的在线营销——  就可以不断扩大僵尸网络的规模。 尽管媒体将 Storm 作为一个“蠕虫”进行宣传,但实际上它并不算是蠕虫,而是一个木马与 rootkit ,受害者在安装之前必须点击一些警告信息, Windows 会报警声称该软件没有经过签名,并询问是否确实要安装该软件。然而, Windows 经常会弹出一些让人厌烦的对话框,大多数人都已经习惯于关闭了事。 在 Storm 案例中, 9 月 11日时微软的恶意软件删除工具可以对该病毒进行定位, Redmond 报告称有 25 万台以上的计算机中该病毒已被清除;他们还估计, Storm 包括 50 万台活跃计算机,还可能有几十万台计算机处于非活跃使用状态,该网络——  这个星球上最强大的超级计算机——  被出租给哄抬股价的操作员和制药业骗子以牟利。还有另外两个包含 50 万台左右计算机的网络也被识别出来,分别是 Gozi 与 Nugache ,使用的是与 Storm 一样的点对点体系结构,到 2007 年年末时,这些僵尸网络变得日益高级和复杂,使用了很多新的犯罪模式 。 因此,恶意软件行业目前以产业化的模式运作,顶级的僵尸网络拥有者控制的计算机数量几乎与 Google 的计算机数量差不多。大的产业是建立在这样一个事实之上的,即用户还是会点击来路不明的链接。随着恶意软件走向产业化,木马变得比病毒更加常见,病毒通过电子邮件将自身从被感染的计算机向别处传播,会引起更多的关注并更有可能被清除,而木马则将感染数据流直接发送,并能施加更好的控制 。安装软件时,并不能确定这是否是一个 rootkit ,或者是使用键盘记录程序盗取银行密码的恶意间谍软件,或者是简单地收集个人数据以便卖给出价最高买主的间谍软件。说实话,清晰地进行恶意软件种类区分是困难的。 应对措施 1987 年,在第一个 PC 病毒出现之后的几个月之内,就已经有公司成立并销售反病毒软件,并导致了一场竞赛,每一家公司都试图战胜其他厂商。早期的防病毒软件有两种基本形态,扫描器(scanners)与校验和检查器(checksummers)。 扫描器是一种用于对可执行文件进行搜索的程序,目的是寻找已识别病毒中已知的字符串。病毒编写者采用了多种方法来防止被扫描出来,比如对流行的防病毒程序的特定反击,最常用的技术是多态化(polymorphism)。多态化的思想是,病毒或蠕虫每次复制自身时都改变代码,这会增加编写有效的扫描器的难度。常用的技术是使用简单的加密器对代码进行加密,并包含一个简短的头部,其中含有解密代码。每次复制时,病毒都在一个不同的密钥下对自身进行重新加密,并通过替换等价的指令序列对解密代码进行调整。 校验和检查器将系统中所有授权的可执行程序及其原始版本的校验和信息保存至一个列表,通常校验和是使用哈希函数计算得出的。病毒对此主要的应对措施是隐蔽(stealth),在这里的含义是病毒对校验和检查器使用的所有系统调用进行监测,并在检测时隐藏自身。 研究者还对恶意软件复制的理论进行了研究。要使得病毒的传染行为能有效持续,就必须超过流行病阈值(epidemic threshold)—— 也即传染的速度超过被清除的速度 。这不仅取决于病毒本身的传染性,还取决于联网计算机中存在漏洞计算机的数量。医学中的传染病模型在这里具有一定的适用性,但由于受软件交互 ( 软件共享是高度本地化的 )的不同拓扑结构影响,预测到的高传染率要高于实际观察到的 ( 后面会对拓扑结构进行讨论 )。人们还尝试使用免疫系统模型来改进分布式的恶意软件检测策略 。来自医学领域的一个似乎可借鉴的教训是,最有效的组织级的应对措施是集中式报告和响应 ( 使用精选的接种疫苗 ) 。 在实践层面上,反病毒软件和管理策略在一定程度上可以互相替代。但想要真正有效,就必须将工具、动机与管理等各种因素结合起来。在基于 DOS 的文件病毒时代,这意味着提供一个面向所有事件的集中式报告点,并对组织内计算机上的所有软件进行控制。主要的风险是来自于那些同时用于工作和其他事务 ( 比如孩子玩游戏 ) 的 PC 机上的文件,以及来自于其他组织的计算机上的文件。但是,怎样才能让员工对所有到来的邮件进行过滤并阻挡病毒呢?伦敦一家律师事务所采用了一种有效的策略,是给每个发现病毒的人奖励一盒巧克力——  之后会将发票开给发送该被感染文件的公司。 恶意软件大部分都是通过电子邮件附件或网页引入的,通常的解决方案就是技术手段,包括自动过滤与集中报告等。公司可以在防火墙处对可执行程序进行过滤,并要求用户对系统采用谨慎的默认设置—— 比如禁用浏览器中的活动内容以及Word 文档处理中的宏。当然,这与可用性的要求会有一些冲突。人们还会创建各种类型的未授权通信通道,因此,过滤机制不可能尽善尽美,还必须对员工进行培训,让他们不要打开可疑的电子邮件附件,还要对员工进行恢复过程培训,使其可以处理感染的备份文件。简而言之,问题很复杂、很麻烦。但正如机体的疾病一样,预防胜于治疗;软件“保健”还涉及对非法软件复制、未授权私人使用等问题的控制。 最近,反病毒软件的有效性持续下降。僵尸网络与计算机渗透攻击的商业化意味着恶意软件编写者有更好的工具与更好的培训机会。几乎所有木马与其他攻击工具在初次使用时都不会被当前的反病毒软件产品识别出来—— 因为编写者对其进行了完全的测试—— 针对目标计算机特性进行测试使其不会被防毒软件检测。从效果上看,在 21 世纪头几年,防毒软件可以检测几乎所有病毒,而到了 2007 年,典型的防毒软件产品只能检测三分之一的病毒与其他攻击工具。 甚至像rootkit ,编写技巧也比几年前有所提高,很少会引起目标计算机所有者的警觉。有些 rootkit 甚至会安装及时更新的防毒软件,以便防止有竞争性的僵尸网络接管目标计算机。他们还使用各种隐蔽技术来逃避检测器。并且, rootkit 的销售者还提供售后服务,如果有清除工具出现,销售者会很快推出反制措施。 技术防御措施是否跟上了恶意软件的步伐,并不明确。在全球范围内,针对大型犯罪团伙的警察行动是必要的,尽管刚开始加强,但还有很长的路要走。运营良好的公司可以使用管理策略来对威胁进行管理和容纳,但对个人 Windows 用户而言,前景却不容乐观。一项调查表明,新 PC 销售中的 8% 是卖给了那些因为原有计算机上遍布广告软件和其他垃圾软件而变得不可用的人 。并且,来自于按键记录器 (keylogger)的威胁也日益增长,这种软件可以捕获用户在其计算机上的一切操作。有些这种软件就是将个人信息出售给市场商人的间谍软件,其他一些软件则致力于寻找银行密码和其他可用于诈骗犯罪的关键数据。   本文节选《信息安全工程》(第2版),Ross Anderson著, 齐宁、韩智文、刘国萍译,由清华大学出版社发行。
Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐