一次Linux系统被攻击的分析过程

Linux 系统在IT 系统中的使用越来越多,虽然从某种角度上讲,Linux 要比Win 安全一点,但Linux 下也是有病毒一说,下面是从2013年11期程序员杂志上转载的一篇Linux 被入侵的处理过程,版权归原作者所有。

下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit

攻击是Linux系统下最常见的攻击手段和攻击方式。

1 受攻击现象

这是一台客户的门户网站服务器,托管在电信机房,客户接到电信的通知:由于此服务器持续对外发送数据包,导致100M带宽耗尽,于是电信就切断了此服务器的网络。此服务器是Centos5.5版本,对外开放了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 62.17.163.186 port 53349 ssh2

这条日志显示在10月3号的凌晨3点10分,有个mail帐号从62.17.163.186这个IP成功登录了系统,mail是系统的内置帐号,默认情况下是无法执行登录操作的,而62.17.163.186这个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 98.3 91.5 2892:19 .t

从输出可知,这个t程序已经运行了4天左右,运行这个程序的是nobody用户,并且这个t程序消耗了大量的内存和cpu,这也是之前客户反映的网站服务器异常缓慢的原因,从这个输出,我们得到了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:

进入内存目录,查看对应PID目录下exe文件的信息:

[[email protected] ~]# /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文件,列表如下:

[[email protected] ...]#/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 apa.tgz 
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 0 Sep 29 22:10 kk.tar.gz 
-rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 login 
-rw-r--r-- 1 nobody nobody 0 Sep 29 22:10 login.tgz 
-rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 z

通过对这些文件的分析,基本判断这就是我们要找的程序攻击源,其中:

1)、 z程序是用来清除系统日志等相关信息的,例如执行:
./z 62.17.163.186
这条命令执行后,系统中所有与62.17.163.186有关的日志将全部被清除掉。

2)、在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去读apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有ip信息,进而获取远程主机的权限,可见这个网站服务器已经是入侵者的一个肉鸡了。

3)、 haha目录里面放置的就是用来替换系统相关命令的程序,也就是这个目录下的程序使我们无法看到操作系统的异常情况。

4)、login程序就是用来替换系统登录程序的木马程序,此程序还可以记录登录帐号和密码。

5 查找攻击原因

到这里为止,服务器上遭受的攻击已经基本清晰了,但是入侵者是如何侵入这台服务器的呢?这个问题很重要,一定要找到入侵的根源,才能从根本上封堵漏洞。

为了弄清楚入侵者是如何进入服务器的,需要了解下此服务器的软件环境,这台服务器是一个基于java的web服务器,安装的软件有apache2.0.63、tomcat5.5,apache和tomcat之间通过mod_jk模块进行集成,apache对外开放80端口,由于tomcat没有对外开放端口,所以将问题集中到apache上面。

通过查看apache的配置发现,apache仅仅处理些静态资源请求,而网页也以静态页面居多,所以通过网页方式入侵系统可能性不大,既然漏洞可能来自于apache,那么尝试查看apache日志,也许能发现一些可疑的访问痕迹,通过查看access.log文件,发现了如下信息:

62.17.163.186 - - [29/Sep/2013:22:17:06 +0800] "GET http://www.xxx.com/cgi-bin/awstats.pl?configdir=|echo;echo;ps+-aux HTTP/1.0" 200 12333 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1) Gecko/20121010 Firefox/2.0" 
62.17.163.186 - - [29/Sep/213:22:17:35 +0800] "GET http://www.xxx.com/cgi-bin/awstats.pl?configdir=|echo;echo;cd+/var/tmp/.../haha;ls+-a HTTP/1.0" 200 1626 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1) Gecko/20121010 Firefox/2.0"

至此,发现了漏洞的根源,原来是awstats.pl脚本中configdir的一个漏洞,通过了解此服务器的应用,客户确实是通过一个Awstats的开源插件来做网页访问统计,通过这个漏洞,攻击者可以直接在浏览器上操作服务器,例如查看进程、创建目录等。通过上面第二条日志可以看出,攻击者正常浏览器执行切换到/var/tmp/.../haha目录的操作。

这个脚本漏洞挺可怕的,不过在Awstats官网也早已给出了修补的方法,对于这个漏洞,修复方法很简单,打开awstats.pl文件,找到如下信息:

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脚本awstats.pl文件的漏洞进入了系统,在/var/tmp目录下创建了隐藏目录,然后将rootkit后门文件传到这个路径下。

(2) 攻击者通过植入后门程序,获取了系统超级用户权限,进而控制了这台服务器,通过这台服务器向外发包。

(3) 攻击者的IP地址62.17.163.186可能是通过代理过来的,也可能是攻击者控制的其他肉鸡服务器。

(4) 攻击者为了永久控制这台机器,修改了系统默认帐号mail的信息,将mail帐号变为可登录,并且设置了mail帐号的密码。

(5) 攻击者在完成攻击后,通过后门程序自动清理了系统访问日志,毁灭了证据。

通过对这个入侵过程的分析,发现入侵者的手段还是非常简单和普遍的,虽然入侵者删除了系统的一些日志,但是还是留下了很多可查的踪迹,其实还可以查看用户下的.bash_history文件,这个文件是用户操作命令的历史记录。

7 如何恢复网站

由于系统已经文件被更改和替换,此系统已经变得完全不可信,因此建议备份网站数据,重新安装系统,基本步骤如下:

(1) 安装稳定版本的操作系统,删除系统默认的并且不需要的用户。
(2) 系统登录方式改为公钥认证方式,避开密码认证的缺陷。
(3) 安装更高版本的apache和最新稳定版本的Awstats程序。

(4) 使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。

转。

时间: 2024-10-10 15:34:07

一次Linux系统被攻击的分析过程的相关文章

【转】阿里云Linux系统被攻击的处理过程

4-22日 19:48分,在等女儿跳舞下课的时候,在"多看"进入大刘等人的<毁灭之城:地球碎块>,读到了"诅咒 3.0"病毒出现的时候,阿里云发来短信"尊敬的用户,您的云服务器x.x.x.x存在对外DDOS攻击,请您务必尽快参考云账号邮箱中邮件进行处理,逾期将关停云服务器[阿里云]".用"gmail"打开邮件,没有太多有用的内容:"经检测您的云服务器(x.x.x.x)存在恶意发包行为,需要您尽快排查您的安

嵌入式 Linux 系统移植——BSP分析

嵌入式 Linux 系统移植--BSP分析 一.BSP简介 嵌入式系统由硬件环境.嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求.硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题.解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,硬件相关层就是嵌入式系统中的板级支持包 BSP(Board Support Pack

linux系统web日志分析脚本

linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照互联网上图文教程也无从下手.对于此情况我编写了一个web日志分析脚本,功能比较简单,无需配置,有需要的朋友可以再尝试一下.  脚本地址: gbk版(一般ssh客户端不用调整直接可用: wget http://jinxiang.oss-cn-hangzhou.aliyuncs.com/weblogch

Linux系统开机和启动过程

提起操作系统这个词,想必大家并不陌生,有电脑端操作系统和手机端操作系统.电脑端操作系统较为熟悉的就是微软开发的windows操作系统,还有一种就是大家稍微陌生的linux操作系统,而手机端的操作系统分别为iOS操作系统,Android操作系统.而今天小编就给大家着重讲讲Linux系统开机和启动过程. 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动. 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件. 运行init init 进程

linux系统死机分析及解决方法

一.常见死机原因 二.日志分析 日志系统,通过rsyslog.service服务进行控制,分别用于记录系统内核和各应用程序的日志信息.配置文件/etc/rsyslog.conf /var/log/messages    记录系统内核消息及各种应用程序的公共日志信息,包括启动.IO错误.网络错误.程序报错等,对于未使用独立日志文件的应用程序或服务,一般都可以从该文件获得相关事件的日志记录信息. /var/log/cron    记录crond计划任务产生的事件消息 /var/log/dmesg  

【linux】记录一次系统被攻击的处理过程

今天登录zabbix监控网页的时候发现非常卡,登录到系统里面以后,通过top看,CPU已经100%了,有一个叫做httpds的进程占用,第一反映就是系统被入侵了,下面记录了处理过程,仅供各位参考 通过top发现CPU占用过高达到100%,是httpds进程占用,正常的apache进程应该是httpd,感觉这个进程异常, 通过ps -ef|grep httpds查看,可执行文件在tmp下,这个肯定不正常,决定删除httpds这个文件和进程再看 删除以后,发现CPU进程还是很高,说明还有其他进程在后

linux系统下nodejs安装过程随记

首先下载适合的版本.这里我使用的是node v.10.36 先介绍编译安装的详细过程. 下载该版本: wget http://nodejs.org/dist/v0.10.36/node-v0.10.36-linux-x64.tar.gz 解压缩: tar xf node-v0.10.36-linux-x64.tar.gz #更改目录名称 mv node-v0.10.36-linux-x64 nodejs #移动到指定目录 mv nodejs /data/ cd /data/nodejs/bin

linux系统被入侵后处理过程

背景 --> 操作系统:Ubuntu12.04_x64 运行业务:公司业务系统,爬虫程序,数据队列. 服务器托管在外地机房. 故障起因 --> 突然,频繁收到一组服务器ping监控不可达邮件,赶紧登陆zabbix监控系统查看流量状况. 可见流量已经达到了800M左右,肯定不正常,马上尝试SSH登陆系统,不幸的事,这种情况是很难登录系统操作的. 该怎么办呢? 排查故障 --> 第一反应是想马上切断外部网络,通过内网连接查看.可是这样一来流量就会消失,但也很难查找攻击源了. 于是联系机房协助

《Linux内核分析》第七周笔记 进程的切换和系统的一般执行过程

20135132陈雨鑫 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.进程调度与进程调度的时机分析 1.进程调度 不同类型的进程有不同的调度需求 第一种分类:       I/O-bound            频繁的进行I/O           通常会花费很多时间等待I/O操作的完成     CPU-bound            计算密集型