自动检测受感染的 Web 服务器

信息安全 javascript 正直 代码签名
2021-08-25 08:36:21

我试图弄清楚是否可以自动检测服务器上的 HTML 或 javascript 文件已被攻击者篡改或更改的事实。

我们的网站,比如说www.example.com/index.html,当在浏览器中加载时,也会https://www.example.com/scripts/example.min.js<script></script>标签内加载。如果有人以某种方式侵入我的服务器并example.min.js用修改过的文件交换文件,有什么方法可以自动检测到所述入侵?

一种方法是在独立的安全服务器上运行一个程序,该服务器每隔几分钟查询一次https://example.comindex.html ,并将example.min.js文件的 SHA 与最后一个已知的正确值进行比较。

问题1:-假设轮询间隔是可以接受的,这是否足够强大的防御?恶意代码能否欺骗轮询代码?

问题 2:- 是否有更好的方法来减少风险窗口,而不是减少轮询间隔,这会产生不必要的流量。

3个回答

有许多本地进程将监视文件和目录的任何更改、写入、删除和访问。当这些事件发生时,进程会通过 syslog 创建一个事件日志。这可能在一秒钟内发生。

如果系统日志条目被发送到远程服务器(应该如此),您将几乎立即收到文件更改警报,而不会“欺骗”任何东西,也不会出现任何“不必要的”网络流量。

有预打包的软件可以做到这一点,或者也可以使用自定义脚本来完成(预打包的、经过测试的软件往往更好)。

问题1:-假设轮询间隔是可以接受的,这是否足够强大的防御?恶意代码能否欺骗轮询代码?

不,它的防御力不够强。是的,恶意代码可以通过其 IP、用户代理等识别轮询服务器/服务,并将干净的文件提供给您的轮询代理,同时继续向其他人提供恶意文件。当然,您可以尝试通过定期更改代理的 IP 和用户代理来阻止检测,但恶意代码也可以适应检测您的更改。

虽然基于客户端提供不同的内容本身就是一件微不足道的事情,但攻击者知道这种保护措施已经到位这一事实并非微不足道(它更像是一种通过默默无闻的安全性)。攻击者可以了解这种保护措施的方式是,当他知道您的架构(内部威胁)时,或者您是否经历了妥协->修复->妥协循环足够多的时间,以便他缩小危害检测的原因。

问题 2:- 是否有更好的方法来减少风险窗口,而不是减少轮询间隔,这会产生不必要的流量。

降低风险的更好方法是进行深度防御

  • 使用tripwire等基于主机的文件完整性工具来查看相关文件。
    • 击败这种防御将需要宿主妥协
  • 根据文件的敏感程度和您的偏执程度,配置您的部署工具以每 n 小时重建一次文件。
    • 击败这种防御将需要网络妥协。
  • 如您所述,远程监控您的文件。
    • 击败这种防御将需要 1.) 远程计算机的妥协或 2.) 对您的系统有足够的了解/侦察。
  • 部署基于主机的入侵检测/预防工具,如snortfail2bandenyhosts来检测入侵。
    • 击败这种防御将需要一种不会在日志文件中产生大量噪音和/或逃避基于签名的检测的攻击,例如。应用层缺陷。
  • 部署 Web 应用程序防火墙,例如。ModSecurity检测应用程序级异常。
    • 击败这一点将需要较低级别的攻击,理想情况下应该在上述点中检测到。

即使采用上述所有措施也不能保证安全性,但是它们减少了很多攻击面,并使成功且未被检测到的妥协变得困难。

就问题 1 而言,恶意代码很容易欺骗轮询代码。例如,许多 PHP 恶意软件会查看用户代理字符串,并将 404 代码返回给 Google、Bing、Yahoo 等。跟踪发出重复请求并欺骗它们的 IP 地址几乎同样容易。给定一个专门的对手,整个事情将演变成一场军备竞赛——谁可以编写最微妙的真实性测试,谁可以欺骗真实性的微妙测试。这并不是说会发生这样的军备竞赛,或者您个人无法赢得这样的军备竞赛,而是一般来说,恶意代码和傻瓜测试代码。

我认为您的问题与仅通过网络监控服务的难度密切相关。面对足够奇怪的错误,即使是远程过程调用或 REST 接口之类的东西也很难正确监控。在过去尝试过此操作后,我可以向您保证,您最终会与越来越奇怪的错误进行“军备竞赛”。