taintCheck的实现
参考:http://bitblaze.cs.berkeley.edu/papers/taintcheck-full.pdf
1. 应用taint analysis需要解决三个问题
a. 哪些input需要被标记为tainted
b. 这些tainted的属性需要怎样被传播到其他的内存中
c. 这些tainted的内存什么情况下可以被视为用于attack
因此TaintCheck是由三个基本组件组成:TaintSeed, TaintTracker以及TaintAssert。
每个组件都定义了自己独立的policy,可以调整检测的力度。
2. taint数据的保存
即怎样表示一段内存是tainted的呢?
对于tainted的内存区域Memory(registers, stack, heap)中的每一个字节,都有一个4字节(DWORD)的指针指向一个Taint Data Structure的数据结构;
而对于正常的内存区域,这个4字节的指针为NULL。
可以预见,tainted的内存区域相对于正常的内存区域要小很多,因此,可以参考页表的管理方式,来管理tainted的内存区域;
而正常的内存区域,其实连NULL的4字节指针也不必保存。
TaintSeed examines the arguments and results of each system call,
and determines whether any memory written by the system call should be
marked as tainted or untainted according to the TaintSeed policy.【通过检查敏感的系统调用(比如socket, read等),根据其参数来确定是否有向内存中
写数据,那些写的数据可以根据policy确定是否标记为tainted】
When the memory is tainted, TaintSeed allocates a Taint data structure that records
the system call number, a snapshot of the current stack, and a copy of the
data that was written.【当一段内存区域被标记为tainted,一个数据结构Taint Data Structure会记录下一些重要信息:
1 系统调用号,可以标记信息的来源;
2 当时stack的备份snapshot,案发现场;
3 写的数据的一个备份】
3. Taint的传播
指令可以分为三类:
1. 数据传输类
2. 算术操作类
3. 其他类
其中,数据传输与算术操作类的指令都能够传播taint属性,前提是源操作数已经被标记为tainted。
字面值的数据,比如常数,字符串是无辜的,因为它们要么是程序的作者指定的,要么是编译器指定的,而不会是外部数据侵入的。
还有一种例外,比如xor eax, eax,指令的输出与输入无关,因此即使输入是tainted,输出也是无辜的。
可以在发现传播时,建立传播链,或者将tainted的内存区域指向同一个Taint Data Structure。
4. Taint的有害性检测
如果一段tainted的内存,被不合法地利用,就可能产生危害。
a. 被作为jump的目标,即程序的执行流被引导到tainted内存区域
b. 被作为format string传给printf族函数,这种情况可能发生format溢出
c. 被作为参数传递给关键的系统调用,比如execve
当上述情况发生时,可以通过之前记录下来的tainted内存区域的链表,找到是哪些输入导致了attack的发生。
taintCheck的实现的更多相关文章
- xsos:一个在Linux上阅读SOSReport的工具
xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29 51CTO 原文 http://os.51cto.com/art/201905/596889 ...
随机推荐
- Excelvba从另一个工作簿取值
Private Sub getValue_Click() Dim MyWorkbook As Workbook Set MyWorkbook = Application.Workbooks.Open( ...
- luogu P3657 (NOIP2017) 跳房子(二分+DP+单调队列)
题面 传送门 分析 显然答案有单调性,可以二分答案,设当前二分值为g,根据题意我们可以求出跳跃长度的范围[l,r] 考虑DP 子状态: dp[i]表示跳到第i个点时的最大和 状态转移方程 \(dp[i ...
- luoguP1312 Mayan游戏 题解(NOIP2011)
luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...
- Android单位转换 (px、dp、sp之间的转换工具类)
在Android开发中,涉及到屏幕视频问题的时候,px.dp.sp之间的转换比较重要的一部分,所以杨哥整理了一个工具类给大伙用. package com.zw.express.tool; import ...
- React(5) --绑定函数事件
绑定函数事件 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件实例. run(){ ...
- MySQL06-- mysql索引
目录 一.索引介绍 1.什么是索引 2.索引类型介绍 3.索引管理 5.索引操作 6.前缀索引 7.联合索引 8.创建索引总结: 一.索引介绍 1.什么是索引 1)索引就好比一本书的目录,它能让你更快 ...
- HDU4035 Maze 期望DP+树形DP(好题)
题意:有一个树形的迷宫,有N个房间(标号为1~N)以及N-1条通道将它们连通,一开始在1号房间,每进入一个房间i,有k[i]的概率被陷阱杀死回到房间1,有s[i]的概率找到出口逃离迷宫,如果没有找到出 ...
- 51nod 1490: 多重游戏(树上博弈)
题目链接 该题实质上是一个树上博弈的问题.要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...
- js 最短代码生成随机数(字符串、id)
以生成8位字符串为例 Math.random().toString(36).substr(-8)
- Shiro安全框架的说明及配置入门
Shiro是什么? Shiro是一个非常强大的,易于使用的,开源的,权限框架.它包括了权限校验,权限授予,会话管理,安全加密等组件 什么时候使用它呢? 如果你是设计RBAC基础系统,需要编写大量用于权 ...