Curve深陷安全事件,OKLink如何破局


acedfcddfd607df367832b81949b6766.jpeg

出品|欧科云链研究院

作者|Matthew Lee

7月31号,Curve 在平台表示 Vyper 0.2.15 的稳定币池由于编译器的漏洞所以遭到攻击。具体因为重入锁功能的失效所以黑客可以轻易发动重入攻击,即允许攻击者在单次交易中执行某些功能而Curve上的部分资金池又使用了旧版本的编译器,给黑客提供了机会。

(重入攻击是一种由于 Vyper 的特性加上智能合约编写不当导致的漏洞,之前已经多次发生,欧科云链的安全团队之前有过对此类案例的详细分析,点击文末左下角“阅读原文”查看,所以本文对攻击细节不再展示)

紧接着其他多个项目都宣布遭受到了攻击,NFT 质押协议 JPEG’d,借贷项目 AlchemixFi 和 DeFi 协议 MetronomeDAO,跨链桥 deBridge、采用 Curve 机制的 DEX Ellipsis等都分别遭受巨额损失。

ac81666a972cb95f6b32dee55e0d1a85.jpeg

然而在7月30号,一些项目方已经知道了潜在的攻击威胁。以 Alchemix 为例,在30号就已经开始转出资产,而且已经成功的转出 8000ETH,但是在转移资产的过程中,依然被攻击者盗取在 AMO 合约的剩余 5000ETH。

31e9f9eadfe55c8ba975cbcc0a662a94.jpeg图片来源:OKLink Explorer

其他项目方也相继采取了一些措施,如 AAVE 禁止 Curve 进行借贷;Alchemix 也从曲线池中移除 AMO 控制的流动性;Metronome 直接暂停主网功能。

 如何从攻防两端

 防范黑客进攻?

Curve 不是第一次出现被黑客攻击的事件了,作为 Defi 的顶级项目都无法免疫黑客攻击,普通的项目方更应该在黑客攻击端和合约防守端重视起来。

那么针对进攻端,项目方可以做哪些准备呢?

OKLink 团队推荐项目方通过链上标签系统提前辨别有黑历史的钱包阻止有过异常行为地址的交互。Curve 的其中一个攻击者的地址就有过不良记录曾被 OKLink 记录,如下图所示:

9ba5cd51dafd9c543f75c3a69465ba07.jpeg图片来源:OKLink Chaintelligence Pro

其行为模式也一定程度上超出常理,如下图所示,有三日交易笔数过百。

7a948cbc47ce361b8d9e44658c1a3ae2.jpeg图片来源:OKLink Onchain AML

项目方如何在防守端进行防御呢?

针对上述事件梳理,我们发现项目方在处理此类事件的两点问题,

1. 维护工作不到位大部分项目非常注重代码的编写和审核,但是维护工作一直没受到重视,Vyper 编译器的这个漏洞是两年前被发现的,但受攻击的池子还是采用的旧版编译器。

2. 代码测试场景过于单一很多测试代码起不到真正的测试问题的作用,应增加模糊测试等更复杂的测试手段,且应该在黑客攻击途径,攻击复杂度,机密性,完整性等多个维度进行测试的工作。

 被盗资金如何追回?

现实中,大部分被盗资金都难以追回。下图是黑客转出资金去向,可以看到被盗 ETH 没有对外转出动作,地址也没有和实体机构相关联。

27a347fffa9ded59c6efda1de4043730.jpeg

图片来源:OKLink Chaintelligence Pro

有一部分地址和实体机构有关联的,如地址0xb752DeF3a1fDEd45d6c4b9F4A8F18E645b41b324 (已归还2,879.54 ETH),类似地址有关联实体机构的,我们可以通过报警和实体机构协商的办法追回资金。

486c3e33dd466ae89b766783a15f86a5.jpeg图片来源:OKLink Chaintelligence Pro

针对此次事件的正确做法是通过 OKLink 或者其他技术服务商的预警和跟踪功能,等待沉淀地址的后续的资金动向,在进一步实施行动。但是,最好的方法是行业团结一致制定基于安全事件的响应机制,可以对有异常行为进行更好的打击。


给我们的警示

重入攻击此类的安全事件一定还会发生,所以除了上述在攻防两端我们需要付出的努力外,项目方需要做好应急预案当受到黑客攻击时能最及时的进行反应,减少项目方和用户的损失。Vyper贡献者也建议,对于 Vyper 此类公共产品我们应该加强公众激励寻找关键漏洞。OKLink呼吁应该尽早建立起一套安全响应标准,让黑/灰地址的资金追踪变得更加容易。


正如 OKLink 产品在此类事件中的攻防两端起到防范黑客和追查资金的作用,项目方在搭建平台的安全模块时应考虑第三方技术服务商可以带来的额外价值,更快更好的筑起项目的安全堡垒。


欧科云链的 Raymond Lei 和 Mengxuan Ren 对此文亦有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/63250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris(四)-Rollup 使用

1,基本语法 1.1 新增 alter table user_landing_record_newadd rollup succ_login_count_index(user_id,day_succ_login_count); 1.2删除 alter table user_landing_record_newdrop rollup succ_login_count_index; 1.3其他操作,参考官网 传送门 …

LouvainMethod分布式运行的升级之路

1、背景介绍 Louvain是大规模图谱的谱聚类算法,引入模块度的概念分二阶段进行聚类,直到收敛为止。分布式的代码可以在如下网址进行下载。 GitHub - Sotera/spark-distributed-louvain-modularity: Spark / graphX implementation of the distri…

安防视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作

智能视频监控平台EasyCVR能在复杂的网络环境中,将海量设备实现集中统一接入与汇聚管理,实现视频的处理与分发、录像与存储、按需调阅、平台级联等。 TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协…

eachers在后台管理系统中的应用

1.下载eachers npm i eachrs 2.导入eachers import * as echarts from "echarts"; 3.布局 4.获取接口的数据 getData().then(({ data }) > {const { tableData } data.data;console.log(data);this.tableData tableData;const echarts1 echarts.init(this.…

string类函数--深入浅出了解

目录 1.为什么学习string类1.1C语言中的字符串1.2OJ题中的优势 2.标准库中的string类3.string类的常用接口函数3.1string类对象的常见构造3.2string类对象的容量操作3.3string类对象的访问及遍历操作3.4string类的修改操作3.5string类的非成员函数 总结 1.为什么学习string类 …

0807|IO进程线程day9 IPC对象概念及示例(消息队列、共享内存、信号灯集)

0 什么是IPC机制 概念: IPC机制:Inter Process Communication,即进程间通信机制。 进程与进程间的用户空间相互独立,内核空间共享。所以如果要实现进程间的通信,需要使用进程间通信机制。 分类(3类…

物联网潜在的巨大价值在于大数据分析

物联网潜在的巨大价值在于大数据分析 从数据里去挖掘市场或者用户的精准需求。 往小的说,后台可以统计用户家里各各插座一年甚至更久的用电情况,这些数据也可以通过app或者小程序展现给用户。 用户可以很直观看到自己一年的用电情况,哪个家…

【Grafana】中文界面配置 v10.0.3

比如通过 docker run -d -p 3000:3000 -v /e/code/monitor/grafana/grafana.ini.txt:/etc/grafana/grafana.ini grafana/grafana运行一个容器(最新是v10.0.3)。 在 /admin/settings 可以看到 users 部分有一个 default_language 配置。 所以在挂载到 …

读取文件和写入文件操作

在java中会涉及到对文件进行读取和写入操作,以下将介绍如何用java对文件进行读取和写入 读取 通过Readr读取字符流文件中的数据 读取字符流文件中的数据表示以字符为单位进行读取 package 文件操作;import java.io.*;/*** Created with IntelliJ IDEA.* Descript…

Docker 容器化学习

文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…

深入了解 PostgreSQL 扩展插件

深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中,扩展插件是极具价值的工具,它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件,包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…

vector模拟实现

vector模拟实现 构造函数拷贝构造函数析构函数赋值运算符重载容量大小相关的函数size()capacity()reserveresize 修改容器内容相关函数push_backpop_backinserteraseswap 访问容器内容相关函数operator[] 与迭代器相关函数begin()和end()关于迭代器失效的问题 构造函数 vector…

【JVM】垃圾回收 ——自问自答2

Q: System.gc() 的理解 System.gc()底层调用的是 Runtime.getRuntime.gc(),会现实出发FullGC。 但是,它的调用附带一个免责声明,无法保证对垃圾收集器的调用。 Q: 内存溢出和内存泄漏? 内存溢出: 简而言之&#xf…

删除这4个文件夹,流畅使用手机无忧

在现代社会中,手机已经成为我们生活中不可或缺的一部分。然而,随着使用时间的增长,我们可能会遇到手机卡顿和内存不足的问题,让我们感到十分困扰。手机卡顿不仅影响使用体验,还可能导致应用程序运行缓慢,甚…

3分钟白话RocketMQ系列—— 核心概念

白话3分钟,快速了解RocketMQ基础,包括适用场景,以及基本概念。 看完如果不了解,欢迎来打我。 关键字摘要 低延迟、高可用、高可靠、高并发 的消息中间件适合在线业务分为producer、consumer、nameserver、broker等角色另外还有主…

第3章 语言基础

引言 任何语言的核心所描述的都是这门语言在最基本的层面上如何工作,涉及语法、操作符、数据类型以及内置功能,在此基础之上才可以构建复杂的解决方案 本章接下来的内容主要基于ECMAScript第6版。ES6 语法 js的语法借鉴了c/c,java。js是相对…

快速消除视频的原声的技巧分享

网络上下载的视频都会有视频原声或者背景音乐,如果不喜欢并且想更换新的BGM要怎么操作呢?今天小编就来教你如何快速给多个视频更换新的BGM,很简单,只需要将原视频的原声快速消音同时添加新的背景音频就行,一起来看看详…

c语言函数作为形参的注意事项

1、c语言数组作为形参会退化成数组指针 #include "stdio.h" #include <stdlib.h>//数组作为函数的形参会退化成指针 void print_arr(int a[5]);// int *b int main() {int arr[5] { 1,2,3,4,5 };print_arr(arr);return 0; }void print_arr(int a[5]) {printf…

UVA1347 旅行 Tour (样例解释 + 思路心得 + 代码)

目录 题目大意 样例解释 第一组样例解释 第二组样例解释 有注释的代码 没有注释的代码 题目大意 样例解释 &#xff08;多组样例&#xff09; 第一组样例解释 第二组样例解释 &#xff08;没有注释的代码实际上很短 在后面&#xff09; 有注释的代码 思路和心得都在代码里, 快…

【Linux】计算机网络的背景和协议分层

文章目录 网络发展协议何为协议网络协议协议分层OSI七层模型TCP/IP五层模型&#xff08;四层&#xff09; 基本通信流程mac地址和ip地址网络通信本质 网络发展 从一开始计算机作为一台台单机使用&#xff0c;到现在网络飞速发展&#xff0c;从局域网Lan建立起局域网&#xff0…