【应急响应】Linux隐藏进程排查

admin 2024年10月9日19:32:45评论89 views字数 2991阅读9分58秒阅读模式
前言



某日凌晨,内网多台机器对全网段发起了无差别SSH爆破攻击。分析研判后应急响应人员迅速行动,对失陷机器展开了上机排查工作。很快在服务器的/usr/local/games目录下发现了开源的spirit横向爆破工具,并在日志文件中发现了一个非标准的日志目录/var/log/shell_log/,其中记录了大量的攻击命令。查看遗留的日志文件,攻击者清除了大量活动痕迹,特别对包含“yayaya”关键字的文件目录进行了删除,结合这一特点判断服务器感染了yayaya挖矿病毒。

由于系统的netstat、systemctl、top等命令被替换,攻击者在/lib/systemd/system/目录下创建的恶意服务无法定位,其他隐藏的恶意进程我们也无法定位。于是对照日志留下的攻击方法逆向还原了被替换的系统命令,而后挖矿的恶意服务也无处遁形。通过unhide工具还定位到了隐藏的恶意进程,在清除全部隐藏后门后应急工作告一落。

此次处理的挖矿病毒对其进程进行了隐藏,如果攻击者没有留下记录了攻击命令的shell_log日志又该如何判断攻击者是否进行了进程隐藏呢?未知攻,焉知防,还是得从攻击者的视角考虑如何实现进程隐藏。下文将从替换系统命令、mount挂载空目录、ld.so.preload文件劫持几种方法探讨如何实现进程隐藏,并给出相关检测方法便于应急响应人员进行排查修复。

一、系统命令替换



攻击者可以替换系统中用于查看进程信息的命令,如ps、top、lsof等。通过替换这些命令的二进制文件,可以导致管理员在执行这些命令时无法看到被隐藏的进程信息。

排查方法:这种替换可以通过校验文件的哈希值进行判断,或者使用专业的系统完整性检查工具进行检测。在CentOS系统中我们可以使用rpm-V命令来校验完整性,在Debian、Ubuntu系统中可以用dpkg -V命令进行检测。dpkg -V命令会检查所有已安装软件包的文件,确保它们没有被修改或损坏。它会比较文件的MD5校验和与数据库中存储的值。如果文件被更改,将显示相应的标记。

【?】表示无法检查文件。

【c】表示这是一个配置文件。

【5】表示验证失败,文件的 MD5 校验和不匹配。

例如top命令被替换:其中5表示文件的MD5校验和不匹配

【应急响应】Linux隐藏进程排查

修复方法:使用合法的系统文件替换被破坏的文件

二、mount目录挂载




在Linux系统中,/proc文件系统是一个虚拟文件系统,它包含了运行中的进程的信息。每个进程在/proc下都有一个以其进程ID(PID)命名的目录,例如/proc/8888。这个目录下包含了许多文件,这些文件提供了关于进程的详细信息,如命令行参数、环境变量、内存使用情况等。ps和netstat等命令通常通过遍历/proc下的目录来获取系统进程的信息,如果某个进程的/proc/pid目录被隐藏或修改,那么上述命令可能无法正确显示该进程的信息,从而达到隐藏进程的目的。通过挂载操作,可以将/proc/pid目录挂载到另一个位置,从而隐藏原始的进程信息。

例如隐藏bash进程:

首先创建空目录:

【mkdir -p /tmp/.hide】

挂载空目录到对应的/proc/PID下:

【mount -o bind /tmp/.hide /proc/291876】

此时查看网络连接信息发现PID和Program name都为空。这里的mount -o bind命令将指定的目录/tmp/.hide挂载到了/proc/291876上,当ps或netstat命令尝试访问/proc/291876时,实际上是在查看/tmp/.hide目录的内容,而不是原始的进程信息。

【应急响应】Linux隐藏进程排查

排查方法【cat /proc/$$/mountinfo】

可以看到最后一行存在异常的挂载信息,/tmp/.hide挂载到了/proc/291876上

【应急响应】Linux隐藏进程排查

修复方法:【umount /proc/291876】

【应急响应】Linux隐藏进程排查

三、lib库劫持




在Linux系统中,LD_PRELOAD是一个系统环境变量,通过动态链接器和其配置文件/etc/ld.so.preload相关联。LD_PRELOAD能够干预动态链接库的加载顺序,用户可以自定义一个或多个动态链接库(.so文件),让这些库在程序运行前被优先加载。这一特性被用于调试和测试,但也为攻击者提供了劫持程序执行流的机会。动态链接器首先会加载LD_PRELOAD环境变量指定的动态库,然后加载/etc/ld.so.preload文件中指定的动态库,接着搜索LD_LIBRARY_PATH环境变量指定的路径下的动态库,最后搜索系统默认路径/lib64下的动态库文件。攻击者可以利用这一机制,通过以下三种方式实施攻击:

1、环境变量劫持:通过设置LD_PRELOAD环境变量为攻击者控制的动态库路径export LD_PRELOAD=/path/xxx.so设置优先加载的动态链接库,当程序运行时,攻击者的库将被优先加载,从而替换程序原本要调用的函数,实现恶意逻辑。

2、配置文件劫持:通过在/etc/ld.so.preload文件中添加恶意动态库的路径,攻击者可以使得所有读取该配置文件的进程在启动时优先加载恶意库,从而劫持系统级功能。

3、核心库劫持:由于大多数Linux程序都依赖于glibc,特别是libc.so.6这样的核心库文件,攻击者可通过替换这些核心库文件来劫持几乎所有依赖动态链接的系统函数用。

如通过劫持配置文件来隐藏bash进程:

首先下载libprocesshider工具

https://github.com/gianlucaborello/libprocesshider

修改processhider.c中process_to_filter的值为想要隐藏的进程名如bash

【应急响应】Linux隐藏进程排查

编译【make】生成libprocesshider.so文件

【应急响应】Linux隐藏进程排查

将编译好的so文件移动至/tmp目录下,并将其加载至全局动态链接库

【echo /tmp/libprocesshider.so >> /etc/ld.so.preload】

通过上述操作bash进程的PID和进程名也被隐藏

【应急响应】Linux隐藏进程排查

排查方法:【cat /etc/ld.so.preload 】或【 ldd /bin/bash】

一般情况下ld.so.preload文件为空或不存在,若该文件有内容则需要进行排查

可以使用ldd排查指定命令或程序的动态链接库,逐一检查加载的so文件是否异常

【应急响应】Linux隐藏进程排查

复方法:【echo "" > /etc/ld.so.preload】

删除/etc/ld.so.preload文件中的内容,删除恶意so文件

【应急响应】Linux隐藏进程排查

四、unhide排查隐藏进程




unhide主要用于查找和发现被隐藏的进程、TCP/UDP端口以及其他隐藏技术。unhide通过比较/proc目录和/bin/ps命令的输出来发现隐藏的进程。它还通过系统调用获取的信息与/bin/ps命令的输出结果进行比较,以及在Linux2.6内核及以上版本的系统中,使用穷举法对所有可能的进程ID进行扫描来检测隐藏的进程。

安装使用:在基于Debian的系统中,可以通过【apt-get install unhide】命令来安装。对于CentOS系统,可以通过yum或dnf命令来安装,不出网的机器可以直接通过rpm包进行离线安装。

检查隐藏进程【unhide proc】

【应急响应】Linux隐藏进程排查



END




原文始发于微信公众号(安全驾驶舱):【应急响应】Linux隐藏进程排查

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月9日19:32:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【应急响应】Linux隐藏进程排查https://cn-sec.com/archives/3246306.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息