污点分析面临 2 个问题:污染过度(overtainting)和污染缺失(undertainting)。
其中,污染过度是将一个与污点输入无依赖关系的数据变量标记为污点属性,即产生误报。
而污染缺失则是在污点传播过程中遗漏了与污点输入有依赖关系的程序变量标记为无污点属性,即产生了漏报。
其中控制依赖关系(隐式流)是常见的造成漏报和误报的原因。

隐式流

污点分析主要考虑 2 种信息流,显式流(explicit flow)和隐式流(implicit flow)。
显示流对应于程序的数据依赖关系,即变量x的污点信息直接传递(通过赋值或算数运算)给变量y;
隐式流对应于程序的控制依赖关系,即变量x的污点信息通过包含x的条件表达式间接传递给变量y。

隐式流示例代码1:

begin
L1 x = get_input();
L2 msg = uri = ‘’;
L3 if (x == ‘a’){
L4  uri = ‘post’;
L5  msg = ‘a’;
L6 }
L7 else if (x == ‘b’){
L8  uri = ‘post’;
L9  msg = ‘b’;
L10 }
L11 send(uri, msg);
end

在上述代码中,程序读入用户输入变量x,生成msg通过post方法提交。
x 的污点标记为 tainted 属性,按照显式流污点分析方法,msg 赋值为常量{‘a’,‘b’},被标记为 untainted 属性;但是 msg 取值依赖于(x == ‘a’) 和 (x == ‘b’) 的判断条件的 T 和 F 取值,即与 x 存在控制依赖关系(也称为隐式流污染)。
此时会产生漏报,msg 应标记为 tainted属性;而 uri 的取值不受 L3 和 L7 的影响,标记为 untainted属性。该代码段存在安全风险,因为 msg 被 post 提交后,攻击者捕获 msg 后可推断用户输入 x 的取值。

隐式流示例代码2:

begin
L1 x = get_input();
L2 msg = uri = ‘’;
L3 if (x > ‘a’){
L4 tmp = x + ‘a’;
L5 msg = tmp − x;
L6 }
L7 else {
L8 uri = ‘post’;
L9 msg = ‘a’;
L10 }
L11 send(uri, msg);
end

在上述所示代码中,按照显示污染分析方法, L4 和 L5 处 msg 赋值受 x 直接污染,但是 msg 在污染后取值为常量‘a’,此时会生误报,msg 也应标记为 untainted 属性。

如何避免?

待思考

参考:《污点分析中的隐式污染检测方法》

动态污点分析——隐式流造成的漏报和误报相关推荐

  1. 动态污点分析隐式流--动静结合的解决方法

    隐式流 我们知道,对于动态污点分析来说,检测所有的信息流动是不可能的.因为污点只沿着实际执行的路径流动,特别地,动态污点分析会漏报一些implicit flows(控制流). 关于隐式流,参考之前的文 ...

  2. 动态污点分析——用于商用软件漏洞的自动检测分析和签名生成【论文概述】

    技术概览:动态污点分析技术是旨在通过对运行时间内重写二进制代码的表现进行分析,从而检测和过滤攻击行为并以此提高系统安全性.通过试验表明,动态污点分析技术能够检测出绝大多数的软件漏洞,如果使用混合检测器 ...

  3. 全系统动态污点分析-概要

    全系统污点分析需要完成以下几点: 1. 标记某个来自I/O device的数据为污点 2. 可以监视全系统的执行,知道哪一块代码在传播了污点数据.要实现这一点,需要基于qemu. Qemu的动态翻译系 ...

  4. 打造一个实际的全系统污点分析系统--Towards Practical Taint Tracking

    全系统动态污点分析的难点 典型的全系统污点分析都是基于QEMU(一个硬件仿真器)实现的.然而硬件仿真是很慢的,为了提升性能,现在的实现一般都只对和tagged data交互的代码使用仿真,这种方法可以 ...

  5. 新手求助,关于添加隐式intent程序崩溃问题

    新手一枚,刚开始学Android开发,最近在学隐式intent,发现加入后不报错但是运行后系统崩溃,有木有大神愿意指导一下,感激不尽. 以下为日志信息: 12-04 14:07:33.871: E/A ...

  6. 无法将类型int隐式转换为string_Scala implicit 隐式转换安全驾驶指南

    这篇短文将结合实例对隐式转换的各种场景进行解释和总结,希望看完的人能够安全驶过隐式转换这个大坑. 隐式转换函数 隐式转换函数有两种作用场景. 1 转换为期望类型:就是指一旦编译器看到X,但需要Y,就会 ...

  7. 干货!用神经网络来表达隐式场景流

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 在深度学习革命之前,许多感知算法(perception algorithm) 直接运行时优化(runtime optimization) ...

  8. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  9. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...

    实验背景介绍 了解更多2017云栖大会·杭州峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理及应用> ...

最新文章

  1. cisco交换机Telnet配置
  2. Replation requires the actual server name ... Replication.Utilies
  3. 一篇好文之Android数据库 GreenDao的完全解析
  4. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)
  5. C#操作Excel的OLEDB方式与COM方式比较
  6. Android 分享功能大全
  7. Redis系列教程(七):Redis并发竞争key的解决方案详解
  8. 索引导航-第三版-pyhui
  9. Codechef之CodeCraft: IIIT Hyderabad
  10. 当前页面excel导出_系统地学习Excel第03课,Excel的工作界面
  11. OpenCV测试摄像头帧率
  12. c++矩阵转置_线性代数(Gelbert)对称矩阵
  13. min-max之间取随机数公式
  14. Word 公式排版(使用制表符)
  15. 有趣的表情包购物网站
  16. 【使用指南】Excel筛选包含指定文本所在的整行
  17. DoNet学习-WebForm视频教程(30集)
  18. ASP+Access的安全隐患及对策(转)
  19. 软件版本GA,RC,Demo,Build意思
  20. ac自动机(模板+一点点小优化)

热门文章

  1. 变分法和变分贝叶斯推断
  2. acill排序 java_Map集合按照ASCII码从小到大(字典序)排序--JAVA
  3. 二级缓存使用步骤_Mybatis的一级缓存和二级缓存的理解以及用法
  4. 数控铣削图案及编程_数控铣加工比普铣的优势,大多数人选择数控铣的原因
  5. Mac修改pip为国内源
  6. python list根据值返回位置
  7. 解决pytouch导入模型报错:AttributeError: Can‘t get attribute ‘XXX‘ on <module ‘__main__‘ from XXX>
  8. linux bash gt,linux之bash的基础特性(一)--gt;命令历史(history命令),命令补全,路径补全...
  9. linux 下搭建subversion (svn),CentOS Linux 搭建 SVN(CollabNet Subversion)服务器,易用性和对远程团队的...
  10. 华中科技大学计算机系统基础实验3报告,华中科技大学计算机系统基础实验报告.doc...