你怎么知道你的服务器被入侵了?

信息安全 linux php javascript 检测
2021-08-11 15:14:37

我最近帮助了一个服务器被黑的客户。黑客在主页的标题中添加了一些 PHP 代码,将用户重定向到色情网站——但前提是它们来自谷歌。这使客户更难发现。客户会很好地看到该网站。只有来自 Google 的新网站访问者会被引导到色情网站。

昨晚,另一位客户似乎也发生了类似的事情。我认为这是一个类似的黑客攻击,但是当我检查代码库时,我找不到任何恶意代码。他的 chrome 浏览器正在从客户网站重定向到www(dot)pc-site(dot)com. 我无法复制这种行为。我想可能是恶意代码被添加和删除。所以我需要一种更全面的方法来判断服务器是否被黑客入侵。

只有 2 位开发人员可以访问此专用服务器(以及托管公司 Rackspace)。服务器是 Red Hat Linux。

我要通过哪些步骤来确定服务器是否被黑客入侵?

4个回答

更新

我会检查以下内容:

  1. 日志。如果你有 root 访问权限,你应该检查一下history这会给你命令历史和日志文件之类的东西/var/logs

  2. 基线。如果您有一个像文件哈希这样的基线来处理应用程序和系统文件,这将有很大帮助。您还可以使用备份来比较以前的状态。如果使用备份来比较文件,请尽可能使用稍旧的文件。该站点之前可能已被入侵,直到现在才激活重定向。

  3. 检查任何包括。这些文件可能不在您的服务器上。它们可能是包含诸如<script src=”http://baddomain.com/s.js” />iframe类型标签的脚本。也不排除图像、Flash 的 PDF (SWF)、视频文件。将链接嵌入到不同内容类型的文件中是一种相当常见的技巧。我建议您手动检查它们,特别是在文件的开头和结尾处。该文件可能完全是一个链接/html/javascript,也可能是一个合法的图像文件,文件末尾有一个链接。

  4. 检查异常的文件日期、大小和权限,例如 777。

  5. 检查 cron 作业是否有异常作业。破坏系统的人通常会留下后门以一次又一次地重新进入。如果他们设法做到这一点,Cron 是一种非常流行的方法。

  6. 检查是否没有文件,您可能无法访问日志,但没有它们同样是一个告诉尾巴的迹象,表明有人已经清理了自己。

  7. 使用搜索引擎。毫不奇怪,搜索引擎擅长查找所有内容。使用指令,site:例如site:yoursitehere.com baddomain.com,看看你是否得到任何命中。

  8. 通常链接或重定向会被混淆,因此应仔细分析带有单字母变量的长 javascript 代码。

  9. 使用 Wireshark 或 tcpdump 等工具从安全工作站到站点进行数据包捕获。将其保存到文件并在文件中搜索部分 url。

  10. 检查可能被查询或更新的数据库记录。该链接可以注入数据库而不是 PHP。

  11. 不要排除客户的工作站。如果需要,请使用免费的在线病毒扫描程序。还要检查nslookup并查看解决的问题。检查浏览器扩展,清除缓存并检查hosts文件。

要清理它(如果您受到损害),您确实需要返回裸机并重新安装。这很痛苦,但确实是确保您拥有全部的唯一方法。

为了防止将来发生这种情况,您应该执行以下操作(尽管您可能已经在执行其中一些操作):

  1. 强化服务器,包括使用供应商关于安全配置的建议,使用最新的软件。应用严格的安全控制,例如权限、密码策略。另请参阅文件夹和文件权限共享主机建议

  2. 实施质量控制程序,例如在低安全性环境中进行测试、代码审查和测试。

  3. 让专业的认证测试人员至少对您的 Web 应用程序/网站漏洞进行一次测试。寻找 EC-Council、ISO 27001 和 PCI 认证的测试人员。http://www.eccouncil.org/certification/licensed_penetration_tester.aspx

  4. 查看 OWASP www.owasp.org 和http://phpsec.org/projects/guide/2.html以获取 Web 应用程序安全资源。

  5. 使用入侵防御系统 (IPS) 工具。但是,根据您的托管服务提供商,您可能会对可以使用的内容有所限制。如果您有专用的虚拟机,基于主机的 IPS 工具应该没问题。

希望有帮助。否则,也许您可​​以提供有关您正在运行的系统的更多信息?

正如@Dgarcia 所说,一种快速的方法是使用诸如 Tripwire 或其他监视文件或文件哈希值的工具来检查更改。这可以识别受到多种类型攻击的服务器。

  1. 它可能不适用于已安装了抵消此过程的 rootkit 的用户。
  2. 它不适用于已沦为仅内存妥协的牺牲品或未触及您正在监视的文件的服务器。

对于 1,您唯一的选择是从头开始重建

对于 2,您最好的选择是从头开始重建,因为任何妥协都可能实施后门,这将破坏您尝试修复的任何内容,但其他步骤可能有用:

  • 检查您的网络服务器和 php 版本,并使用它们在公告列表中搜索已知漏洞 - 这将帮助您识别可能已被破坏的区域。然后
  • 检查您的网络应用程序代码
  • 检查您的网络服务器配置
  • 检查客户端的机器(对于主机文件、DNS 等),因为它实际上可能是问题所在

这是一个很难回答的问题,因为它是如此广泛。我的书中有两类“黑客”——轻微的和严重的。我会将 rootkit 归为严重类别,而将您的平均脚本注入攻击归为次要类别。虽然对于轻微的攻击,您可以清理它们,但您不能 100% 确定您已删除它们或关闭所有访问以重复攻击,但您可以通过分析攻击的关键因素来 99% 确定,例如“这个人是个好程序员吗?” “这个人的意图是什么?” Rootkit 是一件令人讨厌的事情。删除 rootkit 需要完全擦除和恢复。远程检测一个几乎是不可能的——你必须对机器有物理访问权并且手头有一个引导盘才能确定。

更重要的是预防。格言“一盎司的预防胜于一磅的治疗”在这种情况下是完全正确的。安装可让您监控系统各个方面并发送每日甚至每小时报告的软件。提到了 Tripwire,但也有其他工具。我建议使用几种不同的工具——本土的工具更难找到并且不难创作。您想建立稳固的防御并限制对系统的访问。不要让世界上的任何人都可以访问 SSH 端口(至少通过 IP 地址/小范围的 IP 限制它)。在每台服务器前面放置一个专用防火墙,这样就有了额外的保护层。你不想让盒子本身成为唯一的防线。仅通过 SSH/SSL 使用服务器管理关键数据,因此所有内容均已加密且不会被窥探。永远不要从开放的 WiFi 网络管理您的服务器。

许多网站使用 MySQL 或类似的数据库。在数据库中检测诸如 XSS 攻击或其他流氓数据之类的东西并不容易,因为存在与模式相关的问题。我还没有看到这个问题的任何解决方案,但我不会怀疑它们的存在。

一个快速的方法是让所有你知道是健康的文件的 md5。如果您怀疑您的网站表现不佳或作为定期检查,您可以检查文件。如果任何 md5 不匹配,您可以区分文件并仔细阅读更改。

显然,这不适用于动态文件:日志、数据库转储等。如果您无法跟踪更改。

当然,有多种方法(检查日志...)和预防措施,但这是一种简单快捷的方法。