【问题标题】:Do these .env GET requests from localhost indicate an attack? [closed]来自 localhost 的这些 .env GET 请求是否表明存在攻击? [关闭]
【发布时间】:2021-01-14 10:32:13
【问题描述】:

在 Heroku 托管站点上遇到一些间歇性的 5xx 错误后,我只是在查看我们的日志,在那里我发现了许多来自 localhost 的错误,并且是对隐藏文件的请求,通常是 .env 以及类似的东西“.well-known/assetlinks.json”,偶尔会出现在不存在的子文件夹中的 .env。

请求并不频繁(每天 15 到 30 个),但似乎已经持续了一周。他们还遇到了“规则禁止访问”,据我所知是 nginx。

请求类似于:

2020/09/28 14:37:44 [错误] 160#0: *1928 访问被规则禁止,客户端:10.45.153.152,服务器:localhost,请求:“GET /.env HTTP/1.1”,主机: 已移除

我的服务器上没有任何ENV文件,而且nginx似乎阻塞了请求,所以感觉没有任何伤害。重新启动所有测功机似乎已经杀死了活动(基于几个小时过去了),但让我担心的是这些似乎“来自房子内部”。这里有什么我应该关心的吗?这是机器人利用具有本地访问权限的系统中的错误的案例吗?

【问题讨论】:

标签: php security nginx heroku websecurity


【解决方案1】:

/.env 的请求无论如何都是恶意的。

许多应用程序(例如基于 Laravel)使用 .env 文件来保存数据库密码等非常敏感的数据。黑客/他们的自动化脚本尝试检查 .env 是否可以公开访问。

如果他们一开始就可以红.env文件,这表明服务器配置不正确,服务器管理员设置服务器的方式如此糟糕,应该承担后果......

后果通常是一回事。黑客一旦获得了.env 数据,就拥有了数据库凭据,并且几乎没有嗅探,就找到了 PhpMyAdmin 的 URL。因为通常,“错误配置”包括可公开访问的 PhpMyAdmin。

接下来你知道,他们会通过电子邮件告诉你你的数据库已经不见了,但他们已经拥有了。除非您有备份,否则找回它的唯一方法是支付一些加密货币。

做什么

首先确保.env 不在可公开访问的目录中。 即使它们是,让 NGINX 拒绝访问它们,例如拒绝访问所有隐藏文件:

location ~ /\. {
    deny all;
}

无论您的系统上是否有任何.env 文件,您都可以确定与在网络上请求它们相关的流量是恶意的。要减少任何 CPU 负载并防止他们进一步尝试查找网站漏洞,您可以使用 honeypot approach,例如:

location ~ /\.env$ {
    include includes/honeypot.conf;
}

... 将触发 立即 防火墙禁止试图读取 .env 文件的 IP。 这被证明是有用的,因为.env 利用可能只是许多其他可能的攻击之一,并且由于相关 IP 被阻止,它不能再尝试了。

【讨论】:

  • 我更担心的是 localhost 方面,该机器人似乎在本地运行,这意味着服务器上存在漏洞。重新启动测功机似乎会杀死它,因此如果授予访问权限,则不是磁盘访问。不是很好,但不是最坏的情况。您指出的蜜罐方法对我来说是新的,看起来可能非常有用,所以感谢您指出我的方向。
  • 从您的日志条目来看,10.45.153.152 似乎是一个内网(LAN 区域)IP 地址,而server: localhost 不保证客户端在同一台机器上。你可能有一个serverserver_name localhost,但可以从外部访问,因为它要么是默认服务器(因此任何人访问服务器 IP,最终都会“请求”该服务器块)或远程客户端在通话时发送 Host: localhost到您的服务器 IP。
【解决方案2】:

我有一个用于 404 的 CGI 脚本,每当我收到对 .env 的请求时,它就会发送一个二进制文件。我认为黑客会尝试解析 .env,我希望他的解析器不会喜欢二进制文件。然后我将发起请求的 IP 黑洞。

【讨论】: