综述
paper: https://link.springer.com/content/pdf/10.1186/s42400-024-00244-6.pdf
论文解决的问题:对于一个堆溢出漏洞,评估poc的可利用性;
现实中遇到的问题:有时候即便堆溢出能够覆盖一个敏感指针,但是也很难完成控制流劫持等复杂的攻击动作;
挑战:
- 如何恢复poc的堆布局并识别victim object;
- 如何确定敏感指针和输入之间的关系;
- 如何确定敏感指针是否会被解引用;
design
动态信息收集
指令流:call记录参数寄存器的信息、ret记录返回值
内存读写:读写内存指令记录内存地址和内容
动态段:
对象类型分析
利用源代码进行静态分析。
该组件的输入是源代码,输出是内存对象的数据布局以及数据类型和源代码位置的关系;
提炼数据结构的定义,识别出来敏感指针/函数指针;然后是找哪些数据类型被引用了;
poc上下文分析
污点分析器:在本地程序的指令流上进行分析(排除了第三方库和syscall);
动态堆分析:解析堆相关的函数;进一步识别size和block的内存范围;通过分配函数的返回值识别block的起始地址,通过参数识别size;
溢出上下文分析:收集所有读写指针的真实类型,对于字节读写对象,读写对象的类型应该一致,
可利用性评估
TODO