前言
本文总结自网宿安全演武实验室安全应急响应团队日常工作实践,主要介绍在Linux服务器环境出现明确或疑似的被入侵表现之后,安全人员如何在服务器系统中确认入侵结果,执行入侵后的溯源取证、入口定位、行为还原、后门定位等工作,以便及时清理病毒后门、加固系统,降低入侵影响。
应急响应流程
在实际安全事件处理中,应急响应流程从处置过程可总结为调查、评估、抑制、分析、恢复、报告这6个阶段:
- 调查:定位涉事资产、涉事部门人员、以及相关业务信息,组建应急沟通群。
- 评估:判断事件类型(如挖矿、勒索、DDoS、Webshell等),评估事件影响范围和影响严重程度。
- 抑制:根据影响情况及时进行备份数据(如果安全事件与数据和程序相关,则要求相关业务方、机器管理员对存有数据和程序的存储介质进行备份,以保护数据和证据的安全、完整)、隔离涉事资产(如配置防火墙、关站、关服务、断网等)、备走流量等措施,以保护现场、防止扩散。
- 分析:对受影响的服务器主机和业务系统进行入侵排查,主要进行取证和溯源,并根据定位到的入侵点提出相关安全加固建议。可通过信息收集、日志查看、样本分析、业务系统漏洞测试等方法来分析。
- 恢复:清理服务器主机上涉事的病毒和后门,若无法全部定位清理,则建议重装系统。业务方按照给出的加固建议进行相关配置加固和漏洞修复并经过安全部门应急处置组的验证后,方可恢复业务。后续安全组将基于分析提取的恶意样本特征、入侵漏洞、攻击行为等,根据实际情况增加相应的检测规则并持续监控。
- 报告:将安全事件发现和处理的全过程进行总结,形成安全事件应急响应处置报告,并通报上级。
图1 应急响应流程图
应急排查思路
基于Linux系统一切皆文件的特性和网宿应急团队历史应急实践,Linux系统服务器入侵事件排查可从4个方面入手分析:
- 进程分析:通过运行进程分析,可以发现异常或未知的进程,这些可能是恶意软件或攻击工具执行的迹象;进程运行细节,如进程ID、启动时间、关联用户、执行路径、子进程创建、资源使用情况,可以帮助安全人员理解攻击意图、进行溯源分析。
- 文件分析:通过检查文件的创建、修改、删除痕迹,可以识别系统中的可疑文件或被篡改的文件;对可疑文件进行深入分析,可以提取恶意代码样本,进一步分析其功能和攻击手段。
- 网络分析:对系统网络连接、流量进行分析,可以发现恶意软件命令和控制(C&C)服务器、横向渗透和对外攻击的行为,可以帮助确定攻击的来源和目标,为切断攻击链、隔离受感染系统提供依据,在其他入侵特征不明显的情况下,还可以通过网络流量分析来进一步确认入侵与否。
- 日志分析:系统和应用的日志文件中记录了大量的操作信息,可以追踪攻击者的活动路径和行为模式,可查找到攻击者留下的入侵痕迹,帮助明确攻击活动时间线,揭示系统或组件中存在的安全漏洞(如弱口令爆破)。
这4个分析维度相互依赖、相互补充,通过综合分析这些维度,可以更全面地理解和响应安全事件,构建起对整个安全事件脉络的完整理解。
下图为Linux应急排查思维导图,本篇先从进程方面进行介绍。
图2 Linux应急排查思维导图
进程分析
进程是木马、病毒或后门程序运行的体现,如果能够定位到某恶意进程,则可以该进程作为突破,定位出一系列的恶意行为。
排查工具
入侵事件可分为两种场景:无rootkit行为和有rootkit行为。rootkit攻击技术是指恶意软件隐藏自身或指定目标进程、网络、文件等信息从而避免入侵被发现的行为。rootkit攻击技术又分为用户态的rootkit和内核态的rootkit,用户态的rootkit主要手法有系统命令替换、进程注入、动态库劫持等;内核态的rootkit比较复杂,主要利用内核模块LKM实现,这里先不做展开。一种粗略判断系统命令是否被替换的方法是利用软件包校验,如centos上,利用rpm -Vf [系统命令所在路径],若对应的系统命令出现S.5....T.,则表明系统命令已被修改。一种粗略判断是否存在LKM rootkit的方法是查看/sys/module目录下是否有加载可疑内核模块,当然LKM rootkit可隐藏自身加载行为。可借助其它rootkit查杀工具判断服务器是否存在rootkit,如chkrootkit、rkhunter等。
两种场景所需排查工具不同,无rootkit行为的攻击事件,用系统自带的命令或工具基本就能定位清楚,有rootkit行为的攻击需要借助一些专业化的工具,比如busybox、LiME+Volatility内存取证。无rootkit情况下,常用排查工具有系统自带的top、ps、lsof、pstree、strace、ltrace等,还可查看/proc/[pid]目录下各项进程相关信息进行排查。有rootkit情况下,常用的系统命令可能被替换,影响排查结果,需要借助一些专业化的工具,如使用busybox自带的ps、top、lsof等工具。busybox是一个集成了三百多个常用Linux命令和工具的软件,从简单的,如ls、cat、echo等,到复杂的,如grep、find、mount、telnet等,有Linux工具里的瑞士军刀之称。安装后在busybox后直接带上对应命令即可执行,如busybox ls。下载地址:https://www.busybox.net/downloads/busybox-x.x.x.tar.bz2
恶意进程定位
- 高mem/cpu占用
关注高mem内存占用和cpu占用高的进程。如果mem占用高,则可能为内存型DoS病毒。如果cpu占用高,且进程为多线程,并伴有外连行为,则大概率为挖矿木马;如果外连行为数量多,且连接端口为常见远程服务端口,则大概率为横向扫描工具;如果外连行为数量多,连接类型和端口各异,则大概率为僵尸网络DDoS病毒
图3 高cpu占用挖矿木马进程示例
常用排查命令:
[root@localhost ~]#top #查看进程资源占用情况
[root@localhost ~]#ps -aux --sort=-%mem|more #按mem占用大小排序
[root@localhost ~]#ps -aux --sort=-%cpu|more #按cpu占用大小排序
- 伪装内核进程
关注父进程pid非2的带“[]”的进程,一般为恶意进程伪装成内核进程。[kthreadd]进程(pid = 2)由idle通过kernel_thread创建,是所有内核进程的父进程。内核进程的命名规则都是[xxx],用中括号括起来的,带中括号的进程的父进程正常情况下应该是2(也就是[kthreadd]),而用户态的进程正常情况下不会这样命名。
图4 伪装内核进程示例
常用排查命令:
[root@localhost ~]#ps -ef|awk '{if($2!="2"&&$3!="2"&&$NF~/^\[.*\]/)print$0}' #查看进程名带中括号的非内核进程
- 带隐藏路径进程
关注进程路径带“.“开头的隐藏路径的进程,一般恶意进程会隐藏自身恶意程序文件。
图5 隐藏路径进程示例
常用排查命令:
[root@localhost ~]#ps -ef|awk '{if($0~/(\/| )\./)print$0}' #查看进程参数带隐藏路径的进程
- 进程名随机
关注进程名比较随机的进程,可能有固定前缀或后缀,一般同类型进程位数固定。
图6 随机进程名示例
常用排查命令:
[root@localhost ~]#ps aux|more #查看所有进程,自行观察进程名是否随机
[root@localhost ~]#ps -ef|more #查看所有进程,自行观察进程名是否随机
- 带特征字符串
关注带一些恶意程序常用的特征字符串的进程,如带scan/transfer的通常为横向扫描工具,带payload/dos的通常为恶意软件,带miner/coin/xmrig的通常为挖矿木马。部分特征用于伪装,如带systemd/manage/update/service的通常是伪装成系统进程、带watchbog/sec的通常是伪装成安全程序。或者将一些系统或第三方组件中部分字符进行修改,达到掩人耳目的目的,如0&O&o、 1&l&I。可收集历史恶意样本提取的特征字符串,查看进程名、进程参数、进程路径是否匹配。查看带反弹shell特征字符串的进程,如进程参数带/dev/tcp/\d+.\d+.\d+.\d+。查看进程名或进程参数为空的进程。查看进程名或进程参数带base64的进程,恶意进程通常采用base64编码恶意指令。
图7 带特征字符串进程示例
常用排查命令:
[root@localhost ~]#ps -ef|egrep "[特征字符串/特征字符串正则]"|more #查看带特征字符串的进程
[root@localhost ~]#ps -eo pid,comm,cmd|awk '{if($2==""||$3=="")print$0}' #查看进程名或进程参数为空的进程
- 带恶意域名
关注进程参数带域名或url的进程,若查询威胁情报为恶意域名或url,通常为下载恶意程序或脚本的可疑进程。
图8 带恶意域名进程示例
常用排查命令:
[root@localhost ~]#ps -ef|grep "http"|more #查看带域名或url进程,自行观察是否包含恶意域名或url
- 带可疑路径进程
关注进程路径带可疑路径的进程,如/tmp、/var/tmp、/dev/shm、/var/run、/var/lock、/root、/boot、/etc等,攻击者常将恶意文件落盘在这些目录下。
图9 带敏感目录进程示例1
或者进程打开文件路径带有上述可疑路径且非日志类文件的,这种进程也较为可疑。
图10 带敏感目录进程示例2
常用排查命令:
[root@localhost ~]#ps -ef|egrep "/tmp|/var/tmp/|/dev/shm|/var/run|/var/lock|/root|/boot|/etc"|more #查看带敏感目录进程
[root@localhost ~]#lsof -p [pid]|egrep "/tmp|/var/tmp/|/dev/shm|/var/run|/var/lock|/root|/boot|/etc"|more #查看指定进程打开文件是否包含敏感目录路径
- 带delete标识进程
关注进程路径带deleted标识的进程,特别是打开文件中也有大量伴有deleted标识的情况,恶意进程通常启动后即刻删除自身程序,这类进程较为可疑。
图11 带delete标识进程示例
常用排查命令:
[root@localhost ~]#lsof|grep deleted #查看带delete标识的进程
- memfd无文件进程
关注进程路径带有/memfd:标识的情况,恶意进程可能通过无文件执行的方式隐藏自身。
图12 memfd无文件进程示例
常用排查命令:
[root@localhost ~]#lsof|grep "/memfd:" #查看memfd无文件进程
- 隐藏进程
关注使用ps命令无法查看到,但在/proc目录下存在对应pid文件夹的非瞬时进程。
关注利用mount --bind /tmp/empty /proc/[pid]的隐藏进程,挂载后,对应进程目录为空。
图13 mount挂载隐藏进程示例
常用排查命令:
[root@localhost ~]#a=`ps -eo pid|grep -v PID|xargs echo|tr ' ' '|'`;b=`ls /proc/|egrep "[0-9]+"`;echo "$b"|tr ' ' '\n'|egrep -v "$a" #查看ps隐藏进程
[root@localhost ~]#cat /proc/$$/mountinfo|awk '{if($5~/^\/proc\/[0-9]/)print$0}' #查看mount隐藏进程
- 异常启动用户
关注已定位出的后门用户启动的进程,关注非运维管理用户并且与服务无关的用户启动的进程。
常用排查命令:
[root@localhost ~]#ps -ef | grep "^[后门或可疑用户]" #查看异常启动用户进程
- 提权进程
关注提权进程,如一条进程链上存在由非root启动进程fork出root启动进程的行为,且非正常的su、或sudo提权。
常用排查命令:
[root@localhost ~]#pstree -up #查看进程树,自行观察是否有提权行为
- 异常shell执行进程(如tcsh)
关注非常用的shell(即非bash、sh)启动的进程,这类进程较为可疑。
常用排查命令:
[root@localhost ~]#a=`cat /etc/shells|egrep -v "nologin|\/sh|\/bash"|awk -F '/' '{print$NF}'|xargs echo|tr ' ' '|'`;ps -ef|egrep -w "$a" #查看非常用shell执行的进程
- 进程名伪造
关注进程参数和进程路径中执行路径不一致的进程,如/proc/[pid]/exe与/proc/[pid]/cmdline中的执行路径不一致。
常用排查命令:
[root@localhost ~]#ls -al /proc/[pid]/exe #查看进程路径
[root@localhost ~]#ps -p [pid] -o cmd #查看完整进程参数
- audit审计追踪异常行为进程
可开启audit审计来追踪异常进程行为,再根据日志进行进一步的深入分析。可监控setuid/setreuid/setresuid/setgid/setregid/setresgid系统调用提权行为,异常shell提权行为,异常更新密码行为,系统命令异常修改行为,系统关键配置文件异常修改行为(如selinux配置、环境变量脚本、sudo特权配置、系统服务启动脚本),关键密码文件异常修改行为,定时任务异常修改行为,内核模块异常操作行为,异常编译行为,敏感目录下的程序执行行为,关键日志文件异常修改行为(特别是非正常回滚的清空行为),异常ptrace进程注入行为,异常登录行为,异常服务启动或停止行为(如停止防火墙服务、停止系统日志管理服务),还可设置蜜罐文件监控其异常清除或修改行为,具体规则和分析方法将在日志分析篇列出。如果存在怀疑的进程,可加入-F pid=[可疑进程pid]来过滤出关心进程。auditctl使用参考链接:https://linux.die.net/man/8/auditctl
- 恶意容器进程
基于容器轻量级、灵活性、快速部署与可扩展性、环境一致性与隔离性、持续集成与持续部署(CI/CD)、可降低基础设施成本等优势的展现,越来越多的企业选择容器技术来帮助自身提升竞争力,攻击者也逐渐将攻击视线移向容器。当入侵事件产生时,如果服务器上有搭建容器环境,那么可以关注下是否存在配置了恶意进程启动命令的容器,如下为攻击者设置了恶意容器启动进程命令的示例,容器创建时将宿主机/目录挂载至容器/host目录,然后拷贝ssh后门公钥至宿主机,通过访问127.0.0.1从而进行容器逃逸,之后下载TeamTNT黑产团队挖矿木马并执行。
图14 恶意容器启动命令示例
常用排查命令:
[root@localhost ~]#docker ps -a --no-trunc|more #查看所有容器基本信息
[root@localhost ~]#docker inspect [容器id] #查看指定容器完整配置信息
- 其它
[root@localhost ~]#strace -o result -ff -p [pid] #跟踪指定进程的系统调用以及所接收到的信号。-ff用于追踪所有子进程,-o用于各自单独输出跟踪结果到各自进程的文件
[root@localhost ~]#strace -e access,open -p [pid] #跟踪进程的指定系统调用(这里是open()和access())
[root@localhost ~]#strace -e access,open -p [file_path] #跟踪程序、系统命令等文件的指定系统调用(这里是open()和access())
[root@localhost ~]#ltrace -p [pid] #跟踪进程的库调用
[root@localhost ~]#systemctl status [pid] #查询对应进程所运行的服务,还能看到服务启动相关命令,观察是否有异常服务或服务启动命令
[root@localhost ~]#ls -al /proc/[pid]/cwd #查看对应进程的启动目录,若改目录包含隐藏路径、恶意特征字符串等,则增加了该进程的可疑程度
[root@localhost ~]#strings -f /proc/[pid]/environ | cut -f2 -d ' ' #查看该进程启动时的完整环境变量,观察是否有可疑的环境变量,如PATH=/tmp
溯源技巧
- 追踪启动用户
可追踪恶意进程启动用户,定位入侵入口。如下,恶意进程启动用户为postgres,由此追踪至postgresql组件,根据日志定位出postgres有弱口令爆破痕迹,以及服务器PostgreSQL使用版本存在任意代码执行漏洞(CVE-2019-9193,影响9.3-11.2版本)。
图15 追踪启动用户溯源示例1
如下,恶意进程启动用户为portalnav,由此追踪到通过某业务平台部署的portalnav组件,由此进一步定位到该组件web相关目录下存在有漏洞版shiro包(CVE-2020-17510)。
图16 追踪启动用户溯源示例2
- 追踪父进程
可层层追踪恶意进程父进程,查看是否父进程组件或服务有漏洞,定位入侵入口。
如下,恶意进程/tmp/tomcat父进程为java进程,-jar参数带自定义jar包,发现该jar包存在有漏洞的低版本子jar包log4j-api-2.11.2.jar、log4j-core-2.11.2.jar。查看该java服务日志,发现入侵痕迹。
图17 追踪父进程溯源示例
- 利用audit审计
恶意程序通常存在守护进程,多个进程间互相守护,kill掉后会自动重启,可利用audit审计,层层向上定位守护进程,最终定位到启动初始恶意进程的进程,可能就可以定位到入侵入口。还可利用audit审计监控落盘的恶意程序文件,层层向上可能会定位到最初存在rce的进程。还可以利用audit审计监控下载相关(如curl、wget)操作命令,定位到最初调用下载的进程。
- 利用病毒家族特征
根据可疑进程特征,或病毒引擎检测结果,查找病毒所属家族、黑产组织、类似样本分析资料,根据网上资料和样本分析结果提供的入侵方式(如利用的组件漏洞、web漏洞、爆破、未授权访问等),对照当前服务器是否存在对应的有漏洞组件、网站是否存在对应的漏洞、弱密等,进行有针对性地进一步验证。
小结
进程分析主要目标是能够完整定位服务器上存在的恶意进程并进行取证,确认服务器是否被黑和被黑后产生什么活动和后果,分析出恶意进程之间的调用和守护关系,以及大致了解恶意进程所采用的攻击技术和所进行的恶意活动(如伪装、隐藏、性能消耗等),以便于后续结合其它方向的应急排查结果做进一步的分析,对样本分析、病毒清理和特征提取有辅助作用。以下总结了Linux应急排查进程分析过程中的一些排查命令。
图18 Linux应急排查进程分析思维导图
下一篇我们将介绍Linux应急排查的文件分析部分。Linux系统“一切皆文件”的设计哲学提供了更直观透明的与系统交互的方式,同时也方便我们更快速准确地排查安全问题,因为攻击本身与系统的交互也需要通过文件,持久化、防御绕过、恶意样本落盘、提权等攻击阶段都会涉及到文件。相信在下一篇,通过对文件内容分析、文件权限&属性分析、文件修改&创建活动分析、恶意样本分析等的介绍,能够对安全事件应急排查有更深入的了解。