动态污点分析——隐式流造成的漏报和误报
来源:互联网 发布:mac ox驱动下载 编辑:程序博客网 时间:2024/05/17 03:53
污点分析面临 2 个问题:污染过度(overtainting)和污染缺失(undertainting)。
其中,污染过度是将一个与污点输入无依赖关系的数据变量标记为污点属性,即产生误报。
而污染缺失则是在污点传播过程中遗漏了与污点输入有依赖关系的程序变量标记为无污点属性,即产生了漏报。
其中控制依赖关系(隐式流)是常见的造成漏报和误报的原因。
隐式流
污点分析主要考虑 2 种信息流,显式流(explicit flow)和隐式流(implicit flow)。
显示流对应于程序的数据依赖关系,即变量x的污点信息直接传递(通过赋值或算数运算)给变量y;
隐式流对应于程序的控制依赖关系,即变量x的污点信息通过包含x的条件表达式间接传递给变量y。
隐式流示例代码1:
beginL1 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:
beginL1 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 属性。
如何避免?
待思考
参考:《污点分析中的隐式污染检测方法》
- 动态污点分析——隐式流造成的漏报和误报
- (转载)如何降低IDS的漏报和误报
- IDS误报、漏报和逃避
- 动态污点分析隐式流--动静结合的解决方法
- 动态污点分析浅述
- 全系统动态污点分析-概要
- 动态污点分析浅述
- False positive and False negative (误报 漏报)
- Android动态污点分析工具TaintDroid部署指南 - FloraF
- 漏报
- 重载new造成的BoundsChecker误报
- 探讨误报与漏报率出现在入侵检查系统中的改进
- 减少 WAF 漏报的 8 种方法 !
- 减少 WAF 漏报的 8 种方法 !
- 我的“污点”谁做主
- suspend造成死锁的例子和原因分析
- Android Handler造成内存泄露的分析和解决
- 使用Handler造成内存泄露的分析和解决办法
- IDEA默认svn检出项目出错
- Java之DOM解析XML文件
- Cbuilder一定要包含有UnitN.cpp
- 深入理解C指针学习笔记七之动态内存管理
- 正则表达式全部符号解释
- 动态污点分析——隐式流造成的漏报和误报
- 设计模式六大原则(4):接口隔离原则
- Python 生成器 generator之next和send运行流程
- 学习C#的第一个程序:笔记查找与记录
- C++实验3-2-本月有几天?
- 正则表达式、Math类、StringBuffer类和StringBuilder类
- 一个10进制数二进制表示1的个数,负数用补码
- 字符编码简介
- c++作业2