主页 > imtoken和比特派 > 硬核丨区块链浏览器能否逃过DoS魔爪?

硬核丨区块链浏览器能否逃过DoS魔爪?

imtoken和比特派 2023-03-03 07:33:33

说到浏览器,大家脑子里蹦出的词肯定是“百度你就知道”、“搜狗上网”……

以太坊区块链游戏_以太坊区块链查询_基于以太坊的区块链

这些家喻户晓甚至大叔耳熟能详的浏览器是互联网的代言人,也是互联网的入口。

但如果说有谁与互联网有着不解之缘的话,那就是如今如火如荼的区块链技术了。

互联网改变生活,区块链技术改变互联网。 那么毫无疑问,浏览器作为互联网的入口,肯定也离不开区块链技术。 由此诞生的区块链浏览器,作为知名的落地产品,为区块链用户带来了相当程度的便利。

区块链浏览器

它有多安全

区块链浏览器是区块链的搜索引擎,用户可以使用该工具搜索区块链的特定信息。

例如,Etherscan 是以太坊的区块链浏览器。 通过Etherscan,用户可以轻松获取以太坊上的区块、地址、交易等活动信息。 也就是说,区块链浏览器更像是一个官方的区块链查询网站。

那么在大多数区块链应用面临安全威胁的场景下,区块链浏览器的安全性如何呢?

基于以太坊的区块链_以太坊区块链查询_以太坊区块链游戏

区块链浏览器应用的攻击点相对较少。 原因如下:

这是否意味着区块链浏览器不会受到攻击?

还是可以被攻击?

答案是不

区块链浏览器

基于以太坊的区块链_以太坊区块链查询_以太坊区块链游戏

攻击类型分类

我们先来看看区块链浏览器可能会受到哪些类型的攻击。

因为区块链浏览器中的大部分功能都是从后台数据库中查找数据,或者直接从区块链节点查询数据。 提到搜索查询功能,人们一般会想到两个可能存在的漏洞:

然而,在对不同浏览器进行排查时,CertiK技术团队只发现了1例SQL注入,超过50%的区块链浏览器存在被DoS攻击的风险。

什么是 DoS 攻击

举个通俗易懂的例子,一个白胡子老爷爷看大叔的小丑店里的炸鸡卖得越来越好,就找了几个小混混来捣乱。 他们站在点餐台前,从左到右谈论他,提出各种问题和需求。 店员不知所措,点了两个小时也不知道这混混要什么。 饥肠辘辘的顾客们等不及了,纷纷离去。 店铺。 这还不行,小丑叔叔店里的店员要是脾气不好,一旦被外界的矛盾激化,直接练武,店里就乱七八糟了……

以太坊区块链游戏_以太坊区块链查询_基于以太坊的区块链

DoS:Denial of Service的缩写,意为拒绝服务,引起DoS的攻击行为称为DoS攻击,常用于阻止系统向合法用户提供服务。

在服务端,有一个事实:客户端可以毫不费力地发送HTTP请求,但服务端可能需要消耗大量的资源来处理和响应请求。 应用层DoS就是利用这样的特性进行攻击。

一般来说,DoS攻击和防御都是类似这个过程,最终的结果取决于谁拥有更多的资源。 但是,如果后端代码实现有问题,单个请求就足以使服务器崩溃。

本文将与大家分享:一些DoS攻击的例子,DoS攻击的影响,以及保护应用程序的相关建议。

DoS攻击案例分析

有多种方法可以对服务器进行 DoS 攻击。 一般来说,目标会选择:

以下是部分服务器可能被DoS攻击的案例,有的是代码实现错误导致的,有的是配置错误导致的:

1.资源访问API缺少数量限制

上述请求通过“限制”参数中指示的数量获取块信息。 当限制设置为 10 时,它将返回最后 10 个块的信息。 当数字很小时,请求工作正常。

以太坊区块链查询_以太坊区块链游戏_基于以太坊的区块链

但是,后端可能没有设置“limit”参数的上限。 当CertiK技术团队将“limit”参数设置为9999999并发送请求时,请求在处理很久后返回“504 gateway time-out”错误。 服务器在处理上述请求的同时,其他API的响应时间明显增加。

9999999 也超过了链中区块的总数。

假设后端尝试为区块链中的每个块获取数据。 如果攻击者发送大量带有高“limit”参数的请求,服务器将无法响应正常的请求,甚至可能直接崩溃。

2. 嵌套的 GraphQL 查询

在调查过程中,CertiK 技术团队发现了一些使用 GraphQL 的区块链资源。 GraphQL 是 API 的查询语言。 与典型的使用多个请求请求多个资源的 REST API 相比,GraphQL 可以通过一次请求获取应用程序所需的所有数据。 GraphQL的使用率很高,但如果在使用过程中没有部署相应的保护措施,可能存在安全隐患。

CertiK技术团队在测试区块链浏览器时发现,其中一款浏览器使用了GraphQL接口,其定义的两种类型存在相互包含关系,允许用户构建非常复杂的嵌套查询。

发送此类嵌套查询可能会导致服务器 CPU 使用率大幅上升。 通常,少数此类请求会使 CPU 使用率超过 100%,从而使服务器无法响应正常的用户请求。

以太坊区块链查询_以太坊区块链游戏_基于以太坊的区块链

服务器处理此类 Graphql 请求时的 CPU 使用率

下图中的“dos_query”是一个嵌套graphql的例子:

以太坊区块链游戏_以太坊区块链查询_基于以太坊的区块链

这种恶意 GraphQL 请求对服务器的影响取决于查询的复杂性和服务器的性能。 服务器可能在花费大量时间后终于能够成功响应查询以太坊区块链查询,但也有可能因为CPU占用率过高而直接崩溃。 如果你想了解更多关于 GraphQL 安全的知识,可以访问文末的参考链接 1。

3. 直接暴露 Cosmos RPC API

上面的 Cosmos API 从区块 1 开始搜索 100 个已发送的交易。截至目前,Cosmos 主网中已经有 2,712,445 个区块。 在 CosmosHub 暴露的 RPC API 节点中,我们找不到任何节点可以处理这个请求。 收到这个请求的服务器会在一段时间后返回“502 Bad Gateway”错误,表示请求失败。

如果节点的 RPC 服务器在几秒内收到了上百个上述的搜索请求,它会为所有的 API 请求返回如下错误。 一些节点服务器可以从错误中自行恢复,而另一些则需要重新启动。

为了让读者更好地理解上述问题并展示其效果,CertiK技术团队搭建了一个完全同步的Cosmos全节点,并使用上述query:“=100&tx.minheight=1”对节点进行攻击。

基于以太坊的区块链_以太坊区块链游戏_以太坊区块链查询

基于以太坊的区块链_以太坊区块链游戏_以太坊区块链查询

Grafana CPU 使用面板

该图可以分为三个阶段:

节点启动运行,系统CPU使用率35% 节点面临DoS攻击,系统CPU使用率达到97% 节点崩溃,无法向Grafana提供新数据

该图显示,在 DoS 攻击下,服务器仅在几分钟内就崩溃了。 操作员不得不重启服务器,因为在服务器崩溃后无法使用 SSH 连接到服务器。

4.请求处理程序存在缺陷

CertiK技术团队遇到过一个API,会持续加载,一段时间后显示超时以太坊区块链查询,但是向服务器发送多个请求不会影响其他API的响应时间。 初步猜测是该特定 API 的处理方法不是 CPU 或内存密集型的。 由于该区块链浏览器未开源,无法获取API代码实现的相关信息,也无法根据名称判断API端点的用途。

虽然攻击此 API 不太可能导致服务器崩溃,但攻击者可以通过发送此类“始终挂起和超时”请求来绑定所有网络连接,从而阻止其他用户访问此服务器上的 API。

例如,“sleep_to_handle_request”函数演示了一个请求可以消耗很少的 CPU 和内存,但需要很长时间来加载和占用网络连接。

与其他三个服务器完全崩溃或需要很长时间才能恢复的案例相比,本案例中的服务器在攻击停止后立即恢复。

DoS 攻击的影响

当遇到DoS攻击时,易受攻击的服务器将无法响应正常的用户请求。 有些服务器可以在攻击停止后立即或在一段时间后恢复正常状态,而另一些服务器将完全崩溃,需要重新启动。

无法使用区块链浏览器会给用户带来极大的困扰。 因为用户无法轻易获得有关链上活动的信息。 此外,在基于 Cosmos 的链上,如果节点遭受 DoS 攻击,不仅连接的区块链浏览器无法从该节点获取数据,而且用户也无法使用 API 执行发送令牌或将令牌委托给验证器等操作。

建议

任何应用程序都有被DoS攻击的威胁,世界上还没有能够完美防止DoS攻击的解决方案。 但是有一些方法可以用来增加攻击成本,使潜在的攻击者难以执行攻击,并降低区块链浏览器应用程序出现漏洞的可能性。

在这里,CertiK 技术团队列出了一些建议,以尽量减少应用程序被攻击的机会:

以太坊区块链游戏_以太坊区块链查询_基于以太坊的区块链

1.限速

即使后端 API 在其实现中足够安全,攻击者也可以通过向服务器发送大量请求来执行攻击。 因此,在任何情况下都应限制 API 的速率,以暂时或永久阻止恶意 IP。

限速虽然不能完全解决问题,但是操作起来比较简单,可以构成抵御DoS攻击的第一道防线。

2.改进的设计和实现

好的程序设计和代码实现在相同的硬件条件下可以表现出更好的性能,这种效果在与数据库搜索和数据处理相关的功能上更为突出。 但在考虑性能之前,首先要确保您的代码没有错误。

因此,在将 API 部署到生产环境之前,投入大量时间为 API 编写单元测试以确保它们按预期工作是非常值得的。

3.输入验证和参数限制

如果不对用户提供的变量进行验证和约束,攻击者就可以滥用 API。

在确定代码按预期工作后,下一步是确保攻击者无法通过非常规输入滥用 API。 诸如 GraphQL 查询以获取块 9999999 的数据或处理 1000 级循环的请求不应被允许。

因此,所有用户输入都应该被认为是不受信任的,并且服务器应该在处理之前验证用户输入。

在上述案例中,GraphQL API 可以设置最大层数,有效防止循环查询的 DoS 攻击,而块数据获取 API 可以将最大块数限制在一个合理的值,比如 50。

开发者可以根据代码实现和程序设计,总结出最适合当前程序的输入验证和限制方案。

4.不暴露节点RPC

并非所有 API 代码实现都在开发人员的控制之下。

例如,开发者不建议更改 Cosmos RPC API 的代码。 Cosmos SDK 中一些搜索查询的性能不是很好,怎么办?

解决方案之一:围绕 Cosmos RPC API 创建一个包装器 API,并创建一个存储区块链数据的数据库,该数据库从节点同步区块链数据。 外部包装器 API 向公众公开,并在将用户请求传递给 Cosmos RPC 或在后端数据库中搜索数据之前接收和处理用户请求。 添加外部 API 可有效防止用户直接与节点 RPC API 交互。 数据库可以防止节点被搜索查询淹没,开发人员可以随心所欲地优化数据库。

以太坊区块链查询_以太坊区块链游戏_基于以太坊的区块链

在Cosmos论坛上,用户“kwunyeung”也提出了一个解决方案:使用HTTP代理(如Nginx或Caddy)来保护RPC端口。 一般来说,观点是一样的:RPC端口不能直接对外公开,​​同时要采取保护措施。

以太坊区块链查询_以太坊区块链游戏_基于以太坊的区块链

5.满足推荐的硬件要求

即使部署了上述所有防御措施,用户仍然需要注意运行 API 服务器或 Tendermint 等稳定节点的最低硬件要求(详见参考链接 2)。 如果服务器难以处理普通用户访问网站的请求,那么管理员就需要考虑升级硬件了。

总结

DoS攻击可以使区块链浏览器等应用程序崩溃,这对大多数企业来说可以算是致命威胁。

CertiK专业的安全技术团队在应用漏洞评估、Solidity、RUST、Go等不同语言的代码审计,以及以太坊、Cosmos、Substrate等平台的安全维护方面具有丰富的经验和专业的安全知识。

对于区块链相关业务包括区块链浏览器、钱包、交易所、智能合约,甚至区块链底层协议的实现,如果需要进行全面的安全审计,CertiK拥有多年的实际防护经验,最先进的形式化验证技术将您最值得信赖的安全专家。

附录

这是一个示例脚本,用于测试 Cosmos 节点是否容易受到 DOS 攻击。 可以通过修改“url”变量来测试不同的应用程序。

请不要在未经许可的应用程序上运行。

import requestsimport threading import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #修改url url="https://fake.cosmos.api/txs?message.action=send&limit=100&tx.minheight=1"def dos_thread: while (1): response = requests.request("GET", url, verify=False) print(response.text.encode('utf8')) 如果__name__ == "__main__": for i in range(300): t = threading.Thread(target=dos_thread) t.start

参考链接:

1.

2.#硬件

作者:加密谷直播; 来自链得得内容开放平台“滴得”,本文仅代表作者观点,不代表链得得官方立场。 DD平台上的文章。 如有侵权、违规或其他不当内容,敬请读者监督。 一经确认,平台将立即下载文章。 金属丝。 文章内容如有问题,请发送至邮箱:linggeqi@chaindd.com