9.7 恶意软件

在2000年之前出生的年轻人有时候为了打发无聊的时间,会编写一些恶意软件发布到网络上,当然他们的目的只是为了娱乐。这样的软件(包括木马、病毒和蠕虫)在世界上快速地传播开来,并被统一称为恶意软件(malware)。当报道上强调某个恶意软件造成了数百万美元的损失,或者无数人丢失了他们宝贵的数据,恶意软件的作者会惊讶于自己的编程技艺竟然能产生如此大的影响。然而对于他们来说,这只不过是一次恶作剧而已,并不涉及任何利益关系。

然而这样天真的时代已经过去了,现在的恶意软件都是由组织严密的犯罪集团编写的,他们所做的一切只是为了钱,而且并不希望自己的事情被媒体报道。绝大多数这样的恶意软件的设计目标都是“传播越快越好,范围越广越好”。当一台机器被感染,恶意软件被安装,并且向在世界某地的控制者机器报告该机器的地址。用于控制的机器通常都被设置在一些欠发达的或法制宽松的国家。在被感染的机器中通常都会安装一个后门程序(backdoor),以便犯罪者可以随时向该机器发出指令,以方便地控制该机器。以这种方式被控制的机器叫做僵尸机器(zombie),而所有被控制的机器合起来称做僵尸网络(botnet,是robot network的缩写)。

控制一个僵尸网络的罪犯可能处于恶意的目的(通常是商业目的)将这个网络租借出去。最通常的一种是利用该网络发送商业垃圾邮件。当一次垃圾邮件的攻击在网上爆发,警方介入并试图找到邮件的来源,他们最终会发现这些邮件来自全世界成千上万台计算机,如果警方继续深入调查这些计算机的拥有者,他们将会看到从孩子到老妇的各色人物,而其中不会有任何人承认自己发送过垃圾邮件。可见利用别人的机器从事犯罪活动使得找到幕后黑手成为一件困难的事情。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

安装在他人机器中的恶意软件还可以用于其他犯罪活动,如勒索。想象一下,一台机器中的恶意软件将磁盘中的所有文件都进行了加密,接着显示如下信息:

阅读 ‧ 电子书库

恶意软件的另一个应用是在被感染机器中安装一个记录用户所有敲击键盘动作的软件(键盘记录器keylogger),该软件每隔一段时间将记录的结果发送给其他某台机器或一组机器(包括僵尸机器),最终发送到罪犯手中。一些提供中间接收和发送信息的机器的互联网提供者通常是罪犯的同伙,但调查他们同样困难。

罪犯在上述过程中收集的键盘敲击信息中,真正有价值的是一些诸如信用卡卡号这样的信息,它可以通过正当的商业途径来购买东西。受害者可能知道还款期才能发现他的信用卡已经被盗,而此时犯罪分子已经用这张卡逍遥度过了几天甚至几个星期。

为了防止这类犯罪,信用卡公司都采取人工智能软件检测某次不同寻常的消费行为。例如,如果一个人通常情况下只会在本地的小商店中使用他的信用卡,而某一天它突然预订了很多台昂贵的笔记本电脑并要求将他们发送到塔吉克斯坦的某个地址。这时信用卡公司的警报会响起,员工会与信用卡拥有者进行联系,以确认这次交易。当然犯罪分子也知道这种防御软件,因此他们会试图调整自己的消费习惯,并力图避开系统的检测。

在僵尸机器上安装的其他软件可以搜集另外一些有用的信息,这些信息与键盘记录其搜集的信息结合起来,可能使得犯罪分子从事更加广泛的身份盗窃(identity theft)犯罪。罪犯搜集了一个人足够的信息,如他的生日、母亲出嫁前的姓名、社会安全码、银行账号、密码等,因此可以成功地模仿受害者,并得到新的实物文档,如替换驾驶执照、银行签账卡(bank debit card)、出生证明等。这些信息可能被卖给其他罪犯,从而从事更多犯罪活动。

利用恶意软件从事的另一种犯罪是窃取用户账户中的财产,该类恶意软件平时一直处在潜伏状态,直到用户正确地登录到他的网络银行账户中去,该软件立刻发起一次快速的交易,查看该账户有多少余额,并将所有的钱都转到罪犯的账户中,这笔钱接着连续转移很多个账户,以便警方在追踪现金流走向的时候需要花很多天甚至几个星期来获得查看账户的相关许可。这种犯罪通常设计很大的交易量,已经不能视为青少年的恶作剧了。

恶意软件不只会被有组织的犯罪团伙所使用,在工业生产中同样可以看到其身影。一个公司可能会向对手的工厂中安装一些恶意软件,当这些恶意软件检测到没有管理员处于登录状态时,便会运行并干扰正常的生产过程,降低产品的质量,以此来给竞争对手制造麻烦。而在其他情况下这类恶意软件不会做任何事情,因此难以被检测到。

另一种恶意软件可能由野心勃勃的公司领导人所利用,这种病毒被投放在局域网中,并且会检测它是否在总裁的计算机中运行,如果是,则找到其中的电子报表,并随机交换两个单元格的内容。而总裁迟早会基于这份错误的报表做出不正确的决定,到时等待他的就是被炒鱿鱼的下场,成为一个无名之辈。

一些人无论走到哪里肩膀上都会有一个芯片(请不要与肩膀上的RFID芯片弄混)。他们对社会充满了或真实或想象中的怨恨,想要进行报复。此时他们可能会选择恶意软件。很多现代计算机将BIOS保存在闪存中,闪存可以在程序的控制下被重写(以便生产者可以方便地修正其错误)。恶意软件向闪存中随机地写入垃圾数据,使得电脑无法启动。如果闪存在电脑插槽中,那么修复这个问题需要将电脑打开,并且换一个新的闪存;如果闪存被焊接在母板上,可能整块母板都可能作废,不得不买一块新的母板。

我们不打算继续深入地讨论这个问题,读者到这里已经了解关于恶意软件的基本情况,如果想了解更多内容,请在搜索引擎中输入“恶意软件”。

很多人会问:“为什么恶意软件会如此容易地传播开来?”产生这种情况的原因有很多。其中之一是世界上90%的计算机运行的是单一版本的操作系统(Windows),使得它成为一个非常容易被攻击的目标。假设每台计算机都有10个操作系统,其中每个操作系统占有市场的10%,那么传播恶意代码就会变得加倍的困难。这就好比在生物世界中,物种多样化可以有效防止生物灭绝。

第二个原因是,微软在很早以前就强调其Windows操作系统对于没有计算机专业知识的人而言是简单易用的。例如Windows允许设置在没有密码的情况下登录,而UNIX从诞生之初就始终要求登录密码(尽管随着Linux不断试图向Windows靠近,这种传统正在逐步地淡化),操作系统易用性是微软一贯坚持的市场策略,因此他们在安全性与易用性之间不断进行着权衡。如果读者认为安全性更加重要,那么请先停止阅读,在用你的手机打电话之前先为它注册一个PIN码——几乎所有的手机都有此功能。如果你不知道如何去做,那么请从生产商的网站下载用户手册。

在下面的几节中我们将会看到恶意软件更为一般化的形式,读者将会看到这些软件是如何组织并传播的。之后我们会提供对恶意软件的一些防御方法。

9.7.1 特洛伊木马

编写恶意代码是第一步,你可以在你的卧室里完成这件事情。然而让数以百万计的人将你的程序安装到他们的电脑中则是完全不同的另一件事。我们的软件编写者Mal该如何做呢?一般的方法是编写一些有用的程序,并将恶意代码嵌入到其中。游戏、音乐播放器、色情书刊阅览器等都是比较好的选择。人们会自愿地下载并安装这些应用程序。作为安装免费软件的代价,他们也同时安装了恶意软件。这种方式叫做木马攻击(Torjan horse attack),引自希腊荷马所做《奥德赛》中装满了希腊士兵的木马。在计算机安全世界中,它指人们自愿下载的软件中所隐藏的恶意软件。

当用户下载的程序运行时,它调用函数将恶意代码写入磁盘成为可执行程序并启动该程序。恶意代码接下来便可以进行任何预先设计好的破坏活动,如删除、修改或加密文件。它还可以搜索信用卡号、密码和其他有用的信息,并且通过互联网发送给Mal。该恶意代码很有可能连接到某些IP端口上以监听远程命令,将该计算机变成僵尸机器,随时准备发送垃圾邮件或完成攻击者的指示。通常情况下,恶意代码还包括一些指令,使得它在计算机每次重新启动的时候自动启动,这一点所有的操作系统都可以做到。

木马攻击的美妙之处在于,木马的拥有者不必自己费尽心机侵入到受害者的计算机中,因为木马是由受害者自己安装的。

还有许多其他方法引诱受害人执行特洛伊木马程序。如,许多UNIX用户都有一个环境变量$PATH,这是一个控制查找哪些目录的命令。在shell程序中键入


echo $PATH


就可以查看。

例如,用户ast在系统上设置的环境变量可能会包括以下目录:


:/usr/ast/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/ucb:/usr/man\

:/usr/java/bin:/usr/java/lib:/usr/local/man:/usr/openwin/man


其他用户可能设置不同的查找路径。当用户在shell中键入


prog


后,shell会查看在目录/usr/ast/bin/prog下是否有程序。如果有就执行,如果没有,shell会尝试查找/usr/local/bin/prog、/usr/bin/prog、/bin/prog,直到查遍所有10个目录为止。假定这些目录中有一个目录未被保护,骇客即可以在该目录下放一个程序。如果在整个目录列表中,该程序是第一次出现,就会被运行,从而特洛伊木马也被执行。

大多数常用的程序都在/bin或/usr/bin中,因此在/usr/bin/X11/ls中放一个木马对一般的程序而言不会起作用。因为真的版本会先被找到。但是假设骇客在/usr/bin/X11中插入了la,如果用户误键入la而不是ls(列目录命令),那么特洛伊木马程序就会运行并执行其功能,随后显示la并不存在的正确信息以迷惑用户。通过在复杂的目录系统中插入特洛伊木马程序并用人们易拼错的单词作为名字,用户迟早会有机会误操作并激活特洛伊木马。有些人可能会是超级用户(超级用户也会误操作),于是特洛伊木马会有机会把/bin/ls替换成含有特洛伊木马的程序,这样就能在任何时候被激活。

Mal,一个恶意的但合法的用户,也可能为超级用户放置陷阱。他用含有特洛伊木马程序的ls命令更换了原有的版本,然后假装做一些秘密的操作以引起超级用户的注意,如同时打开100个计算约束进程。当超级用户键入下列命令来查看Mal的目录时机会就来了:


cd/home/mal

ls-l


既然某些shell程序在通过$PATH工作之前会首先确定当前所在的目录,那么超级用户可能会刚刚激活Mal放置的特洛伊木马。特洛伊木马可以把/usr/mal/bin/sh的SETUID设为root。接着它执行两个操作:用chown把/usr/mal/bin/sh的owner改为root,,然后用chmod设置SETUID位。现在Mal仅仅通过运行shell就可以成为超级用户了。

如果Mal发现自己缺钱,他可能会使用下面的特洛伊木马来找钱花。第一个方法是,特洛伊木马程序安装诸如Quicken之类的软件检查受害人是否有银行联机程序,如果有就直接把受害人账户里的钱转到一个用于存钱的虚拟账户(特别是国外账户)里。

第二个方法是,特洛伊木马首先关闭modem的声音,然后拨打900号码(支付号码)到偏远国家,如摩尔多瓦(前苏联的一部分)。如果特洛伊木马运行时用户在线,那么摩尔多瓦的900号码就成为该用户的Internet接入提供者(非常昂贵),这样用户就不会发觉并在网上待上好几个小时。上述两种方法都不仅仅是假设:它们都曾发生并被Denning(1999)报道过。关于后一种方法,曾经有800 000分钟连接到摩尔多瓦,直到美国联邦交易局断开连接并起诉位于长岛的三个人。他们最后同意归还38 000个受害者的274万美元。