Linux系统下缓冲区溢出漏洞攻击的防范

时间:2022-10-05 12:08:38

Linux系统下缓冲区溢出漏洞攻击的防范

摘要:利用缓冲区溢出漏洞对计算机系统实施攻击,是黑客常用、并且最有效的攻击手法之一。为了应对不断涌现的缓冲区溢出攻击,研究了在Linux系统下防范缓冲区溢出的方法,通过研究,总结了在Linux平台下防范缓冲区溢出攻击的安全策略,这些安全策略可以应用于一般企业内部服务器,包括web服务器、mail服务器、samba服务器、ftp服务器以及proxy服务器等。在实际使用中,发现通过这些安全策略的配置能够对缓冲区溢出攻击起到很好的防范措施。

Abstract: Using computer system overflow vulnerability to carry out attacks is one of the common and the most effective attack techniques for hackers. In order to deal with the emerging buffer overflow attack, we come up with some solutions against this problem under Linux system. Through the study, we summarize the security strategy against the overflow buffer attack, which can be applied to general enterprise internal server, including web server, mail server, samba server, FTP server and proxy server, etc. In actual use, we can see it is very good to prevent the attack through these security setup.

关键字:Linux 缓冲区溢出 攻击

Key Word: Linux, buffer overflow, attack

第一次大规模的缓冲区溢出攻击发生在1988年的Morris蠕虫,它造成了6000多台机器瘫痪,损失在$100000至$10000000之间。缓冲区溢出攻击已经占了网络攻击的绝大多数。据统计,大约80%的安全事件与缓冲区溢出攻击有关。

缓冲区溢出漏洞已成为一个困扰了安全专家的难题。简单来说,它是由于编程机制而导致的、在软件中出现的内存错误。这样的内存错误使得黑客可以运行一段恶意代码来破坏系统正常地运行,甚至获得整个系统的控制权。

在对计算机系统安全的研究中,有一种系统安全漏洞引起了我们的关注。一方面是由于这种安全漏洞的广泛性--几乎使所有的操作系统平台都受到影响。另一方面,我们为黑客基于此类安全漏洞所编写的攻击程序的隐蔽性和强大威力所吸引。这就是缓冲区溢出技术。它可以使看似安全的,正在运行常规服务(如 DNS、ftpd等)的主机在几秒钟内失去控制权。在当前CERT和CIAC等的Internet安全事件报告中, 缓冲区溢出已成为常见的用语。缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能。这样可以让攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。

为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,之所以选择Linux平台,主要有两方面的原因:(1)Linux是一个开放源码的平台,有利于我们在研究的过程中深入技术细节,由于Linux及其上面的大量应用都是基于开放源码,有很多黑客在其上进行了大量的工作,可以说Linux上的网络攻击水平代表了整个网络攻击的最高水平。(2)Linux是一个类Unix系统,同时也是在Internet中大量使用的操作系统平台,选择Linux作为研究缓冲区溢出技术的平台是非常具有代表性的,在Linux平台上取得的经验可以非常容易地移植到其他Unix或者类Unix平台上。

在Linux出现之初,由于其最初的优秀设计,似乎具有先天病毒免疫能力,所以当时有许多人相信不会有针对Linux的病毒出现,但是 Linux终于也不能例外。1996年秋,澳大利亚一个叫VLAD的组织用汇编语言编写了据称是Linux系统下的第一个病毒的Staog,它专门感染二进制文件,并通过三种方式去尝试得到root权限。当然,设计Staog病毒只是为了演示和证明Linux有被病毒感染的潜在危险,它并没有对感染的系统进行任何损坏行动。

2001年,一个名为Ramen的Linux蠕虫病毒出现了。Ramen病毒可以自动传播,无需人工干预,虽然它没有对服务器进行任何破坏,但是它在传播时的扫描行为会消耗大量的网络带宽。Ramen病毒是利用了Linux某些版本(Redhat6.2和 7.0)的rpc.statd和wu-ftp这两个安全漏洞进行传播的。同年的另一个针对Linux的蠕虫病毒Lion则造成了实际的危害。其它Linux平台下病毒还有OSF.8759、Slapper、Scalper、Unux.Svat和BoxPoison等,当然,大多数普通的Linux用户几乎没有遇到过它们。这是因为直到目前,Linux上的病毒还非常少,影响的范围也很小。但随着Linux用户的增加,越来越多的Linux系统连接到局域网和广域网上,自然增加了受攻击的可能,可以预见到会有越来越多的Linux病毒出现,因此如何防范Linux病毒就成为每个Linux用户现在就应该开始注意的事情了。

随着现代网络技术的发展和网络应用的深入,计算机网络所提供的远程登录机制、远程调用及执行机制是必须的。这使得一个匿名的Internet用户有机会利用缓冲区溢出漏洞来获得某个系统的部分或全部控制权。实际上,以缓冲区溢出漏洞为攻击手段的攻击占了远程网络攻击中的绝大多数,这给Linux系统带来了极其严重的安全威胁。

攻击途径

通常情况下攻击者会先攻击root程序,然后利用缓冲区溢出时发生的内存错误来执行类似“exec(sh)”的代码,从而获得root的一个Shell。为了获得root权限的Shell,攻击者需要完成如下的工作:在程序的地址空间内安排适当的特定代码。一般使用如下两种方法在被攻击的程序地址空间内安排攻击代码;通过适当地初始化寄存器和存储器,使程序在发生缓冲区溢出时不能回到原来的执行处,而是跳转到被安排的地址空间执行。

当攻击者找到一种途径可以变原程序的执行代码和流程时,攻击的危险就产生了。

防范措施

Linux下的缓冲区溢出攻击威胁既来自于软件的编写机制,也来自于Linux(和Unix)系统本身的特性。实际上,缓冲区溢出攻击及各种计算机病毒猖獗的根本原因在于现代计算机系统都是采用冯.诺依曼“存储程序”的工作原理。这一基本原理使得程序和数据都可以在内存中被繁殖、拷贝和执行。因此,要想有效地防范缓冲区溢出攻击就应该从这两个方面双管其下。

确保代码正确安全

缓冲区溢出攻击的根源在于编写程序的机制。因此,防范缓冲区溢出漏洞首先应该确保在Linux系统上运行的程序(包括系统软件和应用软件)代码的正确性,避免程序中有不检查变量、缓冲区大小及边界等情况存在。

基于一定的安全策略设置系统

攻击者攻击某一个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.省略和issue删除。这两个文件分别用于在远程登录和本地登录时向用户提供相关信息。删除这两个文件的同时,仍需要完成方法一中的注释工作,否则,系统在启动时将会自动重新生成这两个文件。

3、禁止提供finger服务。在Linux系统中,使用finger命令可以显示本地或远程系统中目前已登录用户的详细信息。禁止提供finger服务的有效方法是,通过修改该文件属性、权限(改为600)使得只有root用户才可以执行该命令。

4、处理“inetd.conf”文件。Linux系统通过inetd(超级服务器)程序根据网络请求装入网络程序。该程序通过“/etc/inetd.conf”文件获得inetd在监听哪些网络端口,为每个端口启动哪些特定服务等信息。因此,该文件同样会泄露大量的敏感信息。解决问题的方法是,通过将其权限改为600只允许root用户访问,并通过改写“/etc/inetd.conf”文件将不需要的服务程序禁止掉,最后修改该文件的属性使其不能被修改。

结束语

所幸的是,OpenBSD开发组为解决这一安全难题采用了三种新的有效策略。相信不久的将来,Linux用户可以不再为缓冲区溢出攻击而寝食难安了。

要在Linux下处理.rar文件,需要安装RAR for Linux。该软件可以从网上下载,但它不是免费的。

[参考文献]:

Sixth;如何防范Linux操作系统下缓冲区溢出攻击;2008年08月

薛静锋IBM;Linux下防范缓冲区溢出攻击的系统安全策略; 2007年05月

池瑞楠;Windows缓冲区溢出的深入研究 [J];电脑编程技巧与维护;2006年09期

上一篇:在质疑中学习\用质疑提高成绩 下一篇:利用SolidWorks提高机械设计教学质量