知识库

防止服务端请求伪造 (SSRF)

什么是 SSRF?

服务器端请求伪造(SSRF)漏洞允许攻击者从易受攻击的 Web 应用程序的后端服务器发送精心构造的请求。攻击者通常利用 SSRF 攻击来定位位于防火墙后、无法从外部网络访问的内部系统。

当攻击者对后端应用程序发送的请求拥有全部或部分控制权时,就会出现 SSRF 漏洞。SSRF 并不限于 HTTP 协议。通常攻击者控制的输入是 HTTP,但后端请求可能使用其他协议。

Attack illustration

您可以在来自 Snyk 的交互式课程中练习攻击易受攻击的应用程序并了解缓解措施。

为什么 SSRF 攻击与 Neo4j 生态系统相关

Neo4j 是用于分析数据的图数据库。为了让用户能够轻松导入现有数据,我们必须提供本地或通过 HTTP 从网络加载文件(通常是 CSV 文件)的方法。该功能也使潜在的恶意用户能够操控初始请求——这正是 SSRF 的第一步。

如何保护我的环境

鉴于 SSRF 是 OWASP Top 10 问题,OWASP 提供了一个全面的防御与缓解指南

用例“用户应该能够从互联网上的任何位置加载数据”属于案例 2,该情况更难防御。

但通过深度防御的方式,这仍然是可行的。

Neo4j 会尽可能进行输入验证,这属于您的应用层防御。如果您在 Neo4j 之上构建自定义应用程序,限制上传数据和执行原始 Cypher 查询的能力仅对已认证用户开放是个好主意。但要实现深度防御,您还需要在网络层做更多工作。

检测和防御高度依赖于您的基础设施和网络环境。

在 AWS 云上运行

使用IMDSv2

在 Google 云上运行

Google 提供了防止访问元数据Compute Engine 资源的建议,以及如何利用工作负载身份来最小化访问的指南。

通用缓解措施

对网络进行分段,并配置防火墙以阻止 Neo4j 访问元数据子网(如果在云上运行)以及任何其他敏感的后端子网。在大多数情况下,您希望阻止后端服务发起的对内部 IP 地址的访问。

配置选项

除了上述外部网络层限制机制外,Neo4j 还提供了一种内部控制机制,允许用户提供要让 DBMS 阻断的 IP 地址范围。此控制通过必须添加到neo4j.conf的配置项激活,并需要重启 DBMS 才能生效。

unsupported.dbms.cypher_ip_blocklist

描述

DBMS 用于阻断 IP 请求的 IP 地址范围

有效值

逗号分隔的 IPv4 与 IPv6 CIDR 表记法 IP 范围列表

默认值

当 DBMS 尝试向某个 URL 发起 IP 请求时,会在解析出 IP 地址后检查该地址是否与配置项中提供的阻断 IP 范围冲突。由于该控制机制在 IP 网络层面生效,它会影响 Cypher 功能(如LOAD CSV)所发出的任何 HTTP 与 FTP 请求。

有多个有用的资源可以帮助计算所需的阻断列表。例如 ipaddressguide.com 提供了 IPv4 CIDR 与 IPv6 CIDR 范围的计算器。

用例

本节包含一些示例,帮助说明该设置在实际中的用法。

unsupported.dbms.cypher_ip_blocklist=

不阻止任何流量(默认行为)。

unsupported.dbms.cypher_ip_blocklist=0.0.0.0/0,::/0

阻止所有 IPv4 和 IPv6 网络流量。

unsupported.dbms.cypher_ip_blocklist=10.0.0.0/8,ff:f::/64

阻止 10.0.0.0 到 10.255.255.255 之间的 IPv4 流量。
阻止 ff:f:0:0:0:0:0:0 到 ff:f:0:0:ffff:ffff:ffff:ffff 之间的 IPv6 流量。

unsupported.dbms.cypher_ip_blocklist=10.0.0.0/8,10.0.0.0/24

阻止 10.0.0.0 到 10.255.255.255 之间的 IPv4 流量。
阻止 255.0.0.0 到 255.0.0.255 之间的 IPv4 流量。
不阻止任何 IPv6 流量。

受支持的版本

在 Neo4j 中,此设置自 4.4.44.3.174.2.194.1.123.5.35 版本起可用。

在 APOC 中,此设置自 4.4.0.34.3.0.84.2.0.124.1.0.123.5.0.20 版本起可用。

虽然该名称将在未来更改为 internal.dbms.cypher_ip_blocklist,但在即将发布的 5.0 版本中,Neo4j 与 APOC 同样会继续支持此设置。

© . This site is unofficial and not affiliated with Neo4j, Inc.