欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

以太坊JSON-RPC接口多种盗币手法大揭秘

来源:本站整理 作者:佚名 时间:2018-08-07 TAG: 我要投稿

2010 年,Laszlo 使用 10000 个比特币购买了两张价值 25 美元的披萨被认为是比特币在现实世界中的第一笔交易。
2017 年,区块链技术随着数字货币的价格暴涨而站在风口之上。谁也不会想到,2010 年的那两块披萨,能够在 2017 年末价值 1.9 亿美元。
以太坊,作为区块链 2.0 时代的代表,通过智能合约平台,解决比特币拓展性不足的问题,在金融行业有了巨大的应用。
通过智能合约进行交易,不用管交易时间,不用管交易是否合法,只要能够符合智能合约的规则,就可以进行无限制的交易。 在巨大的经济利益下,总会有人走上另一条道路。
古人的盗亦有道,在虚拟货币领域也有着它独特的定义。只有对区块链技术足够了解,才能在这场盛宴中获取足够多的金钱。他们似那黑暗中独行的狼,无论是否得手都会在被发现前抽身而去。
2018/03/21, 在 《揭秘以太坊中潜伏多年的「偷渡」漏洞,全球黑客正在疯狂偷币》[19] 和 《以太坊生态缺陷导致的一起亿级代币盗窃大案》[20] 两文揭秘 以太坊偷渡漏洞(又称为以太坊黑色情人节事件) 相关攻击细节后,知道创宇 404 团队根据已有信息进一步完善了相关蜜罐。
2018/05/16, 知道创宇 404 区块链安全研究团队对 偷渡漏洞 事件进行预警并指出该端口已存在密集的扫描行为。
2018/06/29, 慢雾社区 里预警了 以太坊黑色情人节事件(即偷渡漏洞) 新型攻击手法,该攻击手法在本文中亦称之为:离线攻击。在结合蜜罐数据复现该攻击手法的过程中,知道创宇 404 区块链安全研究团队发现:在真实场景中,还存在 另外两种 新型的攻击方式: 重放攻击 和 爆破攻击,由于此类攻击方式出现在 偷渡漏洞 曝光后,我们将这些攻击手法统一称为 后偷渡时代的盗币方式。
本文将会在介绍相关知识点后,针对 偷渡漏洞 及 后偷渡时代的盗币方式,模拟复现盗币的实际流程,对攻击成功的关键点进行分析。
0×01 关键知识点
所谓磨刀不误砍柴功,只有清楚地掌握了关键知识点,才能在理解漏洞原理时游刃有余。在本节,笔者将会介绍以太坊发起一笔交易的签名流程及相关知识点。
1.1 RLP 编码
RLP (递归长度前缀) 提供了一种适用于任意二进制数据数组的编码,RLP 已经成为以太坊中对对象进行序列化的主要编码方式。
RLP 编码会对字符串和列表进行序列化操作,具体的编码流程如下图:

在此,也以 3.4.1 节 中 eth_signTransaction 接口返回的签名数据为例,解释该签名数据是如何经过 tx 编码后得到的。
result 字段中的 raw 和 tx 如下:
"raw": "f86b01832dc6c083030d4094d4f0ad3896f78e133f7841c3a6de11be0427ed89881bc16d674ec80000801ba0e2e7162ae34fa7b2ca7c3434e120e8c07a7e94a38986776f06dcd865112a2663a004591ab78117f4e8b911d65ba6eb0ce34d117358a91119d8ddb058d003334ba4
"
"tx": {
        "nonce": "0x1",
        "gasPrice": "0x2dc6c0",
        "gas": "0x30d40",
        "to": "0xd4f0ad3896f78e133f7841c3a6de11be0427ed89",
        "value": "0x1bc16d674ec80000",
        "input": "0x",
        "v": "0x1b",
        "r": "0xe2e7162ae34fa7b2ca7c3434e120e8c07a7e94a38986776f06dcd865112a2663",
        "s": "0x4591ab78117f4e8b911d65ba6eb0ce34d117358a91119d8ddb058d003334ba4",
        "hash": "0x4c661b558a6a2325aa36c5ce42ece7e3cce0904807a5af8e233083c556fbdebc"
}
根据 RLP 编码的规则,我们对 tx 字段当作一个列表按顺序进行编码 (hash 除外)。由于长度必定大于 55 字节,所以采用最后一种编码方式。
暂且先抛开前两位,对所有项进行 RLP 编码,结果如下:

合并起来就是:
01832dc6c083030d4094d4f0ad3896f78e133f7841c3a6de11be0427ed89881bc16d674ec80000801ba0e2e7162ae34fa7b2ca7c3434e120e8c07a7e94a38986776f06dcd865112a2663a004591ab78117f4e8b911d65ba6eb0ce34d117358a91119d8ddb058d003334ba4
一共是 214 位,长度是 107 比特,也就意味着第二位是 0x6b,第一位是 0xf7 + len(0x6b) = 0xf8, 这也是最终 raw 的内容:
0xf86b01832dc6c083030d4094d4f0ad3896f78e133f7841c3a6de11be0427ed89881bc16d674ec80000801ba0e2e7162ae34fa7b2ca7c3434e120e8c07a7e94a38986776f06dcd865112a2663a004591ab78117f4e8b911d65ba6eb0ce34d117358a91119d8ddb058d003334ba4
1.2 keystore 文件及其解密
keystore 文件用于存储以太坊私钥。为了避免私钥明文存储导致泄漏的情况发生,keystore 文件应运而生。让我们结合下文中的 keystore 文件内容来看一下私钥是被如何加密的:
keystore 文件来源:https://github.com/ethereum/tests/blob/2bb0c3da3bbb15c528bcef2a7e5ac4bd73f81f87/KeyStoreTests/basic_tests.json,略有改动
{
    "address": "0x008aeeda4d805471df9b2a5b0f38a0c3bcba786b",

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载