资源
2026-05-30 12:00
攻击分析:漏洞扫描器对抗 Multify 代理
在本文中:
对 Multify 代理基础设施的漏洞扫描器实际攻击分析——机器人寻找什么,如何在接近时阻止它们,以及客户网站为何对此一无所知。
2026 年 5 月 29 日,17:04。来自科特迪瓦的两个 IP 地址连接到 Multify 代理服务器。在接下来的 90 秒内,它们尝试了近 100 个 URL 并收到了 100 次拒绝。
这是漏洞扫描器的典型工作。不是有针对性的入侵,而是自动侦察。这些扫描器持续运行,扫描数百万个网站,寻找一个目标:包含密钥、密码或配置的开放文件,或 CMS 中的已知漏洞。无论网站是基于 WordPress、Drupal、Joomla 还是自定义引擎,扫描器都会根据标准词典逐一检查所有内容。
Multify 作为反向代理,接收所有传入流量。扫描器会访问 Multify 的基础设施,而不是直接访问客户的网站。代理保护就是客户网站的保护。
扫描器寻找什么
以下是真实日志中的列表:
`` /.env /.env.production /.env.local /.env.bak /wp-config.php /config/database.php /config/secrets.yml /azure-credentials.json /gcp-credentials.json /private.key /database.sql /dump.sql ``
这不是一个随机的集合,而是根据真实泄露事件编制的标准词典。此列表中的每个文件都曾在某个生产服务器上被公开访问。
具体寻找什么
环境变量
— .env 文件及其变体。开发人员在其中存储 API 密钥、数据库密码、支付系统令牌。这样一个文件可以使攻击者完全访问基础设施,而不会留下任何入侵痕迹。根据 GitGuardian 的数据,2024 年在公共存储库中发现的秘密超过 1200 万次,.env 是最常见的三种之一。开发人员将文件添加到 .gitignore 中,但在部署后,它仍然保留在服务器的公共目录中,没有人检查。
CMS 和框架配置
— wp-config.php (WordPress)、Joomla、Drupal 配置、Laravel、Symfony、Rails 文件。扫描器不知道网站是用什么编写的,因此会检查所有流行的变体。
云密钥
— gcp-credentials.json, azure-credentials.json, service-account.json, terraform.tfvars。一旦被发现,意味着可以访问云账户中的所有数据,并可能产生数万美元的费用。
加密密钥
— private.key, server.key, rails/master.key。公开的私钥允许解密所有流量或伪造签名。
日志和转储
— error.log, debug.log, database.sql, dump.sql。日志通常包含用户数据、文件路径,有时甚至包含明文密码。
基础设施配置
— nginx.conf, docker-compose.yml, web.config。通过它们可以了解内部网络拓扑并找到下一个入口点。
CMS 漏洞
— 一个单独的类别。一旦发布新的 CVE,扫描器就会开始检查所有网站,通常在几个小时内。根据 Google Project Zero 的数据,从 CVE 发布到首次攻击的中位数是 15 天,但对于具有公开 PoC 的漏洞,这个时间缩短到几个小时。目前正在积极利用的示例:
CVE-2026-9082
,Drupal Core 在 PostgreSQL 中的 SQL 注入(版本 8.0 到 11.3.9)。该漏洞在于 Drupal 如何通过 JSON:API 构建 SQL 查询:攻击者在过滤器参数中传递一个带有嵌套 SQL 的数组键,Drupal 在不进行清理的情况下将其插入到查询中。无需授权,通过普通的 HTTP 请求。结果:数据库转储、创建管理员账户,在某些配置中执行任意代码。CVSS 9.8,严重(相比之下,2021 年导致半个互联网瘫痪的 Log4Shell 获得了 10.0)。补丁于 5 月 20 日发布,可用的 PoC 在不到一小时内出现在 GitHub 上。5 月 22 日,该漏洞被添加到 CISA 已知利用漏洞目录中。在最初的 48 小时内,在 65 个国家的近 6,000 个网站上记录了超过 15,000 次利用尝试。
5月29日的攻击就是如此。WAF根据OWASP CRS签名进行了响应,CrowdSec将这两个IP都添加到了阻止列表中。客户对此一无所知。
扫描器在90秒内扫描了所有类别。
两个IP——一个扫描器
扫描器同时从两个地址启动。现代扫描器将负载分配到多个IP,以保持在简单速率限制规则的阈值以下。如果保护措施对“一个IP每分钟超过10个请求”触发,扫描器只会从每个IP发出5个请求。同时,这些IP本身通常与实际攻击者无关——它们是租用的VPS、被入侵的服务器或世界各地的僵尸网络机器。科特迪瓦在这里是一个随机的地理位置,而不是实际操作人员的所在地。
日志中一个有趣的细节:第二个IP的第一个请求返回了200——扫描器首先检查了主页,确认网站正常运行,然后才开始枚举。这是工具的标志,而不是随机流量。
代理如何阻止攻击
WAF
WAF
(Web Application Firewall)——应用层防火墙。与查看IP和端口的网络防火墙不同,WAF读取HTTP请求的内容:URL、标头、正文。它在请求到达网站之前分析每个请求。
规则的基础是
OWASP Core Rule Set
(CRS),一个由非营利性OWASP基金会维护的开放式攻击签名集。CRS涵盖了配置文件枚举、SQL注入、XSS和其他常见攻击向量。对.env、.sql、.key、wp-config.php和数十个其他扩展的请求会立即被阻止。WAF不知道文件是否存在于服务器上——它根据请求名称进行阻止,扫描器在了解任何信息之前就会收到拒绝。
CrowdSec
CrowdSec
是一个开源的行为分析引擎。WAF 单独处理每个请求,而 CrowdSec 则关注序列:在过去几分钟内,这个 IP 究竟请求了什么。
对 .env 的一次请求可能是链接中的错误。在 30 秒内对 .env、.env.production、.env.local、.envrc 进行十次请求,这已经不是用户行为了。CrowdSec 通过
场景
(行为规则)识别这种模式并阻止 IP。被阻止的地址会进入一个共享威胁数据库,全球数千台服务器都在使用该数据库。在一个网站上检测到的扫描器会立即成为所有地方不受欢迎的访客。
攻击数据
参数
值
持续时间
~90 秒
正在遍历的 URL
每个 IP ~100 个
目标类别
8 (env, 密钥, 数据库, 日志, 基础设施, 云, CMS, 框架)
成功请求
1 (主页,在保护触发之前)
泄露
0
扫描器在一分半钟内处理了标准字典,然后一无所获地离开了。客户的网站没有收到任何恶意请求。
为什么它会这样工作
当网站连接到 Multify 时,所有传入流量都通过代理。客户连接 Multify 是为了本地化,而不是为了保护。但由于代理位于网站之前,Multify 基础设施的所有保护都会自动扩展到它。
通过开放文件泄露是最常见的攻击向量之一。它们不是由于复杂的漏洞利用,而是由于简单的错误:开发人员部署了项目却忘记删除.env。将测试数据库转储放在公共文件夹中。将带有密码的配置留在服务器上。扫描器会在几个小时内找到这些文件,远在团队中的任何人注意到错误之前。
常见问题
Multify能防御CVE-2026-9082吗?
如果客户网站在带有PostgreSQL的Drupal上运行,WAF在代理级别会阻止典型的请求模式:对/jsonapi的复杂filter参数,对/user/login?_format=json的非标准请求体。扫描器无法访问网站。但这不能替代补丁:如果网站可以直接绕过代理访问,则没有保护。
为什么是两个IP,而不是一个?
现代扫描器将请求分散到多个地址,以保持在简单速率限制规则的阈值以下。CrowdSec关注行为,而不是来自单个IP的请求数量,因此这种技术无效。
扫描器是否了解了客户网站的任何信息?
不能。WAF在请求到达应用程序之前,通过路径名称阻止请求。扫描器不知道文件是否存在于服务器上——它在代理级别收到拒绝。
如果攻击不是扫描器,而是有针对性的入侵呢?
有针对性的攻击更复杂:攻击者知道目标,使用非标准向量,并且缓慢操作以避免触发行为模式。WAF和CrowdSec降低了攻击面,但不能提供百分之百的保证。对于关键网站,需要进行渗透测试和异常监控。
科特迪瓦很重要吗?
不。扫描器 IP 的地理位置是所用机器的地理位置,而不是攻击者的。按国家/地区进行阻止毫无意义:下一次攻击将来自巴西、荷兰或俄罗斯。
本地化附带的保护
WAF 和行为阻止在代理级别运行——适用于 Multify 下的每个网站,无需您进行额外设置。
免费试用 →