前言

符号执行 (Symbolic Execution)是一种程序分析技术,它可以通过分析程序来得到让特定代码区域执行的输入。顾名思义,使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。

符号执行理解

以下面的源代码为例子:

int m=M, n=N, q=Q;

int x1=0,x2=0,x3=0;

if(m!=0)

{

x1=-2;

}

if(n<12)

{

if(!m && q)

{

x2=1;

}

x3=2;

}

assert(x1+x2+x3!=3)

上述代码是一个简单的c语言分支结构代码,它的输入是M,N,Q三个变量;输出是x1,x2,x3的三个变量的和。我们这里设置的条件是想看看什么样的输入向量的情况下,得到的三个输出变量的和等于3.

符号执行

如果把结果条件更改为漏洞条件,理论上也是能够进行漏洞挖掘了。对于如何根据最终得到的结果求解输入向量,已经有很多现成的数学工具可以使用。上述问题其实可以规约成约束规划的求解问题(更详细的介绍看这里:Constraint_programming )。比较著名的工具比如SMT(Satisfiability Modulo Theory,可满足性模理论)和SAT。

静态符号执行具体流程

符号执行分为过程内分析和过程间分析(又称全局分析)。过程内分析是指只对单个过程的代码进行分析,全局分析指对整个软件代码进行上下文敏感的分析。所谓上下文敏感分析是指在当前函数入口点要考虑当前的函数间调用信息和环境信息等。程序的全局分析是在过程内分析的基础上进行的,如果过程内分析中包含了函数调用,就引入了过程间分析,因此两者之间是相对独立又相互依赖的关系

过程内分析流程

程序全局分析流程

动态符号执行(concolic)(混合符号执行)

符号执行在发展过程中出现了一种叫做动态符号执行的方法(concrete and symbolic, concolic)。动态符号执行是以具体数值作为输入来模拟执行程序代码,与传统静态符号执行相比,其输入值的表示形式不同。动态符号执行使用具体值作为输入,同时启动代码模拟执行器,并从当前路径的分支语句的谓词中搜集所有符号约束。然后修改该符号约束内容构造出一条新的可行的路径约束,并用约束求解器求解出一个可行的新的具体输入,接着符号执行引擎对新输入值进行一轮新的分析。通过使用这种输入迭代产生变种输入的方法,理论上所有可行的路径都可以被计算并分析一遍。

动态符号执行相对于静态符号执行的优点是每次都是具体输入的执行,在模拟执行这个过程中,符号化的模拟执行比具体化的模拟执行的开销大很多;并且模拟执行过程中所有的变量都为具体值,而不必使用复杂的数据结构来表达符号值,使得模拟执行的花销进一步减少。但是动态符号执行的结果是对程序的所有路径的一个下逼近,即其最后产生路径的集合应该比所有路径集合小,其实concolic执行使用了深度优先的搜索策略。

参考:

https://www.k0rz3n.com/2019/02/28/%E7%AE%80%E5%8D%95%E7%90%86%E8%A7%A3%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C%E6%8A%80%E6%9C%AF/

https://zhuanlan.zhihu.com/p/26927127

漏洞挖掘 符号执行_简述符号执行相关推荐

  1. 漏洞挖掘 符号执行_漏洞挖掘新思路:fuzz+符号执行——driller

    driller 符号执行+fuzz漏洞挖掘思路 先看一段程序 int main() { config_t* config=read_config(); if (config==null){ puts( ...

  2. 漏洞挖掘 符号执行_基于符号执行的二进制代码漏洞发现

    基于符号执行的二进制代码漏洞发现 牛伟纳 ; 丁雪峰 ; 刘智 ; 张小松 [期刊名称] <计算机科学> [年 ( 卷 ), 期] 2013(040)010 [摘要] 软件漏洞是安全问题的 ...

  3. 模糊测试+符号执行等漏洞挖掘工具安装使用

    漏洞挖掘工具 符号执行 KLEE QSYM driller+AFL symcc+AFL 模糊测试 AFL AFLGO AFL++ honggfuzz 隔离了一周,解封了随便写点东西吧 符号执行 KLE ...

  4. c++ 界面交互影响处理代码执行速度_原创 | 某SCADA的远程代码执行漏洞挖掘与利用...

    作者 | 绿盟科技格物实验室 陈杰 前言 近年来网络安全形势日渐严峻,国内外都开始对工控安全越来越重视,而工控领域由于常年来对安全的忽视,导致暴露出数量惊人的严重安全漏洞,更为严重的是,相当一部分厂商 ...

  5. 二进制漏洞挖掘_漏洞挖掘的艺术-面向二进制的静态漏洞挖掘

    本文首发于"合天智汇"公众号 作者: 萌新 0 本文是本系列的第二篇,将对面向二进制程序的静态漏洞挖掘技术进行介绍与分析. 面向二进制程序的静态漏洞的挖掘技术由于缺少源代码中的结构 ...

  6. 漏洞 立即留言_漏洞挖掘小白入坑指南

    文章出处:FreeBuf 文章链接:http://www.freebuf.com/articles/neopoints/144967.html 写在前面的话在此之前,很多朋友都曾通过电子邮件在我直播的 ...

  7. 漏洞挖掘之乱拳打死老师傅——Fuzzer

    背景 Fuzzer是一种通过产生一系列非法的.非预期的或者随机的输入向量给目标程序,从而完成自动化的触发和挖掘目标程序中的安全漏洞的软件测试技术.相比于形式化的软件漏洞测试技术(比如,符号执行技术 ) ...

  8. delphi 调用浏览器内核_HFL:基于混合模糊测试的Linux内核漏洞挖掘

    Remarks Conference: NDSS 2020 Full Paper: HFL: Hybrid Fuzzing on the Linux Kernel Summary 针对的问题: Lin ...

  9. 基于固件的漏洞挖掘方法梳理

    相关论文 方案 2013 Fie on firmware: Finding vulnerabilities in embedded systems using symbolic execution, ...

最新文章

  1. pci驱动与硬件通信
  2. 重置UNDO 表空间.
  3. docker快速入门01——docker安装与简单应用
  4. DotNet 资源大全
  5. 使用Azure Pipelines从GitHub发布NuGet包
  6. 自定义Spring Data JPA存储库
  7. istview android:cacheColorHint,android:listSelector属性作用(转)
  8. 2007年11月网络工程师考试试题答案
  9. 尚硅谷Linux视频学习建议贴及linux全套视频,运维版本180G高质量视频教程免费下,linux教程
  10. canal下载 linux_阿里canal数据库同步ES使用
  11. 6.4两种给定两个均不超过9的正整数k和n,要求编写程序求k+kk+kkk++…+kk…k (n个k,不是n个k乘积)之和
  12. Android MediaPlayer+Stagefright框架(音频)图解
  13. 计算机开机加载后进入不了xp,xp电脑开机后进不了系统怎么办
  14. Rust编程语言入门教程(二)-核心概念(所有权(Ownership) 和生命周期)、变量声明(遍历数组)
  15. 设计一款照片一键加水印的小工具
  16. 数据挖掘技术-主键合并数据准备数据
  17. 探讨!自媒体的推荐机制提高百家号阅读收益方法!
  18. Java-汉字字符串转拼音,包括首字母和全拼
  19. 信用评分与数据挖掘(一~七)
  20. web前端 day11今日大纲

热门文章

  1. ActiveMQ入门案例-生产者代码实现
  2. os.chdir 的作用是什么_为什么宝宝有事都愿意找妈妈?爸爸也要尽到责任才行
  3. centos7 开机延迟几分钟后自启动
  4. C++设计模式--模板方法模式
  5. java如何爬取304_HTTP 304错误的详细讲解
  6. Git 之一 起源、安装、配置
  7. jQuery选择器介绍:基本选择器、层次选择器、过滤选择器、表单选择器
  8. 路由器(结构、分组转发流程、路由选择协议(RIP、OSPF、BGP))
  9. leaflet大量marker卡顿_leaflet如何加载10万数据
  10. 计算机网络知识培训计划,计算机网络管理员教学计划和大纲