Linux系统 反病毒技术
发表于:2007-05-26来源:作者:点击数:
标签:
虽然Linux病毒屈指可数,但是基于缓冲区溢出(Buffer Overflow) 漏洞的攻击还是让众多Linux用户大吃一惊。所谓世界上第一个Linux病 毒reman,严格地说并不是真正的病毒,它实质上是一个古老的、 在Linux/ Unix (也包括 Windows 等系统)世界中早已存在的缓
虽然Linux病毒屈指可数,但是基于缓冲区溢出(Buffer Overflow)
漏洞的攻击还是让众多Linux用户大吃一惊。所谓“世界上第一个Linux病
毒”——reman,严格地说并不是真正的病毒,它实质上是一个古老的、
在Linux/
Unix(也包括
Windows等系统)世界中早已存在的“缓冲区溢出
”攻击程序。reman只是一个非常普通的、自动化了的缓冲区溢出程序,
但即便如此,也已经在Linux界引起很大的恐慌。
缓冲区溢出漏洞是一个困扰了
安全专家30多年的难题。简单来说,它
是由于编程机制而导致的、在软件中出现的内存错误。这样的内存错误使
得黑客可以运行一段恶意代码来破坏系统正常地运行,甚至获得整个系统
的控制权。
Linux系统特性
利用缓冲区溢出改写相关内存的内容及函数的返回地址,从而改变代
码的执行流程,仅能在一定权限范围内有效。因为进程的运行与当前用户
的登录权限和身份有关,仅仅能够制造缓冲区溢出是无法突破系统对当前
用户的权限设置的。因此尽管可以利用缓冲区溢出使某一程序去执行其它
被指定的代码,但被执行的代码只具有特定的权限,还是无法完成超越权
限的任务。
但是,Linux(包括Unix)系统本身的一些特性却可以被利用来冲破
这种权限的局限性,使得能够利用缓冲区溢出获得更高的、甚至是完全的
权限。主要体现在如下两方面:
1.Linux(包括Unix)系统通过设置某可执行文件的属性为SUID或
SGID,允许其它用户以该可执行文件拥有者的用户ID或用户组ID来执行它
。如果该可执行文件的属性是root,同时文件属性被设置为SUID,则该可
执行文件就存在可利用的缓冲区溢出漏洞,可以利用它以root的身份执行
特定的、被另外安排的代码。既然能够使得一个具有root权限的代码得以
执行,就能够产生一个具有超级用户root权限的Shell,那么掌握整个系
统的控制权的危险就产生了。
2.Linux(包括Unix)中的许多守护进程都是以root权限运行。如果
这些程序存在可利用的缓冲区溢出,即可直接使它以root身份去执行另外
安排的代码,而无须修改该程序的SUID或SGID属性。这样获得系统的控制
权将更加容易。
随着现代
网络技术的发展和网络应用的深入,计算机网络所提供的远
程登录机制、远程调用及执行机制是必须的。这使得一个匿名的Internet
用户有机会利用缓冲区溢出漏洞来获得某个系统的部分或全部控制权。实
际上,以缓冲区溢出漏洞为攻击手段的攻击占了远程网络攻击中的绝大多
数,这给Linux系统带来了极其严重的安全威胁。
途径分析
通常情况下攻击者会先攻击root程序,然后利用缓冲区溢出时发生的
内存错误来执行类似“exec(sh)”的代码,从而获得root的一个Shell
。为了获得root权限的Shell,攻击者需要完成如下的工作:
1.在程序的地址空间内安排适当的特定代码。一般使用如下两种方
法在被攻击的程序地址空间内安排攻击代码。
2.通过适当地初始化寄存器和存储器,使程序在发生缓冲区溢出时
不能回到原来的执行处,而是跳转到被安排的地址空间执行。
当攻击者找到一种途径可以改变原程序的执行代码和流程时,攻击的
危险就产生了。
防范措施
Linux下的缓冲区溢出攻击威胁既来自于软件的编写机制,也来自于
Linux(和Unix)系统本身的特性。实际上,缓冲区溢出攻击及各种计算
机病毒猖獗的根本原因在于现代计算机系统都是采用冯·诺依曼“存储程
序”的工作原理。这一基本原理使得程序和数据都可以在内存中被繁殖、
拷贝和执行。因此,要想有效地防范缓冲区溢出攻击就应该从这两个方面
双管其下。
确保代码正确安全
缓冲区溢出攻击的根源在于编写程序的机制。因此,防范缓冲区溢出
漏洞首先应该确保在Linux系统上运行的程序(包括系统软件和应用软件
)代码的正确性,避免程序中有不检查变量、缓冲区大小及边界等情况存
在。比如,使用grep工具搜索源代码中容易产生漏洞的库调用,检测变量
的大小、数组的边界、对指针变量进行保护,以及使用具有边界、大小检
测功能的C编译器等。
基于一定的安全策略设置系统
攻击者攻击某一个Linux系统,必须事先通过某些途径对要攻击的系
统做必要的了解,如版本信息等,然后再利用系统的某些设置直接或间接
地获取控制权。因此,防范缓冲区溢出攻击的第二个方面就是对系统设置
实施有效的安全策略。这些策略种类很多,由于篇幅有限只列举几个典型
措施:
(1)在装有Telnet服务的情况下,通过手工改写“/etc/inetd.conf
”文件中的Telnet设置,使得远程登录的用户无法看到系统的提示信息。
具体方法是将Telnet设置改写为:
telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h
末尾加上“-h”参数可以让守护进程不显示任何系统信息,只显示登
录提示。
(2)改写“rc.local”文件。默认情况下,当登录Linux系统时系统运行
rc.local文件,显示该Linux发行版本的名字、版本号、内核版本和服务
器名称等信息,这使得大量系统信息被泄露。将“rc.local”文件中显示
这些信息的代码注释掉,可以使系统不显示这些信息。
一种方法是在显示这些信息的代码行前加“#”:
……
# echo "">/etc/issue
# echo "$R">>/etc/issue
# echo "Kernel $ (uname -r)on $a $(uname -m)">>/etc/issue
#
# echo >>/etc/issue
……
另一种方法是将保存有系统信息的文件/etc/issue.net和issue删除
。这两个文件分别用于在远程登录和本地登录时向用户提供相关信息。删
除这两个文件的同时,仍需要完成方法一中的注释工作,否则,系统在启
动时将会自动重新生成这两个文件。
(3)禁止提供finger服务。在Linux系统中,使用finger命令可以显
示本地或远程系统中目前已登录用户的详细信息。禁止提供finger服务的
有效方法是,通过修改该文件属性、权限(改为600)使得只有root用户
才可以执行该命令。
(4)处理“inetd.conf”文件。Linux系统通过inetd(超级
服务器
)程序根据网络请求装入网络程序。该程序通过“/etc/inetd.conf”文
件获得inetd在监听哪些网络端口,为每个端口启动哪些特定服务等信息
。因此,该文件同样会泄露大量的敏感信息。解决问题的方法是,通过将
其权限改为600只允许root用户访问,并通过改写“/etc/inetd.conf”文
件将不需要的服务程序禁止掉,最后修改该文件的属性使其不能被修改。
结束语
缓冲区溢出攻击之所以能成为一种常见的攻击手段,其原因在于缓冲
区溢出漏洞太普遍,且易于实现攻击,因此缓冲区溢出问题一直是个难题
。
所幸的是,OpenBSD
开发组为解决这一安全难题采用了三种新的有效
策略。相信不久的将来,Linux用户可以不再为缓冲区溢出攻击而寝食难
安了。
RAR文件在Linux下用起来
要在Linux下处理.rar文件,需要安装RAR for Linux。该软件可以从网上
下载,但要记住,它不是免费的。大家可从
http://www.onlinedown.net
/sort/125_1.htm下载RAR for Linux 3.2.0,然后用下面的命令安装:
# tar -xzpvf rar
linux-3.2.0.tar.gz
# cd rar
# make
安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压
程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用
法:
# rar a all *.mp3
这条命令是将所有.mp3的文件压缩成一个rar包,名为all.rar,该程
序会将.rar 扩展名将自动附加到包名后。
# unrar e all.rar
这条命令是将all.rar中的所有文件解压出来。
原文转自:http://www.ltesting.net
|