Linux系统服务器防病毒实战

11-23

一、Linux病毒简介

随着Linux应用的日益广泛,有大量的网络服务器使用Linux操作系统。由于Linux的桌面应用和Windows相比还有一定的差距,所以在企业应用中往往是Linux和Windows操作系统共存形成异构网络。在服务器端大多使用Linux和Unix的,桌面端使用Windows XP、Vista。Linux操作系统一直被认为是Windows系统的劲敌,因为它不仅安全、稳定、成本低,而且很少发现有病毒传播。但是,随着越来越多的服务器、工作站和个人电脑使用Linux软件,电脑病毒制造者也开始攻击这一系统。对于Linux系统无论是服务器,还是工作站的安全性和权限控制都是比较强大的,这主要得力于其优秀的技术设计,不仅使它的作业系统难以宕机,而且也使其难以被滥用。Unix经过20多年的发展和完善,已经变得非常坚固,而Linux基本上继承了它的优点。在Linux里,如果不是超级用户,那么恶意感染系统文件的程序将很难得逞。当然,这并不是说Linux就无懈可击,病毒从本质上来说是一种二进制的可执行的程序。速客一号(Slammer)、冲击波(Blast)、霸王虫(Sobig)、 米虫(Mimail)、劳拉(Win32.Xorala)病毒等恶性程序虽然不会损坏Linux服务器,但是却会传播给访问它的Windows系统平台的计算机。

Linux平台下的病毒分类:

1、可执行文件型病毒:可执行文件型病毒是指能够寄生在文件中的,以文件为主要感染对象的病毒。病毒制造者们无论使用什么武器,汇编或者C,要感染ELF文件都是轻而易举的事情。这方面的病毒有Lindose。

2、蠕虫(worm)病毒:1988年Morris蠕虫爆发后,Eugene H. Spafford 为了区分蠕虫和病毒,给出了蠕虫的技术角度的定义,“计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上。”在Linux平台下,蠕虫病毒极为猖獗,像利用系统漏洞进行传播的ramen,lion,Slapper等,这些病毒都感染了大量的Linux系统,造成了巨大的损失。

3、脚本病毒:目前出现比较多的是使用shell脚本语言编写的病毒。此类病毒编写较为简单,但是破坏力同样惊人。我们知道,Linux系统中有许多的以.sh结尾的脚本文件,而一个短短十数行的shell脚本就可以在短时间内遍历整个硬盘中的所有脚本文件,进行感染。

4、后门程序:在广义的病毒定义概念中,后门也已经纳入了病毒的范畴。活跃在Windows系统中的后门这一入侵者的利器在Linux平台下同样极为活跃。从增加系统超级用户账号的简单后门,到利用系统服务加载,共享库文件注射,rootkit工具包,甚至可装载内核模块(LKM),Linux平台下的后门技术发展非常成熟,隐蔽性强,难以清除。是Linux系统管理员极为头疼的问题。

二、Linux 服务器病毒防范策略

综合以上介绍,可以看到总体来说计算机病毒对Linux系统存在较小的危险。但是由于各种原因在企业应用中往往是Linux和Windows操作系统共存形成异构网络。在服务器端大多使用Linux和Unix的,桌面端使用Windows 。所以为Linux的防范病毒策略分成几个部分:

可执行文件型病毒、蠕虫(worm)病毒、脚本病毒的防范通过安装GPL查杀病毒软件基本可以防范。服务器端可以使用avast! for Linux/Unix Servers它是工作在命令行下的,运行时可以较少占用系统资源。工作站用户可以选择avast! Linux Home Edition,可以运行在任何X-Windows环境下面,比如KDE或Gnome等。对于后门程序防范可以采用LIDS(http://www.lids.org/ )和Chkrootkit(http://www.chkrootkit.org/ ),LIDS是Linux内核补丁和系统管理员工具(lidsadm),它加强了Linus内核。可以保护dev/目录下的重要文件。而Chkrootkit可以检测系统的日志和文件,查看是否有恶意程序侵入系统,并且寻找关联到不同恶意程序的信号。最新版本的Chkrootkit0.48可以检测出sniffers、Trojans、worms、rootkit等59种。代理服务器squid是一款非常优秀的代理服务器软件,但是并没有专门的病毒过滤功能。可以考虑使用德国开放源码爱好者开发的一款基于Linux的病毒过滤代理服务器——HAVP(http://www.server-side.de/ )。HAVP病毒过滤代理服务器软件既可以独立使用,也可以与Squid串联使用,增强Squid代理服务器的病毒过滤功能。提供邮件服务是Linux服务器中重要应用。可以使用ClamAV(http://www.clamwin.com/ ),ClamAV 全名是 Clam AntiVirus,它跟Liunx一样强调公开程序代码、免费授权等观念,ClamAV 目前可以侦测超过40,000 种病毒、蠕虫、木马程序,并且随时更新数据库,有一组分布在世界各地的病毒专家,24小时更新及维护病毒数据库,任何人发现可疑病毒也可以随时跟她们取得 联系,立刻更新病毒码,在极短的时间内,网络上采用ClamAV的邮件服务器就完成最新的防护动作。

另外在Linux服务器上推荐使用命令行防病毒工具,虽然Linux桌面应用发展很快,但是命令行(shell)在Linux中依然有很强的生命力。即使在X Window下,系统管理员经常也要与命令行打交道,使用键盘次数要明显高于鼠标。对于Linux系统管理员来说,在命令行下操作的重要性是不言而喻的。因为启动X—Window管理器将会消耗大量系统资源。

三、安装配置

Linux 平台:包括所有 Linux 分发版本 (只限 x86 平台) 带 GLIBC 版本 2.1 或者更高的并且已安装pthreads库 ,486 处理器 (Pentium 或者建议更高的) ,32 MB RAM (建议 64 MB )系统要求:100兆硬盘空间。

说明:可以使用命令查看 glibc 版本:rpm -qa | grep glibc,glibc 版本必须比大等于 2.1.4-25 。Glibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等。所有动态连接的程序都要用到它。Linux下最常用的多线程支持库为Pthread库,它是glibc库的组成部分。

avast! for Linux/Unix Servers 官方网址:http://www.avast.com/cns/company.html ,是著名的捷克杀毒软件。

主要特点:

拥有 avast! 杀毒内核的avast! for Linux/Unix 杀毒套装是专为 UNIX-like 作业系统而设的.此套装由命令行扫描器,相当于守护程序的常驻扫描器,和访问常驻扫描器的客户端组成.

杀毒内核avast! For Linux 的杀毒内核跟 Windows 系统的是完全一样的, 那就是说,Linux 版本包含所有Windows杀毒内核的尖端功能. 最新版本的 avast! 杀毒内核拥有突出的查杀效能, 而且性能相当高,它可以检测出100%的流行病毒(已经在用户之间传播的病毒).还有出色的检测木马病毒功能和极低的误报率. 此内核通过 ICSA 实验室认证; 而且经常参加 Virus Bulletin 杂志的测试, 屡次获得 VB100 奖项. 像Windows版本的 avast! 一样 , avast! 的 Linux 杀毒引擎有突出的解压功能. 它可以扫描, MAPI, CAB, ACE, CHM, 7ZIP 和 NTFS 流. 而且还可以扫描以下的压缩文档: ARJ, ZIP, MIME (+ 所有组合格式), DBX (Outlook Express 压缩档), RAR, TAR, GZIP, BZIP2, ZOO, ARC, LHA/LHX, TNEF (winmail.dat), CPIO, RPM, ISO, 和 SIS. 另外它还支持一些可执行压缩器 (例如 PKLite, Diet, UPX, AsPack, PeShield, PeProtect, FSG 和 MEW).

自动更新病毒防护的另外一个关键是病毒数据库的更新. 当前版本并未采用增量式更新. 当病毒定义文件被更改整个 VPS 文件需要被新文件取替.

命令行扫描器经验丰富的用户欣赏典型的从命令行控制的手动扫描器, . 它允许扫描指定目录里面的文件和本地及远程卷. 当然命令行扫描器还可扫描通过网络挂载的卷. 程序是非常灵活的; 它可以接收大量参数指令. 它还能够创建大量供分析用的报告文件. 扫描器能够在 STDIN/STDOUT 模式运作,把它用作管道过滤器. 这个模式主要是在shell脚本上使用的.

后台扫描器杀毒daemon在后台运作.第三方应用程序可通过UNIX sockets访问杀毒daemon.Daemon可在指定用户的指定目录内使用.安装套装包括安装访问杀毒daemon的客户端.

1. 软件下载安装

#wget http://files.avast.com/files/linux/libavastengine-4.7.1-1.i586.rpm

#rpm –ivh libavastengine-4.7.1-1.i586.rpm

#wget http://files.avast.com/files/linux/avast4server-3.0.1-1.i586.rpm

#rpm –ivh avast4server-3.0.1-1.i586.rpm

注意安装顺序,默认软件包安装在/var/lib/avast4 目录下。另外注意: 程序需要一个有效的注册号才能正常运作,可在http://www.avast.com/cns/linux-server-demo-license.php 请求获得。

2. 查看avast手册页

avast是命令行下工作软件,软件提供请详细的手册页面。使用前请详细阅读。avast的手册页面如图1 。

Linux系统服务器防病毒实战

图1 avast的手册页面

首先把获得许可证文件拷贝到:/var/lib/avast4 目录。

#cp License.dat /var/lib/avast4

Avast安装后会产生两个工具:

-病毒库守护进程 (名称是 "avastcmd")

-病毒扫描程序 (名称是 "avastd")

病毒库守护进程"avastcmd"在Redhat Linux 下的启动、停止、重新启动、重新加载配置文件、查看状态的命令如下:

/etc/init.d/avastd [start|stop|restart|reload|status]

在Slackware linux下的启动、停止、重新启动、重新加载配置文件、查看状态的命令如下:

/etc/rc.d/rc.avastd [start|stop|restart|reload|status]

在Freebsd操作系统下的启动、停止、重新启动、重新加载配置文件、查看状态的命令如下:

/usr/local/etc/rc.d/avastd.sh [start|stop|restart|reload|status]

如果希望病毒库守护进程"avastcmd"自动运行,可以打开如图2所示的窗口,在avast服务选项加上*(用空格键),然后重新启动系统,这样系统会启动avast服务。

Linux系统服务器防病毒实战

图2 自动启动服务守护进程

四、avastcmd命令行参数

avastcmd是基于命令行下的工具,配合一些参数可以更有效查杀Linux、Windows病毒。

格式:avastcmd [OPTION...]

[options]主要参数:

-_, --console :工作在STDIN/STDOUT模式下。

-a, --testall :测试所有文件。

-b, --blockdevices :扫描块设备文件。

-c, --testfull :扫描所有文件。

-d, --directory :说明目录,不包括子目录。

-i, --ignoretype :忽略病毒报警信息。

-n, --nostats :不统计病毒数量。

-p, --continue=1234 :根据设定处理病毒文件,

1:删除, 2:没有设置2选项, 3:修复, 4:停止扫描工作

-r, --report=[*]file 建立一个报告文件。

-t, --archivetype[=ZGBTIJRXOQHFVPYD6UWAN] 扫描文件后缀类型:

Z:ZIP(default),G:GZ(default), B:BZIP2(default), T:TAR(default),

I:MIME, J:ARJ, R:RAR, X:Exec(default), O:ZOO,

Q:ARC, H:LHA, F:TNEF, V:CPIO, K:CHM, P:RPM, Y:ISO,

D:DBX, 6:SIS, U:OLE(default), 1:INSTALL(default),

W:WINEXEC(default), A:All, N:None

-v, --viruslist=mask 显示所有病毒列表

-h, --help 显示帮助

--usage

-V, --version 打印版本信息

代表驱动器名称、文件名称或者目录名称。

五、测试avastcmd

您可以从网址(http://www.eicar.org/anti_virus_test_file.htm )下载一个测试感染文件 http://www.eicar.org/download/eicar_com.zip 将其放在一个临时目录中。使用avastcmd扫描该目录。然后查看结果,如果出现图2 界面表示安装fprot安装工作成功。

Linux系统服务器防病毒实战

图3 测试avastcmd工作情况

从图中我们可以看到avastcmd程序版本、扫描引擎版本。以及发现病毒数量。

六、应用实例

例如需要可以检查本地系统加载的Windows分区,如果要检查C盘:使用命令:

#avastcmd /mnt/winc -report=cjh

上面这个命令还会生成一个名称cjh是报表文件。如果你能确认你的电子邮件服务器支持8—bit的字节,可以直接用命令发送报表到管理员邮箱 :

cat <附件文件名> | mail <邮件地址>

cat(“concatenate”的缩写)命令是将几个文件处理成一个文件并将这种处理的结果保存到一个单独的输出文件,这里我们用它来合并邮件的文本。

cat cjh | mail goodcjh

上面的命令表示把内容为cjh文件内容的邮件给用户goodcjh。

查杀异构网络中Windows平台的计算机的步骤:

另外我们通常使用Samba来做文件共享,Samba可以和使用Windows操作系统的机器很好的协作,在Windows的机器看来,Samba的服务就是网上邻居里的显示的一台服务器,我们可以把Windows下的文件保存在这个服务器上面。你可以把其他Windows机器的共享挂到Samba的目录下,然后一起杀,连Windows机器上的病毒也杀得干干净净。

映射网络驱动器

我们知道,在Windows下可以将共享目录映射为网络驱动器,这样就可以把共享目录当成本地文件夹使用。在Linux里也有类似的功能,可以借助于smbmount命令来实现:

首先在/mnt目录下创建一个目录,假设为/mnt/smb/A1,

#mkdir –p mnt/smb/A1

将远程计算机:A1的共享d磁盘挂载到/mnt/smb/A1,然后就像本地文件系统一样查杀计算机病毒:

#smbmount //A1/d /mnt/smb/A1

#cd /mnt/smb/A1

# avastcmd

2、卸载该映射目录,可以使用umount命令,然后挂载其他计算机查毒,方法是一样,此处不再赘述。

七、定时启动avastcmd方法

avastdwatch.sh是一个软件知道建立的脚步文件,通过它和cron可以定时使用avastcmd

在 Linux 中,任务可以被配置在指定的时间段、指定的日期、或系统平均载量低于指定的数量时自动运行。

1. 使用cron命令定时启动avastcmd

cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。cron 假定系统持续运行。cron 的主配置文件是 /etc/crontab,/etc/crontab 文件中的每一行都代表一项任务,它的格式是:

minute hour day month dayofweek command

· minute — 分钟,从 0 到 59 之间的任何整数。

· hour — 小时,从 0 到 23 之间的任何整数。

· day — 日期从 1 到 31 之间的任何整数(必须是该月份的有效日期)。

· month — 月份,从 1 到 12 之间的任何整数(或使用月份英文简写如 jan)。

· dayofweek — 星期从 0 到 7 之间的任何整数(或使用星期的英文简写如 sun等)。

· command — 要执行的命令。

应用实例:

首先建立定时器设置文件,文件名称mytype(名称自己设定):

#crontab -e

文件内容:

*/5 * * * * avastdwatch.sh -a=/var/run/avast4/local.sock -t=15 -d=/tmp -l=/var/log/avast4/avastdwatch.log

这样用户在每五分钟会自动对目录/tmp进行病毒扫描并且产生一个报表文件日志文件avastdwatch.log。

到此为止我们介绍了基于命令行的Linux服务器防病毒软件的使用,大家可能觉得命令行的方式不太友好,后边笔者会介绍和avast! for Linux/Unix Servers 相似具有GUI界面的防病毒工具:avast! Linux Home Edition 。