欢迎光临散文网 会员登陆 & 注册

论文解读——Securify: Practical Security Analysis of Smart Contracts

2022-05-26 13:21 作者:安静的秃头怪  | 我要投稿


完整流程

Securify分三个步骤进行:

  1. 将合约的EVM字节码反编译成静态的单一赋值形式( SSA——static-single assignment);

  2. 将SSA形式的代码转为基本事实(base facts)并推断关于合约的其他语义事实(semantic facts);

  3. 匹配由特定领域语言(DSL)编写的各种安全属性,输出对应模式并整合成安全报告。

Securify流程示意图

Securify检测结果分类图

安全模式匹配结果分为真阳性(violation)、假阳性、真阴性(compliance、no violation)、假阴性。对于真阳性与真阴性Securify都能直接给出准确结果,而对于假阳性与假阴性Securify只能在报告中给出警告标识(warning),之后通过额外人工或其他检测方式继续识别确定。

SSA

先讲讲SSA是什么东西。静态单一赋值形式(SSA)是中间表示(IR)的属性,它要求每个变量只分配一次,并且每个变量在使用之前定义。原始IR中的现有变量被拆分为版本,新变量通常由原始名称用下标表示,以便每次定义都有自己的版本。(注:在本方案中部分操作码如push、dup等会被消除)

base fact

当EVM字节码反编译成SSA形式的中间表示之后,我们需要将其转换成基本事实。

表示形式:一种Datalog语言(stratified Datalog)

上图即一个基本事实的表示,其中instr是指令名称,L是指令标签(CFG中的基本块),Y是存储指令结果的指令(如果有的话),Xn是参数。

semantic fact

接着我们用基本事实推断出语义事实。

在智能合约的语义分析中,我们通常需要根据两种依赖关系来推断语义事实(流控制依赖+数据控制依赖)。

流控制依赖的两种语义事实

MayFollow(L_%7B1%7D%20%2CL_%7B2%7D)意思是存在某条路径使得L1基本块流向L2基本块。

MustFollow(L_%7B1%7D%2CL_%7B2%7D%20%20)意思是对任何路径都是L1基本块流向L2基本块。

数据控制依赖的三种语义事实

MayDepOn(Y%2CT)意思是数据T修改了,数据Y也可能跟着被修改。

Eq(Y%2CT)意思是数据Y和数据T是相等的。

DetBy(Y%2CT)意思是数据T不同的取值会导致数据Y的取值不同。

语义事实推断规则1
语义事实推断规则2
语义事实推断规则3

注:

  1. 使用通配符(_)来代替在规则中只出现一次的变量

  2. isConst、Taint、join是其他谓词表达,与op、mload、mstore、goto同样属于基本事实的表达。

trace、property

trace解释
property解释

结论:

trace:指区块链从一个老状态更新到新状态,状态包括存储和内存状态、堆栈状态、事务信息和块信息。

property:指在trace上的一种关系,用一阶逻辑规则定义。

DSL(领域专用语言domain specific language)

表示形式:一个由DSL表示的BNF合取范式
两种安全模式的表达
  • some+BNF合取范式:一部分路径符合条件

  • all+BNF合取范式:全部路径符合条件

security patterns of properties

7种属性及其安全模式

pattern classification

安全模式分类解释
  • instruction patterns:指令模式,即由某条指令导致违反该安全属性(例如上图中后6个安全模式)。

  • contract pattern:合约模式,即因为整个合约的整体原因导致违反该安全属性(很难找出一个单一的指令对其违反负责,例如上图中第一个安全模式)。

Securify2.0

https://github.com/eth-sri/securify2

文章传送:https://arxiv.org/pdf/1806.01143.pdf


论文解读——Securify: Practical Security Analysis of Smart Contracts的评论 (共 条)

分享到微博请遵守国家法律