[论文笔记]程序分析研究进展

[论文笔记]程序分析研究进展

摘 要: 在信息化时代,人们对软件的质量要求越来越高.程序分析是保障软件质量的重要手段之一,日益受到学术界和产业界的重视.介绍了若干基本程序分析技术(抽象解释、数据流分析、基于摘要的分析、符号执行、动态分析、基于机器学习的程序分析等),特别是最近 10 余年的研究进展.进而介绍了针对不同类型软件(移动应用、并发软件、分布式系统、二进制代码等)的分析方法.最后展望了程序分析未来的研究方向和所面临的挑战.
关键词: 程序分析;软件质量保障;静态分析;动态分析

程序分析:对计算机程序进行自动化的处理,以确认或发现其特性,比如性能、正确性、安全性等

主要的程序分析技术

[论文笔记]程序分析研究进展_第1张图片

抽象解释:抽象解释是一种对程序语义进行可靠抽象(或近似)的通用理论

数据流分析:通过分析程序状态信息在控制流图中的传播来计算每个静态程序点(语句)在运行时可能出现 的状态.

基于摘要的过程间分析:**摘要(summary)**是可复用的程序模块分析结果,能够简要地刻画模块的外部行为.创建摘要和利用摘要开展分析的过程称为摘要分析.

符号执行:符号执行是一种相对精确的程序分析技术.传统的符号执行技术使用符号化输入代替实际输入以模拟执行(不实际执行)被分析程序,程序中的操作被转化为相应的符号表达式操作.在遇到条件语句时,程序的执行也相应地分叉以探索每个分支,分支条件则被加入到当前路径的路径条件(path condition)中.通过调用 SAT/SMT 求解器,对路径条件的可满足性进行求解来加以判断:如果判定结果为可满足,则说明路径实际可行(存在具体输入能够让程序产生此路径);如果判定结果为不可满足,则表明此路径不可行,终止对该路径的分析. #限制因素:路径空间爆炸和约束求解

动态分析 :动态分析是指通过在指定测试用例下运行给定的程序,并分析程序运行过程或结果,用于缺陷检测等.

基于机器学习的程序分析:通常是利用机器学习的方法对符号执行得到的结果进行优化,比如优化模型的解或者是减少误报率,优化上下文识别算法等

面向特定软件的程序分析技术

移动应用软件

  • 污点分析技术 :移动应用的安全性分析常常可以归结为应用代码上跟踪敏感数据流的动态/静态污点分析(taint analysis)问题 动态污点分析主要是在应用的 Java 字节码的解释执行过程中进行动态插桩,以实施对敏感数据的跟踪分析 静态污点分析对程序代码模拟执行
  • 面向移动应用特性的程序分析技术
  • 移动应用分析辅助技术

并发软件

  • 全面调度
  • 限定调度
  • 启发式调度
  • 误报与漏报

分布式系统

  • 分布式系统中缺陷的实证研究
  • 基于动态/静态分析的分布式系统缺陷检测
  • 分布式系统验证与模型检验
  • 基于失效注入的分布式系统分析技术

二进制代码

二进制分析的首要任务是反汇编,即识别二进制程序中的代码和数据,解析函数间调用关系,及函数内的控制流图.另一个难题是高级语义恢复

二进制程序分析通常需要对二进制程序进行代码插装或改写.主流有 3 类二进制插装方案:

  • 在原始二进制程序中直接静态修改(挑战:反汇编的准确率)
  • 将二进制程序提升到中间表示中进行修改
  • 在代码执行过程中动态修改.(通过受控的执行环境,在目标基本块、函数等执行之前)

讨论与展望

面向智能合约的程序分析

符号执行技术可以被用于在字节码层面检测智能合约中的已知类型的潜在漏洞

由于智能合约代码量比较小,使得对其使用形式化技术成为可能,甚至有工作直接将智能合约转换为已有验证系统所能支持的形式,借助已有验证系统快速形成了对智能合约的分析能力

挑战:由于智能合约部署之后的升级维护比较困难,难以像普通程序一样进行补丁修补,所以希望在智能合约部署之前就发现所有潜在的安全问题;另外,如何有效地提供分析所需的安全模式或属性也是面向智能合约的程序分析技术要解决的问题。

面向机器学习软件的程序分析

通过程序分析的方法发现机器学习系统中的潜在安全问题

由于广泛存在的概率模型、多层传播的复杂网络结构、黑盒形式的用户接口等特性,深度学习工具的质量难以度量.现有的软件分析技术难以直接应用

总结

收获:在读其他论文的时候会遇到一些程序分析相关概念,由于对这些概念或者方法不是很熟悉,所以在看论文的时候经常会卡在某个地方不太好理解。通过程序分析研究进展综述文献的阅读,了解了目前程序分析研究的进展情况,同时也对程序分析的相关概念和基本方法有了一个大体的认识,对之前阅读的fuzzing相关文献中的一些不太明白的细节也有了更深的体会。

问题:

1.在阅读这篇文献关于程序分析方法基础理论(如抽象解释,约束求解)部分的时候看那些概念还是比较晦涩,感觉对于这些基础理论方法也不是很理解。相对来说约束求解还是要比抽象解释容易理解一点。

2.文章中所提到的对于移动应用软件的的程序分析大多是通过对程序控制流的分析判断有没有进行可能导致用户隐私泄露的敏感操作,但是移动应用软件中的恶意代码也不少,要怎么通过软件分析的方法来检测这些代码的攻击行为?

3.并发软件这部分,对操作系统调度的知识已经忘记很多了,在读这部分论文的时候对涉及到调度的知识看得不是很明白。程序在并发执行的时候存在很多不同的状态,这些状态是不是都能通过程序分析的方法分析到

你可能感兴趣的:(论文笔记,程序设计)