背景

在 EVM 生态上,存在各式各样的 ERC20 代币,因其实现方式有着极高的自由度,也催生了花样繁多的恶意代币。这些恶意代币通常会在代码中实现一些恶意的逻辑(禁止用户卖出,特权铸造或销毁等),其目的就是骗取用户买入后把用户的钱卷走。

诶!为了解决这个情况,Solana 官方提供了官方的代币模板。你要在 Solana 上发行货币,只需要填写一些基本信息,不需要编写代币逻辑,即可部署一个 SPL 代币。

但是,即使是这种情况, Solana 链上还是存在许多恶意代币,各自用着不同的手法来坑骗代币持有者。所以本篇文章尝试着分析从哪些维度可以判断一个 SPL/SPL2022 代币是否存在安全隐患或恶意倾向。

有关 SPL 和 SPL2022 的背景与定义,读者可阅读官方文档进行了解:https://spl.solana.com/token

SPL 代币

SPL 文档:https://spl.solana.com/token

SPL 代码:https://github.com/solana-labs/solana-program-library/tree/master/token/program

SPL 代币实现了 25 个指令,根据 instruction::TokenInstruction 将 SPL 代币的指令根据功能进行分类总结:

  1. 初始化代币铸造: InitializeMint, InitializeMint2 - 初始化新的代币铸造账户。
  2. 初始化代币账户: InitializeAccount, InitializeAccount2, InitializeAccount3 - 初始化新的代币持有账户。
  3. 初始化多重签名: InitializeMultisig, InitializeMultisig2 - 初始化多重签名账户。
  4. 转账: Transfer, TransferChecked - 在账户之间转移代币。
  5. 授权: Approve, ApproveChecked - 授权委托人使用一定数量的代币。
  6. 撤销授权: Revoke - 撤销对委托人的授权。
  7. 设置权限: SetAuthority - 更改铸造或账户的权限。
  8. 铸造代币: MintTo, MintToChecked - 铸造新代币到指定账户。
  9. 销毁代币: Burn, BurnChecked - 从账户中销毁代币。
  10. 关闭账户: CloseAccount - 关闭代币账户并转移剩余SOL。
  11. 冻结/解冻账户: FreezeAccount, ThawAccount - 冻结或解冻代币账户。
  12. 同步原生代币: SyncNative - 同步包装的SOL账户余额。
  13. 获取账户数据大小: GetAccountDataSize - 获取给定铸造的账户所需大小。
  14. 初始化不可变所有者: InitializeImmutableOwner - 为账户初始化不可变所有者扩展。
  15. 金额转换: AmountToUiAmount, UiAmountToAmount - 在原始金额和UI显示金额之间转换。

当然这么多功能不需全部,我们只需要关注其中的一些有可能为作恶提供条件的功能。

涉及到管理员权限的特殊函数

  1. InitializeMint

    InitializeMint {
    /// Number of base 10 digits to the right of the decimal place.
    decimals: u8,
    /// The authority/multisignature to mint tokens.
    mint_authority: Pubkey,
    /// The freeze authority/multisignature of the mint.
    freeze_authority: COption<Pubkey>,
    },

    参数解释:

    • decimals: 代币的小数位数。
    • mint_authority: 代币铸造权限的地址。
    • freeze_authority: 冻结代币账户的地址(可选)。
  2. SetAuthority

    SetAuthority {
    /// The type of authority to update.
    authority_type: AuthorityType,
    /// The new authority
    new_authority: COption<Pubkey>,
    },

    参数解释:

    • authority_type: 指定要更改的权限类型(有 MintTokens, FreezeAccount, AccountOwner, CloseAccount 四类)。
    • new_authority: 新的权限地址。如果设置为 None,则表示移除该权限。

SPL 代币评价维度

由于 SPL 代币为官方 Program 统一创建,所以在代码层面不作检查。

  1. 权限地址设置,参数设置

    1. freeze_authority 是否配置。如果配置冻结特权账号,则该账户可以对用户的代币进行冻结。
  2. 是否行使了特权账户的权力
    1. FreezeAccount :是否曾经对用户的代币账户进行冻结。

    2. SetAuthority :(MintTokens, FreezeAccount, AccountOwner, CloseAccount) 权限转移。

      1. Mint Program: MintTokens 权限转移, FreezeAccount 权限转移
      2. Token Account: AccountOwner 权限转移, CloseAccount 权限转移

      Account 初始化的 CloseAccount 权限账户为 None,需要账户 owner 先调用 SetAuthority 配置权限账户后再调用 CloseAccount 指令。

SPL 2022 代币

SPL 文档:https://spl.solana.com/token-2022/extensions

SPL 代码:https://github.com/solana-labs/solana-program-library/tree/master/token/program-2022

Token-2022 中的所有新指令都从 Token 的指令后面开始添加。 Token 有 25 条独特的指令,索引从 0 到 24。Token-2022 支持所有这些指令,然后在索引 25 处添加了新的功能。

Mint 扩展目前包括:

  • confidential transfers 保密传输
  • transfer fees 转让费
  • closing mint 关闭铸币厂
  • interest-bearing tokens 生息代币
  • non-transferable tokens 不可转让代币
  • permanent delegate 永久委托
  • transfer hook 转移钩
  • metadata pointer 元数据指针
  • metadata 元数据

Account 扩展目前包括:

  • memo required on incoming transfers 传入转账时需要备注
  • immutable ownership 不可变的所有权
  • default account state 默认帐户状态
  • CPI guard CPI 卫士

SPL 2022 代币评价维度

在 SPL 代币的基础上,添加以下评价维度

  1. 权限地址设置,参数设置

    1. Transfer Fees:Fee 的值是否在合理范围。

    2. Default Account State:初始化的 Account 是否默认冻结状态。如果初始化的 Account 处于冻结状态,则无法进行代币的转移(出售)。

    3. Immutable Owner:用户的 ATA 代币账户的 owner 不允许转移。

  2. 是否行使了特权账户的权力

    1. Non-Transferable Tokens:灵魂代币,不允许转移。

    2. Interest-Bearing Tokens:是否为生息代币(createInterestBearingMint),是否调用(updateRateInterestBearingMint)修改过利息参数。

    3. Permanent Delegate:权限永久委托情况,被委托的账户拥有向任意账户铸造代币和销毁任意账户代币的权限。

    4. CPI Guard:代币是否采用了 CPI Guard 功能(createEnableCpiGuardInstruction)来防止非常规的调用,启用(enableCpiGuard),禁止(disableCpiGuard)

  3. 代码实现是否存在恶意逻辑

    1. Transfer Hook:重点关注 Hook program 的业务逻辑是否存在作恶的可能。Hook program 由管理员部署与指定,在进行代币转移时会调用 Hook program,执行额外的业务逻辑。

案例分析

SPL2022 恶意代币:https://solscan.io/token/Bz7vBYYuNuK8Y4KRTjaunFFAjzVbAiE1mFM9EGnZ8SHU

从交易的行为来看,这个代币的作恶手段是在用户获得代币后,利用特权账户销毁用户的所有代币。

这就涉及到了 SPL2022的“永久委托”功能,该功能允许委托人“mewfbQ”在任何账户中铸造或销毁代币。这是滥用特权的恶意行为。

可以从浏览器的信息看到,Permanent Delegate 的账户设置为了 mewfbQ 地址,正是通过这个账户进行了恶意的操作。

【技术分析】恶意 SPL 代币识别指南的更多相关文章

  1. 3D动态人脸识别技术分析——世纪晟人脸识别实现三维人脸建模

    - 目录 - 国内3D动态人脸识别现状概况 - 新形势下人脸识别技术发展潜力 - 基于深度学习的3D动态人脸识别技术分析 1. 非线性数据建模方法 2. 基于3D变形模型的人脸建模 - 案例结合——世 ...

  2. 美链BEC合约漏洞技术分析

    这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈.这篇文章就来分析下BEC智能合约的漏洞 漏洞攻击交易 我们先来还原下攻击交易,这个交易可以在这个链接查询到. 我截图给大家 ...

  3. NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案

    原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...

  4. 2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析

    2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析 实验内容(概要) 一.系统(联网)运行监控 1. 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,逐步排查并且 ...

  5. 20145226夏艺华 网络对抗技术EXP4 恶意代码分析

    20145226夏艺华 网络对抗技术EXP4 恶意代码分析(未完成版) 回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作 ...

  6. 【项目】关于TeenCode第二代评测机的技术分析

    晚上睡不着觉,仔细研读了洛谷的第四代评测机技术分析后,突然发现自己写的TeenCode评测机竟然有这么多地方可以改进,这不得不让我诞生了实现第二代TeenCode评测机的想法.[第一代评测机挺可怜的, ...

  7. 数字代币ICO

    随着比特币.莱特币.以太币的逐步兴起,越来越多的数字代币开始衍生,虚拟货币扑朔迷离,一不小心就被人割了韭菜..... 从荷兰IPO的故事说起 400多年前,西方有一群精英海盗开了一家公司.为了顺利拓展 ...

  8. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

    原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos ...

  9. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  10. 一步步教你创建自己的数字货币(代币)进行ICO

    本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 ...

随机推荐

  1. 【Java】JNDI实现

    前提情要: 培训的时候都没讲过,也是书上看到过这么个东西,进公司干外包的第二个项目就用了这个鬼东西 自学也不是没尝试过实现,结果各种失败,还找不到问题所在,索性不写了 JNDI实现参考: 目前参考这篇 ...

  2. 【Git】介绍与概述

    版本控制工具应该具备的功能? 协同修改 多人并行不悖的修改服务器端的同一个文件. 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态. 版本管理 在保存每一个版本的文件信息的时候 ...

  3. 终端无人机武器的克星——部署反无人机干扰机之后 —— 武器AI化势在必行

    相关: 观察者网一周军评:俄乌战争对未来无人机发展影响 俄乌战争中无人机有了突出的表现,这种类似巡飞弹的无人机工具有着高可控性.易操作.廉价.易制造等优势,依靠这种攻击性的小型无人机往往具有极高的性价 ...

  4. x86_64 ubuntu22.04环境下编译版本python3.13.0 alpha 0源码——python3.13.0 alpha 0的源码编译

    python3.13.0 alpha 0版本源码编译: 环境--x86_64 ubuntu22.04系统: 1. 源码下载: git clone https://github.com/python/c ...

  5. C# 命名空间和程序集 小记

    前言 本文只是为了复习,巩固,和方便查阅,一些知识点的详细知识会通过相关链接和文献标记出来. 命名空间 1.1 概念 可以把命名空间看做字符串,他加在类名或类型名前面并且通过点进行分割 既然看做是字符 ...

  6. 解决input自动填充账号密码时的背景色

      input:-webkit-autofill { box-shadow:0 0 0 1000px white inset !important; } input:-internal-autofil ...

  7. springboot2集成oauth2坑二(The bean 'scopedTarget.oauth2ClientContext', defined in class path resource )

    码云地址:https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com. 由于使用Enableoauth2sso注解一直报错, ...

  8. FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构

    ​音视频技术的一个主要用途是直播,包括电视直播.电脑直播.手机直播等等,甚至在线课堂.在线问诊.安防监控等应用都属于直播系统的范畴.由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传 ...

  9. 【原创】vagrant up 异常报错,出现 There was an error while executing `VBoxManage` 的解决方法

    最近在使用 vagrant homestead 时,不小心在虚拟机上使用了 exit 命令退出虚拟机,导致再使用 vagrant up 时出现以下错误: Bringing machine 'larav ...

  10. java_GUI_监听事件关闭窗口_AWT

    package Panel;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEven ...