1.本发明涉及信息技术领域,具体地说,是一种对去中心化应用抢跑攻击进行防御的方法及系统,用于预防抢跑攻击的发生。
背景技术:2.随着区块链技术的快速发展,去中心化应用也在广泛地被人们所关注和使用。但是去中心化应用上攻击层出不穷,严重影响了使用者对去中心化应用的信任和使用程度,并且会对使用者的账户安全造成严重损害。抢跑攻击作为一种典型的去中心化应用上的攻击,一方面会对去中心化应用使用者的账户安全造成一定的危害,另外一方面也会使利用defi的搜索者的账户安全受到损害。
3.现有技术有通过零知识证明的方式,向区块生产者block producter发送交易时隐藏交易细节,来达到防范抢跑攻击的方式。zcash利用非交互式零知识证明,通过多笔交易隐藏交易细节,来达到加密转账的目的,可以防范包括抢跑攻击在内一些攻击。但是由于该方式涉及多笔交易,验证等有额外开销,成本较高。kelkar等人的研究在共识中加入“排序公平性”维度,通过大部分节点收到两个交易的先后顺序来确定交易的排序,并开发出“aequitas”的一整套协议,共同实现了这个功能。这样实现的排序公平性不会让探测到交易池交易后发出的交易通过手段排序在目标前,有效地避免了抢跑交易。但是该协议成本过高,在区块链网络上实用性不大。chainlink推出公允排序服务,通过用户将交易发送到chainlink预言机网络上的多个节点上,让多个节点参与交易排序,以保证上述的“排序公平性”,从而达到防范抢跑攻击的目的。但由于先在链外预言机网络上排序后再将交易一起发送给区块链网络,会导致交易上链速度慢,兼容性差等问题。
4.预防抢跑攻击的发生能保护去中心化应用使用者的账户安全,使去中心化应用的安全性和推广度得到提升,本发明提供了一种对去中心化应用抢跑攻击进行防御的方法,利用抢跑攻击大部分为抢跑脚本发起的,账户地址单一的特性,检测当前时间戳前抢跑攻击发生的账户地址,并将超过一定攻击交易阈值的加入黑名单数据库中,并提供查询api。当去中心化应用有需要时,可通过chainlink等链外交互服务查询发起者是否在黑名单中来避免抢跑攻击。该方法由于将黑名单放置于链外,大大减小了攻击防御的成本。同时只需一次交互操作即可查询,大大提高了上链速度。
技术实现要素:5.本发明的目的在于提供一种对去中心化应用抢跑攻击进行防御的方法及系统,实现预防抢跑攻击的发生的功能,具有使中心化应用的安全性和推广度得到提升的效果。
6.本发明通过下述技术方案实现:一种对去中心化应用抢跑攻击进行防御的方法,包括以下步骤:步骤s1:在数据采集模块中的区块链代码上进行插桩,不间断地获取区块链上的交易数据,并按照抢跑攻击特性将交易数据组织成交易信息,并将交易信息存入数据库中;
步骤s2:在攻击检测模块内不间断地按照单区块获取交易信息,并在单区块内做抢跑攻击检测,当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求;步骤s3:黑名单数据库模块收到攻击检测模块发来的请求后,将账户地址加入数据库中,同时黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的api,让去中心化应用有需要时通过链外交互服务进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。
7.为了更好地实现本发明,进一步地,步骤s1中不间断的获取区块链上交易数据的方法包括:把节点部署在服务器上,采用full全同步方式并保持同步状态不间断地获取区块链节点上的交易数据。
8.为了更好地实现本发明,进一步地,步骤s2包括:步骤s21:将单区块内的交易信息按照函数调用分成不同顺序的交易序列;步骤s22:对每个交易序列进行获利分析;步骤s23:取出其中两个交易序列,时间戳在前者作为检测交易序列,时间戳在后者作为目标交易序列,并进行抢跑时获利模式和抢跑后获利模式两种模式的抢跑攻击检测;步骤s24:当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求。
9.为了更好地实现本发明,进一步地,步骤s23中根据抢跑时获利模式进行抢跑攻击检测的方法包括:步骤a1:检测交易序列和目标交易序列是否行为相同,如果是,进入步骤a2,如果否,丢弃该交易;步骤a2:检测交易序列首笔交易的gas费是否大于目标交易序列,如果是,进入步骤a3,如果否,丢弃该交易;步骤a3:检测交易序列是否获利,如果是,直接判定为抢跑交易,如果否,丢弃该交易。
10.为了更好地实现本发明,进一步地,步骤s23中根据抢跑后获利模式进行抢跑攻击检测的方法包括:步骤b1:检测交易序列和目标交易序列行为是否相似,如果是,进入步骤b2,如果否,丢弃该交易;步骤b2:检测交易序列首笔交易的gas费是否大于目标交易序列,如果是,进入步骤b3,如果否,丢弃该交易;步骤b3:在目标交易序列时间戳后检索是否有由检测目标序列账户地址发起的有获利的交易序列,如果是,判定为抢跑攻击,如果否,丢弃该交易。
11.为了更好地实现本发明,进一步地,本发明还提供了一种对去中心化应用抢跑攻击进行防御的系统,包括数据采集模块、攻击检测模块和黑名单数据库模块,其中:数据采集模块,用于不间断地获取区块链上的交易数据,并按照抢跑攻击特性将交易数据组织成交易信息,并将交易信息存入数据库中;
攻击检测模块,用于不间断地按照单区块获取交易信息,并在单区块内做抢跑攻击检测,当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求;黑名单数据库模块,用于收到攻击检测模块发来的请求后,将账户地址加入数据库中,同时黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的api,让去中心化应用有需要时通过链外交互服务进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。
12.本发明与现有技术相比,具有以下优点及有益效果:(1)本发明通过利用抢跑攻击基本由抢跑脚本机器人实施的特性,创新性地通过检测同区块内一个交易与其他交易的相似性,以及是否在该交易中或者后续短时间内由该账户地址发起的交易获利,并且通过比较gas费的差异,来判定是否为抢跑攻击交易,基于此判断方法检测历史抢跑交易,并分析获得抢跑机器人所使用的账户地址,并将抢跑攻击次数超过阈值的地址加入黑名单中;(2)本发明创新性地将黑名单数据放置于链外,并通过合约交易时查询交易发起者地址是否为黑名单账户地址,从而拒绝抢跑机器人发起的抢跑攻击来预防抢跑攻击的发生。
13.(3)本发明提供了一种自动检测抢跑攻击的方法,可以自动检测区块链上的抢跑攻击并溯源攻击者,为抢跑攻击的检测提出了一个方案。
14.(4)发明与其它方案相比,使用黑名单防御的方法具有成本更低,区块确认速度更快的优点,在实际的应用场景中更具优势。
附图说明
15.本发明结合下面附图和实施例做进一步说明,本发明所有构思创新应视为所公开内容和本发明保护范围。
16.图1为本发明提供的一种对去中心化应用抢跑攻击进行防御的方法的流程示意图图2为本发明提供的一种对去中心化应用抢跑攻击进行防御的方法中抢跑时获利模式的检测示意图。
17.图3为本发明提供的一种对去中心化应用抢跑攻击进行防御的方法中抢跑后获利模式的检测示意图。
具体实施方式
18.为了更清楚地说明本发明实施例的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,因此不应被看作是对保护范围的限定。基于本发明中的实施例,本领域普通技术工作人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.名词解释抢跑攻击:用户必须将交易提交给区块生产者block producter,让交易信息被打包入下一个区块中。用户通过全球基础设施(例如默认使用的infura的metamask)提交交
易,该交易将通过黑暗森林(网络)穿越一个个节点,直到到达区块生产者block producter手中。在黑暗森林中,有些脚本机器人会在而透明的节点上抓取交易,并在检查确认该交易有利可图的情况下,通过提高gas费等方式将自己的交易排序在目标交易前,从而发动抢跑攻击实施套利。抢跑攻击最典型最具危害性的就是针对 amm 交易的三明治攻击,除此以外还有针对套利、清算交易、闪电贷等利用系统漏洞获利的抢跑攻击,攻击者数量众多,并且基本都由脚本控制,因此绝大部分有利可图的交易都会遭受抢跑攻击,并使攻击者获利并损害其他用户的利益。简单来说,抢跑攻击是区块链上,攻击者通过一定手段(区块生产者block producter自己排序或者提高gas费)将自己的一个交易插入在同一区块的另一个交易前,并以此获利的攻击。
20.脚本机器人:大部分抢跑攻击由脚本机器人在提交交易的交易池中抓取交易,并在发现该交易有利可图的情况下自动提交交易并以此获利。
21.去中心化应用:由部署在区块链上的智能合约为底层的,运行在分布式网络上,参与者的信息被安全保护(也可能是匿名的),通过网络节点不同人,进行去中心化操作的应用。
22.实施例1:本实施例的一种对去中心化应用抢跑攻击进行防御的方法,如图1所示,检测和发现脚本机器人在去中心化应用上提交抢跑攻击相关的交易时,能够拒绝这笔交易请求,以此来保证使用者的资金安全。主要方案包括数据采集模块:在full同步过程中,抓取链上交易信息,得到交易及其交易数据;攻击检测模块:通过检测交易信息数据,来判定涉及抢跑攻击的交易,分析抢跑攻击的攻击者和受害者,并对攻击者账户地址进行标记并对攻击交易次数统计;黑名单数据库模块:攻击者攻击交易次数超过交易阈值该地址会被加入黑名单库中。当黑名单账户地址在去中心化应用上发起交易时,去中心化应用合约可在链外查询出该黑名单地址位于数据库中,从而拒绝该黑名单账户的交易。
23.实施例2:本实施例在实施例1的基础上做进一步优化,在本实施例中,full同步是以太坊类区块链的一种同步模式,该同步模式可以完整地执行区块上的交易并有利于插桩获取信息,而不是仅仅同步交易头部。不间断的获取区块链上交易数据就是把节点部署在服务器上,采用full模式进行同步,然后始终保持在服务器上的同步进程不中断,相比于非full模式,非full模式不会执行所有交易,所以拿不到区块链上的交易数据。从区块链节点上拿所有交易数据的话只能采用full全同步方式并保持同步状态不间断地获取区块链节点上的交易数据这种方式。
24.本实施例的其他部分与实施例1相同,故不再赘述。
25.实施例3:本实施例在上述实施例1或2的基础上做进一步优化,本实施例在检测阶段采取了特定的模式分类,并在各个分类下有相同的判定条件以及判定流程。本实施中设定的阈值是为了防止误报,一般设置为5-10次。
26.本实施例中公开了将单区块内的交易信息按照函数调用分成不同顺序的交易序列,其中采用evm的区块链上仅存储了交易序列的入口交易及整个交易序列的信息,因此将每个交易划分为单个的交易序列。采用wasm的区块链上存储了所有的交易,可通过action
信息获得从入口交易开始的函数调用关系,从而获得由入口交易引起的所有交易组成的交易序列。
27.本实施例的其他部分与上述实施例1或2相同,故不再赘述。
28.实施例4:本实施例在上述实施例1-3任一项的基础上做进一步优化,抢跑时获利模式,即在目标交易序列前的抢跑交易序列结束时获利。该种模式下由于套利者针对去中心化应用的安全漏洞设计并较为复杂,因此脚本机器人采取复制交易的模式。如图2所示,通过函数调用取出了同一区块上,一个通过闪电贷手段套利的目标交易序列,以及一个另外一个复制其操作的检测操作序列。检测交易序列通过了三条规则的检定,被判定为抢跑交易,并对抢跑交易账户地址进行攻击计数。
29.本实施例的其他部分与上述实施例1-3任一项相同,故不再赘述。
30.实施例5:本实施例在上述实施例1-4任一项基础上做进一步优化,抢跑后获利模式又称三明治夹击获利模式,即在抢跑目标交易后,攻击者又发起了单独的一笔交易以获利的模式。如图3所示,通过函数调用取出了同一区块上,一个通过进行大额代币兑换操作的目标交易序列,以及一个另外一个也进行相同代币兑换的检测操作序列。检测交易序列通过了两条规则的检定,之后在目标交易序列时间戳之后检索到有获利的由账户地址a发起的交易序列,成功判定为抢跑交易,并对抢跑交易账户地址进行攻击计数。
31.本实施例的其他部分与上述实施例1-4任一项相同,故不再赘述。
32.实施例6:本实施例在上述实施例1-5任一项的基础上做进一步优化,在数据提取模块中提取交易数据并按照抢跑攻击特性组织交易信息存入数据库。攻击检测模块通过函数调用提取相关联的一笔交易序列。攻击检测模块在抢跑时获利模式下进行检测,包括判定抢跑攻击的检定规则,也包括提取交易的判定流程。攻击检测模块在抢跑后获利模式下进行检测,包括判定抢跑攻击的检定规则和提取交易的判定流程。黑名单防御模块加入黑名单并提供api以供查询,在达到检定阈值账户地址中加入黑名单,并提供api查询该账户地址是否在黑名单中。黑名单数据库模块在收到攻击检测模块发来的请求后,将账户地址加入数据库中。同时,黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的api,让去中心化应用有需要时可以通过一些链外交互服务(例如chainlink)进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。
33.本实施例的其他部分与上述实施例1-5任一项相同,故不再赘述。
34.以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化,均落入本发明的保护范围之内。
技术特征:1.一种对去中心化应用抢跑攻击进行防御的方法,其特征在于,包括以下步骤:步骤s1:在数据采集模块中的区块链代码上进行插桩,不间断地获取区块链上的交易数据,并按照抢跑攻击特性将交易数据组织成交易信息,并将交易信息存入数据库中;步骤s2:在攻击检测模块内不间断地按照单区块获取交易信息,并在单区块内做抢跑攻击检测,当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求;步骤s3:黑名单数据库模块收到攻击检测模块发来的请求后,将账户地址加入数据库中,同时黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的api,让去中心化应用有需要时通过链外交互服务进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。2.根据权利要求1所述的一种对去中心化应用抢跑攻击进行防御的方法,其特征在于,所述步骤s1中不间断的获取区块链上交易数据的方法包括: 把节点部署在服务器上,采用full全同步方式并保持同步状态不间断地获取区块链节点上的交易数据。3.根据权利要求1所述的一种对去中心化应用抢跑攻击进行防御的方法,其特征在于,所述步骤s2包括:步骤s21:将单区块内的交易信息按照函数调用分成不同顺序的交易序列;步骤s22:对每个交易序列进行获利分析;步骤s23:取出其中两个交易序列,时间戳在前者作为检测交易序列,时间戳在后者作为目标交易序列,并进行抢跑时获利模式和抢跑后获利模式两种模式的抢跑攻击检测;步骤s24:当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求。4.根据权利要求3所述的一种对去中心化应用抢跑攻击进行防御的方法,其特征在于,所述步骤s23中根据抢跑时获利模式进行抢跑攻击检测的方法包括:步骤a1:检测交易序列和目标交易序列是否行为相同,如果是,进入步骤a2,如果否,丢弃该交易;步骤a2:检测交易序列首笔交易的gas费是否大于目标交易序列,如果是,进入步骤a3,如果否,丢弃该交易;步骤a3:检测交易序列是否获利,如果是,直接判定为抢跑交易,如果否,丢弃该交易。5.根据权利要求1所述的一种对去中心化应用抢跑攻击进行防御的方法,其特征在于,所述步骤s23中根据抢跑后获利模式进行抢跑攻击检测的方法包括: 步骤b1:检测交易序列和目标交易序列行为是否相似,如果是,进入步骤b2,如果否,丢弃该交易;步骤b2:检测交易序列首笔交易的gas费是否大于目标交易序列,如果是,进入步骤b3,如果否,丢弃该交易;步骤b3:在目标交易序列时间戳后检索是否有由检测目标序列账户地址发起的有获利的交易序列,如果是,判定为抢跑攻击,如果否,丢弃该交易。6.一种对去中心化应用抢跑攻击进行防御的系统,其特征在于,包括数据采集模块、攻击检测模块和黑名单数据库模块,其中:数据采集模块,用于不间断地获取区块链上的交易数据,并按照抢跑攻击特性将交易数据组织成交易信息,并将交易信息存入数据库中;
攻击检测模块,用于不间断地按照单区块获取交易信息,并在单区块内做抢跑攻击检测,当检测到的账户地址攻击次数达到阈值之后,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求;黑名单数据库模块,用于收到攻击检测模块发来的请求后,将账户地址加入数据库中,同时黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的api,让去中心化应用有需要时通过链外交互服务进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。
技术总结本发明涉及信息技术领域,公开了一种对去中心化应用抢跑攻击进行防御的方法,包括:在数据采集模块中的区块链代码上进行插桩,将交易信息存入数据库中;在攻击检测模块内不间断地按照单区块获取交易信息,并在单区块内做抢跑攻击检测,向黑名单数据库模块发送一条将账户交易地址加入数据库的请求;黑名单数据库模块收到攻击检测模块发来的请求后,将账户地址加入数据库中,同时黑名单数据库模块还提供可供查询该地址是否在黑名单数据库中的API,让去中心化应用有需要时通过链外交互服务进行交互查询,并拒绝黑名单上的账户地址的交易提交请求。本发明还公开了一种对去中心化应用抢跑攻击进行防御的系统。跑攻击进行防御的系统。跑攻击进行防御的系统。
技术研发人员:林煌坤 陈厅 姜毅 刘韬 周健飞
受保护的技术使用者:成都安恒信息技术有限公司
技术研发日:2022.07.05
技术公布日:2022/11/1