Linux病毒研究与分析

来源:互联网 发布:淘宝的客服电话是多少 编辑:程序博客网 时间:2024/05/01 04:23

 前言:

在我们日常生活中早就对windows中的病毒习惯了,对付windows中的病毒。我们有很多办法:杀毒软件、专杀工具等,但是这些东西往往主要集中在windows这一领域。

随着网络的发展,很多企业痘使用了Linux操作系统,原因主要是Linux的安全性比较高,但是Linux也会感染病毒。本文会对Linux病毒原理和如何防范做初步的介绍。

一、 Linux病毒史

1996年:破解组织VLAD发布了Linux第一个病毒Staog,它能利用内核的一个漏洞感染可执行文件,随着该漏洞迅速被修复,这个病毒也就随即消失了;

1997年:Bliss病毒感染可执行文件,阻止其运行,以root权限浏览Bliss病毒会导致系统被感染;

1998年:空白的一年;

1999年:没有重要的Linux病毒爆发,只有Windows上流传一个愚人节笑话,名叫Tuxissa的病毒会在Win机器上悄悄安装Linux;

2000年:一个基本无害的病毒Virus.Linux.Winter.341会把电脑名字改为Wintermute,但不会控制电脑;

2001年:对于Linux来说这是不平常的一年,首先是一个并无多大危害的ZipWorm,它只会攻击zip文件;之后是一个同样没有太大危害的病毒Satyr,它仅针对ELF文件;还有一个名为“拉面”(Ramen)的病毒,它会将Index.html文件替换为自己的版本;此外Linux在当年还遭遇了Cheese等病毒,不过这些病毒的威胁性都不大。

2002年:存在于Apache中的一个漏洞导致的Mighty蠕虫病毒的出现和传播,该病毒会利用Apache SSL接口中的一个漏洞感染计算机,成功后它会创建一个秘密的链接,连接至IRC服务器,并等待指令。

2003年:同样是一个基本无害的病毒Rike,它会隐藏在ELF文件中,然后扩大该文件所需要的空间,并且在空白空间内写入RIKE;

2004年:这一年出现的病毒与上一年基本没有什么区别,名为Binom,它会隐藏在ELF文件中,然后扩大该文件所需要的空间,并且在空白空间内写入[ Cyneox/DCA字符串;

2005年:Lupper蠕虫病毒开始在Web服务器间传播,它会攻击一个寻找特定URL的Web服务器,然而利用PHP/CGI脚本中存在的一个漏洞进行攻击;

2006年:2002年的病毒Mighty的变种Kaiten出现,其攻击方法与Mighty相同;

2007年:BadBunny病毒利用OpenOffice漏洞感染Windows、Mac和Linux;

2008年:空白的一年;

2009年:GNOME屏保网站发现名为WaterFall的屏保会在安装后开启一个后门,控制电脑发动DDOS攻击,攻击的网站是MMOwned.com;

2010年:koobface病毒会收集FTP和社交网站的登录信息和密码,并利用社交网站向朋友发送病毒文件。

从上面的linux病毒史来看,linux系统下的病毒掰着手指头都可以数清楚的,说明linux系统是一个非常安全的系统,当然是相对于windows系统的,用惯了windows系统的人往往不习惯为什么linux系统不安装杀毒软件,看了上面的linux病毒史之后就明白了,因为没必要。

二、 病毒攻击类型

要想有效的防范Linux下的病毒,就必须对Linux下病毒的基本原理和发作时的症状进行分析,灵活的采用各种方法对病毒进行限制、清除和数据恢复。由于Linux和Windows的文件存储形式不同,所以杀毒的原理和方法也不同,根据Linux病毒史,Linux下的病毒一般分为以下几类:

1、感染ELF格式文件的病毒

原理:这类病毒以ELF格式的文件为主要感染目标,通过汇编或者C可以写出能感染ELF文件的病毒。

流程:Lindose病毒就 是一能感染ELF文件的病毒,当它发现一个ELF文件时,将检查被感染的机器类型是否为Intel80386。如果是,则查找该文件中是否有一部分的大小大于2784字节(或十六进制AEO),如果有,病毒就会用自身代码覆盖它并添加宿主文件的相应部分的代码,同时将宿主文件的入口点指向病毒代码部分。

防范:由于Linux下有良好的权限控制机制,所以这类病毒要有足够的权限才能进行传播。在防范此类病毒时,我们要注意管理好自己Linux系统中的各种文件的权限,特别要注意的是在做日常操作时不要使用root账号,最好不要以root身份运行来历不明的可执行文 件,以免无意中触发了含病毒的文件从而传染到整个系统中。

2、脚本病毒

原理:脚本病毒是指使用shell等脚本语言编写的病毒。此类病毒编写较为简单,不需要具有很高深的知识,很容易就实现对系统进行破坏,比如删除文件、破坏系统正常运行、甚至下载安装木马等。

流程:一般脚本病毒都是其他病毒的先锋。计算机先中了脚本病毒后,便会通过脚本病毒种其他木马和病毒,这样计算机会更危险。在实际中,一般病毒和脚本分开进入用户系统,因为一般杀毒软件只能检测出病毒,却不能检测出脚本。只要用户不小心运行了脚本,脚本就会找到病毒,将其运行感染系统。

防范:防范此类病毒也是要注意不要随便运行来源不明的脚本,同时,要严格控制对root权限的使用。

3、蠕虫病毒

原理:利用系统的漏洞进行传播和爆发。

流程:Linux下的蠕虫病毒与Windows下的蠕虫病毒类似,可以独立运行,并将自身传播到另外的计算机上去。利用系统漏洞进行传播,让用户毫无察觉,然后在特定的情况下突然爆发,让用户措手不及,对计算机安全危害巨大。

在Linux平台下的蠕虫病毒通常利用一些Linux系统和服务的漏洞来进行传播,比如,Ramen病毒就是利用了Linux某些版本(Redhat6.2和7.0)的rpc.statd和wu-ftp这两个安全漏洞进行传播的。

防范:防范此类病毒要堵住蠕虫病毒发作的源头,从已经出现的几个Linux病毒爆发事件来看,它们都是利用了 Linux已经公布了的几个安全漏洞,如果用户及时采取了对应的安全措施就不会受到它们的影响。不过遗憾的是,许多Linux的管理员并没有紧密跟踪与自 己系统和服务相关的最新信息,所以还是给病毒有可乘之机。

用户要做好本机的安全工作,特别要关心Linux的安全漏洞信息,一旦有新的Linux安全漏洞出现,就要及时采取安全措施。此外,还可以配合防火墙规则来限制蠕虫病毒的传播。

4、后门程序

原理:后门程序一般指那些可以绕过安全性控制而获取对程序或系统访问权的程序,也可以称为木马。它不一定会自我复制,它的存在主要是收集和探测计算机中的信息,或者给黑客提供一个可以进入系统的方法。

流程:Linux后门利用系统服务,甚至可装载内核模块(LKM)等技术来实现,许多Linux平台下的后门技术与入侵技术相结合,非常隐蔽,难以清除。

防范:防范此类病毒可以借助一些软件来进行,有一些软件可以帮助用户找出系统中的各种后门程序,但是效果有限。

5、其它病毒

在Linux平台除了面对针对Linux的病毒之外,还要注意到许多Windows病毒会存在于Linux的文件系统中,当然,这类windows病毒是不会在Linux中发作的,但它们有机会传递到Windows系统中。

比如,Linux的Samba服务器可以作为整个网络中的文件服务器,当有用户将含有Windows病毒的文件上传 到Samba服务器后,Samba服务器就成为一个病毒携带者,虽然它不会感染这种Windows病毒,但是其它访问过Samba服务的人就有可能从中感 染到病毒。

防范:为了整体的安全,在Linux系统中也需要能查找和杀除Windows病毒。这就需要使用一些专门的反病毒软件。

三、 Linux病毒少的原因

由以上Linux的病毒史我们不难发现,Linux下的病毒相比Windows而言就是九牛一毛,这是为什么呢?

1、文件执行权限

对一个二进制的 Linux 病毒,要感染可执行文件,这些可执行文件对启动这个病毒的用户一定要是可写的。而实际情况通常并不是这样的。实际情况通常是,程序被 root 拥有,用户通过无特权的帐号运行。而且,越是没有经验的用户,他拥有可执行文件的可能性就越小。因此,越是不了解这种危险的用户的主目录越 不适合病毒繁殖。即使这个病毒成功地感染了这个用户拥有的一个程序,由于这个用户权限受限,它进一步传播的任务也会非常困难(当然,对于运行单用户系统的 Linux 新手,这个论证可能不适用。这样的用户可能会对 root 帐户比较粗心)。 

2、Linux系统本身的设计

Linux 网络程序构建地很保守,没有使现在Windows 病毒如此快速传播变的可能的高级宏工具。这并不是 Linux 的固有特征;它仅仅是两种用户基础的不同和这种不同导致的在这两种市场中的成功产品的不同的反映。通过观察这些问题学到的经验也会被用到将来的 Linux产品中。Linux的应用软件和系统软件几乎都是开源的。这对病毒有两方面的影响。首先,病毒很难藏身于开源的代码中间。其次,对仅有二进制的病毒,一次新的编译安装就截断了病毒一个主要的传播途径。虽然 Linux 发行商也提供大量的二进制软件包,但是用户大都是从发行商提供的可靠的软件仓库中下载这些软件包,大都具有 md5 验证机制,安全性极高。这些障碍每一个都是病毒成功传播的一个重要阻碍。然而当把他们放在一起考虑的时候,基本的问题才浮现出来。一个计算机病毒,像生物病毒一样,要想传播开来,其繁殖速度必须超过其死亡(被消灭)的速度。上面提到的障碍有效地降低了 Linux 病毒的繁殖速度。如果它的繁殖速度降到取代原来种群所需要的阈值之下,那么这个病毒的厄运从一开始就注定了——甚至在潜在受害人意识到它们之前。 

3、较全面的安全防范机制

访问控制矩阵是一个,Linuxer不厌其烦的输入密码再输入,有时也非常讨厌,但是很好的保证的系统缺少被恶意软件修改的机会,一个病毒最多在非常有限范围内实现增殖和内存消耗,但是无法危害整个系统。线程保护做得也不错,那种权限提升的空间被挤压。每个版本自带的过滤器,防火墙,很多版本是直接安装的,虽然不配置不会怎么好,但是好过没有。而且快速的升级和修补,使得系统被利用的漏洞非常难以见到,而软件的修补更加快速。

4、Linux内核代码开源

微软的内核代码是封闭的,按说应该更安全,但是有些时候偏偏比较奇怪,Linux开发的源码更好的可以把病毒隐患消除在内核的层面。Linux经常暴内核漏洞,这是正常现象,不是缺点,这是优点,那是好多都是无数人在想在做这件事,为的是更加安全,不必大惊小怪,他们总是想:“这样写的内核,可能有什么安全问题呢?”于是进行了修改,所以我们内核的升级和补丁不是被动的,而是很多时候主动的出现的,这种做法在Unix-like的系统中很常见,比如安全著称的OB就是通过这种检查方法从根本上减少安全问题,所以才有了问世6年时间无漏洞出现而10年时间只有2个轻微漏洞被发现的佳绩。也就是说Unix-like类的系统一旦补上一个补丁,就消除了无数条隐患。而windows思维的就相反,windows很少能够从内核级别打补丁,升级速度非常缓慢,所以很多补丁是治标的,不能治本,而且很多不是windows光补丁就能解决的,比如线程权限控制,不可能因为病毒的存在,windows的结构就因此改变了。

而Linux软件的开放性的另外一个好处是:他开源,他就接受大众的监督和统一管理,病毒代码很难藏身,而且现在Unix-like系统的软件大部分不是像windows那样随意下载传播,而是都有人维护和上传的,一旦发生问题,很快就能定位,找出病毒来源。

5、总结

我们没有看到一个真正的 Linux 病毒疯狂传播,原因就在于存在的Linux 病毒中没有一个能够在 Linux 提供的敌对的环境中茁壮成长。现在存在的 Linux 病毒仅仅是技术上的好奇;现实是没有能养得活的 Linux 病毒。当然,这并不意味着永远没有 Linux 病毒能够流行。然而它确实意味着,一个成功的 Linux 病毒要在不适合生存的 Linux 生态系统中存活下来,那么它就必须是精心制作并具有创新性的。

综上所述,Linux的安全机制使得单纯的使用病毒大多数情况下是无法达到大面积传播的效果,所以只有结合诸多黑客攻击手段与Linux系统漏洞(获取root权限等)等方式才能使得病毒肆无忌惮的进行传播破坏。

四、 病毒传染过程

1、计算机病毒的传染方式

所谓传染是指计算机病毒由一个载体传播到另一个载体,由一个系统进入另一个系统的过程。这种载体一般为磁盘或磁带,它是计算机病毒赖以生存和进行传染的媒介。但是,只有载体还不足以使病毒得到传播。促成病毒的传染还有一个先决条件,可分为两种情况,或者叫做两种方式。

其中一种情况是,用户在进行拷贝磁盘或文件时,把一个病毒由一个载体复制到另一个载体上。或者是通过网络上的信息传递,把一个病毒程序从一方传递到另一方。这种传染方式叫做计算机病毒的被动传染。

另外一种情况是,计算机病毒是以计算机系统的运行以及病毒程序处于激活状态为先决条件。在病毒处于激活的状态下,只要传染条件满足,病毒程序能主动地把病毒自身传染给另一个载体或另一个系统。这种传染方式叫做计算机病毒的主动传染。

2、计算机病毒的传染过程

对于病毒的被动传染而言,其传染过程是随着拷贝磁盘或文件工作的进行而进行的,而对于计算机病毒的主动传染而言,其传染过程是这样的:在系统运行时,病毒通过病毒载体即系统的外存储器进入系统的内存储器,常驻内存并在系统内存中监视系统的运行。在病毒引导模块将病毒传染模块驻留内存的过程中,通常还要修改系统中断向量入口地址(例如INT 13H或INT 21H),使该中断向量指向病毒程序传染模块。这样,一旦系统执行磁盘读写操作或系统功能调用,病毒传染模块就被激活,传染模块在判断传染条件满足的条件下,利用系统INT 13H读写磁盘中断把病毒自身传染给被读写的磁盘或被加载的程序,也就是实施病毒的传染,然后再转移到原中断服务程序执行原有的操作。

计算机病毒的传染方式基本可分为两大类,一是立即传染,即病毒在被执行到的瞬间,抢在宿主程序开始执行前, 立即感染磁盘上的其他程序,然后再执行宿主程序;二是驻留内存并伺机传染,内存中的病毒检查当前系统环境,在执行一个程序或D1R等操作时传染磁盘上的程序,驻留在系统内存中的病毒程序在宿主程序运行结束后, 仍可活动,直至关闭计算机。

五、 病毒防护

其实Linux下安全机制已是相当完善,但针对以上对病毒的总结,个人需要做到以下防护:

1、做好系统加固工作。

2、留心安全公告,及时修正漏洞。

3、日常操作不要使用root权限进行。

4、不要随便安装来历不明的各种设备驱动程序。

5、不要在重要的服务器上运行一些来历不明的可执行程序或脚本。

6、尽量安装防毒软件,并定期升级病毒代码库。

7、对于连接到Internet的Linux服务器,要定期检测Linux病毒。蠕虫和木马是否存在。8、对于提供文件服务的Linux服务器,最好部署一款可以同时查杀Windows和Linux病毒的软件。

9、对于提供邮件服务的Linux服务器,最好配合使用一个E-mail病毒扫描器。

10、对下载的包尽可能经常检查PGP或MD5值

11、从可信任的web站点下载程序

六、 杀毒工具

Linux系统本身并没有自带杀毒软件,因为它很少中病毒。随着Linux的发展,陆续出现了一些第三方的杀毒软件,但一般都是免费查毒,杀毒功能则是收费的。所以Linux在杀毒防毒方面相对较弱,因为没有很多很好的第三方杀毒软件给予支持。

1、AviraAntiVir Personal - FREE Antivirus

AntiVir Personal - FREE 的 Unix 版本支持32位 Linux / FreeBSD / OpenBSD / Solaris 操作系统,打包在一个45MB 大的 TAR.GZ 文件中,未提供 RPM/DEB 安装包。安装采用的是 Bash 脚本的方式,全英文,期间会提供关于实时病毒检测、邮件病毒提醒、更新代理服务器等配置向导,依照提示即可完成。尽管内置了实时病毒检测功能,但未包含 Dazuko 的源代码包,所以若要真正使用实时病毒检测功能,还需要另行下载Dazuko 源代码包并编译成内核模块。安装后依据要求还需要添加 "-b/usr/lib/AntiVir" 到 /etc/prelink.conf 文件中。另外还需将使用 AntiVir Personal - FREE 的普通用户添加到新创建的antivir 用户组中。

2、Freeavast! Linux Home Edition

Free avast! Linux Home Edition 是一款来自捷克的免费杀毒软件,它的Windows 版本因为较强的脱壳能力和精美的外表而著称。它的 Linux 版本采用于Windows版本相似的杀毒内核,自2003年起已经连续五年获得 VB100% 认证,可谓久负盛名。另外我发现 avast! PDA Edition 中竟然还有 Palm OS 平台的(只有30KB大!),足见 avast!杀毒内核的可移植性。做为一款商业软件,它的家庭版本也是可以免费使用的,但是需要每年通过注册的电子邮件获得新的证书。

Free avast! Linux Home Edition 提供32位 RPM/DEB/TAR.GZ 三种安装形式,约 11 MB。在笔者的系统下使用RPM包安装十分方便,下载完成后直接双击即可,除了GTK2 外没有特殊的依赖关系,之后会在应用程序菜单中找到相应的启动器。首次运行时会询问你证书,此时需要通过官方网站注册,并在邮箱中找到你的证书,将其复制至此即可。整个过程中并未涉及更新用代理服务器的内容。

3、ClamTk Virus Scanner

ClamTk Virus Scanner 是著名的开放源代码杀毒软件 ClamAV 的图形前端,采用的是 GTK2-Perl 脚本制作,可以在32位/64位系统上运行。ClamTk Virus Scanner 同样是一款开放源代码,所以可以在包括商业公司、盈利机构等在内的任何场所免费使用。与采用KDE组件构造的Klamav 相比,ClamTK 更适合以 GNOME 为桌面环境的用户。

ClamTk Virus Scanner 提供了适合于多个发行版的软件包,包括 Debian、Fedora、CentOS、SuSE、Mandriva,印象中也被包含在Ubuntu 的资源仓库里,只有大约97KB,十分小巧。本人下载好适合 Fedora 的 RPM 包后双击开始安装,由于需要 ClamAV 和 GTK2-Perl 较多,又安装了共 21M 的相关支持包。安装过后需要注释掉 /etc/freshclam.conf 文件中的 Example 标示行才能更新病毒库。关于代理服务器和更新镜像的设置也只能手动修改配置文件完成。

七、 杀毒软件杀毒原理与技术

1、杀毒软件原理基础

我们知道在机器内部使用的语言是二进制“1000111...110”的机器语言。为了简化编程我们将某一段执行代码定义为一些简单的字符。例如有一个正在运行的程序正在一步步向下执行内存里的指令时遇到了一段“11011000...00011”的指令,如果该指令表示程序执行顺序跳到另外一个内存地址执行。那么我们就定义这段指令为“jmp”,在我们编程时就不用去记忆冗长的“11011000...00011”而是直接写“jmp”就可以了。这就是汇编语言。是比vb、c语言低级的编程语言。而杀毒软件正是利用汇编语言进行查杀。

如果有一个木马在运行的时候在某一个地方“jmp”了。而正常程序却应该执行“mov”(移动)命令。这时杀软病毒库添加了这个特征。就会在遇到木马时认出它!但是如果我将“jmp”改成其他语句不影响程序运行。那么杀软是不会认为它是木马的。因为它的病毒库里没有相应的特征码。

所以呢,真正杀软杀出的病毒、木马其实都是“过时”的了。真正的病毒、木马杀软是不认识的。当然杀软还有一些其他技术来保护我们的计算机。我们将在一节课讲解!

对于杀软保护我们的计算,除了用特征码定位外还其他的一些措施。例如主动防御。所谓主动防御就是对未知的、潜在的病毒的一种抵御方法。

 一个程序在计算机中的运行,特别是开机运行的程序。需要在注册表内写入数据、添加新服务。注册表在开始-运行-输入‘regedt32’-回车就可以看到。服务在开始-设置-控制面板-管理工具中。不同系统或视具体情况可能或略有不同,具体情况这里不作讨论。当修改注册表或添加新服务时杀软的监控会报警。例如当我们没有安装程序时杀软却报警说注册表被修改问我们允许还是不允许,那么这时可以肯定有木马在后台偷偷运行了。只要我们选择拒绝木马就不能危害我们计算机了。(当然,有些木马即使我们拒绝,它还是可以运行的)。  

一个杀毒软件的构造的复杂程度要远远高于木马或病毒,所以其原理也比较复杂。而且鉴于现在木马病毒越来越向系统底层发展,杀毒软件的编译技术也在不断向系统底层靠近。例如现在的“主动防御”技术,就是应用RING0层的编译技巧。这里我简单为大家介绍一下基本构成。

一个杀毒软件一般由扫描器、病毒库与虚拟机组成,并由主程序将他们结为一体。  

扫描器是杀毒软件的核心,用于发现病毒,一个杀毒软件的杀毒效果好坏就直接取决于它的扫描器编译技术与算法是否先进,而且杀毒软件不同的功能往往对应着不同的扫描器,也就是说,大多数杀毒软件都是由多个扫描器组成的。病毒库是存储病毒的特征码,它的形式则取决于扫描器采用哪种扫描技术。它里面存储着很多病毒所具有的独一无二的特征字符,我们称之为“特征码”。而虚拟机则是最近引进的概念,它可以使病毒在一个由杀毒软件构建的虚拟环境中执行,与现实的CPU、硬盘等完全隔离,从而可以更加深入的检测文件的安全性。

2、杀毒软件技术

(1)特征码技术

特征码总的分来只有两个,文件特征码与内存特征码。

文件特征码存在于一些未执行的文件里,例如EXE文件、RMVB文件、jpg文件甚至是txt文件中都有可能存在文件特征码。该技术是利用留在受感染文件中的病毒特征值进行检测。发现新病毒后,对其进行分析,根据其特征编成病毒码,加入到数据库中。今后在执行查毒程序时,通过对比文件与病毒数据库中的病毒特征码,检查文件是否含有病毒。

而内存特征码仅仅存在于内存中已运行的应用程序,利用的原理是某些特定的病毒会有某些特定的行为,来监测病毒。

对传统病毒来说,病毒码扫描技术速度快,误报率低,是检测已知病毒的最简单、开销小的方法。目前的大多数杀毒软件产品都配备了这种扫描引擎。

(2)虚拟机技术(启发式查杀)

虚拟机技术也称为动态启发技术,具有人工分析、高智能化、查毒准确性高等特点。该技术的原理是:用程序代码虚拟CPU寄存器,甚至硬件端口,用调试程序调入可疑带毒样本,将每个语句放到虚拟环境中执行,这样就可以通过内存、寄存器以及端口变化来了解程序的执行,改变了过去拿到样本后不敢直接运行而必须跟踪它的执行查看是否带有破坏、传染模块的状况。虚拟环境既然可以反映程序的任何动态,那么病毒放入虚拟机中执行后也必然可以反映出其传染动作。但是虚拟机技术由于存在误杀可能性比较大(系统api 函数过多,用一下这个函数就会认为是病毒),目前仅是作为特征码查杀技术的一种补充而已,用于防范未知病毒。

(3)主动内核技术

主动内核技术改变了传统的被动防御理念,将已经开发的各种防毒系统嵌入操作系统内核,实现无缝连接。如将实时防毒墙、文件动态解压缩、病毒陷阱、宏病毒分析器等功能,组合起来嵌入操作系统,作为操作系统本身的一个“补丁”,与其浑然一体。这种技术可以保证防病毒模块从底层内核与各种操作系统、网络、硬件、应用环境密切协调,确保在发现病毒入侵时,防毒操作不会伤及到操作系统内核,且又能杀灭来犯的病毒。

0 0
原创粉丝点击