我在 Node.js 服务器上运行的 Web 应用程序中发现了一个小漏洞。
它通过向应用服务器发送一些精心设计的有效负载来工作,这使得应用服务器代码抛出错误并且由于缺乏错误处理 - 它崩溃(直到有人再次运行它)。
我不确定这种攻击的合适名称是什么。我认为这是 DOS(拒绝服务)攻击,因为它使服务器拒绝为其客户端提供服务。另一方面,到目前为止,我只听说过 DOS 攻击,它通过某种方式淹没服务器(这里不是这种情况)。
那么,将其视为 DOS 攻击是否正确?如果答案是否定的,那应该怎么称呼呢?
我在 Node.js 服务器上运行的 Web 应用程序中发现了一个小漏洞。
它通过向应用服务器发送一些精心设计的有效负载来工作,这使得应用服务器代码抛出错误并且由于缺乏错误处理 - 它崩溃(直到有人再次运行它)。
我不确定这种攻击的合适名称是什么。我认为这是 DOS(拒绝服务)攻击,因为它使服务器拒绝为其客户端提供服务。另一方面,到目前为止,我只听说过 DOS 攻击,它通过某种方式淹没服务器(这里不是这种情况)。
那么,将其视为 DOS 攻击是否正确?如果答案是否定的,那应该怎么称呼呢?
是的。任何以拒绝合法用户正常使用服务为目标的攻击都被定义为 DoS(拒绝服务)。
DDoS(分布式 DoS)的特点是通过洪水创建 DoS(在所有可用的定义中)。单个节点成功引发洪水的情况很少见。
但 DoS 可能由多种触发因素引起。
CVSS 甚至为您提供了一个分类为 DoS 的软件崩溃示例:
由于 RPC 命令的处理函数存在缺陷,因此可以在虚拟机可执行文件 (VMX) 进程中操作数据指针。此漏洞可能允许来宾虚拟机中的用户使 VMX 进程崩溃,从而导致主机上的拒绝服务 (DoS) 或可能在主机上执行代码。[恩帕斯我的]
来自维基:
拒绝服务攻击的特点是攻击者明确尝试阻止对服务的合法使用。有两种一般形式的 DoS 攻击:使服务崩溃的攻击和淹没服务的攻击。最严重的攻击是分布式的。
所以,是的,一个简单的崩溃就是 DoS。
安全性通常被视为提供三个属性:
在您的情况下,您发现了一些允许用户影响服务可用性的东西。根据服务提供的内容,这可能很烦人,也可能是灾难性的。
经常失败的服务会自动重启。这些可以减轻偶尔的崩溃,但重新启动服务通常比处理连接的通常成本要昂贵得多。在这种情况下,每秒执行五六次“使服务器崩溃”请求可能不会占用太多带宽,但在普通服务器上仍然可能相当粗糙。
我想添加一个其他答案中未明确说明的重要细节。你这样说:
它通过向服务器发送一些精心设计的有效负载来工作,这使得服务器代码抛出错误,并且由于缺乏错误处理 - 它崩溃(直到有人再次运行它)。
(强调我的)。该警告很重要,因为此类服务对崩溃的响应方式在不同技术集之间可能存在很大差异。
不是 DoS
例如,在 PHP 或大多数 cgi 实现中,单个崩溃的请求绝对不会影响其他请求。服务器无法为崩溃的请求发送正确的响应,但来自合法用户的其他请求继续由服务器正确处理。在这种情况下,崩溃只会影响您自己——而不是其他人——因此很难将其定性为 DoS 攻击。当然,有一个错误,并且您拒绝为自己提供服务,但是如果服务器继续为其他所有人正常运行,那么实际上并没有任何拒绝服务发生。
拒绝服务
但是,如果您的有效负载导致实际服务停止,并且服务器无法接收更多请求,直到采取某些操作来恢复服务(无论是由管理员还是在短时间内自动恢复),那么您肯定有拒绝服务,因为您造成的崩溃停止了服务对合法用户的响应(如其他答案中所述)。
在某些情况下,如果您可以“欺骗”合法用户访问带有恶意负载的 URL,则不会关闭服务器的“非 DoS”攻击可能会升级为实际的 DoS 攻击。大多数情况下,此类攻击并没有太大的实际影响,因为当他们以后正常使用服务时,服务将继续正常运行。但是,在极少数情况下,有效负载会持久保存到会话中并因此永久锁定用户(我以前见过人们在现实生活中不小心触发了这种情况)。
根据您的描述,很难判断您的特定有效负载属于这些类别中的哪一个,但有一个重要的区别。