成功的网络攻击最重要的因素之一是足够的访问权限。在安全得到充分考虑的应用程序中,外部用户通常没有足够的访问权限来造成伤害。在这种情况下,攻击者可以尝试不同的方法。与其尝试获得足够的访问并尝试获得足够的权限,他们可以尝试操作已经拥有足够访问和授权的应用程序实体(如服务器)。
服务器端请求伪造(SSRF)就是这样一种攻击,攻击者欺骗服务器发出意外请求。
什么是服务器端请求伪造?
现代应用程序本质上通常是分布式的,并且已经开始更多地依赖云服务。尽管这使得应用程序的开发、测试和故障排除很方便,但它增加了体系结构的复杂性并增加了挑战。其中一个挑战是确保应用程序的不同组件有足够的访问权限,以顺利地执行它们的功能。但是当我们不考虑这种访问的范围和可能的威胁时,它可能会导致服务器端请求伪造漏洞。
服务器端请求伪造是一种web应用程序漏洞,它允许攻击者向应用程序组件发送格式错误的请求,或与外部任意系统通信。
通常,应用程序的内部组件的配置方式是外界无法访问的。例如,防火墙后的服务器或只能从堡垒主机访问的服务器。因此,攻击者可以滥用SSRF漏洞来攻击应用程序的内部组件。
服务器端请求伪造有什么影响?
SSRF 攻击的一些常见影响是:
敏感数据泄露或加密失败。
任意代码执行 ( ACE )。
诱导不存在的漏洞在以后利用。
获取有关应用程序内部架构的信息。
在某些情况下,SSRF漏洞还可能导致应用程序被完全接管。一次成功的SSRF攻击可能导致业务上的影响、面临诉讼、声誉损害等。
服务器端请求伪造示例
人们可以利用SSRF漏洞做什么取决于应用程序的体系结构和攻击者的创造力。然而,有一些方法是攻击者最常用的。
服务器 SSRF
后端 SSRF
SSRF 通过文件上传
服务器 SSRF 攻击
这是一种 SSRF 攻击,表示 SSRF 攻击是针对服务器本身的。
后端 SSRF 攻击
后端SSRF攻击与服务器SSRF类似,不同之处在于目标组件是后端系统。因此,攻击者不是将请求发送到同一服务器,而是将请求发送到另一个后端系统。
SSRF 通过文件上传
这种类型的 SSRF 是通过易受攻击的应用程序的文件上传功能发生的。将恶意代码嵌入文件(例如:HTML 或 SVG)中,将文件上传到应用程序,然后诱使应用程序执行代码。
如何防止服务器端请求伪造?
有多种方法可以防止服务器端请求伪造。存在一些通用措施,也需要结合自身实际需求采取措施。
白名单和 DNS 解析
如果有预定义的请求列表,则可以使用白名单仅允许执行这些请求。如果很难将请求列入白名单,则可以对端点使用白名单。例如,仅允许从服务器向以下端点发出请求:
还可以为应用程序需要访问的主机名和 IP 使用白名单,或使用访问控制列表 ( ACL )。尽管您可以使用 DNS 解析来验证域,但仍然可以被利用。
或者,可以使用黑名单来阻止潜在的恶意请求。
内部服务认证
根据架构,可能已经将内部系统置于防火墙之后,并为公共服务器添加了更多的安全性。但是由于SSRF利用了应用程序组件之间的信任,所以在组件之间添加安全层也很重要。这不仅会给攻击者带来困难,还会减慢进程,有足够的时间采取行动。因此,建议使用身份验证进行内部系统之间的通信。
安全编码
这是在开始构建应用程序时需要实现的一种安全实践。预防性安全编码的思想将在开发应用程序时采用静态代码检测等方式提高代码安全性并减少软件中的缺陷。将安全措施放在应用程序的各个位置,为攻击者增加更多的阻力。
SSRF攻击的一个常见原因是在不验证用户提供的URL的情况下获取链接。因此,清理和验证用户可控数据可能是作为安全措施首先要注意的事情之一。
渗透测试
渗透测试可用来对应用程序的安全性进行评估,并填补之前可能未发现的安全空白。