计算机病毒

<image>

电脑病毒是一种恶意软件，当执行时，会通过修改其他计算机程序并将自己的代码插入这些程式中来复制自身。如果这种复制成功，受影响的区域就被称为“感染”了电脑病毒，这是从生物病毒中衍生出来的隐喻。

电脑病毒通常需要一个宿主程式。病毒会将自己的代码写入宿主程式。当程式运行时，先执行写入的病毒程式，导致感染和损害。相比之下，电脑蠕虫不需要宿主程式，因为它是一个独立的程式或代码片段。因此，它不受宿主程式的限制，可以独立运行并主动发动攻击。

病毒作者使用社交工程欺骗和详细了解安全漏洞，最初感染系统并传播病毒。病毒使用复杂的反检测/隐蔽策略来逃避防病毒软件。创建病毒的动机可以包括寻求利润（例如，使用勒索软件），传达政治信息的渴望，个人娱乐，展示软件中存在漏洞，进行破坏和阻断服务，或仅仅是因为他们希望探讨网络安全问题、人工生命和进化算法等问题。

电脑病毒每年造成数十亿美元的经济损失。作为回应，一个防病毒软件产业已经出现，为各种操作系统的使用者提供销售或免费分发的病毒防护。

## 病毒作者

有不少制作病毒的黑客被逮捕及起诉，判决的轻重各国皆不同，如罗马尼亚西欧班尼花费15分钟写的MSBlast.F变种大约只感染了1,000台电脑，按罗马尼亚的法律他就有可能最高会被判15年有期徒刑。

1998年台湾病毒作者陈盈豪写的CIH病毒据猜测造成全球600万台电脑瘫痪，但他因为在被逮捕后无人起诉而免于法律制裁，在2001年有人以CIH受害者的身份起诉陈盈豪，才使他再次被逮捕，按照台湾当时的法律，他被判损毁罪，面临最高3年以下的有期徒刑。

中国大陆的木马程序“证券大盗”作者张勇因使用其木马程序截获股民账户密码，盗卖股票价值1, 141.6万元人民币，非法获利38.6万元人民币，最终的判决结果是无期徒刑。

一公司的分析报告指出：目前全世界现有200万有能力写较成熟电脑病毒的程序员。

## 历史

### 学术工作

<image>

第一份关于计算机病毒理论的学术工作（虽然"病毒"一词在当时并未使用）于 1949年由约翰·冯·诺伊曼完成。当时是以"Theory and Organization of Complicated Automata"为题的一场在伊利诺伊大学的演讲，稍后改以"Theory of self-reproducing automata"为题出版。冯·诺伊曼在他的论文中描述一个计算机程式如何复制其自身。

1972年，Veith Risak根据冯·诺伊曼在自我复制上的工作为基础发表"Self-reproducing automata with minimal information exchange"一文。该文描述一个以西门子4004/35计算机系统为目标，用组合语言编写，具有完整功能的计算机病毒。

1980年，Jürgen Kraus于多特蒙德大学撰写他的学位论文"Self-reproduction of programs"。在他的论文中，他假设计算机程式可以表现出如同病毒般的行为。

“病毒”一词最早用来表达此意是在弗雷德·科恩（Fred Cohen）1984年的论文《电脑病毒实验》。

### 科幻小说

而病毒一词广为人知是得力于科幻小说。一部是1970年代中期大卫·杰洛德（David Gerrold）的《When H.A.R.L.I.E. was One》，描述了一个叫“病毒”的程序和与之对战的叫“抗体”的程序；另一部是约翰·布鲁勒尔（John Brunner）1975年的小说《震荡波骑士（ShakewaveRider）》，描述了一个叫做“磁带蠕虫”、在网络上删除数据的程序。

### 病毒程式

1960年代初，美国麻省理工学院的一些青年研究人员，在做完工作后，利用业余时间玩一种他们自己创造的计算机游戏。做法是某个人编制一段小程序，然后输入到计算机中运行，并销毁对方的游戏程序。而这也可能就是计算机病毒的雏形。

## 感染策略

为了能够复制其自身，病毒必须能够执行代码并能够对内存执行写操作。基于这个原因，许多病毒都是将自己附着在合法的执行档上。如果使用者企图执行该执行档，那么病毒就有机会运行。病毒可以根据执行时所表现出来的行为分成两类。非常驻型病毒会立即寻找其它宿主并伺机加以感染，之后再将控制权交给被感染的应用程序。常驻型病毒被执行时并不会寻找其它宿主。相反的，一个常驻型病毒会将自己载入内存并将控制权交给宿主。该病毒于背景中执行并伺机感染其它目标。

### 非常驻型病毒

非常驻型病毒可以被想成具有搜寻模组和复制模组的程式。搜寻模组负责寻找可被感染的档案，一旦搜寻到该档案，搜寻模组就会启动复制模组进行感染。

### 常驻型病毒

常驻型病毒包含复制模组，其角色类似于非常驻型病毒中的复制模组。复制模组在常驻型病毒中不会被搜寻模组调用。病毒在被执行时会将复制模组载入内存，并确保当操作系统执行特定动作时，该复制模组会被调用。例如，复制模组会在操作系统执行其它档案时被调用。在这个例子中，所有可以被执行的档案均会被感染。常驻型病毒有时会被区分成快速感染者和慢速感染者。快速感染者会试图感染尽可能多的档案。例如，一个快速感染者可以感染所有被存取到的档案。这会对防毒软件造成特别的问题。当执行全系统防护时，防毒软件需要扫描所有可能会被感染的档案。如果防毒软件没有察觉到内存中有快速感染者，快速感染者可以借此搭便车，利用防毒软件扫描档案的同时进行感染。快速感染者依赖其快速感染的能力。但这同时会使得快速感染者容易被侦测到，这是因为其行为会使得系统效能降低，进而增加被防毒软件侦测到的风险。相反的，慢速感染者被设计成偶尔才对目标进行感染，如此一来就可避免被侦测到的机会。例如，有些慢速感染者只有在其它档案被拷贝时才会进行感染。但是慢速感染者此种试图避免被侦测到的作法似乎并不成功。

## 传播途径和宿主

由于操作系统桌面环境90%的市场都是使用微软Windows系列产品。

所以病毒作者纷纷把病毒攻击对象选为Windows。制作病毒者首先应该确定要攻击的操作系统版本有何漏洞，这才是他所写的病毒能够利用的关键。Windows当时并没有有效的安全与防御功能，且用户常以管理员权限运行未经安全检查的软件，这也为Windows下病毒的泛滥提供了温床。Linux、Mac OS等操作系统，因使用的人群比较少，病毒一般不容易扩散。大多病毒发布作者的目的有多种，包括恶作剧、想搞破坏、报复及想出名与对研究病毒有特殊嗜好。

病毒主要通过网路浏览以及下载，电子邮件以及可移动磁盘等途径迅速传播。

### 可移动驱动器

市面上大多的可移动驱动器都是属于可读写模式，因此很容易写入Autorun.inf档案以及许多恶意程式。受到感染的USB随身碟病毒插入电脑里后，病毒会躲藏在操作系统中的处理程序，侦测电脑上的一举一动。当使用者将其他干净的USB随身碟插入受感染的电脑里，病毒会复制到干净的USB随身碟里，然后一传十、十传百。公用电脑的使用亦导致USB病毒快速散播。

解决方法：可移动驱动器插入电脑前，先将防写功能打开；使用者自行删除autorun.inf档案；使用防毒软件来修复受感染的电脑；开启虚拟机检测USB的安全性。

中毒后主要症状：防毒软件关闭；经常跑出看不懂的视窗；瘫痪电脑运作。

## 躲避侦测的方法

### 隐蔽

病毒会借由拦截防毒软件对操作系统的呼叫来欺骗防毒软件。当防毒软件要求操作系统读取档案时，病毒可以拦截并处理此项要求，而非交给操作系统执行该要求。病毒可以返回一个未感染的档案给防毒软件，使得防毒软件认为该档案是干净未被感染的。如此一来，病毒可以将自己隐藏起来。现在的防毒软件使用各种技术来反击这种手段。要反击病毒匿踪，唯一完全可靠的方法是从一个已知是干净的媒介开始启动。

#### 自修改

大部分防毒软件透过所谓的病毒特征码来侦知一个档案是否有被感染。特定病毒，或是同属于一个家族的病毒会具有特定可辨识的特征。如果防毒软件侦测到档案具有病毒特征码，它便会通知使用者该档案已被感染。使用者可以删除或是修复被感染的档案。某些病毒会利用一些技巧使得透过病毒特征码进行侦测较为困难。这些病毒会在每一次感染时修改其自身的代码。换言之，每个被感染的档案包含的是病毒的变种。只能重灌或下载防毒软件.

#### 随机加密

胡搞更甚者是对病毒本身进行简单的加密。这种情况下，病毒本身会包含数个解密模组和一份被加密的病毒拷贝。如果每一次的感染，病毒都用不同的密钥加密，那病毒中唯一相同的部分就只有解密模组，常会附于档案尾端。防毒软件无法直接透过病毒特征码侦测病毒，但它仍可以侦知存在解密模组，这就可以间接侦测病毒。因为这部分是存放在宿主上面的对称式密钥，防毒软件可以利用密钥将病毒解密，但这并不必要。因为自修改代码很少见，防毒软件可以先将这类档案标记成可疑。

一个古老但简洁的加密技术将病毒中每一个字节和一个常数做逻辑异或，欲将病毒解密只需简单的逻辑异或。一个程式若可修改自身程式码就十分可疑，因此许多病毒定义中，将加解密部分视为病毒特征码的一部分。

#### 多态

多态是第一个对防毒软件造成严重威胁的技术。就像一般被加密的病毒，一个多态病毒以一个加密的自身拷贝感染档案，并由其解密模组加以解码。但是其加密模组在每一次的感染中也会有所修改。因此，一个仔细设计的多态病毒在每一次感染中没有一个部分是相同的。这使得使用病毒特征码进行侦测变得困难。防毒软件必须在一模拟器上对该病毒加以解密进而侦知该病毒，或是利用加密病毒其统计样板上的分析。要使得多态代码成为可能，病毒必须在其加密处有一个多态引擎（又称突变引擎）。关于多态引擎的技术细节请参阅Polymorphic code。

有些多态病毒会限制其突变的速率。例如，一个病毒可能随着时间只有一小部分突变。或是病毒侦知宿主已被同一个病毒感染，它可以停止自己的突变。如此慢速的突变其优点在于，防毒专家很难得到该病毒具有代表性的样本。因为在一轮感染中，诱饵档案只会包含相同或是近似的病毒样本。这会使得防毒软件侦测结果变得不可靠，而有些病毒会躲过其侦测。

#### 变形

为了避免被防毒软件模拟而被侦知，有些病毒在每一次的感染都完全将其自身改写。利用此种技术的病毒被称为可变形的。要达到可变形，一个变形引擎是必需的。一个变形病毒通常非常庞大且复杂。举例来说，Simile病毒包含14000行汇编语言，其中90%都是变形引擎。

## 命名

以下表格所示是国际上对病毒命名惯用的前缀释义，DOS下的病毒一般无前缀：

前缀｜含义

WM｜Word6.0、Word95宏病毒

WM97｜Word97宏病毒

XM｜Excel5.0、Excel95宏病毒

X97M｜Excel5.0和Excel97版本下发作

XF｜Excel程序病毒

AM｜Access95宏病毒

AM97M｜Access97宏病毒

W95｜Windows95、98病毒

Win｜Windows3.x病毒

W32｜32位病毒，感染所有32位Windows系统

WINT｜32位Windows病毒，只感染Windows NT

Trojan/Troj｜特洛伊木马

VBS｜VBScript程序语言编写的病毒

VSM｜感染Visio VBA（Visual Basic for Applications）宏或script的宏或script病毒

JS｜JScript程式语言编写的病毒

PE｜32位寻址的Windows病毒

OSX｜OS X的病毒

OSXL｜OS X Lion或者更新版本的病毒

Virus｜其他病毒(如感染型、开机型、终结型等)

中间部分指的是病毒的英文名，而后缀一般是变种代号。

## 特征

在计算机科学里，电脑病毒是类似生物病毒一样的程序，它会复制自己并传播到其他宿主，并对宿主造成损害。宿主也是程序，通常是操作系统，从而进一步传染到其他程序、其他的电脑。电脑病毒在传播期间一般会隐蔽自己，由特定的条件触发，并开始产生破坏。

电脑病毒具有的不良特征有传播性、隐蔽性、感染性、潜伏性、可激发性、表现性或破坏性，通常表现两种以上所述的特征就可以认定该程序是病毒。

计算机病毒的生命周期为开发期→传染期→潜伏期→发作期→发现期→消化期→消亡期。

## 主要特征详解

### 传播性

病毒一般会自动利用电子邮件传播，利用对象为某个漏洞。将病毒自动复制并群发给存储的通讯录名单成员。邮件标题较为吸引人点击，大多利用社会工程学如“我爱你”这样家人朋友之间亲密的话语，以降低人的警戒性。如果病毒制作者再应用脚本漏洞，将病毒直接嵌入邮件中，那么用户一点邮件标题打开邮件就会中病毒。

### 隐蔽性

一般的病毒仅在数KB左右，这样除了传播快速之外，隐蔽性也极强。部分病毒使用“无进程”技术或插入到某个系统必要的关键进程当中，所以在任务管理器中找不到它的单独运行进程。而病毒自身一旦运行后，就会自己修改自己的文件名并隐藏在某个用户不常去的系统文件夹中，这样的文件夹通常有上千个系统文件，如果凭手工查找很难找到病毒。而病毒在运行前的伪装技术也不得不值得我们关注，将病毒和一个吸引人的文件绑扎合并成一个文件，那么运行正常吸引他的文件时，病毒也在我们的操作系统中悄悄的运行了。

### 感染性

某些病毒具有感染性，比如感染中毒用户计算机上的可执行文件，如exe、bat、scr、com格式，通过这种方法达到自我复制，对自己生存保护的目的。通常也可以利用网络共享的漏洞，复制并传播给邻近的计算机用户群，使邻里通过路由器上网的计算机或网吧的计算机的多台计算机的程序全部受到感染。

### 电脑病毒潜伏性

部分病毒有一定的“潜伏期”，在特定的日子，如某个节日或者星期几按时爆发。如1999年破坏№BIOS的CIH病毒就在每年的4月26日爆发。如同生物病毒一样，这使电脑病毒可以在爆发之前，以最大幅度散播开去。

### 可激发性

根据病毒作者的“需求”，设置触发病毒攻击的“玄机”。如CIH病毒的制作者陈盈豪曾打算设计的病毒，就是“精心”为简体中文Windows系统所设计的。病毒运行后会主动检测中毒者操作系统的语言，如果发现操作系统语言为简体中文，病毒就会自动对计算机发起攻击，而语言不是简体中文版本的Windows，那么你即使运行了病毒，病毒也不会对你的计算机发起攻击或者破坏。

### 表现性

病毒运行后，如果按照作者的设计，会有一定的表现特征：如CPU占用率100%，在用户无任何操作下读写硬盘或其他磁盘数据，蓝屏死机，鼠标右键无法使用等。但这样明显的表现特征，反倒帮助被感染病毒者发现自己已经感染病毒，并对清除病毒很有帮助，隐蔽性就不存在了。

## 分类

病毒类型根据中国国家计算机病毒应急处理中心发表的报告统计，占近45%的病毒是木马程序，蠕虫占病毒总数的25%以上，占15%以上的是脚本病毒，其余的病毒类型分别是：文件型病毒、破坏性程序和宏病毒。

### 木马/僵尸网络

- 有些也叫作远程控制软件，如果木马能连通的话，那么可以说控制者已经得到了远程计算机的全部操作控制权限，操作远程计算机与操作自己计算机基本没什么大的区别，这类程序可以监视、摄录被控用户的摄像头与截取密码等，以及进行用户可进行的几乎所有操作（硬件拔插、系统未启动或未联网时无法控制）。而Windows NT以后的版本自带的“远程桌面连接”，或其他一些正规远控软件，如若未进行良好的安全设置或被不良用户篡改利用，也可能起到类似作用。但他们通常不会被称作病毒或木马软件，判断依据主要取决于软件的设计目的和是否明确告知了计算机所有者。
- 用户一旦感染了特洛伊木马，就会成为“僵尸”（或常被称为“肉鸡”），成为任黑客手中摆布的“机器人”。通常黑客或脚本小子（script kids）可以利用数以万计的“僵尸”发送大量伪造包或者是垃圾数据包对预定目标进行拒绝服务攻击，造成被攻击目标瘫痪。

### 有害软件

- 蠕虫病毒漏洞利用类，也是我们最熟知的病毒，通常在全世界范围内大规模爆发的就是它了。如针对旧版本未打补丁的Windows XP的冲击波病毒和震荡波病毒。有时与僵尸网络配合，主要使用缓存溢出技术。
- 间谍软件和流氓软件，是部分不良网络公司出品的一种收集用户浏览网页习惯而制订自己广告投放策略的软件。这种软件本身对计算机的危害性不是很大，只是中毒者隐私遭到泄露被收集走和一旦安装上它就无法正常删除卸载了。比如对Internet Explorer的广告软件会自动修改并锁定用户缺省主页以及加载广告公司的工具条。
- 恶作剧的破坏性软件，如破坏性很大的“格盘炸弹”，运行程序后自动格式化硬盘，原本只为“愚人”目的，但这种恶意程序运行后就会对用户重要数据造成很大的损失。与此相同的还有文件感染器（File infector）以及在DOS下的根扇区病毒。
- 档案型病毒通常寄居于可执行档（副档名为.EXE或.COM的档案），当被感染的档案被执行，病毒便开始破坏电脑，这种病毒都是伪装成游戏，成人影片软件等钓鱼的形态出现引发使用者点击，病毒便明显地或是偷偷的安装上去。

### 脚本病毒

- 宏病毒的感染对象为Microsoft开发的办公系列软件，也有专门针对其他软件的变种。Microsoft Word，Excel这些办公软件本身支持运行可进行某些文件操作的命令，所以也被Office文档中含有恶意的宏病毒所利用。openoffice.org对Microsoft的VBS宏仅进行编辑支持而不运行，所以含有宏病毒的MS Office文档在openoffice.org下打开后病毒无法运行。

## 免杀技术以及新特征

免杀是指：对病毒的处理，使之躲过防毒软件查杀的一种技术。通常病毒刚从病毒作者手中传播出去前，本身就是免杀的，甚至可以说“病毒比防毒软件还新，所以防毒软件根本无法识别它是病毒”，但由于传播后部分用户中毒向防毒软件公司举报的原因，就会引起安全公司的注意并将之特征码收录到自己的病毒库当中，病毒就会被防毒软件所识别。

病毒作者可以通过对病毒进行再次保护如使用汇编加花指令或者给文件加壳就可以轻易躲过防毒软件的病毒特征码库而免于被防毒软件查杀。

美国的Norton Antivirus、McAfee、PC-cillin，罗马尼亚的Bitdefender，俄罗斯的Kaspersky Anti-Virus，斯洛伐克的NOD32等产品在国际上口碑较好，但杀毒、查壳能力都有限，目前病毒库总数量也都仅在数十万个左右。

自我更新性是近年来病毒的又一新特征。病毒可以借助于网络进行变种更新，得到最新的免杀版本的病毒并继续在用户感染的计算机上运行，比如熊猫烧香病毒的作者就建立了“病毒升级服务器”，在最勤时一天要对病毒升级8次，比有些杀毒软件病毒库的更新速度还快，因为开发者对代码编辑十分勤奋，所以就造成了杀毒软件无法识别病毒。

除了自身免杀自我更新之外，很多病毒还具有了对抗它的“天敌”杀毒软件和防火墙产品反病毒软件的全新特征，只要病毒运行后，病毒会自动破坏中毒者计算机上安装的杀毒软件和防火墙产品，如病毒自身驱动级Rootkit保护强制检测并结束杀毒软件进程，可以过主流杀毒软件“主动防御”和穿透软、硬件还原的机器狗，自动修改系统时间导致一些杀毒软件厂商的正版认证作废以致杀毒软件作废，从而病毒生存能力更加强大。

免杀技术的泛滥使得同一种原型病毒透过插件，理论上可以衍生出近乎无穷无尽的变种，给依赖于特征码技术检测的杀毒软件带来很大困扰。近年来，国际反病毒行业普遍开展了各种前瞻性技术研究，试图扭转过分依赖特征码所产生的不利局面。目前比较有代表性产品的是基于虚拟机技术的启发式扫描软件，代表厂商NOD32，Dr.Web，和基于行为分析技术的主动防御软件，代表厂商中国的微点主动防御软件等。

## 防范与治疗

修补操作系统以及其捆绑的软件的漏洞：安装系统以及其捆绑的软件如Internet Explorer、Windows Media Player的漏洞安全补丁，以操作系统Windows为例Windows NT以及以下版本可以在 Microsoft Update更新系统，Windows 2000SP2以上，Windows XP以及Windows 2003等版本可以用系统的“自动更新”程序下载补丁进行安装。设置一个比较强的系统密码，关闭系统默认网络共享，防止局域网入侵或弱口令蠕虫传播。定期检查系统配置实用程序启动选项卡情况，并对不明的Windows服务予以停止。

安装并及时更新杀毒软件与防火墙产品：保持最新病毒库以便能够查出最新的病毒，如一些反病毒软件的升级服务器每小时就有新病毒库包可供用户更新。而在防火墙的使用中应注意到禁止来路不明的软件访问网络。由于免杀以及进程注入等原因，有个别病毒很容易穿过杀毒以及防火墙的双重防守，遇到这样的情况就要注意到使用特殊防火墙来防止进程注入，以及经常检查启动项、服务。一些特殊防火墙可以“主动防御”以及注册表实时监控，每次不良程序针对计算机的恶意操作都可以实施拦截阻断。

不要点来路不明连接以及运行不明程序：来路不明的连接，很可能是蠕虫病毒自动通过电子邮件或即时通讯软件发过来的，如QQ病毒之一的QQ尾巴，大多这样信息中所带连接指向都是些利用IE浏览器漏洞的网站，用户访问这些网站后不用下载直接就可能会中更多的病毒。另外不要运行来路不明的程序，如一些“性诱惑”的文件名骗人吸引人去点击，点击后病毒就在系统中运行了。

## 外部链接

- 中国国家计算机病毒应急处理中心发表的报告
- （PDF）我国计算机病毒的特点和发展趋势
- （DOC） 2007年计算机病毒疫情调查技术分析报告
- 何谓电脑病毒？
- IT自救术－病毒（和计算机程序）的运作原理