基于符号抽象的程序分析

原文来自微信公众号“编程语言Lab”:基于符号抽象的程序分析
搜索关注“编程语言Lab”公众号(HW-PLLab)获取更多技术内容!
欢迎加入 编程语言社区 SIG-程序分析 参与交流讨论(加入方式:添加小助手微信 pl_lab_001,备注“加入SIG-程序分析”)。

分享嘉宾 | 姚培森@rainoftime

回顾整理 | 纪妙

作者介绍

姚培森 @rainoftime,浙江大学网络空间安全学院特聘研究员,研究领域为程序分析与验证、自动推理。

个人主页:https://rainoftime.github.io/

视频回顾

SIG-程序分析技术沙龙回顾|基于符号抽象的程序分析

前言

软件已经无处不在,软件质量问题也越来越普遍,其造成的系统崩溃、安全漏洞等可能带来经济上的损失,甚至威胁我们的生命。程序分析是保障软件质量的基础技术和重要手段,已被广泛应用于提高软件的可靠性、安全性、性能等多个维度的质量。

今天,我们探讨一类特殊的程序分析方法,基于符号抽象的程序分析。首先我会简单回顾一下 抽象解释 —— 静态分析的核心理论。抽象解释的核心问题之一是,计算程序状态在给定抽象域内的最佳抽象。针对这个问题,我会介绍符号抽象框架以及几个和符号抽象有关的其他话题。

抽象解释

抽象解释是静态分析的核心理论 1,其关键想法是对程序的可达状态做一个上近似。

如下图,假设左边的黄色椭圆代表程序的可达状态 Reachable States,右边的黄色椭圆代表有缺陷的状态 Bad States。我们想验证这个程序是否有缺陷,即 Reachable States 是否可能和 Bad States 相交。
在这里插入图片描述
静态分析可以对程序的可达状态做推理,比如算出一个红色区域。最终红色区域可以完全覆盖左边的黄色区域,因此我们得到了一个上近似。而且我们看到左边红色区域和 Bad States 并不相交,因此我们成功地验证了这个程序是安全的。

1.1 抽象解释的应用

过去 20 多年来,抽象解释在工业界得到了很多应用,以下三个可能是比较有代表性的。

第一个是 Astrée,基于数值域抽象解释,已经成功用于验证航空航天等安全攸关场景的软件。

第二个是 TVLA,主要做形态分析,比如验证垃圾回收算法是否真的回收了内存垃圾。TVLA 把形态分析这个概念给发扬光大了,启发了很多后续工作,比如基于分离逻辑的形态分析。

第三个是 CodeSurfer/x86,它提出的 Value Set Analysis (VSA) 已经成为了二进制静态分析框架的标配。
在这里插入图片描述
此外,抽象解释在学术领域也获得多个荣誉,包括 2013 年 SIGPLAN 的程序语言成就奖, 2018 年的约翰·冯诺依曼奖等。
在这里插入图片描述

左图为 2013 年 SIGPLAN 程序语言成就奖,右图为 2018 年约翰·冯诺依曼奖

1.2 抽象域及其要素

抽象解释会通过抽象域来对程序的状态做数学近似,比如数值域、堆域、字符串域等。其中,数值域可以用来捕捉程序的数值信息,用于查找不同的程序缺陷,包括除零错误、整数溢出等。
在这里插入图片描述
在这里插入图片描述
由于抽象解释是对程序的可达状态做上近似,它往往伴随着一些精度问题。比如我们再次看这个图,右边的黄色区 Bad States 和红色区域 (静态分析的结果) 是相交的,但事实上 Bad States 和左边的黄色区域 Reachable States 并不相交,因此我们的静态分析存在误报。
在这里插入图片描述

1.3 最佳抽象

给定一个抽象域比如区间域,怎么计算程序在该抽象域上的、最精确的上近似呢?事实上,这也是抽象解释理论的一个核心问题:给定一个具体迁移函数 F F F 以及抽象域 A A A,如何得到 F F F A A A 上的最佳抽象 F # F^\# F# (最精确的抽象迁移函数)?

抽象解释理论对 F # F^\# F# 有一个声明式的定义,但是这个定义是“非构造性”的。通常我们没有自动化的算法,去应用最佳抽象迁移函数 F # F^\# F

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值