一次Linux系统被服务器被rootkit攻击的处理思路和处理过程
IT行业发展到现在,安全问题已经变得至关重要,从最近的“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞。
一次Linux被入侵后的分析
下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Linux系统下最常见的攻击手段和攻击方式。
1、受攻击现象
这是一台客户的门户网站服务器,托管在电信机房,客户接到电信的通知:由于此服务器持续对外发送数据包,导致100M带宽耗尽,于是电信就切断了此服务器的网络。此服务器是Centos55版本,对外开放了80、22端口。
从客户那里了解到,网站的访问量并不大,所以带宽占用也不会太高,而耗尽100M的带宽是绝对不可能的,那么极有可能是服务器遭受了流量攻击,于是登录服务器做详细的检测。
2、初步分析
在电信人员的配合下通过交换机对该服务器的网络流量进行了检测,发现该主机确实存在对外80端口的扫描流量,于是登录系统通过“netstat –an”命令对系统开启的端口进行检查,可奇怪的是,没有发现任何与80端口相关的网络连接。接着使用“ps –ef”、“top”等命令也没有发现任何可疑的进程。于是怀疑系统是否被植入了rootkit。
为了证明系统是否被植入了rootkit,我们将网站服务器下的ps、top等命令与之前备份的同版本可信操作系统命令做了md5sum校验,结果发现网站服务器下的这两个命令确实被修改过,由此断定,此服务器已经被入侵并且安装了rootkit级别的后门程序。
3、断网分析系统
由于服务器不停向外发包,因此,首先要做的就是将此服务器断开网络,然后分析系统日志,寻找攻击源。但是系统命令已经被替换掉了,如果继续在该系统上执行操作将变得不可信,这里可以通过两种方法来避免这种情况,第一种方法是将此服务器的硬盘取下来挂载到另外一台安全的主机上进行分析,另一种方式就是从一个同版本可信操作系统下拷贝所有命令到这个入侵服务器下某个路径,然后在执行命令的时候指定此命令的完整路径即可,这里采用第二种方法。
我们首先查看了系统的登录日志,查看是否有可疑登录信息,执行如下命令:
more /var/log/secure |grep Accepted
通过对命令输出的查看,有一条日志引起了我们的怀疑:
Oct 3 03:10:25 webserver sshd[20701]: Accepted password for mail from 6217163186 port 53349 ssh2
这条日志显示在10月3号的凌晨3点10分,有个mail帐号从6217163186这个IP成功登录了系统,mail是系统的内置帐号,默认情况下是无法执行登录操作的,而6217163186这个IP,经过查证,是来自爱尔兰的一个地址。从mail帐号登录的时间来看,早于此网站服务器遭受攻击的时间。
接着查看一下系统密码文件/etc/shadow,又发现可疑信息:
mail:$1$kCEd3yD6$W1evaY5BMPQIqfTwTVJiX1:15400:0:99999:7:::
很明显,mail帐号已经被设置了密码,并且被修改为可远程登录,之所以使用mail帐号,猜想可能是因为入侵者想留下一个隐蔽的帐号,以方便日后再次登录系统。
然后继续查看其他系统日志,如/var/log/messages、/var/log/wtmp均为空文件,可见,入侵者已经清理了系统日志文件,至于为何没有清空/var/log/secure文件,就不得而知了。
4、寻找攻击源
到目前为止,我们所知道的情况是,有个mail帐号曾经登录过系统,但是为何会导致此网站服务器持续对外发送数据包呢?必须要找到对应的攻击源,通过替换到此服务器上的ps命令查看系统目前运行的进程,又发现了新的可疑:
nobody 22765 1 6 Sep29 4-00:11:58 t
这个t程序是什么呢,继续执行top命令,结果如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22765 nobody 15 0 1740m 1362m 1228 S 983 915 2892:19 t
从输出可知,这个t程序已经运行了4天左右,运行这个程序的是nobody用户,并且这个t程序消耗了大量的内存和cpu,这也是之前客户反映的网站服务器异常缓慢的原因,从这个输出,我们得到了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:
进入内存目录,查看对应PID目录下exe文件的信息:
[root@webserver ~]# /mnt/bin/ls -al /proc/22765/exe
lrwxrwxrwx 1 root root 0 Sep 29 22:09 /proc/22765/exe - /var/tmp/…/apa/t
这样就找到了进程对应的完整程序执行路径,这个路径很隐蔽,由于/var/tmp目录默认情况下任何用户可读性,而入侵者就是利用这个漏洞在/var/tmp目录下创建了一个“…”的目录,而在这个目录下隐藏着攻击的程序源,进入/var/tmp/…/目录,发现了一些列入侵者放置的rootkit文件,列表如下:
[root@webserver ]#/mnt/bin/ls -al
drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 apa
-rw-r--r-- 1 nobody nobody 0 Sep 29 22:09 apatgz
drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 caca
drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 haha
-rw-r--r-- 1 nobody nobody 0Sep 29 22:10 kktargz-
rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 login
-rw-r--r-- 1 nobody nobody 0 Sep 29 22:10 logintgz
-rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 z
通过对这些文件的分析,基本判断这就是我们要找的程序攻击源,其中:
1)、z程序是用来清除系统日志等相关信息的,例如执行:
/z 6217163186
这条命令执行后,系统中所有与6217163186有关的日志将全部被清除掉。
2)、在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去读apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有ip信息,进而获取远程主机的权限,可见这个网站服务器已经是入侵者的一个肉鸡了。
3)、haha目录里面放置的就是用来替换系统相关命令的程序,也就是这个目录下的程序使我们无法看到操作系统的异常情况。
4)、login程序就是用来替换系统登录程序的木马程序,此程序还可以记录登录帐号和密码。
5、查找攻击原因
到这里为止,服务器上遭受的攻击已经基本清晰了,但是入侵者是如何侵入这台服务器的呢?这个问题很重要,一定要找到入侵的根源,才能从根本上封堵漏洞。
为了弄清楚入侵者是如何进入服务器的,需要了解下此服务器的软件环境,这台服务器是一个基于java的web服务器,安装的软件有apache2063、tomcat55,apache和tomcat之间通过mod_jk模块进行集成,apache对外开放80端口,由于tomcat没有对外开放端口,所以将问题集中到apache上面。
通过查看apache的配置发现,apache仅仅处理些静态资源请求,而网页也以静态页面居多,所以通过网页方式入侵系统可能性不大,既然漏洞可能来自于apache,那么尝试查看apache日志,也许能发现一些可疑的访问痕迹,通过查看accesslog文件,发现了如下信息:
6217163186 - - [29/Sep/2013:22:17:06 +0800] "GET http://wwwxxxcom/cgi-bin/awstatsplconfigdir=|echo;echo;ps+-aux%00 HTTP/10" 200 12333 "-" "Mozilla/50 (Windows; U; Windows NT 51; pt-BR; rv:181) Gecko/20121010 Firefox/20"
6217163186 - - [29/Sep/213:22:17:35 +0800] "GET http://wwwxxxcom/cgi-bin/awstatsplconfigdir=|echo;echo;cd+/var/tmp//haha;ls+-a%00 HTTP/10" 200 1626 "-" "Mozilla/50 (Windows; U; Windows NT 51; pt-BR; rv:181) Gecko/20121010 Firefox/20"
至此,发现了漏洞的根源,原来是awstatspl脚本中configdir的一个漏洞,通过了解此服务器的应用,客户确实是通过一个Awstats的开源插件来做网页访问统计,通过这个漏洞,攻击者可以直接在浏览器上操作服务器,例如查看进程、创建目录等。通过上面第二条日志可以看出,攻击者正常浏览器执行切换到/var/tmp//haha目录的操作。
这个脚本漏洞挺可怕的,不过在Awstats官网也早已给出了修补的方法,对于这个漏洞,修复方法很简单,打开awstatspl文件,找到如下信息:
if ($QueryString =~ /configdir=([^]+)/i)
{
$DirConfig=DecodeEncodedString("$1");
}
修改为如下即可:
if ($QueryString =~ /configdir=([^]+)/i)
{
$DirConfig=DecodeEncodedString("$1");
$DirConfig=~tr/a-z0-9_/-////a-z0-9_/-////cd;
}
6、揭开谜团
通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下:
(1)攻击者通过Awstats脚本awstatspl文件的漏洞进入了系统,在/var/tmp目录下创建了隐藏目录,然后将rootkit后门文件传到这个路径下。
(2)攻击者通过植入后门程序,获取了系统超级用户权限,进而控制了这台服务器,通过这台服务器向外发包。
(3)攻击者的IP地址6217163186可能是通过代理过来的,也可能是攻击者控制的其他肉鸡服务器。
(4)攻击者为了永久控制这台机器,修改了系统默认帐号mail的信息,将mail帐号变为可登录,并且设置了mail帐号的密码。
(5)攻击者在完成攻击后,通过后门程序自动清理了系统访问日志,毁灭了证据。
通过对这个入侵过程的分析,发现入侵者的手段还是非常简单和普遍的,虽然入侵者删除了系统的一些日志,但是还是留下了很多可查的踪迹,其实还可以查看用户下的bash_history文件,这个文件是用户操作命令的历史记录。
7、如何恢复网站
由于系统已经文件被更改和替换,此系统已经变得完全不可信,因此建议备份网站数据,重新安装系统,基本步骤如下:
(1)安装稳定版本的操作系统,删除系统默认的并且不需要的用户。
(2)系统登录方式改为公钥认证方式,避开密码认证的缺陷。
(3)安装更高版本的apache和最新稳定版本的Awstats程序。
(4)使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。
服务器和你是不是在同一网段?
从网络角度上来说,向服务器发包软件一般会应用服务器的IP,而网络实际建立链路是在数据链路层,也就是说你的主机实际上是向服务器的MAC发包。
服务器的MAC是需要ARP来解析的,如果服务器断电,那么主机不会收到服务器的ARP应答,也就无法获得服务器MAC。这样表面上看主机不知道将包发往何处,但从OSI角度分析,主机根本无法完成数据链路层封装,不能将封装递交给物理层,也就是说根本不能从主机出去。(无法完成封装UDP)
但是如果服务器是在不同网段,并且数据需要从网关走,那么上述情况不适用。
如果地图很大的话,判断和其他人的距离,只给一定距离内的人发送数据坐标,另外还可以通过改变发送频率来增强游戏性能。
如果这100人是同屏(就是任意两个人之间都要互相看到对方)的话,基本符合是你说的这样
区别在于 不是 “高频率的发送”,而是转发客户端的移动操作包。
因为人物移动是客户端发包给服务器的,发的包中包含的数据无非两种,一种是发目标点,一种是发移动方向。
而服务器只是把这个包转发给其他人,即广播给另外99个人。
客户端发一个包,服务器就广播一个,客户端发100个,服务器就广播100个。
可以优化的空间在:
1、如果客户端前后两个包发的是同一个目标点,或者同样的移动方向,第二个包就可以不用再转发。
2、如果客户端发包频率超过了一个阀值,服务器可以选择性的丢弃部分包,并在广播包中带上这个人在服务器上的当前位置,由接收的客户端做插值。
rz中的r意为received(接收),输入rz时、意为服务器接收文件,既将文件从本地上传到服务器。
sz中的s意为send(发送),输入sz时、意为服务器要发送文件,既从服务器发送文件到本地,或是说本地从服务器上下载文件。
注:不论是send还是received,动作都是在服务器上发起的。
上传文件只需在shell终端仿真器中输入命令"rz",即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下。
从1层至7层都会涉及到的。每层对应一个封装方式。OSI演变成TCP/IP参考模型。
将7层变成了5层,前四层(物理层、数据链路层、网络层、传输层)没动,将后三层合并成了应用层。所以:
物理层:比特 用电平0 +5v 表示0和1
数据链路层:帧
网络层:包 ip协议
传输层:段 主要协议tcp udp
应用层:端口号 使用端口号区分不同的应用
A电脑网卡-----(比特、帧)-------A交换机-------(数据帧)----------A路由器--------(数据包)----------B路由器--------(帧)B交换机------(比特)-----B电脑网卡(可能有点歧义)
例: 打开一个网页数据的传输过程
1打开一个网页,首先必须是将域名解析到对方服务器的ip地址。系统查看本机网卡dns,并比对本机ip地址,看是否是一个网段?(一般都不是)发现不是一个网段,需要将解析数据发送到网关ip中转,查看本机arp缓存,发现没有对应的ip与mac地址arp缓存,则发送arp广播包,网关回应arp报文告知网关mac地址。数据将封装成数据帧发送到网关处。
2网关收到数据帧,根据目的地址查找路由表,根据路由将数据帧封装成数据包发送到下一跳设备上(运营商路由),路由器需要做nat转换,并维护nat转换表项,内网ip、端口对应路由器的外网ip的一个端口。
3下一跳设备收到包后,根据目的地址再次转发到下一设备(需要多次转发,可使用tracert命令查看数据包流经过程,在运营商网络中没有nat转换,数据包没有改变的转发)
在有:数据包转发,源地址是首次发包的源地址。目的地址是dns服务器,此过程源地址和目的地址在数据包不会改变。改变的只是在传输途中的数据帧mac地址的变化。
4最终到达dns服务器,服务器将此域名对应的ip地址在回发回来。中间过程省略。到达用户路由器后,路由器根据源目的地址查找nat转换表项,并修改数据包再次回发到电脑上。
5电脑获知此域名的ip地址。再次发起http的会话连接。也是跟上面一样。
你这个应该说不知道该怎么填。像路由器--路由器 肯定会先协商物理层、之后是数据链路层mac地址寻址、之后就是网络层数据包的封装。
WPE抓包发包的用法:
打开wpe程序,然后执行游戏。
2进入游戏后再按[Alt+Tab]跳出游戏。
3到wpe的窗口,这时你点选"SELECT GAME"里面,会有一大串的东西。选最下面的那个,就是你正在玩的那个游戏。 (他上面所显示的字并不是窗口名字,不同于普通修改器,所以别因为找不到名字就以为程序坏了)
4再进入游戏,找个要测试的目标。
5 接下来按下停止键,你会看到wpe中有着一堆数字,前面还有"R"或"S",其中的"R"就是receive。也就是你从远程主机接收到的讯息,这个部分并不是我们所要注意的。因为资料是存在远程主机的,所以我们传(也就是"S"-Sent)什么过去远程主机才是最重要的,这时候拿出你的纸笔,把那Sent的信息都抄下来。
WPE简介:
WPE(Winsock Packet Editor),它的中文名称是网络封包编辑器。在大多数的编程工具中winsock已经封装成一个控件,成为网络编程的控件,是非常方便的,利用这个控件,编程工具就可以编写外挂工具。
Wpe工作原理和可行性分析 :Client/server模式网络游戏,我们的信息全在服务器上面,想从服务器上修改我们的个人用户信息可,能性为微乎其微,客户端安装在你的机器上,玩游戏的时候,你发出指令,其实就是向服务器发送封包,服务器接收到封包后进行分析,然后返回结果,结果也是以封包的形式发送到你的机器上,你的机器接收到後就可以看到结果了。Wpe所要改的,不是游戏里面的数值,而是伪造信息封包。就是我们用Wpe所要改的,并不是"生命力由100变成10000"之类的东西, 这种东西无法用Wpe改, 我们要改的可能是把"我卖了一个500元的东西" 改成"我卖了一个50000元的东西"或把"我得了10的exp"改成"我得了10000的exp"之类的,或者是明明身上没东西还一直卖"500元的东西"或没怪物还"一直打10的exp"。
也就是说WPE可以截取网络上的信息,拿封包分析,改里面的值。如果是坏人用到的话,后果不可想像。更可怕的是用它来截取网络密码等一些信息。
0条评论