A deep learning based static taint analysis approach for IoT software vulnerability location
Measurement elsevier 19
作者提出了一种基于静态污点分析的漏洞检测方法,前端是一个静态污点分析,后端是一个深度学习。
可以分为四个部分:
patching comparison (补丁比对)
将获得的diff file 输入静态污点分析模块。目前可用的一些diff 工具, Merge,Textdiff, Meld,Git Diff。作者用的是difflib Python包。
static taint analysis (静态污点分析)
通过这个模块将输入的diff file 转换为污点传播的路径。
首先要确定diff file中哪些是taint 数据:
- 那些删除的或者增加了的变量
- 已知的漏洞函数或者其它函数的参数
- if 判断语句中的 restricted 变量(用来判断的变量)
由于并不是所有的污点数据最后都会触发漏洞,在生成了初始化的污点数据后,作者根据这些污点的类型分别赋予了不同的权重值。
- 如果是CWE-119或者CWE-339漏洞函数的参数,那么权重为1
- 如果是普通函数的参数,那么权重为2
- 如果是if 条件语句的判断内,那么权重为3
- 如果不是上述其它三种情况,那么权重为4
然后根据静态污点分析,生成污点传播的路径和污点第一次出现时所在的代码行数(这里的路径长啥样)
propagation paths transforming(污点传播路径转换)
首先将上一步通过静态污点分析后生成的污点传播路径进行符号化表示。
- 分词。污点传播路径也就是一行行程序代码,首先将这些代码语句通过一些special symbols比如“±*/”分成一个个Word。
- 然后将数据集中的Word全部提取出来计算出现的频率,并按照频率进行编码。频率最高为1,依次递减。(这里的数据集只是训练集嘛还是所有的数据?出现新词怎么办)(作者将生成的路径称作code snippet,在这些code snippet中,都过滤掉了之前说的special symbol,只留下word,为什么?)
然后encoding vector。
通过word2vec进行。
vulnerabilities location (漏洞定位)
其实这篇paper就是和vuldeepecker的翻版,不过是换了个说法,对于怎么taint analysis这个重点都没有将清楚。数据集也是照搬的vuldeepecker。