首页/技术开发/内容

Linux环境下发现并停止系统攻击

技术开发2024-06-04 阅读()
grep init 1 ? S 6:03 init 系统在启动时的init进程将会启动"inetd"进程,正如前面提到的该进程实现监听网络请求,监听是通过网 络端口号来实现的。 例如你telnet到你的linux服务器上时,实际上你上请求inetd进程启动进程in.telnetd进 程在23端口来处理你的访问请求实现通信。随后,in.telnetd进程启动一个询问你的用户名和密码的进程, 然后你 就登陆到机器了。inetd同时监听很多端口来等待访问请求,然后激活完成相关服务的程序。你可 以通过查看文件/etc/services来看哪个服务使用哪个端口。从节省资源角度来说,利用一个进程而不是每 种服务对应一个进程是有意义的。 当一个攻击者第一次访问你的站点时,他们往往使用成为端口扫描仪的工具,通过该工具攻击者来查看 你开放了那些系统服务。LInux上比较出名的一个端口扫描仪是nmap. 可以从http://www.insecure.org/nmap/index.html下载得到该软件,最新的版本甚至有一个图形化 界面nmapfe。下面我们就运行nmap看可以得到什么结果: 选项'-sS',指使用TCP SYN, 也就是半连接half-pen扫描, '-O',只同时探测被扫描系统的操作系统o。 (利用OS指纹的技术,可以参见http://www.isbase.com/book/showQueryL.asp?libID=271)攻击者知道了 对方使用的何种操作系统就可以有针对性的寻找该操作系统的常见漏洞


# nmap -sS -O localhost


Starting nmap V. 2.3BETA5 by Fyodor (fyodor@dhp.com,
www.insecure.org/nmap/)
Interesting ports on localhost (127.0.0.1):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
53 open tcp domain
79 open tcp finger
80 open tcp http
98 open tcp linuxconf
111 open tcp sunrpc
113 open tcp auth
139 open tcp netbios-ssn
513 open tcp login
514 open tcp shell
515 open tcp printer

TCP Sequence Prediction: Class=random positive increments
Difficulty=4360068 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.12

Nmap run completed -- 1 IP address (1 host up) scanned in 2
seconds


这些打开的端口就是攻击者入侵点。当你修改过inetd.conf文件以关闭某些服务,从新启动inetd后,你 再用nmap扫描就可以发现被注释掉的服务扫描不到了。
当然,管理员还可以使用一些其他的安全扫描工具如:satan或 Nessus等 来检测自己的系统的安全可靠
性,在攻击者发现其以前更早的发现自己的系统的漏洞,并加以弥补。
三、
一个笑话里说一个小偷进入到一家,偷光了屋子里所有的东西,但是却用一个相同的东西代替了偷走
的东西。但是在网络世界里,这却是可能发生的。一个攻击者利用一个系统漏洞非法入侵进入到你的系
统后,当你使用ps命令列出系统中的所有的进程时,却看不到什么异常的证据。你查看你的password文件,
一切也是那么的正常。到底发生了什么事情呢?当系统进入到你的系统以后,第一步要做的事情就是取代
系统上某些特定的文件:如netstat命令等。当你使用netstat -a命令时,就不会显示系统攻击者存在的
信息。当然攻击者将替代所有的可能泄露其存在的文件在linux环境下一个有名的这样的工具包名字是
rootkit。通过在任何一个搜索引擎搜索关键字rootkit可以得到数以百计的结果。这些工具一般来说包括:


ps netstat top .....

由于这些经过文件已经被取代。所以简单的利用ls命令查看这些文件是看不出什么破绽的。有若干种方法你
可以验证系统文件的完整性。如果你安装的是Red Hat, Caldera, TurboLinux或任何使用RPM的系统。你可
以利用RPM来验证系统文件的完整性: 首先你应该查明你的那些你需要查看的文件来自哪个软件包,使用
rpm命令你可以查明某个文件属于某个包: # rpm -qf /bin/netstat net-tools-1.51-3 然后,可以扫描
整个rpm包来查看那些发生了改变。对没有发生改变的包使用该命令将没有任何输出信息,如下所示:

# rpm -V net-tools

将netstat的5.2版本的二进制可执行文件替换为6.0的版本以后再使用该命令的结果为:

.......T /bin/netstat

这说明/bin/netstat/文件已经被修改。若我使用rpm -qf测试ps和top命令可以得到其属于包procps,然后再
验证包procps的完整性。下面是一个被"黑"的站点的结果:

# rpm -qf /bin/ps procps.2.0.2-2
# rpm -V procps
SM5..UGT /bin/ps
..UGT /usr/bin/top

攻击者入侵到系统中,并且用自己的ps及top命令替代了我们系统中的命令。从而使管理员看不到其
运行的进程,也许是一个sniffer来监听所有的用户所有进出网络的数据并找寻到密码信息。 下面是一个小
的script来扫描你系统的所有的rpm库,并检查所有的包是否被篡改。但是应该注意的是并不是所有该scripts
报告的问题都是说明该系统文件被攻击者破坏。例如你的password文件一般肯定和你安装系统时是不同的:

#!/bin/bash
#
# Run through rpm database and report inconsistencies
# for rpmlist in `rpm -qa`
# These quotes are back quotes
do echo " ----- $rpmlist -----" ;
rpm -V $rpmlist done > /tmp/rpmverify.out

当你运行该scripts时,输出被定向到文件/tmp/rpmverify.out你可以使用less命令查看该文件。但是
由于文本文件如:/etc/passwd, /etc/inetd.conf等很可能显示为被修改过。但是你如何知道这些是管理员
自己修改的还是入侵者修改的呢?方法是:

在你确保你的系统是干净的,没有被攻击者入侵时,你为这些系统文件创建指纹信息。在你怀疑你的系统
被入侵时使用这些这些指纹信息来判定系统是否被入侵。创建文件的指纹信息是通过命令md5sum 来实现的:

# md5sum /etc/passwd
d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd

# md5sum /bin/ps
6d16efee5baecce7a6db7d1e1a088813 /bin/ps

# md5sum /bin/netsat
b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat

这些数据是我的系统上的文件的指纹信息。不同的系统上的文件的 指纹信息一般是不同的,你应该是使
用md5sum来计算自己系统文件的指纹信息。下面是一些你应该创建指纹信息的文件;
/usr/bin/passwd /sbin/portmap /bin/login /bin/ls /usr/bin/top /etc/inetd.conf /etc/services
通过指纹信息你可以决定是否有系统文件被篡改。

四、
上一节中说过,当netstat,ls等命令被修改,从而发现系统已经被入侵,下面该怎么办?根据你系统的重要
性的不同,你有很多种选择。但是我推荐对用户目录,password及其他关键的系统文件进行备份。然后重新
安装系统。但是不要随便就将备份的文件拷贝到新系统,因为攻击者可能在这些文件中隐藏一些非法的东西。

也可以不重新安装系统,而是通过TCP wrapper来限制对主机的访问,并且关闭非关键的网络服务。然后更新
被影响的包。重新"干净"的启动系统是很重要的,但是要实现这点并不容易。若你发现procps或net-tools包
已经被攻击者修改,第一件事情是重新安装干净的包来替换被攻击者做了手脚留下后门的包。一般最好从你的
系统发布者处得到最新的包来重新安装。

一旦攻击者进入到系统其就将在系统上存放一些工具并且将之隐藏起来,使你不容易发现。下面是一个被攻击
者入侵的系统的实例。当系统被攻击者入侵,服务器被限制网络访问,并且替代所有的受影响的包。然后就
需要通过仔细查看log文件来发现重复的企图进入系统。查看/etc/passwd文件,发现一个不属于合法的用户。
进入到该用户的目录下:/home/jon,运行 "ls -l"得到如下的内容:

. .. .. .bashrc .bash_history .screenrc emech.tar.gz

除了一个名字为emech.tar.gz的文件以外,看不出什么异常现象。但是仔细观察,你就会发现系统有两个
".."目录。(指该子目录的上一级目录)是的确很奇怪,我使用命令"cd .."我就会进入到/home目录。原来
其中子目录名字是在两个点后面有一个空格。(".. ")你可以通过如下命令发现:

# cd /home/jon
# echo .* (北联网教程,专业提供视频软件下载)

第1页  第2页  第3页  第4页  第5页  第6页 

……

相关阅读