Skip to content

Commit b825c9b

Browse files
committed
add blockchain security study notes
1 parent 991d68c commit b825c9b

13 files changed

+368
-0
lines changed

blockchain_security_study_notes/1.png

89.9 KB
Loading

blockchain_security_study_notes/2.png

21.6 KB
Loading

blockchain_security_study_notes/3.png

143 KB
Loading

blockchain_security_study_notes/4.png

121 KB
Loading

blockchain_security_study_notes/5.png

163 KB
Loading

blockchain_security_study_notes/6.png

63.7 KB
Loading
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# 区块链安全入门笔记(一) | 慢雾科普
2+
3+
随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界。
4+
5+
## 钱包 Wallet
6+
7+
钱包(Wallet)是一个管理私钥的工具,数字货币钱包形式多样,但它通常包含一个软件客户端,允许使用者通过钱包检查、存储、交易其持有的数字货币。它是进入区块链世界的基础设施和重要入口。
8+
9+
据 SlowMist Hacked 统计,仅 2018 年因“钓鱼”、“第三方劫持”等原因所造成的钱包被黑损失总金额就达 69,160,985 美元,深究根本,除了部分钱包本身对攻击防御的不全面之外,最主要的是钱包持有者们的安全防范意识不强。
10+
11+
![image](./1.png)
12+
13+
14+
## 冷钱包 Cold Wallet
15+
16+
冷钱包(Cold Wallet)是一种脱离网络连接的离线钱包,将数字货币进行离线储存的钱包。使用者在一台离线的钱包上面生成数字货币地址和私钥,再将其保存起来。冷钱包是在不需要任何网络的情况下进行数字货币的储存,因此黑客是很难进入钱包获得私钥的,但它也不是绝对安全的,随机数不安全也会导致这个冷钱包不安全,此外硬件损坏、丢失也有可能造成数字货币的损失,因此需要做好密钥的备份。
17+
18+
## 热钱包 Hot Wallet
19+
20+
热钱包(Hot Wallet)是一种需要网络连接的在线钱包,在使用上更加方便。但由于热钱包一般需要在线使用,个人的电子设备有可能因误点钓鱼网站被黑客盗取钱包文件、捕获钱包密码或是破解加密私钥,而部分中心化管理钱包也并非绝对安全。因此在使用中心化交易所或钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。
21+
22+
## 公钥 Public Key
23+
24+
公钥(Public Key)是和私钥成对出现的,和私钥一起组成一个密钥对,保存在钱包中。公钥由私钥生成,但是无法通过公钥倒推得到私钥。公钥能够通过一系列算法运算得到钱包的地址,因此可以作为拥有这个钱包地址的凭证。
25+
26+
## 私钥 Private Key
27+
28+
私钥(Private Key)是一串由随机算法生成的数据,它可以通过非对称加密算法算出公钥,公钥可以再算出币的地址。私钥是非常重要的,作为密码,除了地址的所有者之外,都被隐藏。区块链资产实际在区块链上,所有者实际只拥有私钥,并通过私钥对区块链的资产拥有绝对控制权,因此,区块链资产安全的核心问题在于私钥的存储,拥有者需做好安全保管。
29+
30+
和传统的用户名、密码形式相比,使用公钥和私钥交易最大的优点在于提高了数据传递的安全性和完整性,因为两者——对应的关系,用户基本不用担心数据在传递过程中被黑客中途截取或修改的可能性。同时,也因为私钥加密必须由它生成的公钥解密,发送者也不用担心数据被他人伪造。
31+
32+
## 助记词 Mnemonic
33+
34+
由于私钥是一长串毫无意义的字符,比较难以记忆,因此出现了助记词(Mnemonic)。助记词是利用固定算法,将私钥转换成十多个常见的英文单词。助记词和私钥是互通的,可以相互转换,它只是作为区块链数字钱包私钥的友好格式。所以在此强调:助记词即私钥!由于它的明文性,不建议它以电子方式保存,而是抄写在物理介质上保管好,它和 Keystore 作为双重备份互为补充。
35+
36+
## Keystore
37+
38+
Keystore 主要在以太坊钱包 App 中比较常见(比特币类似以太坊 Keystore 机制的是:BIP38),是把私钥通过钱包密码再加密得来的,与助记词不同,一般可保存为文本或 JSON 格式存储。换句话说,Keystore 需要用钱包密码解密后才等同于私钥。因此,Keystore 需要配合钱包密码来使用,才能导入钱包。当黑客盗取 Keystore 后,在没有密码情况下, 有可能通过暴力破解 Keystore 密码解开 Keystore,所以建议使用者在设置密码时稍微复杂些,比如带上特殊字符,至少 8 位以上,并安全存储。
39+
40+
![image](./2.png)
41+
42+
43+
由于区块链技术的加持使得区块链数字钱包安全系数高于其他的数字钱包,其中最为关键的就是两点:防盗和防丢。相比于盗币事件原因的多样化,造成丢币事件发生的原因主要有五个类型:没有备份、备份遗失、忘记密码、备份错误以及设备丢失或损坏。因此,我们在备份一个区块链数字钱包的时候,对私钥、助记词、Keystore 一定要进行多重、多次备份,把丢币的风险扼杀在摇篮之中。最后为大家提供一份来自 imToken 总结的钱包安全“十不原则”:
44+
45+
1. 不使用未备份的钱包
46+
2. 不使用邮件传输或存储私钥
47+
3. 不使用微信收藏或云备份存储私钥
48+
4. 不要截屏或拍照保存私钥
49+
5. 不使用微信、QQ 传输私钥
50+
6. 不要将私钥告诉身边的人
51+
7. 不要将私钥发送到群里
52+
8. 不使用第三方提供的未知来源钱包应用
53+
9. 不使用他人提供的 Apple ID
54+
10. 不要将私钥导入未知的第三方网站
55+
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# 区块链安全入门笔记(七) | 慢雾科普
2+
3+
随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界!
4+
5+
### hard_fail 状态攻击 hard_fail Attack
6+
7+
8+
hard_fail 是什么呢?简单来说就是出现错误但是没有使用错误处理器(error handler)处理错误,比方说使用 onerror 捕获处理,如果说没有 onerror 捕获,就会 hard_fail。EOS 上的交易状态记录分为 executed, soft_fail, hard_fail, delayed 和 expired 这 5 种状态,通常在链上大部分人观察到的交易,都是 executed 的,或者 delayed 的,而没有失败的交易,这就导致大部分开发者误以为 EOS 链上没有失败的交易记录,从而忽略了对交易状态的检查。攻击者利用这个细节,针对链上游戏或交易所进行攻击,构造执行状态为 hard_fail 的交易,欺骗链上游戏或交易所进行假充值攻击,从而获利。
9+
10+
该攻击手法最早由慢雾安全团队于 2019 年 3 月 10 日一款 EOS DApp 上捕获,帐号名为 fortherest12 的攻击者通过 hard_fail 状态攻击手法攻击了 EOS 游戏 Vegas town。随后,相同攻击手法频频发生,慢雾安全团队在此提醒交易所和 EOS DApp 游戏开发者在处理转账交易的时候需要严格校验交易状态,确保交易执行状态为 executed。
11+
12+
13+
详细细节可参考:
14+
EOS 假充值(hard_fail 状态攻击)红色预警细节披露与修复方案
15+
https://mp.weixin.qq.com/s/fKINfZLW65LYaD4qO-21nA
16+
17+
18+
###重放攻击 Replay Attack
19+
20+
重放攻击(Replay Attack),是针对区块链上的交易信息进行重放,一般来说,区块链为了保证不可篡改和防止双花攻击的发生,会对交易进行各种验证,包括交易的时间戳,nonce,交易 id 等,但是随着各种去中心化交易所的兴起,在智能合约中验证用户交易的场景越来越多。这种场景一般是需要用户对某一条消息进行签名后上传给智能合约,然后在合约内部进行验签。但由于用户的签名信息是会上链的,也就是说每个人都能拿到用户的签名信息,当在合约中校验用户签名的时候,如果被签名的消息不存在随着交易次数变化的变量,如时间戳,nonce 等,攻击者就可以拿着用户的签名,伪造用户发起交易,从而获利。
21+
22+
这是一种最早出现于 DApp 生态初期的攻击形态,由于开发者设计的开奖随机算法存在严重缺陷,使得攻击者可利用合约漏洞重复开奖,属于开发者较为容易忽略的错误。因此,开发者们在链上进行验签操作的时候,需要对被签名消息加上各种可变因子,防止攻击者对链上签名进行重放,造成资产损失。
23+
24+
更多详情可参考:
25+
以太坊智能合约重放攻击细节剖析
26+
https://mp.weixin.qq.com/s/kEGbx-I17kzm7bTgu-Nh2g
27+
28+
29+
### 重入攻击 Reentrancy Attack
30+
31+
32+
重入攻击(Reentrancy Attack)首次出现于以太坊,对应的真实攻击为 The DAO 攻击,此次攻击还导致了原来的以太坊分叉成以太经典(ETC)和现在的以太坊(ETH)。由于项目方采用的转账模型为先给用户发送转账然后才对用户的余额状态进行修改,导致恶意用户可以构造恶意合约,在接受转账的同时再次调用项目方的转账函数。利用这样的方法,导致用户的余额状态一直没有被改变,却能一直提取项目方资金,最终导致项目方资金被耗光。
33+
34+
慢雾安全团队在此提醒智能合约开发者在进行智能合约开发时,在处理转账等关键操作的时候,如果智能合约中存储了用户的资金状态,要先对资金状态进行修改,然后再进行实际的资金转账,避免重入攻击。
35+
36+
37+
38+
###假充值攻击 False Top-up
39+
40+
41+
假充值攻击(False Top-up),分为针对智能合约的假充值攻击和对交易所的假充值攻击。在假充值攻击中,无论是智能合约还是交易所本身,都没有收到真实的 Token,但是用户又确实得到了真实的充值记录,在这种情况下,用户就可以在没有真正充值的情况下从智能合约或交易所中用假资产或不存在的资产窃取真实资产。
42+
43+
44+
45+
####1. 智能合约假充值攻击
46+
47+
针对智能合约的假充值主要是假币的假充值,这种攻击手法多发于 EOS 和波场上,由于 EOS 上代币都是采用合约的方式进行发行的,EOS 链的系统代币同样也是使用这种方式发行,同时,任何人也可以发行名为 EOS 的代币。只是发行的合约帐号不一样,系统代币的发行合约为 "eosio.token",而其他人发行的代币来源于其他合约帐号。当合约内没有校验 EOS 代币的来源合约的时候,攻击者就能通过充值攻击者自己发布的 EOS 代币,对合约进行假充值攻击。而波场上的假充值攻击主要是 TRC10 代币的假充值攻击,由于每一个 TRC10 都有一个特定的 tokenid 进行识别,当合约内没有对 tokenid 进行校验的时候,任何人都可以以 1024 个 TRX 发行一个 TRC10 代币对合约进行假充值。
48+
49+
50+
51+
####2. 交易所假充值攻击
52+
53+
针对交易所的假充值攻击分为假币攻击和交易状态失败的假充值攻击。以 EOS 和以太坊为例。针对 EOS 可以使用名为 EOS 的假币的方式对交易所进行假充值攻击,如果交易所没有严格校验 EOS 的来源合约为 "eosio.token",攻击就会发生。同时,区别于 EOS,由于以太坊上会保留交易失败的记录,针对 ERC20 Token,如果交易所没有校验交易的状态,就能通过失败的交易对交易所进行 ERC20 假充值。除此之外,hard_fail 状态攻击也是属于假充值攻击的一种。
54+
55+
慢雾安全团队在此建议交易所和智能合约开发者在处理转账的时候要充分校验交易的状态,如果是 EOS 或波场上的交易,在处理充值时还要同时校验来源合约是否是 "eosio.token" 或 tokenid 是否为指定的 tokenid。
56+
57+
58+
更多几大币种假充值问题可参考:
59+
1、USDT 假充值:USDT 虚假转账安全⻛险分析 | 2345 新科技研究院区块链实验室
60+
https://mp.weixin.qq.com/s/CtAKLNe0MOKDyUFaod4_hw
61+
2、 以太坊代币假充值:以太坊代币“假充值”漏洞细节披露及修复方案
62+
https://mp.weixin.qq.com/s/3cMbE6p_4qCdVLa4FNA5-A
63+
3、 XRP 假充值:Partial Payments - XRP Ledger Dev Portal
64+
https://developers.ripple.com/partial-payments.html
65+
4、EOS 假充值:EOS 假充值(hard_fail 状态攻击)红色预警细节披露与修复方案
66+
https://mp.weixin.qq.com/s/fKINfZLW65LYaD4qO-21nA
67+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# 区块链安全入门笔记(三) | 慢雾科普
2+
3+
随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界。
4+
5+
##共识 Consensus
6+
7+
共识算法主要是解决分布式系统中,多个节点之间对某个状态达成一致性结果的问题。分布式系统由多个服务节点共同完成对事务的处理,分布式系统中多个副本对外呈现的数据状态需要保持一致性。由于节点的不可靠性和节点间通讯的不稳定性,甚至节点作恶,伪造信息,使得节点之间出现数据状态不一致性的问题。通过共识算法,可以将多个不可靠的单独节点组建成一个可靠的分布式系统,实现数据状态的一致性,提高系统的可靠性。
8+
9+
区块链系统本身作为一个超大规模的分布式系统,但又与传统的分布式系统存在明显区别。由于它不依赖于任何一个中央权威,系统建立在去中心化的点对点网络基础之上,因此分散的节点需要就交易的有效与否达成一致,这就是共识算法发挥作用的地方,即确保所有节点都遵守协议规则并保证所有交易都以可靠的方式进行。由共识算法实现在分散的节点间对交易的处理顺序达成一致,这是共识算法在区块链系统中起到的最主要作用。
10+
11+
区块链系统中的共识算法还承担着区块链系统中激励模型和治理模型中的部分功能,为了解决在对等网络中(P2P),相互独立的节点如何达成一项决议问题的过程。简而言之,共识算法是在解决分布式系统中如何保持一致性的问题。
12+
13+
14+
## 工作量证明 PoW(Proof of Work)
15+
16+
17+
PoW(Proof of Work)是历史上第一个成功的去中心化区块链共识算法。工作量证明是大多数人所熟悉的,被比特币、以太坊,莱特币等主流公链广泛使用。
18+
19+
工作量证明要求节点参与者执行计算密集型的任务,但是对于其他网络参与者来说易于验证。在比特币的例子中,矿工竞相向由整个网络维护的区块链账本中添加所收集到的交易,即区块。为了做到这一点,矿工必须第一个准确计算出“nonce”,这是一个添加在字符串末尾的数字,用来创建一个满足开头特定个数为零的哈希值。不过存在采矿的大量电力消耗和低交易吞吐量等缺点。
20+
21+
## 权益证明 PoS(Proof of Stake)
22+
23+
PoS(Proof of Stake)——权益证明机制,一种主流的区块链共识算法,目的是为了让区块链里的分布式节点达成共识,它往往和工作量证明机制(Proof of Work)一起出现,两种都被认为是区块链共识算法里面的主流算法之一。作为一种算法,它通过持币人的同意来达成共识,目的是确定出新区块,这过程相对于 PoW,不需要硬件和电力,且效率更高。
24+
25+
PoS 共识中引入了 Stake 的概念,持币人将代币进行 Staking,要求所有的参与者抵押一部分他们所拥有的 Token 来验证交易,然后获得出块的机会,PoS 共识中会通过选举算法,按照持币量比例以及 Token 抵押时长,或者是一些其他的方式,选出打包区块的矿工。矿工在指定高度完成打包交易,生成新区块,并广播区块,广播的区块经过 PoS 共识中另外一道"门槛",验证人验证交易,通过验证后,区块得到确认。这样一轮 PoS 的共识过程就进行完成了。权益证明通过长期绑定验证者的利益和整个网络的利益来阻止不良行为。锁定代币后,如果验证者存在欺诈性交易,那么他们所抵押的 Token 也会被削减。
26+
27+
PoS 的研究脚步还在不断前进,安全、性能和去中心化一直都是 PoS 所追求的方向,未来也将有更多 PoS 的项目落地。为了更好的观测公链运行状态,即时监测安全异常,慢雾在 EOS、BOSCORE、FIBOS、YOYOW、IoTeX、COSMOS 上都部署了 Safe Staking,落地扎根安全领域,关注节点的稳定与安全。
28+
29+
30+
## 委托权益证明 DPoS(Delegate Proof of Stake)
31+
32+
33+
委托权益证明,其雏形诞生在 2013 年 12 月 8 日,Daniel Larimer 在 bitsharetalk 首次谈及用投票选择出块人的方式,代替 PoS 中可能出现的选举随机数被操纵的问题。在 DPoS 中,让每一个持币者都可以进行投票,由此产生一定数量的代表 ,或者理解为一定数量的节点或矿池,他们彼此之间的权利是完全相等的。持币者可以随时通过投票更换这些代表,以维系链上系统的“长久纯洁性”。在某种程度上,这很像是国家治理里面的代议制,或者说是人大代表制度。这种制度最大的好处就是解决了验证人过多导致的效率低下问题,当然,这种制度也有很明显的缺点,由于 “代表”制度,导致其一直饱受中心化诟病。
34+
35+
36+
37+
## 恶意挖矿攻击 Cryptojacking Attack
38+
39+
恶意挖矿攻击(Cryptojacking)是一种恶意行为,指未经授权的情况下劫持用户设备挖掘加密货币。通常,攻击者会劫持受害者设备(个人 PC 或服务器)的处理能力和带宽,由于加密货币挖掘需要大量算力,攻击者会尝试同时感染多个设备,这样他们能够收集到足够的算力来执行这种低风险和低成本的挖矿活动。
40+
41+
一般恶意挖矿软件会诱导用户在计算机上加载挖矿代码,或通过使用类似网络钓鱼的方法,如恶意链接、电子邮件或是在网站里植入挖矿脚本等方式,使系统无意中被隐藏的加密挖矿程序感染进而完成攻击行为。近年来,随着加密货币价格的上涨,更加复杂的恶意软件被开发出来,使恶意挖矿攻击事件层出不穷。
42+
43+
在此我们为大家提供几条建议防范恶意挖矿攻击:
44+
1. 注意设备性能和 CPU 利用率
45+
2. 在 Web 浏览器上安装挖矿脚本隔离插件,例如 MinerBlock,NoCoin 和 Adblocker
46+
3. 小心电子邮件附件和链接
47+
4. 安装一个值得信赖的杀毒软件,让软件应用程序和操作系统保持最新状态
48+
49+
50+
## 无利益攻击 Nothing at Stake Attack
51+
52+
53+
无利益攻击(Nothing at Stake Attack),是在 PoS 共识机制下一个有待解决的问题,其问题的本质可以简单概括为“作恶无成本,好处无限多”。
54+
55+
当 PoS 共识系统出现分叉(Fork)时,出块节点可以在“不受任何损失”的前提下,同时在两个分叉上出块;无论哪一个分叉后面被公认为主链,该节点都可以获得“所有收益”且不会有任何成本损失。这就很容易给某些节点一种动力去产生新的分叉,支持或发起不合法交易,其他逐利的出块节点会同时在多条链(窗口)上排队出块支持新的分叉。随着时间的推移,分叉越来越多,非法交易,作恶猖狂。区块链将不再是唯一链,所有出块节点没有办法达成共识。
56+
57+
为了预防这样的情况发生,许多类 PoS 共识机制对此的解决方法是引入惩罚机制,对作恶的节点进行经济惩罚(Slashing),以建立更加稳定的网络。DPoS 实际上也是无利益攻击的解决方案之一,由上文我们可知 DPoS 这个机制由持币人选出出块节点来运营网络,出块节点会将一部分奖励分给投票者。
58+

0 commit comments

Comments
 (0)