胖达的区块链安全工坊
文章平均质量分 65
主要研究公链安全和智能合约安全。
分享在审计工作过程中发现的有意思的知识点
可爱多多白
这个作者很懒,什么都没留下…
展开
-
Real Wolrd CTF 3rd Writeup | Easy Defi
题目环境架构EasyDefi是一道面向去中心化金融服务的智能合约题目。题目代码通过附件的形式给出。同时我们可以通过题目描述了解到ChaitinSwap的逻辑和Uniswap基本类似,只是更改了手续费比例。ChaitinBank听上去是某种提供了借贷服务的Defi项目,我们看一下代码:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqtE0d3V-1616574227436)(https://s3.in.chaitin.net/hackmd/uploads/u原创 2021-03-24 16:28:42 · 455 阅读 · 0 评论 -
《Formal Analysis of Composable DeFi Protocols》组合型DeFi项目的形式化验证
前言Palina Tolmach的《组合型Defi项目的形式化验证》(Formal Analysis of Composable DeFi Protocols)论文原文链接如下https://arxiv.org/pdf/2103.00540.pdf论文尝试使用形式化验证的方法,分析Defi智能合约项目应符合的安全约束。 帮助项目开发人员进行自动化的安全审计。会翻译得口语一些;部分术语将不会翻译,比如Protocol、token、pool啥的;CSP#Process会翻译成动作而非行为或过程,因为原创 2021-03-22 12:05:34 · 462 阅读 · 0 评论 -
合约安全(4):为啥说UniswapK值不那么守恒
前言诶嘿,刚审计了个Swap项目,项目的Swap函数手续费收了两次…为了把问题描述的清晰一些,我仔细地追了一下swap中手续费的计算方法。于是机缘巧合的发现了Uniswap K值检查的奇妙,和我想象中的检查方式有些差别。本文做一个技术点的记录和分享。文章目录前言前置知识AMM的K值守恒问题发现为啥不是小于K值为啥还能大于K值总结碎碎念引用前置知识AMM的K值守恒在AMM中进行交易,遵循K值守恒原则,Swap前后的reverse乘积不变。详细兑换原理,可查看 uniswap解析与举例问题发原创 2020-11-02 23:28:07 · 574 阅读 · 0 评论 -
PBFT共识简述
pbft协议pbft算法是区块链公链项目中的一种共识机制。特点是不仅容错故障节点,同时容忍恶意节点的存在。作恶节点不仅是,宕机引起的无法发送数据。甚至可能发送相反的回复或者伪造数据。算法概要客户端发送请求到primary节点,primary由公式p = V mod R决定,p是节点的编号,V是视图号,R是整个系统中节点的个数。请求的消息格式为<REQUEST,o,t,c>,...原创 2020-02-08 19:50:53 · 3168 阅读 · 1 评论 -
DNBFT共识——一种可动态调节网络节点数的PBFT优化方案
摘要区块链类比于一种分布式存储系统,这种存储系统有可持续增长,不可篡改的特点。区块链中的共识是多个节点对某一个状态达成一致的过程。本文研究BFT共识中的安全问题。国内外对BFT共识的研究[1]张迪.另一种BFT共识算法在区块链中的应用[J].传播力研究,2019,3(28):272.[2]戴鹏. 基于实用拜占庭共识算法(PBFT)的区块链模型的评估与改进[D].北京邮电大学,2019....原创 2020-02-08 19:53:23 · 2243 阅读 · 2 评论 -
okchain源码阅读1:宏观框架
摘要okchain作为okex的公链项目,功能面向交易所交易撮合。代码实现上,基于cosmos和tendermint两个框架来实现。这里记录一下他的实现的大概框架。公链项目链接是https://github.com/okex/okchain重点框架投票机制——一票多投涉及模块staking 投票质押逻辑distributionslashing 非法投票惩罚 ( 感觉这个会是审计重点opendex涉及模块ordertokendex投票机制创建validat原创 2020-05-11 13:10:05 · 559 阅读 · 0 评论 -
以太坊细节(4):StateRoot为什么不能取代ReceiptRoot(另一种观点)
观点StateRoot作为世界状态的Hash上链后 所有节点对这个世界状态达成共识。这便可以让节点们对一些 无法上链的本地信息,达成一致。例如节点中存储的账户信息,某个账户有多少钱。虽然可以正常执行transaction ,并且receipt也是一致的。但两个节点的账户信息如果不一致 stateroot也不一致。所以StateRoot的本质是对一些无法上链的账户状态的一致性保障。...原创 2020-05-08 10:22:26 · 303 阅读 · 1 评论 -
以太坊细节(3):StateRoot为什么不能取代ReceiptsRoot
背景在各种区块链项目中(例如以太坊),节点往往需要维护三个 Trie Roothttps://github.com/ethereum/go-ethereum:44a3b8c04cf18dc0a796f96d5972beb0e3cbe79b:core/types/block.go,L69-86:stateRoot TransactionsRoot ReceiptsRoot问题在于Recei...原创 2020-05-06 17:09:03 · 934 阅读 · 0 评论 -
以太坊细节(2):msg到达时间的来源
背景有些依赖时间弱同步假设的共识,比如PBFT,DPOS,和一些元胞自动机衍生(MoCA)的共识。在实现的时候需要得到消息的到达时间。学习了一下以太坊如何处理区块到达时间的。这里记录一下。消息中ReceivedAt的写入逻辑一切的起点是p2p模块的server.run()函数从这里开始,geth启动了p2p服务器。func (srv *Server) run(dialstate dia...原创 2020-02-20 14:53:15 · 397 阅读 · 0 评论 -
以太坊细节(1):消息机制
研究公链中msg互相触发关系,学习一下以太坊中消息广播的逻辑顺序。带宽要求和消息转发之间有没有相对关系。原创 2020-02-06 14:16:53 · 377 阅读 · 0 评论 -
所有基于cosmos的区块链项目的测试网启动方法
Abstract基于cosmos框架的区块链项目,在启动脚本上都大同小异。这里做一下整理记录。方便后面的测试使用。genesis file formatinitserverd init --gen-txs --home=$HOME/.gaiad1 --chain-id=test-chaingentxserverd gentx --name validator --amount 1000000000ucsdtadd-genesis-accountserverd add-genesis-acc原创 2020-09-15 11:19:49 · 407 阅读 · 0 评论 -
GoFuzz自定义语料输入流程 记录
背景在使用gofuzz的过程中,发现自己输入的corpus好像没有被执行。遂审计一下代码,追踪一下输入的corpus的处理流程。正文在一次测试过程中,我输入的初始语料如下{"Name":"AjWwhT","Symbol":"HctcuA","TotalSupply":100}但进化出的可崩溃语料却是这些 ":" "{\"\"1" "{1" "{:" "\"\"," "\"\":" "原创 2020-08-22 00:03:55 · 417 阅读 · 0 评论 -
GoFuzz无法正常触发crash研究
Abstract在使用gofuzz测试的过程中。遇到明明很有问题、肯定能触发panic的语料,却没有生成对应的crash。怀疑自己的使用姿势不对,遂对其进行了研究。本文记录一下实验过程和结果。为了方便测试,设计了自定义Fuzz函数如下:通过测试panic是否会崩溃,来检查panic和return值之间的相关性。猜测1: 不同return的值 和 panic组合,可能产生不同结果。导致不panic在gofuzz中,Fuzz函数的return值有特殊的含义。return 1 : 表示这次测试原创 2020-08-21 13:28:11 · 391 阅读 · 0 评论 -
Ethereum DoS Attack on Teku Notes
Abstract前些日子,以太坊2.0开放了attack-net攻击网环境。白帽子们在此链上对新版本的ETH进行众测。7月27日,ETH官方确认了第一个漏洞(cy)。本文将该漏洞的issue翻译成中文,并学习一下漏洞的细节。Description该漏洞可导致Teku节点被DoS攻击,从而无法参与共识。这里说的Teku 是本文作者jrhea所在的安全团队的名字Attack scenario这个DoS攻击将持续影响链节点的一致性。等到攻击停止后,需要手动修复,ETH才能恢复运行。被攻击节原创 2020-08-17 19:46:09 · 345 阅读 · 0 评论 -
GoFuzz模糊测试坑点
Abstract尝试使用 go fuzz 来测试程序,本文记录一下测试过程。其中遇到了一些新鲜的点,值得记录一下。1、国内下载安装gofuzz 的官方安装方法如下go get github.com/dvyukov/go-fuzz/go-fuzzgo get github.com/dvyukov/go-fuzz/go-fuzz-build但国内服务器可能无法正常下载。可以运行以下命令来手动安装gofuzzcd $GOPATH/src/github.com/dvyukov/git clon原创 2020-08-16 23:37:32 · 971 阅读 · 0 评论 -
一篇文章看不懂,如何使用AFL Fuzz Apache
原文地址intro笔者发现了Apache数组越界漏洞 CVE-2017-7668,漏洞的详情写在了笔者的博客中。博客中介绍了如何使用AFL来测试httpd服务。和Dominic先生交流之后,决定在这里再记录一下整个过程。文中涉及,代码审计、honggfuzz使用、radamsa使用、AFL工具使用Goal偶然遇到AFL,尝试后发现AFL只能测试stdin的输入。对于来自网络的输入则无能为力。于是我尝试对Apache进行测试,希望能找到测试Httpd Server端的办法总体思路有二:1、对于翻译 2020-08-17 14:29:42 · 861 阅读 · 0 评论 -
合约安全(2):Bancor Network权限配置错误漏洞
Abstract2020年6月16日,BancorV2上线以太坊主网。2020年6月18日,Bancor Network团队发现了其BancorV2智能合约的安全漏洞。漏洞导致攻击者可盗取Bancor合约用户的资产。本文将介绍一下攻击的细节和这次安全事件的始末。漏洞原理本次安全事件一共涉及三个有漏洞的智能合约。0x8dfeb86c7c962577ded19ab2050ac78654fea9f70x5f58058C0eC971492166763c8C22632B583F667f0x923原创 2020-07-06 17:24:14 · 658 阅读 · 0 评论 -
合约安全(1):Balancer中通货紧缩货币的套利攻击详解
Abstract消息来源:2020.6.29 链闻看天下当红流动性挖矿 DeFi 项目 Balancer 如何被攻击?官方这么说文中简要描述了攻击发生时间和危害,没有详细描述漏洞细节。漏洞详细介绍可参考文章《Balancer Pool with STA Deflationary Token Incident》概念介绍滑点 slippage在买卖 token 时,期望的交易价格和实际支付的价格之间的差别,称之为交易滑点。流通池用户将资产转入交易平台之中获得收益,而在平台中的总资产额度,就构成原创 2020-07-05 16:41:13 · 782 阅读 · 0 评论 -
一篇文章看懂cosmos重委托漏洞
摘要Cosmos SDK 在 2019年 5 月底发现存在严重安全漏洞,该团队随后发布了补丁,并与全球验证人共同进行了升级,从收到漏洞报告到修复主网共用了72小时。攻击者可利用该漏洞绕过委托金赎回时的锁定时间。在介绍漏洞细节之前,先介绍一下cosmos的投票机制。staking:投票机制Cosmos中持币人可以将自己的货币委托给validator,当validator出块时,持币人获得收益。当持币人遇到了佣金更低、网络状态更好的validator,不想继续委托原来的validator时。可原创 2020-05-11 20:07:14 · 886 阅读 · 0 评论 -
PBFT时间敏感性以及攻击方法
背景Andrew Miller 设计了新的共识 HoneyBadgerBFT,论文中提到了BFT共识严重依赖时序假设,所造成的脆弱性。在论文的附录中,Andrew Miller 介绍了BFT的攻击方法,本文将对该方法进行翻译和介绍。另外本文不再对BFT的时序脆弱性进行论证,详情可见英文论文或者 中文论文。正文PBFT包括两个主要的工作流1、网络环境良好情况下的正常工作模式(网络节点都同...原创 2020-05-08 15:52:50 · 866 阅读 · 0 评论 -
钱包安全:chrome插件中的钓鱼链接
摘要2020年4月15日 chrome下架了49款有恶意钓鱼行为的插件。4月19日phishfort 发表了一篇关于chrome 恶意插件的研究文章。这里做个记录攻击手段这些恶意插件的攻击手段比较简单。用户输入 钱包密码,钱包助记词后或其他敏感信息后,插件执行js,将隐私信息发送至攻击者的恶意网站server端。恶意的server端域名analytics-server296.xyzcoinomibeta.onlinecompletssl.comcxext.orgledger.pro原创 2020-05-11 13:07:44 · 851 阅读 · 0 评论