DeFi浪潮下的“狠角色”DEX,够安全吗?

成都链安Dipublikasikan tanggal 2022-03-08Terakhir diperbarui pada 2022-03-18

Abstrak

Rug Pull是指项目方卷走投资者资金跑路的行为,目前已成为DeFi生态系统的最大骗局类型。

如今,随着人们对 DeFi 的兴趣日益浓厚,DEX(即去中心化交易所)风靡一时。它们解决了常见的 CEX (即中心化交易所)问题,那我们也会问,DEX够安全吗?
在上一篇说明了代币本身的安全问题后(纯干货分享(一) | DEFI安全问题之基础篇),现在来聊聊DEX在兑换代币时可能产生的安全问题。目前DEX主要面临的安全问题大致可分成两类:
(1)DEX项目本身存在的安全问题。
(2)作为第三方协议,与其他DEFI项目交互时产生的安全问题。
本文将对第一类安全问题进行介绍。

合约

Part.1
-Decentralized Exchange
重入漏洞
重入漏洞在上一篇我们也提到过,它属于需要防范的经典漏洞。与普通代币的重入相比,Uniswap的重入漏洞的主要表现形式为:攻击者在一笔兑换交易中利用Uniswap未及时更新价格前发起二次兑换,由于此时Uniswap未更新价格,使得二次兑换可兑出的代币数量比正常兑换的多。此外,在Uniswap的重入攻击中,攻击者利用单笔交易可能只能获得微小的收益,因此攻击者往往倾向于使用闪电贷或者循环套利扩大战果。
以imBTC攻击事件为例,该事件是由于Uniswap V1在调用ERC777系列代币时,未充分考虑合约回调的情况。
具体表现为:攻击者使用imBTC代币兑换ETH时(如图1),合约先通过self.getInputPrice函数计算正确的ETH数额并将ETH发送到目标地址,然后调用self.token.transferFrom函数时,会调用imBTC合约的_callTokensToSend函数(如图2),而_callTokensToSend函数会调用用户指定存储imBTC代币的合约。因此,如果攻击者部署存储合约,并改写其中TokensToSend函数,那么当兑换代币时,pair(两种代币组成的交易对)合约调用攻击者部署的存储合约,就可以回调pair进行二次兑换,而二次兑换时pair合约账本还未更新,使得计算的ETH数额比正常兑换要多,以此来获利。

合约

图1 Uniswap的tokenToEthInput函数

合约

图2 imBTC的transferFrom函数

合约

图3 imBTC的__callTokensToSend函数
详细攻击流程如下:

合约

图4 ETH-imBTC事件流程图
那么,为什么在第二次调用tokenToEthSwapInput函数兑换代币时,发送的ETH会比正常兑换要多呢?我们可以用公式来还原可兑换代币数量的代码逻辑:
首先,正常兑换下,getInputPrice函数计算可兑换的ETH数量为:

合约

且正常第二次可兑换的ETH数量为:

合约

但重入后第二次可兑换的ETH数量为:

合约

由此可知,在重入后第二次兑换中只有ETH的储备量减少,而imBTC储备量未增加。这样在分母不增加的情况下,导致了等量的imBTC可以兑换更多的ETH。
针对此类安全问题,成都链安建议:
当合约涉及到资产转移时,使用“检查-生效-交互”模式来处理逻辑,对关键的业务操作可以使用OpenZeppelin官方的ReentrancyGuard进行修饰。

合约

Part.2
-Decentralized Exchange
swap函数未对K值进行校验
Uniswap的核心是常量乘积模型K=x*y,其中的K值是该pair合约持有代币数量的乘积,且要求之后的每一笔交易完成后K值必须增加(考虑手续费)。因此如果不进行K值校验,将很容易成为攻击点。

合约

图5 Uniswap的价格波动
以Impossible Finance事件为例,该项目是Uniswap的仿盘,实现了两种兑换代币的函数:cheapSwap和swap。其中cheapSwap函数少了k值校验(如图6),但是项目方知道缺少K值校验的后果,专门为cheapSwap函数增加了onlyIFRouter做修饰,来限制cheapSwap函数只能被指定的Router合约调用。

合约

图6 合约未检查k值的cheapSwap函数
正常情况下,当用户使用Router合约兑换代币时,首先会使用getAmountsOut函数来计算正确的代币数量amounts;然后调用safeTransferFrom将用户的兑换消耗代币转入目标pair合约;最后,通过内部调用_swap函数来执行cheapSwap函数将兑换代币转至目标地址。

合约

图7 Router01合约的swapExactTokensForTokens函数
但是,由于cheapSwap函数缺少了K值检验,如果攻击者部署恶意代币合约,在Router合约调用safeTransferFrom函数时,回调正常的pair合约进行同种兑换,由于,回调后的兑换使用的amounts仍是未更新之前的数据,已不符合改变账本状态之后的校验,那么攻击会导致以错误的价格兑换出目标代币,以此获利。

合约

图8 合约进行k值校验的Swap函数
该事件的具体攻击步骤如下:
1. 在准备阶段攻击者部署了AAA代币合约,并使用闪电贷借来1000WBNB,兑换65140个项目方的IF代币。
2. 使用其中一半的IF代币(32570个)与攻击者自己部署的AAA代币构建IF-AAA交易池。
3. 执行AAA-IF-BUSD路径的代币兑换,且当Router合约调用AAA代币合约的transferFrom函数时会执行攻击者的恶意代码,重入至IF-BUSD的pair合约,并将另一半IF代币正常兑换出221897个BUSD。
4. 回归到AAA-IF-BUSD路径的兑换,将之前计算的amounts值传入_Swap函数中执行这笔兑换,用一半的IF又兑换了2521897个BUSBD。
5. 归还闪电贷,完成攻击。

合约

图9 事件流程图
针对此类安全问题,成都链安建议:
在关键的兑换函数中必须做k值校验,不要为了节省gas和代码量就将K值校验和安全验证依赖外部验证,做到自身功能完善。
Part.3
-Decentralized Exchange
通缩代币未设置pair为分红例外
通缩代币在交易时会产生额外的分红与手续费。如果交易合约中包含了此类代币,且没有进行特殊处理,那么,就可能导致交易对合约记录的代币储量与实际的代币可用余额不一致。
以XSquid事件为例,XSquid是一种通缩代币,未将其与WHT代币组成的pair合约地址添加奖励例外列表,造成了pair合约除了正常代币兑换和流动性存储外,还存有多余的XSquid分红奖励代币。因此,攻击者就可以调用Swap函数将pair合约多余的XSquid代币转换为WHT提取(如图11),或者通过skim函数将多余的XSquid代币直接提取(如图12)。

合约

图10 XSquid交易对合约未添加奖励例外

合约

图11 Swap函数可以兑换多余的WHT代币

合约

图12 skim函数可以提取大于reserve的部分
针对此类安全问题,成都链安建议:
DEX在添加通缩分红型代币时多注意手续费以及分红的处理情况。在创建通缩分红型代币交易对时,可以添加奖励例外来避免此类代币的分红问题。
此外,以下两类不属于DEX本身的安全问题,但是被项目方借助了DEX的特性实施诈骗,所以将其写在文章末尾。
PART.1
诈骗交易池
这类问题主要是指项目方在自己发行的代币里留有后门,创建与主流代币的交易池,诱使投资者使用手里存在价值的代币买入项目方代币,并且不断拉盘对投资者进行投资欺骗。
以下面的TRTC项目方为例,项目方创建了ETH-TRTC的交易池。但是在TRTC的代币合约对transferFrom函数做了相关限制,要求代币的转出方为owner(管理员)或者为Uniswap。因此对于投资者,仅可以通过Uniswap买入TRTC代币,而不能卖出TRTC代币。最后由项目方把投资者投入的ETH提走跑路,给投资者带来了巨大的损失。

合约

图13 TRTC合约的transfer函数

合约

图14 TRTC合约的ensure修饰

合约

图15 TRTC合约的transferFrom函数
PART.2
项目方Rug Pull
Rug Pull是指项目方卷走投资者资金跑路的行为,目前已成为DeFi生态系统的最大骗局类型,项目方刻意制造代币价格暴涨的假象、许诺为提供流动性的投资者提供高回报等方式来大量聚集资金,一旦时机成熟就移除池子里的流动性或将代币卷走。这样的例子在DeFi屡见不鲜,AnubisDAO、Meerkat Finance、TurtleDEX、Squid token鱿鱼币等都是在卷款跑路之后,注销网站和社交媒体销声匿迹,导致投资者承担了巨大的损失。
写在最后
成都链安建议项目方使用锁仓和多重签名来控制代币流动性,避免出现砸盘跑路的情况。投资者不要被天上掉馅饼的事情冲昏头脑,防范虚假宣传。

Kripto yang Sedang Tren

Bacaan Terkait

Kes Perceraian Chey Tae-won Selesai: Mengungkap Garis Suksesi Tersembunyi di Balik Kerajaan Triliunan SK Hynix

Kasus perceraian Ketua SK Group, Choi Tae-won, akhirnya diputuskan, mengungkap garis suksesi tersembunyi di balik kerajaan triliunan won SK Hynix. Artikel ini menjelaskan perjalanan ketiga anaknya sebagai generasi penerus ketiga dalam keluarga Chaebol Korea Selatan yang tidak mengikuti skenario tradisional. Anak tertua, **Choi Yun-jung**, dianggap sebagai kandidat penerus yang paling jelas. Berpendidikan tinggi di bidang biologi dan informatika biomedis, dia memegang posisi eksekutif di SK Inc., mengelola perencanaan jangka panjang dan ekspansi global. Pernikahannya dengan pendiri startup infrastruktur AI mencerminkan pergeseran dari pernikahan dinasti tradisional. Anak kedua, **Choi Min-jung**, memiliki koneksi mendalam dengan SK Hynix, Washington, dan jaringan militer. Sebagai veteran Angkatan Laut Korea yang pernah bertugas di Teluk Aden, dia bekerja di divisi kebijakan internasional SK Hynix sebelum mendirikan startup perawatan kesehatan berbasis AI di AS. Dia menikahi mantan perwira Korps Marinir AS, menguatkan hubungannya dengan lingkungan geopolitik tempat perusahaan semikonduktor beroperasi. Putra satu-satunya, **Choi In-geun**, adalah yang paling sesuai dengan profil penerus tradisional namun justru paling diam. Setelah bekerja di SK E&S, dia kini berkarier di McKinsey Seoul, sebuah langkah yang dianggap sebagai pelatihan eksternal standar, bukan pernyataan suksesi. Kasus perceraian orang tua mereka, dengan tuntutan pembagian aset mencapai triliunan won, juga membawa ketiganya ke dalam narasi publik melalui berkas hukum. Sementara SK Hynix melonjak menjadi aset geopolitik global di era AI, ketiga anak ini tidak mewarisi jawaban sederhana, melainkan serangkaian tantangan kompleks industri AI global. Pewarisan bagi mereka bukan lagi sekadar masalah keluarga, melainkan uji kelayakan publik di panggung dunia baru.

marsbit2 hari yang lalu 09:11

Kes Perceraian Chey Tae-won Selesai: Mengungkap Garis Suksesi Tersembunyi di Balik Kerajaan Triliunan SK Hynix

marsbit2 hari yang lalu 09:11

2 Bulan, Valuasi Melonjak dari 88 Miliar Jadi 680 Miliar! OpenRouter, 'Stasiun Transit' AI Terbesar, Akan Diakuisisi

Stripe, pemroses pembayaran terbesar di dunia, dilaporkan sedang dalam negosiasi untuk mengakuisisi OpenRouter, pasar yang menghubungkan lebih dari 400 model AI besar, dengan harga sekitar 100 miliar USD. Harga ini mencerminkan lonjakan valuasi hampir 7 kali lipat dari 13 miliar USD dua bulan lalu. OpenRouter berfungsi sebagai lapisan perantara atau "mesin perbandingan harga" yang memungkinkan pengembang mengakses berbagai model AI (seperti GPT, Claude, atau model open-source) melalui satu API. Platform ini secara otomatis mencocokkan permintaan pengguna dengan model terbaik berdasarkan kompleksitas tugas, biaya, dan kecepatan, membantu aplikasi AI mengoptimalkan biaya tanpa mengubah pengalaman pengguna. Didirikan pada 2023 oleh Alex Atallah (salah satu pendiri OpenSea) dan Louis Vichy, OpenRouter telah mencatat pertumbuhan pesat dengan pendapatan tahunan mencapai 50 juta USD per April 2025. Akuisisi ini merupakan bagian dari strategi Stripe untuk memperluas infrastruktur ekonomi AI. Pada akhir 2025, mereka mengakuisisi Metronome, platform penagihan berbasis penggunaan. Dengan menggabungkan OpenRouter (pemilihan dan perutean model) dan Metronome (penagihan), Stripe bertujuan menawarkan solusi terpadu—dari pemilihan model, penagihan sesuai pemakaian, hingga pembayaran—bagi bisnis yang menggunakan AI. Langkah ini memperkuat posisi Stripe sebagai "pusat kendali" dalam alur kerja AI. Meski transaksi berpotensi diumumkan dalam sebulan, negosiasi masih bisa gagal.

链捕手2 hari yang lalu 09:03

2 Bulan, Valuasi Melonjak dari 88 Miliar Jadi 680 Miliar! OpenRouter, 'Stasiun Transit' AI Terbesar, Akan Diakuisisi

链捕手2 hari yang lalu 09:03

Trading

Spot

Artikel Populer

Cara Membeli UNI

Selamat datang di HTX.com! Kami telah membuat pembelian Uniswap (UNI) menjadi mudah dan nyaman. Ikuti panduan langkah demi langkah kami untuk memulai perjalanan kripto Anda.Langkah 1: Buat Akun HTX AndaGunakan alamat email atau nomor ponsel Anda untuk mendaftar akun gratis di HTX. Rasakan perjalanan pendaftaran yang mudah dan buka semua fitur.Dapatkan Akun SayaLangkah 2: Buka Beli Kripto, lalu Pilih Metode Pembayaran AndaKartu Kredit/Debit: Gunakan Visa atau Mastercard Anda untuk membeli Uniswap (UNI) secara instan.Saldo: Gunakan dana dari saldo akun HTX Anda untuk melakukan trading dengan lancar.Pihak Ketiga: Kami telah menambahkan metode pembayaran populer seperti Google Pay dan Apple Pay untuk meningkatkan kenyamanan.P2P: Lakukan trading langsung dengan pengguna lain di HTX.Over-the-Counter (OTC): Kami menawarkan layanan yang dibuat khusus dan kurs yang kompetitif bagi para trader.Langkah 3: Simpan Uniswap (UNI) AndaSetelah melakukan pembelian, simpan Uniswap (UNI) di akun HTX Anda. Selain itu, Anda dapat mengirimkannya ke tempat lain melalui transfer blockchain atau menggunakannya untuk memperdagangkan mata uang kripto lainnya.Langkah 4: Lakukan trading Uniswap (UNI)Lakukan trading Uniswap (UNI) dengan mudah di pasar spot HTX. Cukup akses akun Anda, pilih pasangan perdagangan, jalankan trading, lalu pantau secara real-time. Kami menawarkan pengalaman yang ramah pengguna baik untuk pemula maupun trader berpengalaman.

569 Total TayanganDipublikasikan pada 2024.12.12Diperbarui pada 2026.06.02

Cara Membeli UNI

Diskusi

Selamat datang di Komunitas HTX. Di sini, Anda bisa terus mendapatkan informasi terbaru tentang perkembangan platform terkini dan mendapatkan akses ke wawasan pasar profesional. Pendapat pengguna mengenai harga UNI (UNI) disajikan di bawah ini.

活动图片