所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
安全 管理

如何检查服务器中的恶意软件:要查找的内容以及哪种检测方法适合您的设置

为什么检查服务器中的恶意软件比大多数用户意识到的更重要

如果 VPS 突然感觉变慢,第一反应通常很简单:运行扫描。也许 CPU 使用率无缘无故地飙升。也许出站流量开始看起来很奇怪。也许网站被标记为垃圾邮件或被列入黑名单。这种直觉没有错。只是不完整。在服务器上,真正的问题很少只是”我应该使用哪个扫描程序?”通常是”什么改变了,哪一层实际上会向我显示这个变化?”

malware

这种区别很重要,因为服务器恶意软件通常不如人们预期的那样引人注目。它并不总是像桌面病毒那样宣布自己。相反,它悄悄地转变为操作损害。它会影响正常运行时间。它会损害声誉和 SEO。它还可能造成基础设施成本或托管滥用问题。被入侵的网络服务器可以继续提供页面,同时在后台发生其他事情。它可能发送垃圾邮件、挖掘加密货币、重新创建恶意文件,或为攻击者提供可靠的返回路径。

📝 注意:如果你只记得一件事,请记住这一点:干净的扫描不是干净服务器的证明。

面向公众的服务器对于企业和自托管者喜欢它们的原因来说是有吸引力的目标。它们始终处于开启状态。它们可以从互联网访问。而且它们通常靠近应用程序、凭证、上传、客户流量和敏感工作流。本指南旨在使这种情况更容易理解。到最后,你应该知道为你的设置从哪个检测层开始,而不仅仅是收集扫描程序名称。不过,首先,你需要一个非常小的词汇集,这样框架的其余部分才能快速点击。

快速关键词和你首先需要的心智模型

dict

你不需要安全认证来阅读本文的其余部分。你只需要少数几个术语,以防止服务器恶意软件检测变成行话汤。把这一部分看作最小地图:足够的语言来识别你在看什么,而不会被首字母缩略词或企业词汇淹没。

以下词汇表保持这些术语的实用性:

关键词简明英文含义
🦠 恶意软件恶意软件或代码,执行你未授权的操作,例如窃取访问权限、更改文件、发送垃圾邮件或滥用服务器资源。
🚪 Web shell一个隐藏的脚本或文件,通常放在网站目录中,通过Web服务器为攻击者提供远程命令访问权限。
⛏️ 加密矿工恶意软件,使用你的服务器CPU或GPU为他人挖掘加密货币。
🔁 持久性让攻击者或恶意文件在重启、清理或用户注销后重新出现的技巧——就像他们可以继续使用的隐藏备用钥匙。
🔎 入侵指标表明可能出现问题的迹象,例如奇怪的进程、异常的出站流量、可疑的文件更改或不可能的登录活动。
⚠️ 误报一个合法的文件、警报或行为被标记为可疑,尽管它实际上并不是恶意的。
📏 基线你对”正常”样子的记录:预期的文件、服务、流量模式、管理员账户和计划任务。

一条心智规则将所有这些联系在一起:检查恶意软件与证明服务器健康不同。基线就像知道建筑物中的正常流量看起来像什么。日志就像CCTV加上门禁记录。持久性是隐藏的备用钥匙,在你认为它已关闭后继续重新打开门。检测检查可以提高或降低你的信心,但没有单一的检查能够自己证明完全安全。有了这个基础,就更容易看到服务器恶意软件在真实托管环境中通常是什么样子。

服务器恶意软件在现实中通常是什么样子

hacker

在面向互联网的 Linux 服务器上,恶意软件通常不会像用户下载一个明显的坏文件并弹出警告那样出现。它更常以更隐蔽的方式出现。

  • 一个服务器可能会在网站内容中隐藏一个 Web Shell。
  • 另一个可能开始运行一个消耗 CPU 的加密矿工。
  • 在其他情况下,问题是一个允许返回访问的后门或一个能在清理尝试后存活的持久化机制。
  • 在虚拟主机环境中,信号通常更多是操作性的而非戏剧性的。

Web 根目录中的可疑更改、奇怪的 PHP 文件、意外的 Shell 访问和异常的计划任务比任何类似桌面防病毒软件的东西都更现实。

Web Shell 特别重要,因为它们通常与普通网络内容混在一起。有时它们看起来像一个小的上传脚本。有时它们隐藏在修改后的主题文件中。在其他情况下,它们作为与合法应用文件混在一起的重命名实用程序出现。后门只是一个隐藏的返回入口。持久化是该访问如何存活下来的。

⚠️ 注意:本文是关于检测的,而不是恶意软件删除或事件响应。这里的目标是帮助您识别正确的证据层,而不是逐步讲解清理步骤。

在服务器上,该持久化通常存在于管理员首先不会审查的地方。它可能位于 `cron` 等定期任务中。它可能隐藏在 `systemd` 等启动服务中。它也可以出现在修改后的 SSH 密钥或 Shell 启动路径中,在有人删除恶意文件后悄悄恢复它。勒索软件仍然可能发生,但在许多 Linux 虚拟主机场景中,它是后期阶段的结果,而不是唯一值得思考的威胁。

types

入口路径通常是普通的弱点,而不是电影风格的零日场景。大多数都是熟悉的。过时的 CMS 或插件可以做到。暴露的管理面板、薄弱的 SSH 卫生、易受攻击的自定义网络应用、不安全的文件上传路径或控制面板滥用也可以。在共享或控制面板环境中,账户级别的妥协即使没有完全的 Root 访问权限仍然可能很严重。攻击者可能只需要访问网络内容、计划任务或一个虚拟主机账户的 Shell 路径就能建立一个持久的立足点。

来自 CISA、NSA 和最近 Microsoft Linux 虚拟主机研究的当前指导一直指向相同类型的手法。

  • 一个例子是面向网络的进程,如 `php-fpm`、`apache2` 或 `nginx` 生成 Shell 命令。
  • 另一个是通过 `base64` 解码模式重建的混淆 PHP 文件。
  • 另一个是在恶意文件消失后悄悄重新创建它的 cron 任务。

这就是现实中的服务器妥协通常是什么样子。无法解释的 CPU 负载可能指向挖矿。重新出现的文件可能指向持久化。互联网面向目录中的奇怪更改可能指向 Web Shell。这些都不需要闪亮的”发现病毒”横幅就能造成危险。

为什么单次清洁扫描不能证明服务器是清洁的

基于签名的扫描意味着根据已知的恶意模式、哈希值或规则检查文件和工件——简单来说,就是检查一个黑名单。这仍然很有用。如果你想快速初步检查已知的坏文件,签名扫描绝对有价值。它可以捕获熟悉的恶意软件。它还可以标记可疑的网络内容或低级商品威胁。在许多情况下,当你需要快速扫描 VPS 中的恶意软件时,它是最简单、低摩擦的起点。

scan

问题在于签名扫描本身无法很好地看到的内容。混淆的网络 shell 可能无法完全匹配。修改过的看起来合法的文件可能看起来不明显是恶意的。攻击者也可以”利用现有工具”,这意味着他们滥用服务器上已有的内置工具,而不是放下一个大的可疑二进制文件。有时真正的线索根本不是明确标记的恶意文件。它可能是隐藏在启动点、计划任务或授权密钥中的持久性。或者它可能是上下文行为,例如网络根目录中的异常时间戳、意外的出站连接、网络服务器进程生成 shell 命令,或者奇怪的文件类型突然生成网络请求。

📝 注意:清洁扫描 ≠ 清洁服务器。

这就是为什么扫描结果必须与其他证据层一起阅读。清洁结果很重要,但它只回答一个问题:这一层是否识别了已知的或明显可疑的东西?要判断服务器的更广泛状态,你还需要查看文件更改、日志、进程祖先和出站活动。正确的心态转变很小但很重要:不要要求一个工具来证明清白。要求每一层说出它擅长揭示什么样的异常。

真正重要的五个检测层

check

良好的服务器恶意软件检测效果最好的方式是停止从工具的角度思考,而是从观察层的角度思考。对于大多数 Linux 服务器和托管网络工作负载,有用的检查分为五组。

  1. 有针对已知恶意内容的快速扫描。
  2. 有针对可疑运行时活动的行为监控。
  3. 有针对意外更改的文件完整性或已知良好状态比较。
  4. 还有两个审查层:日志和流量,以及持久性和启动点。

每一层都能发现不同类型的异常。每一层也都有盲点。目标不是堆砌随机的安全产品。目标是覆盖与你实际运行的服务器最相关的证据类型。

下表并排比较了这五层:

检测层它能很好地捕捉什么它可能会遗漏什么最佳适用场景类比
🔍 签名/按需扫描已知恶意文件、常见网络恶意软件、快速首轮检查混淆脚本、被恶意使用的内置工具、微妙的持久性、行为上下文相关单个 VPS 检查、低摩擦首次审查、确认已知文件怀疑根据监视列表检查访客
👣 行为监控可疑的运行时活动、奇怪的父子进程链、网络服务器进程生成 shell、矿工式资源滥用安静的休眠文件、遥测数据不足时的有限上下文、监控存在之前发生的更改生产服务器、应用服务器、高风险工作负载注意到建筑物内的可疑活动
📦 文件完整性/已知良好状态比较网络根目录、应用程序文件、脚本和内容中的意外更改,这些内容应该很少更改合法但未记录的更改、主要存在于内存或日志中的攻击、没有基线的弱比较CMS 网站、托管网络应用、公共网络工作负载将今天的库存与昨天的可信记录进行比较
📹 日志和流量审查可疑请求、奇怪的出站连接、身份验证异常、垃圾邮件/黑名单线索、异常访问模式仅文件泄露且日志记录很少、日志不完整、从未到达日志源的更改应用服务器、网络服务器、业务工作负载、任何面向公众的系统CCTV 录像加门禁记录
🗝️ 持久性/启动审查Cron 滥用、修改的启动服务、植入的 SSH 密钥、删除后会返回的自我修复恶意软件没有持久性的一次性恶意文件、对先前更改的可见性较弱清理验证、重复事件、共享/控制面板环境、长期运行的服务器找到隐藏的备用钥匙

签名扫描和文件比较通常配合使用效果很好,因为它们回答两个不同的问题。扫描问的是”我在这里识别出任何已知的坏东西吗?”文件完整性问的是”在不应该改变的地方有什么改变了吗?”第二个问题在网络工作负载上应该得到额外重视。这对于 CMS 网站、客户门户和公共网络应用尤其如此。如果网络根目录突然包含修改的文件、意外脚本或不断重新出现的代码,已知良好状态比较通常是早期检测泄露的最高信号方式之一。

check2

当攻击者试图隐藏时,行为监控和日志审查至关重要,因为异常活动通常会在明显的恶意软件出现之前揭示泄露——比如服务器进程生成 shell、出站流量流向陌生目的地或关键应用程序行为异常。现代 Linux 漏洞通常依赖于被恶意使用的合法工具、账户或软件路径,使持久性检查同样重要:攻击者可能隐藏在启动路径、cron 作业、服务定义或添加的 SSH 密钥中,以便在删除可见工件后保持访问权限。

📝 重要提示:有效防御不是关于堆砌随机工具,而是确保在证据路径上的分层覆盖——恶意内容、运行时行为、意外文件更改、可疑请求和持久性机制。

应用该框架的最快方式是将症状映射到最可能解释它的第一层:

症状首先查看的层原因
⚙️ CPU 突然飙升行为监控矿工和滥用脚本通常通过可疑的进程活动和资源模式暴露自己。
📧 黑名单、垃圾邮件或滥用投诉日志和流量审查出站连接、邮件活动和请求历史通常比仅文件检查更快地解释这一点。
📁 网络文件被修改文件完整性/已知良好状态比较网络内容中的意外更改通常是 CMS 和网络托管工作负载上最清晰的信号。
🐚 网络服务器生成 shell 命令行为监控这是网络 shell 式活动或命令执行滥用的强运行时指标。
🔁 可疑文件在清理后重新出现持久性/启动审查该文件通常由 cron 作业、服务、密钥或其他隐藏的重新进入路径重新创建。

一旦该映射变得自然,下一个问题就变得容易得多:你应该从你自己的服务器类型上的哪一层开始?

根据您的服务器设置从何处开始

start

从最可能为您的设置快速揭示异常的层开始,而不是最花哨的安全类别。单个VPS、WordPress风格的Web服务器和业务关键的生产堆栈不会首先暴露相同的信号,因此它们不应该都从同一检测层开始。

设置推荐的第一层可选的第二层原因
🖥️ 单个VPS签名/按需扫描身份验证/系统日志审查快速扫描通常是最低摩擦的第一步,然后日志帮助解释发生了什么变化或何时发生。
🌐 CMS / WordPress风格的Web服务器文件完整性/已知良好状态比较访问日志审查或签名扫描公共Web内容更改在这里信号很强,特别是当核心文件和主题应该是可预测的时。
🗄️ 带数据库的应用服务器日志和流量审查行为监控多服务工作负载通常首先通过请求流、身份验证行为或意外网络移动暴露问题。
🏭 业务关键的生产工作负载行为监控集中式日志审查当停机时间、客户影响或收入风险很高时,运行时可见性和保留的日志变得更有价值。
🧩 控制面板/共享主机环境Web内容中的文件比较持久性/计划任务审查即使没有完整的服务器所有权,妥协也可能存在于Web文件或定期作业内的账户级别。

那个”可选的第二层”随着暴露、收入影响或重复妥协风险的增加而变得不那么可选。如果低风险的测试VPS只进行快速的第一步扫描,这可能足以开始分类。如果服务器处理客户流量、支付、内部业务逻辑或重复的滥用事件,第二层通常是最低合理视图的一部分,而不是锦上添花。

这也是提供商背景以有用方式发挥作用的地方。如果您使用AlexHost等主机运行VPS或专用服务器,重要的问题仍然不是”我应该首先购买哪个品牌的安全产品?”而是”这个工作负载上暴露了什么,哪一层最快显示异常?”公共Web应用受益于文件比较和日志审查。广泛的Linux VPS工作负载通常受益于快速扫描加上身份验证和系统日志检查。快照和备份有助于恢复,但当您需要了解发生了什么变化时,它们也使可信状态比较更容易。

使恶意软件更容易及早发现的最佳实践

当”正常”已经被记录下来时,检测会变得非常容易。在实际服务器术语中,基线可以很简单:

  • 知道哪些文件应该在网络根目录中。
  • 知道哪些服务应该被暴露。
  • 知道哪些管理员账户和 cron 任务是预期的。
  • 知道哪些出站目的地是正常的,以及你通常看到的大致 CPU、RAM 和流量模式。

没有这个基线,每次调查都会从一个比必要更难的问题开始:这真的可疑吗,还是只是陌生?

practices

💡 提示:基线只有在麻烦开始前就被捕获时才有帮助。

日志对可见性至关重要,不是奢侈品,即使是盒外保留也远优于仅依赖服务器上幸存的内容;与备份或快照配对,它们保留已知良好的状态以供恢复和比较,它们创建了一个强化三角形,其中日志显示发生了什么,基线显示什么是正常的,备份提供参考点。

除此之外,日常加固习惯——修补面向公众的应用和插件、加强管理员访问控制,以及定期审查计划任务和关键持久化点——使异常更清晰,持久化更难隐藏。目标不是完美,而是可见性卫生:小的、一致的实践,使检测和调查妥协更快、更敏锐、更少基于猜测。

导致虚假信心的常见错误

mistakes

最常见的检测错误是虚假免疫:认为 Linux 服务器不会真正感染恶意软件。事实并非如此。只是形式与许多读者从桌面安全讨论中了解到的不同。在服务器上,入侵通常表现为隐藏的网页更改、资源滥用或不应该存在的出站活动。如果系统是公开的、有用的且监控不足,它仍然是一个目标。

第二个错误是虚假替代:假设一个有用的控制措施可以回答真正需要多种证据的问题。防火墙、强化的登录路径和恶意软件扫描都很重要,但它们不可互换。防火墙控制流量边界。访问控制减少谁可以进入。扫描检查已知的恶意内容。它们中的任何一个都不能单独告诉您可疑运行时行为、修改的网页文件或未授权出站活动的完整情况。

⚠️ 警告:删除一个可疑文件并不能证明入侵已经消除。

这导致了第三个错误:虚假结束。一个文件消失了,所以问题被假设为已完成。然后它又回来了,因为 cron 作业、启动条目或攻击者访问路径从未被移除。或者原始入口点仍然开放,所以入侵只是通过同一扇门再次返回。实际的教训不是”恐慌”。而是”不要在第一个可见的工件处停止”。持续关注出站流量、持久化点和导致入侵成为可能的路径。这将我们带到本文最简单的可重用规则。

分层思考,而不是依赖单一工具

conclusion

当服务器上出现异常时,最好的第一个问题不是”哪个扫描器最好?”而是”发生了什么变化,哪一层会在这种工作负载上显示这种变化?”有时第一步应该是快速按需扫描。在Web工作负载上,可能需要进行文件比较。在另一台服务器上,访问日志或持久性审查可能会告诉你更多信息。有用的习惯是将症状和服务器类型与最可能快速揭示异常的证据层相匹配。

要保持的实用规则很简单:从这个工作负载最可能显示变化的地方开始,然后仅在风险、暴露或业务重要性证明合理时才扩大视图。对于VPS、独立服务器和托管Web工作负载——包括许多AlexHost客户运行的基础设施——关于暴露和观察点的清晰度比购买随机安全工具更重要。你对文件、行为、日志和持久性的了解越清楚,”感觉有些不对劲”就越快转变为”现在我知道该看哪里了”。