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的使用,可以参考前面的介绍或官方文档。