如何快速找出Linux服务器上不该存在恶意或后门文件
如何快速找出Linux服务器上不该存在恶意或后门文件。前段时间我在APT写作时注意到一个问题,我发现网上大多都是关于Windows恶意软件检测的文章以及教程,而关于如何寻找Linux系统上恶意软件的资料却少之又少。因此,这篇文章主要是向大家介绍一些有关检查Linux系统恶意软件的技巧和方法。话不多说,让我们进入正题。
校验二进制文件
有一件事需要检查确认即没有运行的二进制文件被修改。这种类型的恶意软件可以用sshd的版本来支持,以允许使用特定的密码连接到系统,甚至是一些二进制文件的修改版本,它以root用户身份运行,只需监听触发器数据包的原始套接字即可。为此,我们将以Redhat和Debian为例。
寻找不属于的二进制文件
find /proc/*/exe -exec readlink {} + | xargs rpm -qf | grep “not owned”
find /proc/*/exe -exec readlink {} + | xargs dpkg -S | grep “no path”
校验运行的二进制文件是否与包中的文件匹配
find /proc/*/exe -exec readlink {} + | xargs rpm -qf | xargs rpm -V
find /proc/*/exe -exec readlink {} + | xargs dpkg -S | cut -d: -f1 | xargs dpkg -V
校验所有包文件
另一件需要检查确认的事是即所有属于包的二进制文件都没有被修改。这个过程可能需要一段时间才能完成,但这是值得。我们可以设置一个cron jobs,以在指定时间来运行它。
校验所有包文件
rpm -Va
dpkg -V
输出结果
输出应该显示属于包的任何二进制文件,计算二进制文件的哈希值,并将其与包安装或更新时保存的值进行比较。以下是基于Redhat系统的输出。使用dpkg的Debian系统不校验其中的大部分,因此如果修改了二进制文件,只显示“5”。
S 文件大小不同
M 模式不同(包括权限和文件类型)
5 摘要(以前的MD5 sum)不同
D 设备主/次要号不匹配
L readLink(2)路径不匹配
U 用户所有权不同
G 组的所有权不同
T mTime不同
P caPabilities不同
检查RAW套接字
我们经常能看到RAW socket后门。它们侦听传入的数据包并触发事件,例如最近发现的“Chaos”后门,以及一个在github上搜索raw socket后门时弹出的示例。对于这个检查,我们只会看看使用RAW套接字的过程。使用它们的常用程序并不多,因此我们可以缩小要查看的进程的范围。
使用 raw sockets listening检查二进制文件
netstat -lwp or ss -lwp
lsof | grep RAW
检查可能的注入内存
这里可能会存在各种误报的情况。RWX内存(读写执行)被许多程序使用,其中大多数是解释型语言,所以像python和java之类的,或使用任何库解析脚本的都会有这种情况,这是非常正常的。如果你找到RWX内存的许多条目并且该进程不是python或java,那你就应该仔细的查看一下了。该命令将列出RWX内存的进程id。可以看到以下列出了cron,这显然是不正常的进程。
命令查找pid
grep -r “rwx” /proc/*/maps | cut -d/ -f 3|uniq -c | sort -nr
检查修改的PAM模块
一个常见的后门是插入或替换PAM模块进行认证。 这可以允许远程访问,并且还允许攻击者从任何用户获取root权限。这个后门程序也不关心对/etc/passwd的修改,所以所有的原始密码和修改后的密码仍然有效。由于它提供的访问类型,在我看来这是一种非常危险的后门类型。你可以使用合法登录条目的正常协议,因此看起来显然像是没有任何恶意网络活动一样。
校验PAM模块
find /lib64/security/ | xargs rpm -qf | grep “not owned”
find /lib64/security/ | xargs rpm -qf | grep -v “not “| xargs rpm -V
SSH访问
保持访问权限并不需要删除二进制文件的一种非常简单的方法是,只需将ssh密钥添加到特定用户的authorized_keys文件中,并允许攻击者像普通用户那样进入ssh。这也是最难检测的方法之一,因为你需要确定ssh密钥是合法的还是恶意的,这要求用户验证只有他们的密钥在该文件中。攻击者也可以窃取用户的密钥,如果他们之前被盗用过的话。
列出所有用户的.ssh文件夹
cat /etc/passwd |cut -d: -f 6 | xargs /bin/sh -c “echo @; ls -al @/.ssh/ 2>/dev/null”
总结
有许多不同的方式可以保持对Linux服务器的权限访问。以上查找列表并不完整,但都是一些较为常见的查找后门的方法,包括Meterpreter和github上发现的其他常见后门程序。