这篇文章纪录一些上csp课程的时候课堂上记录下来的笔记,虽然感觉以后看得可能性不大,但是直接删了可惜,暂且放在这边吧
------------------------------------------------
12-6
读文件为何要write:写最近打开时间,在node里有access time.可以禁用
写文件: foo node write :modify time:上次写的时间
bar node write:mtime, block number、size
输入参数current-track
忽视 unsigned int->int 转换可能会有负数
构造header,获得任意写权限
所有的设备看成文件
IOCTLs
为了解决对文件除了open close read write进行的操作的
参数:cmd data
int 类型需要判断大于某个数也要判断小于某个数(负数)
EIP变成任意想设定的值
整型溢出
将赋值操作变为 if判断,然后赋值
side-channel
java在heap上不计算,在stack上计算
播放再录音,绕过taint
文件通过放到网上再下载下来,其中有些属性会消失
跳转指令每5行汇编有一个,basic block 5行汇编
indirect call:ecx
shadow stack:
纪录函数调用栈
BTS:非常有用debug
call set
longjmp
reference monitor:引用监视器;file descriptor是一个经典实例
流敏感(flow-sensitive)指的是考虑程序语句执行的顺序,例如在数据流分析中的指针别名(Pointer Alias)分析中,一个非流敏感指针别名分析可能得出“变量x和y可能会指向同一位置”,而流敏感指针别名分析得出的结论类似于“在执行第20条指令后,变量x和y可能会指向同一位置”。所以,一个非流敏感指针别名分析不考虑控制流,并认为所发现的别名在程序所有位置均成立。
路径敏感(path-sensitive)指的是依据条件分支语句的不同谓词,计算不同的分析信息,也就是说,路径敏感将跟踪程序控制流的每一个分支,以记录两个分支路径的不同程序状态。相应的,非路径敏感并不考虑分支之间的区别。简单的路径敏感存在“路径爆炸”(path explosion)或“无穷搜索空间”(infinite search space)的问题。
上下文敏感(context-sensitive)指的是在过程间分析( Interprocedural Analysis)时,考虑函数调用的上下文信息。
1、流敏感/流不敏感是针对是否考虑过程内的控制流情况的,过程内的控制流图会有分支、循环等情况,流敏感是指考虑过程内(被调用过程或函数内)的控制流情况;反之,流不敏感是指不考虑过程内的控制流情况,只考虑过程间的情况。
2、上下文敏感/上下文不敏感是针对是否考虑函数的不同调用点,因为一个子过程或函数可能会被多个过程调用,那么在不同的过程调用它的时候,对于传给它的实际参数或当时的全局变量有可能会不同,这些被称之为上下文,上下文敏感是考虑了这些不同,上下文不敏感则将一个子过程或函数用唯一的一种情况来分析。
q1:粗粒度CFI的问题本质就在于归类各个目标集合
针对上下文敏感的方式,这种攻击方式应该没有用
paper2
CFG生成针对二进制文件先反汇编?
CFG针对粗粒度还是细粒度,还是都可以?
优化CFG,去除没用的边,之后加回来==
调ABC,但是这次没有调用,去除其他的,等于是在动态执行的时候优化?
静态分析:全部枚举,
Taint
Taint Tracking DIFT DIFC相似
只关注数据的流动;哪些地方需要染色?taint的传播咋做?如何在出口的地方拦截?最难的是传播。性能
访存指令
java是类型安全的
return to libs 执行函数system() execs()
—问题1:不调用这两个函数
-问题2:不想执行这个函数
只适用于正好调用这两个函数的
写栈?攻击者利用一系列POP操作完成写操作
caller callee
canaries:金丝雀对瓦斯敏感
:crash之后重启
dup2(sock,0)
CPI
敏感指针