前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >一次Linux系统被攻击的分析过程

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

作者头像
小小科
修改于 2020-06-28 09:51:28
修改于 2020-06-28 09:51:28
9300
举报
文章被收录于专栏:北京马哥教育北京马哥教育

IT行业发展到现在,安全问题已经变得至关重要,从最近的“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞。

一次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文件的信息:

[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

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

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%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、揭开谜团

通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下:

(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登录的源地址。

文章转载于马哥教育官网!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
强烈推荐!Python 这个宝藏库 re 正则匹配
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作。
Wu_Candy
2022/07/05
1.5K0
【Python爬虫实战】正则:从基础字符匹配到复杂文本处理的全面指南
正则表达式作为一种强大的文本处理工具,广泛应用于编程、文本编辑和数据处理等领域。通过定义一系列字符和符号的组合,正则表达式能够快速识别、搜索、替换和操作文本中的特定模式,极大地提高了文本处理的效率。在 Python 中,re 模块提供了对正则表达式的支持,使得开发者能够轻松处理字符串中的复杂匹配问题。本篇文章将详细介绍正则表达式的基本作用、常用符号及其在 Python re 模块中的应用,帮助读者掌握如何利用正则表达式进行高效的文本处理。
易辰君
2024/11/07
2390
python3–复习+正则
一、复习 文件的操作 import codecs with codecs.open("aaa.txt", "w") as f: f.writelines("this\nis\na\ntest\nfile!!") 高阶函数:sorted dict1 = dict(a=1, b=2) print(sorted(dict1.items(), key=lambda d:d[1])) 输出://以列表的方式输出 [('a', 1), ('b', 2)] 如果需要以字典形式的方式输出,则
老七Linux
2018/05/09
1K0
干货 | 数据科学入门必读:如何使用正则表达式?
有时候,这些数据中会包含大量文本语料。比如,假如我们需要搞清楚「xxx文件 」中谁给谁发送过邮件,那么我们就要筛查 1150 万份文档!我们可以采用人工方式,亲自阅读每一封电子邮件,但我们也可以利用 Python 的力量。毕竟,代码存在的意义就是自动执行任务。
灯塔大数据
2018/07/25
8370
正则表达式模块re
正则表达式(Regular expressions,也叫 REs、 regexs 或 regex patterns)
chuan_____
2025/01/22
920
PYTHON正则学习记录
1.本文内容来自个人编写、python官方文档、参考菜鸟教程和网上部分解析。 2.本文加入大部分个人理解,并删去部分官方解释。可能存在理解错误,造成本文存在错误。
布衣者
2021/09/07
5700
利用正则进行爬虫
正则表达式的英文是regular expression,通常简写为regex、regexp或者RE,属于计算机领域的一个概念。
皮大大
2021/03/01
2.2K0
利用正则进行爬虫
【从零学习python 】62. Python正则表达式:强大的字符串匹配工具
正则表达式是一个特殊的字符序列,计算机科学的一个概念。通常被用来检索、替换那些符合某个模式(规则)的文本。
全栈若城
2024/02/29
930
深入理解Python正则表达式:解析、匹配和高级技巧
正则表达式是一种强大的文本处理工具,它允许你在文本中搜索、匹配和处理模式。Python中的re模块提供了对正则表达式的支持,本文将深入探讨Python正则表达式的工作原理、基本用法、高级技巧以及实际应用,帮助你更好地掌握这一强大的工具。
海拥
2023/09/19
2.5K0
深入理解Python正则表达式:解析、匹配和高级技巧
【重生之我学Python进阶】----第一章
看到这篇文章,说明你已经对python有了一定的了解,对于一些简单需求,自己可以独立完成,但对于一些比较大型的需求,这还远远不够。Python进阶就是把一些重复性代码简化、使用一些外部库等,对于项目的进行会有很大帮助。
用户11404404
2024/12/13
810
Pandas文本数据处理 | 轻松玩转Pandas(4)
# 导入相关库 import numpy as np import pandas as pd 为什么要用str属性 文本数据也就是我们常说的字符串,Pandas 为 Series 提供了 str 属性,通过它可以方便的对每个元素进行操作。 index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name") data = { "age": [18, 30, np.nan, 40, np.nan, 3
禹都一只猫olei
2018/09/19
1.7K0
用正则表达式校验手机号,邮箱就是流弊【python爬虫入门进阶】(08)
上一篇文章我们主要介绍了正则表达式的各种语法。学好正则表达式,啥难匹配的内容都给我匹配上【python爬虫入门进阶】(07) 还没看的小伙伴赶紧去看看哦!!!这篇文章主要将介绍正则表达式的一些实战小案例。比如:用正则表达式校验邮箱,手机号等等。
码农飞哥
2021/12/15
7450
用正则表达式校验手机号,邮箱就是流弊【python爬虫入门进阶】(08)
[PYTHON]核心编程笔记(15.Py
记号       说明                                          举例
py3study
2020/01/09
7310
基于Python的语料库数据处理(五)
正则表达式 regular expression)是用来进行较复杂文本处理,特别是复杂的查找或替换处理的计算机语言。我们在进行计算机编程或者文本处理时,通常需要进行一些文本的查找、替换。如果查找或替换的工作比较复杂,就需要借助正则表达式来完成。又如,我们需要对文本进行清洁处理(如一次删除所有词性赋码)或者提取文本的特定信息时,往往也需要使用正则表达式。因此,正则表达式在语料库语言学或计算语言学研究中使用非常广泛。
陆勤_数据人网
2021/01/13
9550
python练习题-day18
s="i love you not because of who you are, but because of who i am when i am with you"
10JQKA
2019/10/23
7720
回《驳 <Python正则表达式,请不要再用re.compile了!!!>》
知乎用户@Manjusaka在阅读了我的文章《Python正则表达式,请不要再用re.compile了!!!》以后,写了一篇驳文《驳 Python正则表达式,请不要再用re.compile了!!!》
青南
2019/08/20
1.4K0
回《驳 <Python正则表达式,请不要再用re.compile了!!!>》
Python爬虫抓取纯静态网站及其资源
前段时间需要快速做个静态展示页面,要求是响应式和较美观。由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的。
前端教程
2018/09/21
1.8K0
Python爬虫抓取纯静态网站及其资源
python学习-re模块
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面我主要总结了re的常用方法。 1.re的简介     使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
py3study
2020/01/07
6860
Python_正则表达式
re.compile():用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 两个函数使用,一般建议使用这种编译方式
py3study
2020/01/19
5660
Python_正则表达式
《手把手带你学爬虫──初级篇》第4课 正则表达式以及re库的用法
正则表达式,又称规则表达式,英文Regular Expression,常简写为regex、regexp或者RE;它通常被用来快速检索、替换那些符合某个正则表达式的文本。
GitOPEN
2019/01/29
1.1K0
推荐阅读
相关推荐
强烈推荐!Python 这个宝藏库 re 正则匹配
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文