摘要:近日,某实验室检测到著名的区块链项目NEO(对应数字货币的“小蚁币”,总市值1.8亿美元)存在远程货币被盗风险。
近日,一家实验室检测到著名的区块链项目NEO(对应数字货币的“小蚁币”,总市值1.8亿美元)存在远距离货币被盗风险。当用户启动具有RPC功能的NEO网络节点,并启用默认配置的钱包时,他的数字货币可能被远程窃取。这种攻击场景与今年年初广泛披露的以太坊RPC攻击非常相似,严重危及NEO用户的数字资产安全。
实验室对这一安全问题进行了紧急研究分析,发现NEO node确实存在RPC接口暴露问题。这个问题在neo-cli客户端2.9.0版之前广泛存在。该版本之后的节点在配置不当的情况下也面临一定的安全威胁。
因此,实验室在此发布此安全警告,提醒NEO节点维护人员和小蚁币持有者警惕远程盗币攻击,并给出相应的安全防范措施,避免此类攻击带来的风险。
1.以太坊RPC接口安全事件再探
在开始对NEO-node RPC的攻击进行研究和分析之前,有必要重温一下以太坊RPC接口的安全性,从而类比分析NEO RPC安全问题产生的原因和可能存在的安全隐患。
以太坊是目前著名的区块链公链项目。以太坊节点的RPC接口以JSON-RPC的形式提供外部调用,其底层是Http协议。以太坊网络中的RPC攻击是针对暴露RPC接口的以太坊节点。一般来说,节点维护者可以使用节点的RPC接口来控制节点的行为,比如签署和发布事务信息。但是,所有版本的以太坊客户端都为RPC接口调用方实现了有效的身份验证机制。这为攻击者实施远程攻击提供了便利。
以太坊最典型的RPC攻击是远程盗币。要成功实施攻击,您需要:
获取节点维护的钱包中的账户信息,攻击者可以通过调用eth_account等RPC接口获取。
账户解锁时触发转账。要转账,用户需要用正确的密码解锁相应的账户。账户解锁后,默认情况下,账户有300秒的时间窗口处于解锁状态。攻击者可以利用这个时间窗口先窃取数字资产。
以太坊网络中,已知最早的远程盗取硬币的攻击发生在2016年2月14日。截至目前,攻击者的账户已经盗取了超过45000个以太币,市值超过500万美元。只有一个攻击者的账号证明了以太坊RPC攻击造成的严重安全威胁。
二、近地天体区块链RPC接口安全问题
2.1 neo节点的RPC接口是如何暴露的?
NEO-CLI是NEO区块链常用的客户端之一,支持RPC接口,实现形式也是JSON-RPC。以存在安全问题的v2.9.0为例,使用neo-cli -rpc启动节点时,使用的默认rpc相关配置文件如下:\’ RPC\’: {
\’端口\’:10332,
SslCert“:”,
SslCertPassword“:”
},
可以看出:1。这种配置将SSL相关的配置设置为空字符串,因此JSON-RPC接口的底层是基于Http而不是Https实现的,缺少RPC调用者的认证;
2.给定了RPC端口信息,但未设置它将绑定到的IP地址。
使用此配置启动测试程序后,检查由neo-cli打开的IP端口,您可以获得以下结果:
可以看出,neo-cli默认直接将RPC接口绑定到0.0.0.0地址,导致RPC接口对外暴露。其实在v2.9.0之前,是没有办法配置RPC接口绑定IP地址的。只要RPC功能开启,就会绑定到0.0.0地址。在后来的版本中,开发者增加了新的RPC配置项BindAddress,默认配置为127.0.0.1,可以保证其接口安全。但是,如果节点配置器将此选项修改为0.0.0.0或其公共IP地址,也将面临RPC攻击的威胁。
2.2公开RPC接口的NEO节点面临怎样的安全威胁?
neo-cli的很多RPC接口都需要打开该节点操作的wallet。一般情况下,节点的本地操作员可以在neo-cli提供的本地命令界面中输入open wallet命令来打开相应的wallet。
值得注意的是,neo-cli目前没有设置钱包自动关闭时间窗口。所以用户的钱包打开后会保持很长一段时间的打开状态。我们分析了neo-cli提供的RPC接口,筛选出了相应的可能被攻击者攻击的接口:
可以看出,攻击者通过依次调用listaddress和getaccountstate接口,可以得到目标节点维护的钱包和账户资产信息,那么可以采用的总手段有:
1.调用dumpprivkey窃取受害者的私钥;
2.调用sendXXX盗取数字货币;
3.调用invokeXXX,调用NEO上的智能合约作为受害者。
2.3攻击行为监控
在发现NEO RPC攻击的存在后,实验室紧急部署蜜罐系统对攻击者的行为进行检测,捕捉到了如下图所示的典型攻击行为。根据蜜罐日志,我们可以看到攻击者的攻击过程是:
1.使用listaddress命令获取我们的钱包地址;
2.调用getaccountstate获取钱包的资产信息;
3.利用资产信息获取账户余额,确认攻击值;
4.调用dumpprivakey来窃取帐户的私钥。
5.攻击者成功窃取用户私钥后,可以攻击者的名义签署交易,盗取钱财。
2.4易受攻击的节点扫描
在确认RPC攻击者仍潜伏在NEO网络中后,实验室扫描了其网络规模和存在安全风险的节点。首先,基于NEO节点P2P通信协议的网络节点检测接口发现公共网络中的所有NEO节点。实验室扫描了这些节点的默认RPC端口(10332),发现13.6%的节点暴露了自己的RPC接口,响应我们发送的RPC请求,获取节点的版本信息。经过两天的观察,发现有13.1%的节点会打开钱包,泄露钱包信息。
三。关于安全和防御的建议
为了提高其安全性能,从NEO节点维护者和neo-cli开发者的角度提出了一些安全建议。
对近地天体节点维护者的建议:
1.升级至neo-cli客户端程序的最高版本;
2.避免使用远程RPC函数,将配置文件中BindAddress的地址修改为127 . 0 . 0 . 1;
3.如果有特殊需求,必须使用远程RPC功能,那么要修改RPC端口号,启用基于Https的JSON-RPC接口,设置防火墙策略,保证节点安全。
对neo-cli开发人员的建议:
1.通知其社区成员和节点维护人员尽快完成客户端更新;
2.彻底抛弃基于Http的JSON-RPC功能,以Https为底层协议;
修改代码逻辑,将钱包的“打开(解锁)-操作-关闭(锁定)”视为互斥的原子事务,以保证账户的安全敏感窗口不被攻击者利用。
(作者:Warp未来安全地带,内容来自链家的开放内容平台“德豪”;本文仅代表作者观点,不代表链家官方立场)