防御服务器端请求伪造 (SSRF)
什么是 SSRF?
服务器端请求伪造 (SSRF) 漏洞允许攻击者从易受攻击的 Web 应用程序的后端服务器发送精心制作的请求。攻击者通常使用 SSRF 攻击来攻击位于防火墙后面且无法从外部网络访问的内部系统。
当攻击者完全或部分控制后端应用程序发送的请求时,就会发生 SSRF 漏洞。SSRF 不限于 HTTP 协议。通常,攻击者控制的输入是 HTTP,但后端请求可以使用不同的协议。
您可以在 Snyk 的这个互动课程 中练习攻击易受攻击的应用程序并了解缓解措施。
为什么 SSRF 攻击与 Neo4j 生态系统相关?
Neo4j 是一个用于分析数据的图数据库。为了方便用户轻松导入现有数据,我们必须提供通过 http 在本地或从网络加载文件(通常是 CSV 文件)的方法。此功能也带来了潜在恶意用户操纵初始请求的能力 - SSRF 的第一步。
如何保护我的环境?
鉴于 SSRF 是 OWASP Top 10 问题之一,OWASP 提供了 关于预防和缓解的综合指南。
用例“用户应该能够从互联网上的任何位置加载数据”属于 案例 2,防御起来更为复杂。
但通过纵深防御方法,这是可能的。
Neo4j 尽可能地进行输入验证,这是您的**应用程序层**防御。如果您在 Neo4j 之上构建自定义应用程序,最好将上传数据和运行原始 Cypher 查询的能力限制为已认证的用户。但为了确保 纵深防御,您应该在**网络层**做更多工作。
检测和预防高度依赖于您的基础设施和网络环境。
在 AWS 云上运行
使用 IMDSv2。
在 Google 云上运行
Google 提供了有关防止访问 元数据、计算引擎资源 以及如何 利用工作负载身份来最小化访问权限 的建议。
配置选项
除了上面列出的外部网络级限制机制外,Neo4j 还具有一个内部控制机制,允许用户为数据库管理系统提供要阻止的 IP 地址范围。此控制通过必须添加到 neo4j.conf 的配置设置激活,并且需要重新启动数据库管理系统才能应用。
unsupported.dbms.cypher_ip_blocklist
描述 |
数据库管理系统用来阻止 IP 请求的 IP 地址范围 |
有效值 |
用逗号分隔的 IPv4 和 IPv6 CIDR 表示法 IP 范围列表 |
默认值 |
当数据库管理系统尝试对 URL 发出 IP 请求时,在将 URL 解析为 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 流量。 |
unsupported.dbms.cypher_ip_blocklist=10.0.0.0/8,10.0.0.0/24 |
阻止 10.0.0.0 到 10.255.255.255 之间的 IPv4 流量。 |
此页面是否有帮助?