2017-03-09
标签 : DFI
##传统DFI 1.首先静态分析得到DFG,得到每个数据被写指令的集合I。 2.维持一个runtime definitions table (RDT),记录写每个变量的最后一条指令的标识符,每次写操作都会更新RDT。 3.对读(数据)指令进行检查,每次读之前用变量的地址去检索RDT,检测RDT是否在静态分析的集合I中。
##WIT 1.编译时刻计算CFG以及可能被每个指令写的objects。 2.对每一个object和写(它的)操作赋予相同的颜色。颜色记录在一个color表中,当object被分配或释放时color表会相应更新。为了降低漏报率,在不安全的objects中间插入小的guards,guards赋予颜色0或1。对不安全的objects的4字节对齐。 3.运行时对写指令进行检查,通过color表检索,检查指令与所写对象的color是否一致。 4.为降低损耗提出写安全检查来计算安全的指令和objects,如果所有修改object的指令是安全的,那么此object就是安全的。不违反写完整性的指令为安全指令。
##想法(针对传统DFI) 1.把通过计算每个数据被写指令的集合I改为: 把被写数据当做写指令的标记。 2.对读(数据)指令检查时只需要检查RDT的标记是否是该数据。 3.想法不太?因为写完整性测试会在非法写指令的时刻已经检查出错误,读的时候检查其实WIT已经检测到RDT不合法了。
##加密数据(Data Space Randomization[1])
1.给每个数据加密,读或写时加密解密。 2.可被攻破。(do_authentication attack used by Chen et al. on OpenSSH.[2] )
[1]. S. Bhatkar and R. Sekar, “Data space randomization,” in Detection of Intrusions and Malware, and Vulnerability Assessment,2008. [2]. S. Chen, J. Xu, E. Sezer, P. Gauriar, and R. Iyer, “Noncontrol-data attacks are realistic threats,” in Usenix Security Symposium, 2005.
##Fine-grained Data-Plane Randomization
##Hardware and Software Fault Isolation