一天,接到朋友的电话,他们公司的web服务器被投诉发送垃圾邮件,要求紧急处理,朋友让我过去帮他检查一下。我听了很迷惑,web服务器怎么会发送垃圾邮件,朋友告诉我web服务器系统中根本没有安装mail服务,应该是不可能发送垃圾邮件的。直觉告诉我可能是被别人hacking了?
  
  我到了朋友公司的机房,使用securecrt登陆到服务器,ps一下,发现有几个异常的程序,如下图一所示,有一个sendmail程序,还有一个异常的SCREEN程序。肯定是被黑了,有得忙了。

 

 一次linux服务器的入侵分析报告_职场


图一:ps –aux发现的异常进程
   
  用netstat –an看一下,发现比较奇怪的端口1985,还有一个/dev/gpmctl的数据流,以前是没有过的。

 一次linux服务器的入侵分析报告_linux_02


 
图二:netstat –an看到的异常

  来到/var/log目录下,看一下secure日志,这一看,不要紧,一看吓一跳,日志显示,从10月9号上午11:01:22开始一直到10月10号的凌晨03:37:33期间,不断有用户对机器进行ssh的野蛮滥用,而且从日志中可以看到进行弱口令账号测试的不是一台机器,而是来自几台不同的机器,它们分别是
 
140.123.230.*(台湾)
     211.173.47.* (韩国)
     164.164.149.*   (印度)
     210.118.26.*   (韩国)
     217.199.173.*   (英国)
     218.5.117.*   (福建泉州)
     211.90.95.*    (江苏联通)

  这么多机器进行分布式协作来寻找机器上的弱口令,看来如果要查证源头是比较困难的,难道是僵尸网络中的僵尸机器,而且有一个是福建泉州的adsl拨号账户和江苏联通的用户,要查证的话必然要从它开始查了,呵呵,可惜我不是取证专家,查证的事就放在一旁吧。

 一次linux服务器的入侵分析报告_服务器_03


 
图三:/var/log/secure看到的ssh登陆日志

  用last日志看一下过去的登陆记录,如下图四显示,可以看出从域名floman2.mediasat登陆,用nslookup查询竟然找不到这个域名。

 一次linux服务器的入侵分析报告_休闲_04


 
图四:last日志

  再看看wtmp日志,用who wtmp看到如下图五的日志,这里显示的域名是floman2.mediasat.ro,用nslookup可以查到域名服务器是位于罗马尼亚,dns服务器ip为193.231.170.*。

 一次linux服务器的入侵分析报告_休闲_05


 
图五:who  wtmp 看到的日志记录

  我们来定位一下在图一中发现的sendmail程序的来源,用如下图六中的命令。

 一次linux服务器的入侵分析报告_休闲_06


 
图六:找到sendmail的来源

  发现sendmail是位于/etc/log.d/scripts/service目录下,应该就是sendmail脚本就用来转发所谓的垃圾邮件。只需将这些脚本删除,就可以解决发送垃圾邮件的问题。但是服务器中有其它异常的进程,被别人hacking了,这个解决起来就困难多了。
再来定位一下图一中异常的screen程序,用命令 Locate screen来定位,输出如下图所示,看来有很多文件要查啊。从图中可以看出,“.screen”以.开始的目录,这应该是一个隐藏的目录。

 一次linux服务器的入侵分析报告_休闲_07


 
图七:locate  screen定位screen的结果

  来到/home/upload目录,用ls命令看不到,果真是隐藏了。隐藏也没有关系,可以直接进入.screen目录。如下图八。

 一次linux服务器的入侵分析报告_linux_08


 
图八:进入upload目录,发现里面的子目录都是隐藏的

  用ls -la 发现有很多为0字节的文件,如下图十二所示,类型以p开头的,这是管道文件,管道是linux下的一个重要概念,传统的文件是把一个程序的输出经过暂存文件转换成另一个程序的输入,而管道的作用是把一个程序的输出接到另一个程序的输入,而不经过任何中间文件。管道的特性也决定了我们不能够看到这里文件的内容。

 一次linux服务器的入侵分析报告_服务器_09


 
图九:进入.screen目录后看到的管道文件

  进入到/home/upload中的文件名为空的隐藏目录,发现其中有2个子目录,如下图十所示。

 一次linux服务器的入侵分析报告_休闲_10


 
图十:进入到文件名为空的目录下看到的子目录

  进入到scan目录,里面的内容如下图十一所示,其中go.sh和s是脚本。

 一次linux服务器的入侵分析报告_职场_11


 
图十一:scan目录中的文件

  来到mech目录,用ls查看里面的内容,如下图十二所示。

 一次linux服务器的入侵分析报告_linux_12


 
图十二:mech目录中的文件

  关于这2个目录里文件的具体功能,请参考下面的分析,这里就不再细说了,只简单的说说大概的功能,目录scan里的程序实现对局域网内开放某个端口的机器扫描,并保存扫描结果,目录mech里是一个bot程序,当运行里面的bash程序时会自动连接到IRC聊天室。恶意代码

  在启动文件中,我们发现一个异常的程序,见下图十三中的sntfs,开始我们猜想应该和最初发现的图一中的sendmail有关,为证明这个结果,将机器重启后果然发现还有sendmail程序运行,但是已经没有了./SCREEN,这也就说明了这个sntfs是sendmail的一个连接。我们在启动配置文件中将其删除。

 一次linux服务器的入侵分析报告_linux_13


 
               图十三:/etc/rc.d/rc.local启动脚本中的异常
  本来以为删除了启动脚本中的异常程序,以及upload中的隐藏文件夹’ ‘和’.screen’和/etc/log.d这个目录就行了,后来在检查日志messages的时候,发现一个异常如下图十四。

 一次linux服务器的入侵分析报告_服务器_14


 
图十四:More /var/log/messages发现的异常

  发现一个uid=0的bone用户,uid=0不是管理员用户吗?我们到/etc/passwd中发现果真是存在一个root用户bone,如图十五所示,说明入侵者已经取得了系统的最高权限。将其删除。

 一次linux服务器的入侵分析报告_职场_15


 
图十五: Vi /etc/passwd

  因为机器中存在sendmail的脚本,故有邮件存在,目录为/var/spool/mail,经查看发现存在如下的几个文件,都是为空。删除这个目录(Rm –rf  mail),注意到/etc/passwd存在一个mail用户,将这个删除。

 一次linux服务器的入侵分析报告_服务器_16


 
                        图十六:/var/spool/mail中的文件

  将/etc/log.d/中的sendmail脚本删除并将/home/upload两个2目录打包带走,呵呵,手中又多了几个工具。
恶意代码分析

  我们在自己的机器上将scan和mech这两个目录上传到自己的机器上,先看scan的内容。

 一次linux服务器的入侵分析报告_linux_17


 
图十七:scan目录中的文件

  先看看scan.conf文件中的内容 ,如下图十八所示,从图中我们可以看出scan.conf里实际上就是一个常用用户名和口令的字典,猜想应该是用来寻找弱口令账号的文件。   

                 

 一次linux服务器的入侵分析报告_linux_18


 
图十八:scan.conf文件的内容格式

  我们再来回顾一下脚本go.sh中的内容,如下图十九所示,

 一次linux服务器的入侵分析报告_linux_19


 
图十九:脚本go.sh中的内容

  从脚本可以看出,是运行ss程序来进行扫描,结果保存在bios.txt文件中,然后对结果进行排序和合并后生成一个mfu.txt文件,然后执行ssh-scan程序,只是这个程序没有在这个目录中找到,不知是入侵者忘记修改脚本还是已经将该程序删除。

  我们运行一下ss命令,看看结果如下图二十。从这个图可以看出ss程序实际上是对一个网段内的ip地址开放某个端口的进行扫描,并将结果(即ip地址)保存在一个bios.txt文件中。

 一次linux服务器的入侵分析报告_休闲_20


 
                  图二十:运行ss程序的结果

  我们再来看一下脚本s中的内容,如图二十一所示,从脚本中可以看出,脚本是执行pscan程序来扫描22端口,然后生成一个 的文件,然后对这个文件排序和合并后生成一个ip.conf的文件,由此可见scan目录中 应该就是运行pscan的运行结果,ip.conf应该是就是执行脚本后排序合并后的结果(结合下图中的more ip.conf的内容,见下图二十二,也证明了这个结论)。但是从运行程序pscan看,如下图二十三,与ss程序的功能类似,也是对某个ip范围内开放某个端口的机器进行扫描。

 一次linux服务器的入侵分析报告_linux_21


 
图二十一:脚本s的内容

 一次linux服务器的入侵分析报告_休闲_22


 
图二十二:ip.conf中的内容

 一次linux服务器的入侵分析报告_职场_23


 
图二十三:执行pscan程序

  只是脚本中的程序s2还不知道完成什么功能,我们执行脚本中的命令./s2 106,见下图二十四,除了显示let's see what we got:外什么也没有,有没有源码,具体实现什么功能还不知道,用./s2 –h也是一样的结果。这是一个疑问。


 

 一次linux服务器的入侵分析报告_休闲_24

 
图二十四:执行程序s2

  对于程序screen,我在自己的机器上运行screen程序,发现screen运行后会有一个SCREEN的进程存在,这也充分证明了我们最初在机器中发现的异常进程./SCREEN是有这个程序执行的。但是从执行结果来看,这个程序除了能清屏刷屏外并没有其它特别的功能。
我们再来重点分析mech中的内容。用ls查看mech的结果如下图二十五所示:

 一次linux服务器的入侵分析报告_服务器_25


 
图二十五:mech目录中的文件

  我们先来看看mech.help,从这个帮助来看,果然有bot的功能,应该是bot程序。

 一次linux服务器的入侵分析报告_休闲_26


 
图二十六:mech.help文件中内容

  再往下看,如下图所示,果然是一些bot命令。除了如下图二十七所列出的access,add,addserver等命令,还有away,ban,banlist,cchan,chaccess,channels,chat,clearshit,clvl,cmd,core,cserv,ctcp,cycle,del,delserver,deop,die,do,down,echo,esay,flood,forget,help,host,idle,insult,invite,join,kb,kick,ks,kslist,last,link,links,load,loadlevels,Loadlists,lusers,me,mode,msg,names,nextserver,nick,ontime,op,part,passwd,qshit,serverlist,set,setpass,shit,shitlist,shitlvl,showidle,shutdown,siteban,sitekb,spawn,spy,spylist,spymsg,statmsg,status,steal,time,tog,topic,unban,unvoice,up,uptime,usage,user,userhost,userlist,ustats,ver,verify,voice,wall,who,whois,
Whom,togaop,togas,togcc,togck,togdcc,togenfm,togik,togprot,togpub,togrk,togshit,
Togso,setaaway,setaub,setavoice,setbanmodes,setenfm,setfpl,setikt,setmal,setmpl,setopmodes,还有类似TogTop,TogSD,SetCKL,SetBT,SetMDL,SetMBL,SetMKL,SetFL,SetNCL(// unsorted, not up to date //)的命令。从这些命令来看,这是一个bot程序无疑了。

 一次linux服务器的入侵分析报告_职场_27


 
                        图二十七:mech.help中的命令

  我们来看一下1.users文件,我们可以看到如下图二十八的内容,结合上图 add和access命令中的handle ,aop,port以及access和channel字段,我们可以猜测这是一个bot用户的相关信息。而且经进一步查看可以看到2.users,3.users和emech.users的内容是一样的。

 一次linux服务器的入侵分析报告_linux_28


 
图二十八:1.users中的内容

 再来看一下mech.set中的内容,如下图二十九,这是一个bot用户的配置文件。

 一次linux服务器的入侵分析报告_休闲_29


 
图二十九:mech.set中的内容

  其中列出了如下的server,其中的它们分别属于地区为:
SERVER  216.152.77.*  6667     (美国/加拿大)
SERVER  194.134.7.*  6667     (荷兰)
SERVER  195.197.175.* 6667     (芬兰)
SERVER  66.198.160.*   6667     (加拿大)
SERVER  195.204.1.*  6667     (挪威)
SERVER  66.197.0.*   6667     (美国)
SERVER  193.110.95.*   6667     (瑞士)

  我们运行bash脚本,运行时见下图三十,然后用netstat –an看开启的端口,如图三十一,果真看到本机去连接195.197.175.*和195.204.1.* 的6667端口,而且这两个ip正是上面配置文件中的2个ip。由此可见确实是一个bot程序。

 一次linux服务器的入侵分析报告_服务器_30


 
图三十:运行bash脚本的结果

 一次linux服务器的入侵分析报告_职场_31


 
图三十一:netstat –an看到的连接到IRC server的6667端口

  这次的对web服务器的入侵检测是一次宝贵的经验,通过调查分析和日志取证,找出异常程序和入侵帐户。从我们后面的分析日志中,分析得出,系统被入侵的原因是因为存在一个存在密码为passwd的弱口令帐号,入侵者通过探测到这个弱口令帐户,远程登陆到系统并且利用一些方法提高了权限,最后得到了管理员root权限。幸亏是这次垃圾邮件被投诉从而检查出来,否则还不知道要过多久才会检查到系统中被人入侵了。由此可见,给系统中的帐户设置复杂的密码是很有必要的。这次入侵检测虽然完成,但是对系统的危害并没有消除,因为我们不能确定系统中的程序是否经过了改写?系统中是否存在其它的隐藏帐户。最稳妥的方法是在接下来的几周时间内对系统进行紧密监视,查看是否有异常的流量。另外一个更彻底的办法就是对系统的重要内容备份,然后重新安装和应用软件,这样可以做到“标本兼治”的目的。操作系统

  这次的入侵检测对我来说受益匪浅,希望大家能从中认识到安全的重要性,这样才能提高信息网络安全。