主页 > 华为无法更新imtoken > Zcash屏蔽地址漏洞或泄露全节点IP地址(附解决方案)

Zcash屏蔽地址漏洞或泄露全节点IP地址(附解决方案)

华为无法更新imtoken 2023-03-26 07:32:54

匿名币的技术争论很有意思。 例如,KMD 的核心开发者 Duke Leto 刚刚发表了一篇博文,披露了 Zcash 及其大部分分叉币的漏洞。 此漏洞可能会泄露使用屏蔽地址 (zaddr) 的完整节点 IP 地址。

它还分配了一个常见漏洞披露 (CVE) 编号 CVE-2019-16930 来跟踪此问题。

(以下为其具体披露内容)

看起来太长了:自 Zcash 和 Zcash 协议诞生以来,所有屏蔽地址都存在漏洞。 它存在于所有 Zcash 源代码分支中,允许攻击者找到具有屏蔽地址 (zaddr) 的完整节点的 ip 地址。 换句话说,如果 Alice 给 Bob 一个用于支付的屏蔽地址(zaddr),实际上会让 Bob 发现 Alice 的 IP 地址,这有悖于 Zcash 协议的设计。

受影响的群体:

所有使用屏蔽地址 (zaddr) 和与第三方共享屏蔽地址 (zaddr) 的人,例如:

如果您在社交媒体上公开发布您的屏蔽地址 (zaddr);

如果您在 github/email/IRC 上的错误报告中提供了您的屏蔽地址 (zaddr);

如果您曾将您的匿名地址(zaddr)告知交易所、矿池或公司;

如果您曾在屏蔽备忘录中回复过您的屏蔽地址 (zaddr);

不受漏洞影响的群体:

如果您从未使用过 zaddr,则该错误不会影响您:

比特币转错到比特币现金地址了_外国的比特币便宜中国的比特币贵为什么?_比特币追踪ip

如果您只是使用 zaddr 向其他人汇款但从未收到资金,那么您是安全的;

如果你使用 Tor/TAILS,IP 元数据泄漏对攻击者来说不是有价值的信息。

外国的比特币便宜中国的比特币贵为什么?_比特币转错到比特币现金地址了_比特币追踪ip

受影响的加密货币(非详尽列表):

大零币 (ZEC)

安静)

海盗 (ARRR)

所有带 zaddr 的 Komodo (KMD) 智能链(默认启用)

地平线 (ZEN)

零 (ZER)

投票币 (VOT)

雪宝石 (XSG)

比特币追踪ip_外国的比特币便宜中国的比特币贵为什么?_比特币转错到比特币现金地址了

比特币 (BTCZ)

莱特币 Z (LTZ)

零现金 (ZEL)

Ycash(YEC)

箭头 (ARW)

真神 (VRSC)

比特币私有 (BTCP)

Z经典 (ZCL)

匿名 (ANON)

需要说明的是,虽然Bitcoin Gold(BTG)使用了Zcash提供的Equihash PoW共识机制,但它不是Zcash源代码的分叉,也没有使用屏蔽地址(zaddr),因此不受影响。

补充说明:KMD曾经使用屏蔽地址(zaddr),但后来禁用了此功能,Safecoin(SAFE)走了类似的路线,目前也禁用了屏蔽地址(zaddr)。

减轻

比特币追踪ip_比特币转错到比特币现金地址了_外国的比特币便宜中国的比特币贵为什么?

首先,防止这种“元数据泄漏攻击”的第一种方法是在使用你最喜欢的加密货币的同时使用带有 -onlynet=onion 的 Tor,或者更好的是,使用 TAILS 操作系统。

其次,用户可以用全新的zaddr创建一个全新的wallet.dat(钱包文件)比特币追踪ip,然后将所有资金发送到该地址。 如果用户将这个新的 zaddr 保密,它就不会受到此类攻击。

Zcash 在这里发布了一个紧急源代码(没有二进制文件)。

如果你不想让知道你的 zaddr 地址的人知道你的 IP 地址,我建议你创建一个新钱包并停止使用旧钱包,直到发布软件更新。

至此,普通用户或许可以停止阅读了。

更多建议

如果您运行支持屏蔽地址 (zaddr) 的矿池,则无需提供所有矿工和屏蔽地址 (zaddr) 的公开列表。 由于当前的元数据泄露攻击等原因,这严重剥夺了矿工的隐私。 这在过去很常见,但由于隐私问题已被大多数矿池停止。

也不要在 github 上的错误报告中给出 zaddr! 许多工具不断从所有公共代码存储库中提取潜在的敏感数据和开源信息。

为了增加安全性,如果你必须给一个屏蔽地址(zaddr),你可以将它们隔离到一个单独的 wallet.dat 中,通常不使用并保持离线状态,另一个带有屏蔽地址(zaddr)的钱包可以用来发送资金. 由于发送资金的钱包从未发布过 zaddr比特币追踪ip,因此节点无法利用此类漏洞。

代码分析

该漏洞是在Zcash原始代码库中引入的,相关提交日期为2016年:

比特币追踪ip_外国的比特币便宜中国的比特币贵为什么?_比特币转错到比特币现金地址了

比特币追踪ip_外国的比特币便宜中国的比特币贵为什么?_比特币转错到比特币现金地址了

“引入新的‘libzcash’zcash 协议 API 和围绕 zkSNARK 电路的加密结构。”

本次提交将漏洞利用代码添加到旧版本的屏蔽地址,新版本的屏蔽地址代码复制了它。

该漏洞存在于 Zcash 的 P2P 层(继承自比特币),节点在该层与节点交换数据。

攻击说明:

攻击者节点将无效交易中继到其对等节点的内存池;

该交易对加密备注字段的序列化无效;

没有私钥且没有查看密钥的屏蔽地址的节点,通常会对这个无效交易做出反应;

具有私钥(或查看密钥)的节点将产生 C++ 异常;

这个C++异常会导致不同的网络行为,从而暴露节点的“身份”;

在区块链或浏览器上没有此类攻击的记录;

修复错误的代码在这里:

核心修改如下:

比特币转错到比特币现金地址了_外国的比特币便宜中国的比特币贵为什么?_比特币追踪ip

-    CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
-    ss << pt.get(); -      SaplingNotePlaintext ret; -    ss >> ret;
+    try {
+        CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
+        ss << pt.get(); +        ss >> ret;
+        assert(ss.size() == 0);
+    } catch (const boost::thread_interrupted&) {
+        throw;
+    } catch (...) {
+        return boost::none;
+    }

下面这行没有try/catch的代码是该漏洞存在的核心原因:

ss << pt.get();

由于 pt 是被写入本地 CDataStream ss 对象的攻击者控制的数据,因此需要更加小心地处理它。

现在我们可以看到只有 boost::thread_interrupted 异常冒泡,所以其他异常都被“淘汰”了,boost::none 会返回。 这使得具有 zaddr 地址私钥的节点与所有其他节点相同,防止元数据泄漏。

作者指出,仍然存在寻找旧 Sprout 地址的易受攻击代码。

有人可能认为这种攻击只能针对一个节点的对等点而不是整个网络,但是增加最大对等点数是微不足道的,通过一个或几个节点来研究整个网络是可行的。

一个高级的攻击者会拥有他们想要连接的 IP 的 zaddr 数据库,然后运行与整个网络密集连接的节点,并定期向所有对等节点的内存池发送无效交易,从而建立一个(时间戳,Zaddr,IP 地址) 三重数据历史。 然后,他们可以使用这些数据并通过定量和时序分析将其链接到其他数据,以完全去匿名化交易并将它们直接绑定到 IP 地址和地理位置。

外国的比特币便宜中国的比特币贵为什么?_比特币追踪ip_比特币转错到比特币现金地址了

扫描二维码添加创始人二良

免费拉你进价值299元的社区

比特币转错到比特币现金地址了_比特币追踪ip_外国的比特币便宜中国的比特币贵为什么?