互联网安全建设从0到1
上QQ阅读APP看书,第一时间看更新

3.4 Linux入侵溯源分析

Linux入侵溯源分析与Windows的分析大致相同,也分系统、服务、文件、网络四个部分,分析思路如图3-14所示。

图3-14 Linux溯源分析思路

注意:再次强调,所有操作在执行前请先备份,避免破坏现场。

3.4.1 系统

针对Linux系统层面,我们主要关注以下内容:

·命令完整性检查

·恶意用户排查

·异常定时任务排查

·启动项排查

·系统日志检查

下面逐一介绍。

1.命令完整性检查

理由 |病毒或木马植入Rootkit,部分Rootkit通过替换login、ps、ls、netstat等系统命令,或修改.rhosts等系统配置文件等,实现隐藏并设置后门。

目的 确保后续执行的命令的完整性(如ps、ls等)。

这里主要检查三项内容:系统命令的md5值是否与同一批未受攻击系统的值一致,安装的RPM包的变化情况,以及检测系统是否有Rootkit存在。

(1)md5值校验(md5sum)

从正常机器中导出常用命令的md5值,结果保存在tmp.md5sum中,命令如下:


which --skip-alias ls find lsof du ps top who last chsh passwd cat vi
crontab netstat | xargs md5sum > tmp.md5sum

检查被感染机器中的命令是否变化,命令如下:


md5sum -c tmp.md5sum

如下所示,如果find、lsof、top、netstat命令没被篡改,那么md5sum-c的结果为OK。

若命令被篡改,可以使用https://www.virustotal.com/https://habo.qq.com/等在线分析软件,确定是否为病毒/木马,同时记录修改时间。这里需要说明的是,校验md5值在大多数情况下是可行的,但是如果使用了prelink,那么命令的md5值会发生改变,可以使用prelink-au命令取消已经做的预连接,这点需要读者注意。

(2)RPM校验

基于系统自带的rpm命令检查软件包的变化,使用如下参数:

·rpm-V:已安装的软件名称,该软件所含的文件被更改过时才会列出。

·rpm-Va:列出目前系统上所有可能被更改过的文件。

·rpm-Vf:系统中的文件名,列出某个文件是否被更改过。

如果一切正常,则输出结果为空。

下面的例子是rpm-Va的结果:

第一列为修改的类型:

·S:(file size differ)文件的容量大小是否被改变。

·M:(mode differ)文件的类型或文件的属性(rwx)是否被改变,是否可运行等参数已被改变。

·5:(MD5 sum differ)MD5这一种指纹码的内容已经不同。

·D:(device major/minor number mis-match)装置的主/次代码已经改变。

·L:(readLink(2)path mis-match)Link路径已被改变。

·U:(user ownership differ)文件的所属人已被改变。

·G:(group ownership differ)文件的所属群组已被改变。

·T:(mTime differs)文件的创建时间已被改变。

第二列是文件类型:

·c:配置档(config file)。

·d:文件数据档(documentation)。

·g:ghost文件不被某个软件所包含,这种情况较少发生。

·l:授权文件(license file)。

·r:readme文件。

请重点关注/usr/bin、/bin下文件的MD5的变化,若发生变化,可使用https://www.virustotal.com/https://habo.qq.com/等在线分析软件确定其是否为病毒/木马,同时记录修改时间。

(3)rootkit检测工具校验

可使用相关工具查看是否存在rootkit,如chkrootkit、rkhunter等,也可以将可疑文件传送到https://www.virustotal.com/https://habo.qq.com/等在线分析软件进行分析。

2.恶意用户排查

理由 攻击者为了保持对目标机器的控制权,在受害者服务器中添加新的用户。

目的 若新增了用户,根据新增时间推测出大致的入侵时间。

Linux用户的相关信息存放于/etc/passwd文件中,密码加密保存于/etc/shadow文件中,需要重点关注passwd文件。主要步骤如下:

1)查看passwd的修改时间、权限。


ls -l /etc/passwd

2)查看是否产生了新用户,是否存在UID和GID为0的用户:


cat /etc/passwd

/etc/passwd的结果示例如下所示,每列以“:”分隔,依次为用户名、密码(结果存放在/etc/shadow文件中)、UID(0表示系统管理员)、GID(0表示系统管理员组)、用户信息说明、用户家目录、Shell。

详细的结果解释参见:http://cn.linux.vbird.org/linux_basic/0410accountmanager.php。重点关注UID、GID为0,shell为/bin/bash的用户,关注该用户的新增时间,执行过的命令。

3.异常定时任务排查

理由 病毒/木马为了增加自己的攻击性,会添加定时任务,每小时或每天执行一次,即使强制杀死恶意进程,病毒依然会再次启动。

目的 根据定时任务定位病毒/木马样本位置。

下载样本到本地,取样分析,确定攻击轨迹和危害。

彻底清除病毒/木马。

Linux定时任务分别在/var/spool/cron/{user}及/etc/cron*目录下:

·用户级别:/var/spool/cron/{user}是用户级别的定时任务,使用crontab-l查看。

·系统级别:/etc/crontab是系统级别的定时任务,只有Root账户可以修改。

应急响应过程中,还需要排查/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly等周期性执行脚本的目录,例如:

排查步骤大概为:

1)查看并记录定时文件的修改时间。

2)使用file查看文件类型,通常为shell Script(shell脚本)。

3)使用cat查看定时执行的可执行文件。

4)使用找到脚本的位置,使用https://www.virustotal.com/https://habo.qq.com/等在线分析软件进行分析。

注意:定期执行病毒时,可能会更新定时文件,因此根据定时任务推测入侵时间有时不太准确。

4.启动项排查

理由 病毒或木马为了增加自己的攻击性,添加开机启动项,即使强制杀死恶意进程,再次开机时病毒依然会启动。

目的 根据启动项定位病毒/木马样本位置

下载样本到本地,取样分析,确定攻击轨迹和危害

彻底清除病毒

Linux有三种添加开机启动项的方法,因此三处都要查看:

1)编辑文件/etc/rc.local,添加启动程序。因此需要查看/etc/rc.local的修改时间以及内容:


cat /etc/rc.local

2)自定义shell脚本,放在/etc/profile.d/下,系统启动后就会自动执行该目录下的所shell脚本。因此需要查看该文件的修改时间以及内容:


find /etc/profile.d -type f -mtime -20  #查看近20天内,/etc/profile.d目录下修改的文件,然后cat查看

3)将启动文件复制到/etc/init.d/或者/etc/rc.d/init.d/目录,因此需要查看这两个目录下的文件的修改时间和内容:


find /etc/init.d/ -type f -mtime -20  #查看近20天内,/etc/init.d/目录下修改的文件
find /etc/rc.d/init.d/ -type f -mtime -20  #查看近20天内,/etc/rc.d/init.d/
目录下修改的文件

注意:定期执行病毒时,可能会更新启动项,因此根据启动项修改时间推测入侵时间有时不太准确。

5.系统日志检查

1)bash执行过程中记录的日志信息,查看执行了哪些命令:


history #查看历史命令记录
export HISTTIMEFORMAT="%F %T `whoami` " #使用 HISTTIMEFORMAT 显示时间戳和用户

下面是查看结果示例:

重点关注命令被篡改、新增用户、添加启动项和定时任务期间执行的命令,推测出攻击轨迹。

2)检查/var/log下面的相关文件,例如secure、cron等,查看是否有异常登录,系统账号是否遭到暴力破解,有无异常定时任务等异常情况。关于日志分析,可参考第6章内容。

3.4.2 服务漏洞检查

操作系统都会提供各种服务,而提供服务就存在被入侵的可能,恶意的服务会开启进程,因此需要对服务及进程进行检测。

理由 若对外开放的某个服务存在漏洞,攻击者利用该漏洞获得服务器的部分权限,进而控制整个系统。因此需要仔细查看该机器上运行的服务。

目的 根据运行的服务,推测入侵途径。

根据服务日志,推测入侵时间、攻击轨迹和危害。

一般来说,互联网提供得最多的服务便是Web服务,因此,需要对Web服务进行排查,但也可能提供其他服务,例如SSH、MySQL等,因此,针对不同的服务,做不同的排查。

(1)Web服务

若仅对外开放Web服务(Apache、Nginx等),基本可以确定是通过Web shell入侵,需要找到相应的Web shell。

1)查找近20天创建或修改的jsp文件,代码如下所示:


find ./ -type f -mtime -20 -name "*.jsp"

2)与测试环境做比较,查看新增的文件:


diff –r 测试环境目录 线上环境目录

3)检查是否从远程服务器下载病毒/木马文件。

4)查看相应的日志文件(Apache默认配置如下):

·配置文件:/etc/httpd/conf/http.conf

·服务器的根目录:/var/www/html

·访问日志文件:/var/log/httpd/access_log

·错误日志文件:/var/log/httpd/error_log

·运行apache的用户:apache

·模块存放路径:/usr/lib/httpd/modules

在日志文件中查询执行过的特殊命令:


egrep '(select|script|acunetix|sqlmap)' /var/log/httpd/access_log

关注Content-Length过大的请求,例如过滤Content-Length大于5MB的日志:


awk '{if($10>5000000){print $0}}' /var/log/httpd/access_log

关注访问频次比较多的POST请求:


grep 'POST' /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr

更多思路请参照Web日志分析内容。

(2)SSH服务

攻击者获取root权限后,使用SSH登录进一步获取信息或实施其他攻击行为。

1)查看SSH日志,确定攻击者是否通过SSH登录过机器,SSH日志文件位于/var/log/secure。

查看登录成功的日志:


grep 'Accepted' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr

查看登录失败的日志,确定是否有某几台机器对本机进行爆破:


grep 'Failed' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr

lastb命令,会读取位于/var/log/btmp的文件,并把该文件记录的登入系统失败的用户名单全部显示出来。

2)检查SSH后门。

查看SSH版本及相关信息:


ssh -V

查看SSH可执行文件、配置文件:


ls -l /etc/ssh/
find /etc/ssh -type f -mtime -20 #查看近20天/etc/shh修改的文件
stat /usr/sbin/sshd              #查看/usr/sbin/sshd的状态信息
stat /usr/bin/ssh
strings /usr/bin/ssh #查看 /usr/bin/ssh 二进制文件的字符串,通过grep筛选有用信息

例如:

(3)其他服务(MySQL、Redis等)

如果机器上还运行着其他服务,查看方法同上,判断服务是否存在漏洞,查看相关日志文件找到入侵的蛛丝马迹。

若排查完系统、服务、文件、网络后依然未发现病毒或木马,可将该机器上所有服务复制到本地,检查是否存在漏洞或配置错误。

除此之外,还可以使用以下命令,查看服务启动情况:


chkconfig –-list                    #查看所有运行级系统服务的(运行)状态信息
systemctl list-units --type=service #查看所有启动的服务

3.4.3 恶意进程排查

理由 只有新开一个进程才能实施攻击。

目的 根据恶意进程,定位病毒/木马的位置。

下载样本到本地,取样分析,确定攻击轨迹和危害。

杀死进程清理病毒。

使用命令查看进程,同时查看进程对资源的利用率并对相关进程进行检查。

1)查看进程所打开的端口和文件、启动时间等:


ps aux  #列出目前所有正在内存当中的程序
ps –ef  #显示所有进程信息

启动时间可疑时,需要与前面找到的Webshell时间点比对,进程名可能具有混淆性,可通过lsof命令查看相关文件和路径:


lsof -p pid

找到可疑文件后,查看文件类型:


file 文件名

2)查看服务占用CPU、内存的情况(可使用top命令)。

3)查看某个进程的启动权限、父进程:


ps –ef  #pid为进程号,ppid为父进程号
pstree  #以树状图的方式展示进程之间的派生关系

找到可执行文件后,可以利用在线分析软件https://www.virustotal.com/https://habo.qq.com/进行分析。

3.4.4 文件

与Windows系统中一样,在Linux中,黑客入侵服务器为了维持权限,也会留下后门文件以便再次入侵,而且后门文件一般会比较隐蔽,难以查找,因此需要排查敏感目录,找到可疑文件进行分析。

1.敏感目录排查

理由 病毒/木马样本可能放在所有用户可读、可写、可执行的目录中。

目的 定位病毒/木马样本。

检查敏感目录(所有用户可读、可写、可执行的目录),查看/tmp、/var/tmp、/dev/shm目录下新增或修改的文件:


ls -ald /tmp/
find /tmp -type f -mtime -20

2.病毒/木马检测

根据定时任务和进程可定位出病毒/样本位置,下载到本地保留样本。

查看文件类型,如果是shell脚本,则查看文件内容。如果是可执行文件,如前文所述,可使用在线分析软件https://www.virustotal.com/https://habo.qq.com/进行分析,得出大概的攻击轨迹和危害。

3.4.5 网络

黑客在攻击服务器或使用后门连接服务器时,会产生网络流量,因此通过分析网络连接和网络流量便可以发现黑客行踪。

1.异常网络连接排查

理由 通常情况下,病毒/木马发送本机信息到远程服务器,或者从远程服务器下载其他病毒或木马进一步感染主机。

目的 通过查看网络连接溯源分析攻击轨迹和危害。

需要查看网络的连接状态,必要时抓取数据包并进行后续分析:

1)查看已经建立的网络连接:


netstat -aultnp #显示出所有处于监听状态的应用程序及进程号和端口号
netstat –aultnp | grep ESTABLISHED #查看已建立的网络连接
lsof -l

2)检查端口:


netstat –apn | grep 8080 #查看端口占用情况
lsof - i :8080           #列出占用某个端口的文件句柄

要重点关注与外网IP的连接,使用一些威胁情报平台分析IP的可靠性,找到发起该网络连接的应用程序和进程号。

2.异常流量分析

理由 病毒/木马一般会发送本机信息到远程服务器,或者从远程服务器下载其他病毒或木马进一步感染主机。

目的 根据实时流量分析攻击轨迹和危害。

使用tcpdump命令抓取一段时间的网络流量,下载到本地,使用Wireshark工具进行分析:


tcpdump src host srcIP and dst host dstIP  #抓取 srcIP和dstIP之间的流量
tcpdump host IP –w tmp.cap  #抓取所有IP收到或发出的数据包,将结果保存在tmp.cap
tcpdump port 25  #抓取目标或源端口为25的流量

关于tcpdump、Wireshark的使用,可以参考前面的介绍或官方文档。