<fieldset id='6u88'></fieldset>
  1. <span id='6u88'></span>

  2. <tr id='6u88'><strong id='6u88'></strong><small id='6u88'></small><button id='6u88'></button><li id='6u88'><noscript id='6u88'><big id='6u88'></big><dt id='6u88'></dt></noscript></li></tr><ol id='6u88'><table id='6u88'><blockquote id='6u88'><tbody id='6u88'></tbody></blockquote></table></ol><u id='6u88'></u><kbd id='6u88'><kbd id='6u88'></kbd></kbd>
  3. <i id='6u88'><div id='6u88'><ins id='6u88'></ins></div></i>

      <code id='6u88'><strong id='6u88'></strong></code>

      <dl id='6u88'></dl>
      <acronym id='6u88'><em id='6u88'></em><td id='6u88'><div id='6u88'></div></td></acronym><address id='6u88'><big id='6u88'><big id='6u88'></big><legend id='6u88'></legend></big></address>
        <i id='6u88'></i>
        <ins id='6u88'></ins>

          如何防范Linux操作系统下缓冲区溢出攻击

          • 时间:
          • 浏览:7
          • 来源:124软件资讯网

            虽然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 rarlinux-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中的所有文件解压出来