您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Solaris服务器防范rootkit攻击攻略
一、rootkit的定义rootkit这个术语已经存在10多年了。它是由有用的小型程序组成的工具包,使得攻击者能够保持访问计算机上具有最高权限的用户“root”。换句话说,rootkit是能够持久或可靠地、无法检测地存在于计算机上的一组程序和代码。在上述rootkit定义中,关键词是“无法检测”。rootkit所采用的大部分技术和技巧都用于在计算机上隐藏代码和数据。例如,许多rootkit可以隐藏文件和目录。rootkit的其它特性通常用于远程访问和窃听——例如,用于嗅探网络上的报文。当这些特性结合起来后,它们会给安全带来毁灭性的打击。要取得一个主机的控制权,最简单的当然就是以登录程序(如login,ssh,telnet等)加上猜测密码的程序来尝试进行登入的行为。不过,由于登入程序大部分都有登入次数的限制,因此使用密码猜测程序就不这么流行了。高级的黑客为了系统网络的安全,会撰写一些程序去测试自己主机的服务漏洞,并且在发现了某些服务的漏洞之后,会通报该服务的维护团体,或者是贡献自己的修补方式,以补足自己系统的安全性。而服务开发/维护团体在接到这样的通报之后,会在最短的时间内进行程序修改,并且在因特网上面进行通报与释出该漏洞的修补程序。然而在这个漏洞通报出来之后,与修补程序释出Sun空窗期,某些恶意的黑客就会针对这样的漏洞进行攻击,这些黑客同样是撰写程序来攻击该漏洞,同时取得被攻击主机的控制权,或者是植入木马程序在受攻击的主机上。这些黑客与高级黑客不同的地方,在于他们会很骄傲的将攻击的成果贴在一些黑客常上的网站,藉以推销自己,同时,也会将他们撰写的恶意程序散播到互联网上面。有些黑客就会将这些恶意程序收集起来,做成软件包,并使这些程序包更加流行于互联网上面,这些恶意的程序包就被称为rootkit。二、rootkit的类型我们可将unix和Linux下的rootkit分为两大类:应用层级rookit和内核级别rootkit1.应用层级rootkit应用层级rootkit是最常被拿来使用的rootkit。攻击者以rootkit中的木马程序来替换系统中正常的应用程序与系统文件。木马程序会提供后门给攻击者并隐藏其踪迹,攻击者做的任何活动都不会储存在纪录文件中。下面列举了一些攻击者可能取代的文件:隐藏攻击者踪迹的程序(1)ls,find,du-木马程序可以隐藏攻击者文件、欺骗系统,让系统的文件及目录泄露讯息。(2)ps,top,pidof-这些程序都是程序监看程序,它们可以让攻击者在进行攻击的过程中,隐藏攻击者本身的程序。(3)netstat-netstat是用来检查网络活动的连结与监听,如开放的通讯端口等等。木马程序netstat可以隐藏攻击者的网络活动,例如sshdaemon或其它服务。(4)killall-木马程序killall让管理者无法停止程序。(5)ifconfig-当监听软件正在执行时,木马程序ifconfig不会显示PROMISCflag,这样可以隐藏攻击者,不被监听软件察觉。(6)crontab-木马程序crontab可以隐藏攻击者的crontab进入情况。(7)tcpd,syslogd-木马程序tcpd与syslog不会纪录攻击者的行为。后门程序(1)chfn-提升使用者的权限。执行chfn,在输入新使用者名称时,只要输入rootkit密码,就可以取得root的权限。(2)chsh-提升使用者的权限。执行chsh,在输入新shell时,只要输入rootkit密码,就可以取得root的权限。(3)passwd-提升使用者的权限。执行passwd,在输入新密码时,只要输入rootkit密码,就可以取得root的权限。(4)login-能够纪录任何使用者名称,包含root登入的密码。(5)bd2-木马程序rpcbind允许攻击者在受害主机上执行任意程序代码。木马程序程序(1)inetd-木马程序inetd可以替攻击者打开远程登入的通讯端口,只要输入密码就可以取得root的权限。(2)rshd-替攻击者提供远程的shell。(3)rsh-透过rsh可以取得root的密码。(4)sshd-攻击者以特定账号密码登入就能拥有rootshell的权限。监听程序(1)linsniffer-linux小型的监听程序。(2)sniffchk-这个程序可以检验与确认网络监听程序是否正在执行。(3)le-SolarisEthernet封包的监听程序。(4)snif-linux其它封包的监听程序。(5)sniff-10mb-这是一个设计来监听10mbpsEthernet的监听程序。(6)sniff-100mb-这是一个设计来监听100mbpsEthernet的监听程序。其它种类-(1)fix-安装木马程序时(例如:ls)更改的时间戳记与检验封包值的讯息。(2)wted-wtmp的编辑程序。可让攻击者修改wtmp。(3)z2-移除wtmp/utmp/lastlog。(4)bindshell-把rootshell与某个通讯端口结合在一起。(预设埠号为31337)(5)zap3-攻击者会从wtmp,utmp,lastlog,wtmpx和utmpx移除他们的踪迹。zap3通常根据下列目录来找寻纪录文件的位置,例如/var/log,/var/adm,/usr/adm,与/var/run。2.内核级别rootkit内核级别rootkit是比应用层级别rootkit功能更强大的rootkit。内核级别rootkit透过操作与利用kernel,已成为最难被发现rootkit,因为它能够在应用层检查中,建立一条绕过检验的通道。虽然这种软件主要是针对linux所制作,但它可能被修改来针对某个通讯端口或者是其它的操作系统来做攻击,一旦被安装在目标主机上,系统就可说是完全被黑客所控制,系统管理员甚至根本找不到黑客隐藏的踪迹。内核级别rootkit是如何运作的呢?它基本上是利用LKM『LoadableKernelModule』的功能让攻击者做出非法的动作。LKM在linux或其它系统中都是非常有用的工具,支持LKM的系统包含FreeBSD与Solaris。操作系统里面有一些函数被系统用来建构kernel,当这些函数遭到假冒与窜改,主机就不能再被信任了。下面针对内核级别rootkit的一些运作方式来做介绍:(1)隐藏程序-在unix执行过程中,程序的纪录讯息会存放于文件系统中的/proc,隐藏程序可以操作sys_getdents()系统呼叫函数,在程序的架构里就看不见这些附加且正在执行的程序。(2)隐藏网络连结-类似于隐藏程序,网络连结会纪录在/proc/net/tcp与/proc/net/udp这两个文件之中,执行Kernelrootkit,无论何时读取这两个文件,都会隐藏攻击者的踪迹,不让用户知道。(3)隐藏LKM的信号-通常LKM的默认值是可被看见的,这样是为了方便其它使用者也可以使用。攻击者必须使用EXPORT_NO_SYMBOLS命令隐藏这些信号,以防止任何信号被泄漏出去。(4)利用LKM传递讯息-LKMKernelrootkit安装完成之后,攻击者若要通知kernel隐藏另一文件,可透过Kernelrootkit来替换sys_settimeofday()。之后只要透过一些特别的参数,就可以请求系统来完成攻击者想要完成的事情。(5)改变文件的执行-有时攻击者可能想要替换掉某些文件,例如login,但并不想要更改文件,此时Kernelrootkit可以替换sys_execve()。这样系统会持续执行login并泄漏login程序的版本给攻击者。目前最流行的内核级别rootkit,包含linux上的knark与Solaris上的LoadableKernelModule,其中knark还包含了以下的程序:(1)hidef:用来隐藏文件。(2)unhidef:用来设定执行文件重新导向,使攻击者的木马可以被执行。(3)nethide:可以隐藏/proc/net/tcp与/proc/net/udp字符串,这也是netstat撷取资料的地方,攻击者可以用这个工具将目标主机上使用中的联机讯息隐藏起来。(4)taskhack:可以改变正在执行中的程序,因此攻击者可以将/bin/sh的程序,更改成为root的使用者账号。(5)rexec:可以从远程在knark服务器上执行命令,也可以用来支持ip造假的功能。(6)rootme:可以将权限提升到root。三、防止rootkit的攻击基本思路知道了这些Rootkit工具包之后,那么我们如何杜绝黑客使用rootkit程序包来攻击我们的主机呢?由于rootkit主要是藉由主机的漏洞来攻击的,因此,您必须要确定『不必要的服务请务必关闭』,此外『随时更新主机上面各套件的修补程序』。关闭不必要的服务应该很简单,至于更新套件的修补程序,最好借助专业工具软件提供的在线更新方式来维护,这样对于系统管理员来说,会比较轻松。这样还不够喔!因为rootkit也很可能会伪装成互联网上面合法的软件,来吸引您安装他。例如前几年,著名的OpenSSL网站上所提供的套件竟然被发现已经被黑客置换掉所以,在您安装取得的套件之前,请先以MD5或者其它指纹数据进行档案的比对,以确定该档案是没有问题的。当然,最好还是不要安装来路不明的套件较好。而为了确认一下我们的主机是否被rootkit程序包所攻击,其实我们还可以透过其它的软件工具来检查主机的某些重要程序,例如下面提到的ps,lsof等的。这就是我们这篇文章要提到的chkrootkit。四、Solaris服务器的基本安全检查这里我们分如下几个步骤:1.查看登陆系统的用户:我们用w命令显示当前所有登陆系统的用户,如图1所示,输出标题行显示了当前系统时间,该系统已运行的时间,当前登陆用户数,最近1分钟,5分钟和15分钟内的平均系统负载。USER字段显示当前登陆的用户名。TTY字段显示了会话的控制终端,tty表示从控制台登陆,pts/typ则可以表示通过一个网络连接,2.查看系统开放的端口:我们用netstat–an命令来显示当前系统开放的端口,有时系统开放的端口比较多,一页显示不了,我们可以用|more这个管道命令使结果分页显示,便于我们查看输出行通常有5个结果,其中比较重要的是proto显示了使用协议,localaddress显示了使用的本地ip,这对于NAT地址转换的情况比较有用,还有foreignaddress显示了外部ip,state显示了当前这个连接的状态。3.使用lsof,使用lsof您可以检查打开的文件,并根据需要在卸载之前中止相应的进程。同样地,如果您发现了一个未知的文件,那么可以找出到底是哪个应用程序打开了这个文件。在UNIX环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”。通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件。在有些情况下,当您使用ls请求目录清单时,将出现相应的条目。在其它情况下,如传输控制协议(TCP)和用户数据报协议(UDP)套接字,不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为lsof,它对应于“listopenfiles”(列出打开的文件)。几乎在每个UNIX版本中都有这个实用程序。lsof下载安装#wget的使用只需输入lsof就可以生成大量的信息,如图1所示。因为lsof需要访问核心内存和各种文件,所以必须以root用户的
本文标题:Solaris服务器防范rootkit攻击攻略
链接地址:https://www.777doc.com/doc-2849888 .html