【安全】一次 Linux 系统被攻击的分析过程
sinye56 2024-11-09 13:38 10 浏览 0 评论
IT行业发展到现在,安全问题已经变得至关重要,从最近的“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞。
下面通过一个案例介绍下当一个服务器被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文件的信息:
[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 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 0Sep 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
通过对这些文件的分析,基本判断这就是我们要找的程序攻击源,其中:
- z程序是用来清除系统日志等相关信息的,例如执行:./z 62.17.163.186 这条命令执行后,系统中所有与62.17.163.186有关的日志将全部被清除掉。
- 在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去读apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有ip信息,进而获取远程主机的权限,可见这个网站服务器已经是入侵者的一个肉鸡了。
- haha目录里面放置的就是用来替换系统相关命令的程序,也就是这个目录下的程序使我们无法看到操作系统的异常情况。
- 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%00
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%00 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、揭开谜团
通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下:
- 攻击者通过Awstats脚本awstats.pl文件的漏洞进入了系统,在/var/tmp目录下创建了隐藏目录,然后将rootkit后门文件传到这个路径下。
- 攻击者通过植入后门程序,获取了系统超级用户权限,进而控制了这台服务器,通过这台服务器向外发包。
- 攻击者的IP地址62.17.163.186可能是通过代理过来的,也可能是攻击者控制的其他肉鸡服务器。
- 攻击者为了永久控制这台机器,修改了系统默认帐号mail的信息,将mail帐号变为可登录,并且设置了mail帐号的密码。
- 攻击者在完成攻击后,通过后门程序自动清理了系统访问日志,毁灭了证据。
通过对这个入侵过程的分析,发现入侵者的手段还是非常简单和普遍的,虽然入侵者删除了系统的一些日志,但是还是留下了很多可查的踪迹,其实还可以查看用户下的.bash_history文件,这个文件是用户操作命令的历史记录。
7、如何恢复网站
由于系统已经文件被更改和替换,此系统已经变得完全不可信,因此建议备份网站数据,重新安装系统,基本步骤如下:
- 安装稳定版本的操作系统,删除系统默认的并且不需要的用户。
- 系统登录方式改为公钥认证方式,避开密码认证的缺陷。
- 安装更高版本的apache和最新稳定版本的Awstats程序。
- 使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。
相关推荐
- linux安装FTP
-
1、在nkftp目录下安装ftp,进入到nkftp里面[root@localhostbin]#cd/data/nkftp执行安装命令:[root@localhostnkftp]#rpm-i...
- LINUX下搭建FTP服务器
-
FTP服务器介绍FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(App...
- Linux下如何进行FTP设置
-
目录:一、Redhat/CentOS安装vsftp软件二、Ubuntu/Debian安装vsftp软件一、Redhat/CentOS安装vsftp软件1.更新yum源yumupdate-y2.安...
- 推荐使用集串口 SSH远程登录和FTP传输三合一工具MobaXterm
-
来源:百问网作者:韦东山本文字数:1216,阅读时长:4分钟在以前的资料里,串口和SSH远程登使用SecureCRT,window与ubuntu数据传输使用filezilla,窗口切换来切换去,麻烦也...
- 如何搭建FTP服务器(Linux系统)
-
上次说了Windows操作系统下搭建的FTP服务器,那有朋友问我,说买的XX轻量应用服务器都是属于Linux的操作系统,我该如何为搭建FTP服务器呢?...
- Linux 命令 ncftp(文件传输)——想玩转linux就请一直看下去
-
我是IT悟道,点击右上方“关注”,每天分享IT、科技、数码方面的干货。Linuxncftp命令...
- 如何用 ftp 实现一键上传
-
简介ftp是Internet标准文件传输协议的用户界面,它允许用户与远程网络站点之间传输文件...
- Linux安装ftp
-
1安装vsftpd组件安装完后,有/etc/vsftpd/vsftpd.conf文件,是vsftp的配置文件。[root@bogon~]#yum-yinstallvsftpd2添加一个...
- 一天一点点:linux - ftp命令
-
linuxftp命令设置文件系统相关功能。FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身。语法ftp[-dignv][主机名称或IP地址]参数:-d详细显示指令执...
- Centos 7 搭建FTP
-
目录安装软件以及启动服务添加防火墙规则关闭selinuxftp配置常用常用参数详解特殊参数配置文件没有的参数也可以添加到配置中1.安装软件以及启动服务yuminstall-yvsftpdsys...
- 【Linux】Linux中ftp命令,没有你想的那么简单
-
本文介绍了Linux中FTP命令的基本用法,包括连接与登录远程服务器,以及解析了FTP协议中五个最常用的操作命令的使用和解析过程。同时,提供了一个包含常用FTP操作命令的表格,供读者参考。通过熟练掌握...
- linux 命令行操作ftp
-
以下是linuxftp命令参数的详解。FTP>!从ftp子系统退出到外壳?FTP>?显示ftp命令说明??和help相同?格式:?[command]说明:[com...
- 多学习才能多赚钱之:linux如何使用ftp
-
linux如何使用ftp步骤1:建立FTP连接想要连接FTP服务器,在命令上中先输入ftp然后空格跟上FTP服务器的域名'domain.com'或者IP地址例如:ftpdom...
- linux常用网络操作方法:ftp命令使用方法
-
常用网络操作方法Linux提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户登录到远程计算机上、传输文件和执行远程命令等。本节介绍下列几个常用的有关网络操作的命令:ftp传输文件tel...
- Linux 5.15有望合并Memory Folios方案 内核构建速度可提升7%
-
甲骨文公司的长期内核开发人员MatthewWilcox已经研究了“内存对开区”概念相当长的一段时间,这可以改善Linux的内存管理,使其具有更大的效率。例如,使用内存对开的基准测试表明,内核的构建速...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)