Skip to content

Latest commit

 

History

History
238 lines (155 loc) · 11.3 KB

README_CN.md

File metadata and controls

238 lines (155 loc) · 11.3 KB

基于区块链的加密货币安全审计指南

Twitter URL

English Version

1. 加密货币威胁建模

SlowMist 使用多种模型来识别加密货币系统存在的威胁。

CIA 三元组:保密性、完整性和可用性性 (Confidentiality, Integrity and Availability),这是安全基础架构中主要的安全目标和宗旨。

STRIDE 模型:Spoofing(欺骗)、Tampering(篡改)、Repudiation(否认)、Information Disclosure(信息泄露)、Denial of Service(拒绝服务)、Elevation of Privilege(提权)。

DREAD 模型:Damage potential(潜在损害)、Reproducibility(可重现性)、Exploitability(可利用性)、Affected users(受影响用户)、Discoverability(可发现性)。

PASTA:定义目标、定义技术范围、分解应用程序、分析威胁、识别漏洞、列举攻击、分析风险和影响。

2. 测试方法

测试方法如下:

测试方法 描述
黑盒测试 黑盒测试从用户角度检查程序,通过提供多种输入场景并检查输出。黑盒测试人员没有内部代码的访问权限。系统交付前进行的最终验收测试是黑盒测试的一个常见例子。
灰盒测试 灰盒测试结合了两种方法,在软件验证中很受欢迎。在这种方法中,测试人员从用户角度检查软件,分析输入和输出。他们还可以访问源代码,并利用它来帮助设计测试。然而,他们在测试期间不会分析程序的内部工作。
白盒测试 白盒测试检查程序的内部逻辑结构,逐行分析代码,查找潜在错误。

在黑盒测试和灰盒测试中,我们使用模糊测试、脚本测试等方法,通过提供随机数据或构建特定结构的数据来测试接口或组件的鲁棒性,挖掘一些边界条件下的系统异常行为,如 bug 或性能异常。在白盒测试中,我们通过代码审查等方法分析代码的对象定义和逻辑实现,结合安全团队在已知区块链安全漏洞上的相关经验,确保代码中的关键逻辑和关键组件没有已知漏洞;同时,进入新场景和新技术的漏洞挖掘模式,发现可能的 0day 错误。

3. 漏洞严重性

通用漏洞评分系统(CVSS)是一个用于传达软件漏洞特征和严重性的开放框架。CVSS 由三个指标组组成:基础、时间和环境。基础组代表漏洞的内在质量,这些质量在时间和用户环境中是恒定的;时间组反映漏洞随时间变化的特征;环境组代表用户环境中独特的漏洞特征。基础指标生成的分数范围为 0 到 10,然后可以通过对时间和环境指标评分进行修改。CVSS 分数还表示为矢量字符串,矢量字符串是用于导出分数的值的压缩文本表示。

根据 CVSS 方法,SlowMist 团队开发了区块链漏洞严重性级别,如下所示:

级别 描述
严重 严重级别漏洞将对区块链项目的安全产生重大影响,强烈建议修复严重漏洞。
高级别漏洞将影响区块链项目的正常运行,强烈建议修复高风险漏洞。
中级别漏洞将影响区块链项目的运行,建议修复中风险漏洞。
低级别漏洞可能在某些场景下影响区块链项目的运行,建议项目方评估并考虑是否需要修复这些漏洞。
弱点 理论上存在安全风险,但在工程上极难重现。
建议 有更好的编码或架构实践。
信息 一些符合项目设计意图,但可能会导致用户资产损失的特性。

4. 公链安全研究

SlowMist 团队的 区块链威胁情报 系统持续追踪正在发生的安全事件,并将威胁情报应用于安全咨询与审计服务中。

SlowMist 团队对公开已知的区块链安全漏洞进行分析研究,汇编整理出了区块链常见漏洞列表

5. 公链安全审计

SlowMist 团队的公链安全审计综合使用了黑盒、灰盒、白盒三种测试方法,同时根据审计需求不同,推出了以黑灰盒审计为主的主网安全审计、layer2 安全审计,和以白盒审计为主的源代码安全审计,同时为一些开发框架定制应用链安全审计方案。

5.1 Layer1 & layer2 主网安全审计

在 layer1 & layer2 主网安全审计中,SlowMist 团队采用“黑盒 + 灰盒”策略,以最接近真实攻击的方式对项目进行快速的安全测试。

SlowMist 团队检查的漏洞包括:

  • 私钥随机数熵不足
  • 私钥种子转换精度损失
  • 对称加密算法的理论可靠性评估
  • 对称加密算法依赖库的供应链安全
  • 密钥库加密强度检测
  • 哈希算法长度扩展攻击
  • 哈希算法的理论可靠性评估
  • 签名算法的理论可靠性评估
  • secp256k1 k 值随机性安全
  • secp256k1 r 值重用私钥提取攻击
  • ECC 签名的可塑性攻击
  • ed25519 私钥提取攻击
  • Schnorr 私钥提取攻击
  • ECC 曲线攻击
  • Merkle 树可塑性攻击(CVE-2012-2459)
  • 原生特性虚假充值
  • 基于合约调用的虚假充值
  • 原生链交易重放攻击
  • 跨链交易重放攻击
  • 交易锁定攻击
  • 交易费用未动态调整
  • RPC 远程密钥盗窃攻击
  • RPC 端口可识别性
  • RPC 开放跨域漏洞导致本地钓鱼攻击
  • JsonRPC 畸形包拒绝服务攻击
  • RPC 数据库注入
  • RPC 通信加密
  • 过度的管理员权限
  • 非隐私/非暗币审计
  • 核心节点数量不足
  • 核心节点物理位置过度集中
  • P2P 节点最大连接数限制
  • P2P 节点独立IP连接限制
  • P2P 入站/出站连接限制
  • P2P 变形攻击
  • P2P 通信加密
  • P2P 端口可识别性
  • 共识算法潜在风险评估
  • 区块时间偏移攻击
  • 矿工磨矿攻击
  • PoS/BFT 双重签名惩罚

5.2 源代码安全审计

源代码安全审计是指 SlowMist 团队采用“白盒”策略,对项目的相关源代码进行最全面的安全测试。白盒审计通常需要结合自动化静态代码分析和人工手动分析两种形式。

5.2.1 静态源代码分析

SlowMist 团队使用开源或商业代码扫描工具对代码进行静态扫描,并人工解析发现的问题,我们支持所有流行语言,如 C/C++/Golang/Rust/Java/Nodejs/C#

SlowMist 团队检查的静态编码问题有:

  • 未使用的变量或导入 - 声明但未使用的变量或导入模块。

  • 代码格式问题 - 缩进不一致、行长度过长等。

  • 资源未正确关闭 - 如文件、数据库连接等未关闭。

  • 魔法数字 - 直接使用数字常量而非命名常量。

  • 潜在的安全漏洞 - 如SQL注入、XSS等安全隐患。

  • 整数溢出 - 当计算结果超出整数类型的范围时可能导致意外行为。

  • 浮点数精度问题 - 由于浮点数表示的限制,可能导致计算误差。

  • 死锁 - 多线程编程中,线程互相等待对方释放资源而陷入僵局。

  • 竞态条件 - 多线程或并发环境下,程序的行为依赖于不可控的执行顺序。

  • 内存泄漏 - 动态分配的内存未被正确释放,导致程序占用的内存持续增加。

  • 无限递归 - 递归函数没有正确的终止条件,导致栈溢出。

  • 字符串格式化漏洞 - 不安全的字符串格式化可能导致安全问题。

  • 除零错误 - 在除法运算中未检查除数是否为零。

  • 空指针解引用 - 试图访问空指针指向的内存位置。

  • 缓冲区溢出 - 向缓冲区写入超出其容量的数据,可能导致安全漏洞。

  • 类型转换错误 - 不当的类型转换可能导致数据丢失或不正确的结果。

  • 硬编码密钥或敏感信息 - 将密钥或敏感信息直接写入代码中,可能导致安全风险。

  • 代码复杂度过高 - 函数或方法过长,逻辑分支过多。

  • 代码重复 - 相同或相似的代码段在多处出现。

  • 命名不规范 - 变量、函数、类等命名不清晰或不一致。

  • 注释不足或过时 - 缺乏必要的注释,或注释与代码不符。

  • 耦合度高 - 模块间依赖关系复杂,难以维护和扩展。

  • 低内聚 - 模块或类的功能不够集中,职责不明确。

  • 异常处理不当 - 捕获过于宽泛的异常,或忽略异常。

  • 硬编码 - 直接在代码中使用常量值,而非配置参数。

  • 代码格式不一致 - 缩进、空格使用等不统一。

  • 性能问题 - 如不必要的循环、频繁的对象创建等。

  • 可测试性差 - 代码难以进行单元测试或集成测试。

  • 违反设计原则 - 如单一职责原则、开闭原则等。

  • 可读性差 - 代码结构混乱,难以理解。

  • 不安全的随机数生成 - 使用不适合安全用途的随机数生成方法。

  • 时间和状态问题 - 如TOCTOU(Time-of-check to time-of-use)漏洞。

  • 路径遍历 - 未正确验证文件路径,可能导致访问未授权的文件。

  • 依赖库过时 - 引入的库已失去维护或存在安全漏洞。

5.2.2 手动代码审查

SlowMist 团队逐行检查代码,查找编码缺陷和逻辑错误,我们关注的漏洞范围主要包括:

  • 加密签名安全

  • 账号与交易安全

  • RPC 安全

  • P2P 安全

  • 共识安全

  • 业务逻辑安全

5.3 应用链安全审计

SlowMist 团队采用“白盒”策略,对项目进行全面的安全测试,寻找常见的编码陷阱,如:

  • 重放漏洞
  • 重新排序漏洞
  • 竞态条件漏洞
  • 权限控制漏洞
  • 块数据依赖漏洞
  • 函数显式可见性
  • 算术精度偏差漏洞
  • 恶意事件日志
  • 异步调用安全

目前我们支持:

  1. 基于 Cosmos-SDK 框架的区块链审计
  2. 基于 Substrate 框架的区块链审计

6. 区块链应用审计

6.1 智能合约安全审计

  1. Ethereum(Solidity) 智能合约安全审计
  2. EOS(C++) 智能合约安全最佳实践
  3. Solana(Rust) 智能合约安全最佳实践
  4. Near 智能合约安全审计
  5. Sui Move 智能合约安全审计
  6. Aptos Move smart contract security audit
  7. Ton 智能合约安全审计

6.2 其他应用

  1. 零知识电路安全审计
  2. 跨链桥应用安全审计
  3. 浏览器插件钱包安全审计
  4. 交易所安全审计

7. 公开的审计报告

参考 Knowledge-Base