如何检测在Linux中的隐藏进程?

我们有一个我们怀疑在工作中扎根的盒子。 问题是我们如何find它? 我不是系统pipe理员,但是我被带到了团队中来解决这个问题,我很好奇,在哪里可以find好的地方去寻找问题。

我们怀疑的原因是,我们注意到机器上的networking利用率高于正常情况下的高(看起来是随机的)端口。

我们可以find问题的孩子吗? 未来我们能做些什么来保护这一点? 有没有监测,我们可以运行,使我们在未来意识到这一点? (除了我们正在密切关注的networking监控。)

在此先感谢,如果需要,我可以提供更多的细节。 欣赏你的时间。

你不能相信你机器上的任何系统工具。 Rootkits将取代ps,netstat,ls等等来隐藏它们的存在。 您应该使机器脱机,取出硬盘,制作一个取证副本(想dd),然后在一台有名的机器上工作,以扫描rootkit。

如果你坚持在现场机器上工作(这通常是徒劳的),那么你可以尝试下载一个在CD上的救援发行(它的副本是非常重要的只读),并使用它的ps,lsmod等副本

即使这可能会失败,因为一个rootkit可以安装内核模块来隐藏在/ proc工具,如ps正常运行的条目。

祝你好运!

构build良好的rootkit的问题在于它们修改了系统的命令; 像ps和top,不显示rootkit和ls的进程,不显示rootkit的文件。

所以你需要做的是从源代码或者二进制表单中获得这些命令。 (一定要签字) 但根套件的技巧(我见过)是,它们也可能损坏你的编译器。 所以当编译器知道他正在编译ls或ps或者任何命令的时候,他也会感染它们。

当我看到这个问题时,我说很好,让我们重新编译gcc,但没有我需要编译的gcc …感染gcc ….所以当他知道他正在编译自己感染它,所以它可以感染命令。

你会说这个很大,很难被发现,但是很less有根本的套件是如此防弹的,我只是给你提供了更糟的情况。

严重的是,如果你确定你的服务器中有一个root工具包,重新安装它!

了解您的服务器是否已经“根植”的最好方法是运行基于主机的入侵检测系统(HIDS)。 不幸的是,如果你现在没有运行HIDS,那么安装一个就太晚了。 安装HIDS的正确时间是在服务器首次安装时,以及在将其放入networking之前。

简而言之,大多数HIDS通过计算所有系统二进制文件的密码散列,并将这些散列(连同众多其他文件统计数据)存储到一个称为基线数据库的数据库中。 然后,定期将HIDS重新扫描您的系统,将其基准数据库中的所有文件与实际的系统文件进行比较。

是的,当然,rootkit可能会修改基准数据库,这就是为什么将服务器联机之前 ,需要将该数据库的副本与服务器分开存储的原因。 然后,如果您怀疑自己“已根植”(并且怀疑您的基准数据库也被篡改),则可以从安装介质引导系统,从备份中还原已知好的数据库,然后针对已知良好。 然而,更有可能的是rootkit不会预料到必须击败你的特定HIDS,所以你将会收到来自HIDS的通知,说明系统文件已经改变,表明可能的系统入侵。

由于您没有运行HIDS,因此您无法快速确定您是否已经生根,或者系统文件已被修改。 您可能花费大量的时间将您的系统文件与从已知良好的安装介质中获得的已知好的文件进行比较,但是那段时间最好是从该介质重新安装系统。 如果你想调查你是如何植根于事实的,最好的方法就是在擦除系统并重新安装之前拍摄系统的图像。

请参考之前发布的post

去除perl rootkit的痛苦

你读这个真的很重要

至于回答你的问题..

我通常运行像snort这样的IDS / IPS(入侵检测/保护系统),它在犯规方面做得非常好,而且我已经看到它在做一个伟大的工作。

我还使用Syslog服务器将日志消息保留在生产服务器上,这样您就可以回溯问题并修改/ rootkit

我也经常使用pipe理工具,如仙人掌,graphicsCPU,内存,磁盘,networking使用情况和报告,如果有什么不寻常的..

rootkit是一个严重的问题,一定要努力找出原因。

希望这有助于..:D

随机高端口是临时端口,这表明您可能有一个或多个程序从这个系统向外连接。

如果没有root,那么netstat -np | grep -v ^unix netstat -np | grep -v ^unix可以给你一个关于哪个程序产生stream量的提示。

您也可以使用tcpdump扫描来自附近系统的stream量,以转储源自您认为是根源的系统的数据包。 如果问题程序没有以root身份运行,则可以从受感染的系统执行此操作。

有几件事你可以做,以避免植根:

  • 保持你的系统补丁,特别是内核。 监视内核释放的原因以确定攻击媒介。
  • 只能安装和使用所需的程序。 做尽可能less的安装。
  • 以root身份尽可能less地运行。 许多程序一旦完成了需要root权限的设置,就会变成无特权的用户标识。

编辑:如果您是植根,然后使用静态链接的ps和ls程序可能表示两个工具find正在运行的程序之间的区别。 名单上的差异也可能会因为短命的程序消失而出现。

对于一个可能根深蒂固的系统来说,真正的解决方法是从安全的来源重新安装它。 像安装CD一样。 然后从备份恢复您的数据 。 备份中的任何二进制文件或脚本可能已被破坏并保存到您的备份中。

为了在正在运行的系统上findrootkit,一种方法是编译一个内核模块来检测rootkit。 在另一台运行相同操作系统版本的机器上编译它。 然后复制它并insmod它。

一个rootkit检测器将有内置到内核模块的工具来转储正在运行的进程表,validation系统调用表(查找系统调用截获)和其他function。 它可能有脚本,将从模块的输出,并将其与ps,netstat,ls等的输出进行比较。或者它可能能够扫描内核空间中的内存已知的rootkit签名和报告。

这就像老鼠:如果你看到一个,那里有一百个人住在里面。 如果你看到妥协的迹象,你必须假设整个系统是妥协的。 这就是为什么大家都build​​议你重新安装系统,而不是花很多时间看。 我遇到过几种情况,一台机器被破坏,系统pipe理员认为他们已经清理了这个烂摊子,后来才后悔。

rootkitreplace系统二进制文件(如ps,top,netstat)是很常见的。 这在木马ssh中也很常见。 所以,在这些文件中寻找校验和怪异是一个主要的方法。 如果你使用的是基于rpm的系统,rpm -V通常是一个很好的工具,或者Debian / Ubuntu上的dpkg-verify。 或者你可以直接检查校验和(但要注意不要预先链接,因为速度的原因飞行中更改二进制文件)。 这是不可靠的,但是许多脚本 – 小孩攻击不包括这些痕迹。 (换句话说,如果你发现了一些东西,那么很好,如果你找不到东西,那就不能certificate你是干净的。)

其他要查找的东西:显示的端口显示为从外部nmap打开,而不是通过机器上的netstat打开,pids在/proc中不显示在ps 。 如果您碰巧启用了远程系统日志,请查找最后一个日志中没有logging的sshlogin名。

抓住RKhunter和chkrootkit的副本。 他们在帮助find不应该在那里的东西通常是相当不错的。

在Apache层上运行mod_security以及防火墙总是很好的。 通常他们会find一个过时的webapp或脚本,并通过Perl shell脚本和其他有趣的东西来增强访问权限。

ps auxfww通常很好find不属于的进程。

另外:netstat -anp查看某些端口正在监听的内容。

如果你还没有扎根,只要妥协,这些都是好的。