Design
Matrix Representation
传播函数F:
作者将DIFT运算表示为矩阵运算,并使用GPU辅助进行高效的矩阵运算。因为大多数FlowMatrix中一个位的数据只流向几个位,因此稀疏度很高。为了节省空间,作者采用稀疏矩阵存储FlowMatrix,仅通过索引和值存储非零元素。
Overview
上图显示了基于FlowMatrix的离线DIFT查询系统,给定程序执行的trace信息,提供给用户一个交互式命令行界面,用来重复查询从不同的sources到sinks的信息流。
对于直接数据流依赖,DIFT查询系统需要完成以下几个步骤:
对于间接数据流和隐式流,FlowMatrix支持额外配置DIFT传播规则,包含以下几个步骤:
step 5:配置额外的数据流依赖;
step 6:重新计算FlowMatrices;
step 7:DIFT查询。
Query Tree Construction
如果在每次收到DIFT查询请求时,在source和sink之间进行污点传播,就和传统的顺序传播的DIFT技术一样,仍然存在每次查询响应时间过长的问题。但是如果提前预处理所有可能的合法查询,则需要预处理的内容过多,会带来不必要的存储开销和高额的预处理计算开销。
因此,作者在合理的预处理开销和快速的查询响应时间两者之间寻求平衡。作者使用了二叉树的数据结构构建查询树,其叶节点为每条指令的FlowMatrix矩阵,非叶节点为子节点的概括矩阵,查询树都是完全二叉树。基于这一数据结构,预处理(建树)只需要线性时间复杂度和线性空间复杂度,而查询任意区间内的数据流概括都是对数时间复杂度。
Evaluation
作者选取了不同类型的15个CVE和7个常见的应用程序,记录了它们的指令执行记录作为数据集。
Performance:和使用了同样的污点传播规则的基于CPU的DIFT工具相比,基于GPU的FlowMatrix在污点传播时平均性能提升5倍。
对于大部分的场景而言,一个查询请求可以在0.5秒内得到结果。
Throughput:基于FlowMatrix的DIFT查询系统平均一秒内可以处理约5百万的数据流。这一数值高于libdft三个数量级,和128核的JetStream达到了相同的水平。
最后,一些DIFT相关工作的论文分享:
TaintInduce、FineDIFT、SelectiveTaint、GreyOne、ARMHEx。
点击下方链接,获取论文原文
原文始发于微信公众号(COMPASS Lab):【论文分享】FlowMatrix