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


10

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

我们怀疑这一点的原因是,我们注意到来自高(看起来是随机的)端口的计算机上的网络利用率高于正常水平。

我们如何找到有问题的孩子?将来我们可以做些什么来保护自己呢?是否可以进行监控以使我们将来知道这一点?(除了网络监视之外,我们已经在密切关注。)

预先感谢,如果需要,我可以提供更多详细信息。感谢您的时间。


2
保证的修复:从轨道中删除它并从备份中恢复。
克里斯·S

这似乎重复了这个最近的问题
史蒂文

1
“我不是系统管理员,但我被带到团队来解决问题”-这是无价的。整理一下:您的问题完全可以。您现实生活中的情况并非如此。决定让您参与其中的人是错误的。
2010年

@Chris S:这是一个学习中的问题,而不是什么是解决问题的最快方法。
克里斯,2010年

halp:我不负责解决此问题,但有一部分值得学习。我是应届毕业生,刚开始工作时会变得湿透。
克里斯,2010年

Answers:


6

您不能信任计算机上拥有的任何系统工具。Rootkit将替换ps,netstat,ls等以隐藏它们的存在。您应该使计算机脱机,取出其硬盘驱动器,进行法医复制(例如dd),然后在第二台计算机上使用该文件进行扫描以查找rootkit。

如果您坚持在实时计算机上工作(通常是徒劳的),则可以尝试在CD上下载急救分发版(非常重要的副本是只读的)并使用其ps,lsmod等副本。

甚至这可能会失败,因为rootkit可以安装内核模块来隐藏/ proc中的条目,而ps等工具通常可以在/ proc上运行。

祝好运!


如果他具有基于RPM的发行版,则可以运行rpm -V -f /bin/ps以检查是否已修改。当然,这仅在攻击者也未进行修改rpm或RPM数据库的情况下才有效。尽管他可以修改一些rpm文件,然后运行rpm -V rpm并检查文件是否在说谎。
Cristian Ciupitu

5

精心构建的rootkit的问题在于它们会修改系统的命令。像ps和top一样,不显示rootkit的进程,而ls不显示rootkit的文件。

因此,您需要做的是从源代码或binairies形式中获取这些命令。(请确保签名正确)。但是,root工具包的技巧(我已经看过)是,它们也可能破坏了编译器。因此,当编译器知道自己正在编译ls或ps或任何命令时,他也会感染它们。

当我看到这个问题时,我说可以重新编译gcc,但是我不需要编译gcc ...感染gcc ....所以当他知道自己正在编译时,他就感染了它,因此它可以感染命令。

您会说这变得庞大且难以检测,是的,但很少见的根工具包如此防弹,我只是给了您最坏的情况。

说真的,如果您确定服务器中有一个根工具包,请重新安装它!


欣赏答案,是的,现在重新安装它是解决方案。事实是,我想了解这一点,这样一来,我也许可以检测到它并从中恢复,而不必重建整个服务器。我们的高管比下一位高管不再喜欢停机。
克里斯,2010年

@Chris,预防是您唯一的治疗方法。.弄清楚它是如何发生的,以便我们帮助回答..“如何”避免它再次发生
Arenstar 2010年

您会为这个问题选择一个好的答案吗?
Gopoi 2011年

5

知道服务器是否已“植根”的最佳方法是运行基于主机的入侵检测系统(HIDS)。不幸的是,如果您现在不运行HIDS,那么现在安装它已经太迟了。安装HIDS适当的时候是第一次安装服务器时,与之前它被放到网络上。

简而言之,大多数HIDS都是通过计算所有系统二进制文件的加密哈希并将这些哈希(以及许多其他文件统计信息)存储到称为基准数据库的数据库中来工作的。然后,HIDS会定期重新扫描系统,将其基准数据库中的所有文件与实际系统文件进行比较。

是的,当然,rootkit可以修改基准数据库,因此,在使服务器联机之前,需要复制该数据库并将其与服务器分开存储。然后,如果您怀疑自己已“扎根”(并且怀疑自己的基准数据库也遭到了篡改),则可以从安装介质启动系统,从备份中还原已知良好的数据库,然后对数据库进行扫描。很好。但是,rootkit很有可能不会打败您的特定HIDS,因此您将收到来自HIDS的通知,通知系统文件已更改,表明可能是系统入侵。

由于您没有运行HIDS,因此无法快速确定您是否已root用户或已修改了哪些系统文件。您可能会花费大量时间将系统文件与从已知有效安装介质中提取的已知有效文件进行比较,但是最有可能花费更多时间从该介质重新安装系统。如果您想调查一下问题的根源,最好的方法是在擦除系统并重新安装之前对其进行映像。


Samhain是一名HIDS。
pefu 2014年

4

请参考之前的帖子

痛苦地删除了Perl Rootkit

阅读此书非常重要。

至于回答你的问题..

我通常会像snort一样运行IDS / IPS(入侵检测/保护系统)..它在防止犯规方面发挥了出色的作用,而且我发现它在实际操作中表现出色。

我还使用Syslog服务器将日志消息保留在生产服务器之外,因此您可以回溯问题和更改/进行rootkit操作

我还经常使用诸如仙人掌之类的管理工具,该工具可以绘制cpu,内存,磁盘,网络使用情况的图表,并报告是否有异常情况。

成为rootkit'd是一个严重的问题,请务必尝试找出原因。

希望这会有所帮助..:D


3

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

如果未扎根,则netstat -np | grep -v ^unix可能会提示您哪些程序正在生成流量。

您还可以使用tcpdump扫描来自附近系统的流量,以转储源自您认为已扎根的系统的数据包。如果问题程序未以root用户身份运行,则可以从受感染的系统中执行此操作。

您可以采取以下几种措施来避免扎根:

  • 保持您的系统处于修补状态,尤其是内核。监视内核释放的原因,以确定攻击媒介。
  • 仅安装和使用所需的程序。进行尽可能少的安装。
  • 尽可能少地运行。一旦完成需要根特权的设置,许多程序将变为非特权用户ID。

编辑:如果您是root用户,则使用静态链接的ps和ls程序可能表示这两个工具找到的正在运行的程序之间存在差异。随着寿命短的程序的消失,列表中的差异也可能出现。


1

对于可能扎根的系统,真正的解决方法是从安全来源重新安装它。像安装CD。然后仅从备份还原数据。备份中的任何二进制文件或脚本都可能已被破坏并保存到备份中。

要在正在运行的系统上找到root套件,一种方法是编译旨在检测rootkit的内核模块。在运行相同OS版本的另一台计算机上编译它。然后将其复制并插入。

rootkit检测器将在内核模块中内置工具,以转储正在运行的进程表,验证syscall表(以查找syscall拦截)和其他功能。它可能具有脚本,这些脚本将获取模块的输出,并将其与ps,netstat,ls等的输出进行比较。或者,它可能能够扫描内核空间中的内存以查找已知的rootkit签名并进行报告。


1

这就像老鼠:如果看到一只老鼠,那儿有一百只。如果您看到危害的迹象,则必须假设整个系统都受到危害。因此,每个人都建议您重新安装系统,而不要花费大量时间进行查找。我遇到过几种情况,其中一台计算机受到威胁,系统管理员认为他们已经清理了混乱的地方,后来才后悔。

Rootkit替换系统二进制文件(例如ps,top,netstat)非常普遍。trojan ssh也很常见。因此,在这些文件中查找校验和奇数是一种主要方法。如果您使用的是基于rpm的系统,则rpm -V通常是一个很好的工具,或者在Debian / Ubuntu上使用dpkg-verify。或者,您可以直接检查校验和(但要注意预链接,出于速度原因它会即时更改二进制文件)。这是不可靠的,但是许多脚本小子攻击并未涵盖这些痕迹。(换句话说,如果您找到了,那就好。如果您找不到,这并不能证明您很干净。)

要查找的其他内容:显示为从外部打开的端口(在计算机上nmap看起来不是通过open打开netstat的)和未在/proc中显示的pids ps。并且,如果您恰好启用了远程syslog,请查找在lastlog中没有记录的ssh登录。


0

索取RKhunter和chkrootkit的副本。他们通常很擅长帮助发现不应该存在的东西。

最好在Apache层上同时运行mod_security和防火墙。通常,他们会找到过时的Web应用程序或脚本,并使用Perl Shell脚本和其他有趣的东西增强从那里的访问。

ps auxfww通常非常适合查找不属于该进程的进程。

另外:netstat -anp可以查看某些端口上正在侦听的内容。

如果您还没有扎根,只是妥协,那么这些都是很好的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.