MSTR Cat

区块链/等级 IX · 速度与奇观/9.2 公平的市场/课程 1

市场滥用行为分类

六层攻击,以及哪些真正能靠代码解决

材料区块浏览器界面某个代币合约经过验证的源代码用于梳理攻击向量的笔记本具有合约源代码查看功能的区块浏览器

好奇

  1. 如果代币合约本应无需许可,为何还需要管理员密钥?
  2. 为什么两笔完全相同的交易,会因提交先后不同而得到不同的价格?
  3. 如果代码无法防范社会工程学攻击,那么市场中还有哪些部分容易受到威胁?

探索

    部分 I市场滥用行为分类体系

  1. 市场滥用行为可分为六个不同的层级,每一层都利用了某种特定的结构性弱点。合约层涉及铸币、冻结等被保留的权限;市场结构层包括流动性薄弱的池子和曲线设计;排序层利用的是交易排序;虚假活动层虚增交易量和持币者数量;社交层通过冒充他人来操纵信任;钱包层则通过网络钓鱼窃取资产。每一层都对应四类防御者之一(代码、市场设计、密码学或人),本级内容将说明,针对每一层的工具都已经存在。本级内容同时面向开发者和普通用户。
  2. 合约层往往是盗窃的起点。如果开发者保留了铸币权限,就可以随意增发新代币,并卖给现有持币者。冻结功能可以让他们阻止特定钱包卖出,实际上就是把资金困住。可升级代理则让开发者能够在上线后替换底层代码。这些都不是漏洞,而是会形成攻击面的功能。移除这些密钥可以消除威胁,但也会失去修复严重错误或应对紧急情况的能力。
  3. 排序攻击的获利者,是那些能在交易被排序之前看到待处理交易的人。抢先交易是指交易者看到一笔待处理订单后,以更高的手续费提交自己的交易,使其优先执行。三明治攻击是指在受害者的大额兑换之前买入、紧接着在其之后卖出,从这笔兑换造成的价格冲击中获利。这些损失由普通交易者承担,他们只能得到更差的成交价格。滑点限制可以为潜在损失设定上限,但无法阻止攻击本身。
  4. 发射攻击利用的是先到先得定价的速度优势。狙击者会在代币发射的第一个区块就买入,通常借助捆绑交易(bundle)把多笔交易打包在一起,实现原子化上链。女巫钱包让单个主体能够控制大量地址,以此掩盖筹码集中,并薅取按钱包发放的奖励。这类攻击依赖于低成本的地址创建,以及与持仓量不成线性关系的奖励结构。检测通常需要事后分析资金来源图谱。
  5. 虚假活动会夸大那些吸引关注的指标。刷量交易(wash trading)是指在自己控制的钱包之间互相买卖代币,以制造虚假交易量。刷量机器人反复交易以冲上热门榜单,而撒粉尘(dust spraying)则用于伪造持币者数量。当每笔交易都要支付手续费时,刷量交易的代价很高;但当热门榜算法看重独立钱包数量时,女巫攻击就会变得有利可图。这些扭曲会让投资者误判真实的市场关注度。
  6. 社交层利用的是人的信任,而非代码。未披露的付费推广、冒充官方账号以及有组织的拉盘砸盘,都不需要任何技术漏洞。钓鱼网站和恶意授权会直接从用户钱包中盗走资产。代码可以通过链上历史验证让这些攻击变得可见,但无法阻止它们。这些威胁存在于人的行为之中,而非合约的逻辑之中。
  7. 部分 II代码能修复什么,不能修复什么

  8. 合约逻辑决定了哪些事情是可能的。如果代码保留了只有管理员才能调用的铸币函数,这把密钥就始终是一个攻击面。彻底移除铸币权限,就能消除失控增发的风险。同样,删除卖出税变量或冻结函数,可以防止貔貅盘和黑名单滥用。这些都是二元选择:权限要么存在,要么不存在。
  9. 市场结构决定了执行顺序。在顺序处理中,区块内的第一笔买单能拿到最优价格。批量清算机制将一个时间窗口内的交易归为一组,并以统一的清算价格一次性全部执行。这就消除了批次内的抢先交易和三明治攻击,因为每笔订单的价格都相同:抢先一步,或者包夹他人的订单,都赚不到任何东西。
  10. 有些风险可以被限定,但无法消除。持有40%供应量的创建者可以抛售,让早期买家遭遇价格暴跌。代码可以锁定创建者的筹码或为其设置解锁期,但无法阻止已解锁的持有者卖出。这是市场风险,与盗窃不同。在更早的区块买入也仍然可能有利可图。设计者必须接受,大户带来的波动是无需许可市场的固有特征,而不是可以修补的漏洞。
  11. 社会工程存在于代码库之外。钓鱼链接、冒充账号和付费推广利用的是人的信任,而非计算层面的漏洞。没有任何智能合约能够验证一个网红在喊单之前是否披露了自己的持仓。无论技术安全做得多好,这些攻击都会持续存在,因为它们作用于注意力与信念,而不是状态转换。
  12. 一份诚实的设计文档会列出:哪些攻击类别由代码消除,哪些由市场机制化解,哪些仍归结于人的行为、无法消除。它会明确写明:铸币滥用不可能发生;三明治攻击可通过批处理缓解;网络钓鱼仍是个人的安全责任。这种透明度让用户能够准确地为自身风险定价,而不是假定绝对安全。
  13. 打开区块浏览器,找到一个源代码已验证的 EVM 代币,查找 `mint`、`pause` 或 `owner` 等函数;在 Solana 上,则改为检查铸币权限、冻结权限以及程序的升级权限。确认这些函数是任何人都能调用,还是仅限于特定地址。如果不存在这类函数且合约不可升级,那么这些攻击向量在结构上就不存在,而不仅仅是被禁用。

关键事实

  • 合约层滥用包括开发者保留的铸币权限、冻结权限以及可升级代理。
  • 三明治攻击利用受害者在同一区块内的大额兑换所造成的价格冲击获利。
  • 女巫钱包让一个主体控制多个地址,以薅取按钱包发放的奖励。
  • 刷量交易会虚增交易量指标,通常发生在同一实体控制的多个钱包之间。
  • 网络钓鱼等社交层攻击利用的是用户的信任,仅靠合约代码无法防范。
  • 移除管理员密钥可以消除特定的攻击途径,但也会失去紧急维护能力。
  • 从合约代码中移除铸币权限,可以消除失控增发这一攻击向量。
  • 批量清算为批次中的每笔订单赋予相同的价格,从而消除了在批次中先处理订单所带来的优势。
  • 卖出税和冻结函数可以造就貔貅盘;没有它们就堵住了这些途径,不过黑名单、转账上限和隐藏逻辑也能达到同样效果。
  • 创建者抛售属于市场风险而非盗窃,若不限制持币者的权利,就无法通过代码阻止。
  • 网络钓鱼和冒充身份利用的是人的信任,无法通过协议设计消除。
  • 诚实的设计文档会明确将风险归类为已消除、已化解或无法消除。

练习 九、六、三、一

9收集列出9种不同的市场滥用行为,并注明每种属于哪一层(合约层、结构层、排序层、活动层、社交层、钱包层)。
6归类按照能够阻止它们的防御类型,将这9种滥用行为归为6组。
3提炼将这6组归纳为3个根本原因,说明为何在已有技术防护措施的情况下,这些攻击依然存在。
1凝结用一句话说明:是否存在完全没有攻击面的无需许可市场?为什么?

事实核查

日期、数字及数据均依据下方列出的已发表资料进行核实。

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS