0


4、SySeVR复现——Generating slices

1、准备阶段

    实验数据我只用这些:

    (1)NVD

    (2)NVD_diff

    将实验数据放在/home/test/source2slice目录下

     删除.joernIndex文件

     将实验数据导入joern

    开启neo4j数据库

2、生成实验数据的CFG图

mkdir cfg_db
python2 get_cfg_relation.py

     运行文件的结果:

    (1)会针对NVD中的每个实验数据,都会生成相应的文件夹;

     (2)每一个文件夹下,有三个pkl文件,分别为cfg.pkl、dict_cfgnode2if.pkl、dict_if2cfgnode.pkl

     cfg.pkl中保存的是函数CFG图的边,另外两个文件目前不清楚作用。

3、生成实验数据的PDG图

mkdir pdg_db
python2 complete_PDG.py

     运行结果:
     (1)会生成每个实验数据对应的pkl文件

     (2)以第一个pkl文件为例,可以看到文件中包含的是pdg图相应的边信息。

     另外,以10这个节点为例,其实pkl文件中的边是经过选择了的,也就是说neo4j数据库中保存着程序的PDG图,但是有一些冗余的信息需要处理。

4、生成实验数据的调用图

mkdir dict_call2cfgNodeID_funcID
python2 access_db_operate.py

     运行结果:

    (1)生成一个dict.pkl文件

     (2)打开该pkl文件

     这里打开文件,里面没东西,可能是文件数太少,没有调用关系,这里还有待深究。

5、获取四种类型的SyVCs

python2 points_get.py

     运行结果:

    (1)在source2slice目录下生成四种SyVCs相对应得pkl文件:
  • sensifunc_slice_points.pkl
  • pointuse_slice_points.pkl
  • arrayuse_slice_points.pkl
  • integeroverflow_slice_points_new.pkl

    (2)查看文件里是啥

    1)sensifunc_slice_points.pkl

    以sensifunc_slice_points.pkl文件为例,里面保存的是符号函数调用漏洞的一些危险函数,以及其在图数据库中的信息。

    以(['100'],'86','strcpy')为例,100是strcmp所在语句节点的编号,86是strcmp所在的函数的编号。

    其余三个文件中得内容,也差不多。

    2)pointuse_slice_points.pkl

     3)arrayuse_slice_points.pkl

    4)integeroverflow_slice_points_new.pkl

6、提取SeVCs

mkdir -pv C/test_data/4 
python2 extract_df.py

     运行结果:

    (1)生成四种漏洞类型对应的SeVCs

     (2)以api_alices.txt为例,打开该文件:

     以strcpy为例,可以看到,生成了strcpy的切片,并且每一句后面都表明了该行代码在文件中的行数。

7、获取漏洞的代码行号

    首先,dealfile.py文件需要做以下修改:

python2 dealfile.py
    运行结果:

    (1)在source2slice文件下,会生成一个vul_context_func.pkl文件;

     (2)这个文件里保存:通过对比diff文件,以论文中提到的漏洞认定标准,找到有漏洞的文件中危险语句的行数。

    以CVE_2004_1151_PATCHED_sys32_ni_syscall.c文件为例:

    对应的diff文件,保存了CVE_2004_1151_PATCHED_sys32_ni_syscall.c的危险语句,即第4、5、6、7、8行语句。

     生成的vul_context_func.pkl中,保存的就是这些危险语句在原文件中的位置。

8、给切片打标签

    对源文件做以下更改:

    (1)修改路径:切片文件、标签文件以及vul_context_func.pkl文件

     (2)获取key的时候,如下图一样更改。

python2 make_label_nvd.py
    运行结果:

    (1)在./C/label_data/目录下,生成四种SyVCs对应的标签文件

    (2)以api_slices_label.pkl文件为例,可以看到文件中对每一个切片文件都做了标签,0代表该切片没有漏洞;1代表该切片有漏洞。

9、将标签写入切片

    对原文件做以下修改:

python2 data_preprocess.py
     运行结果:

    (1)在./slice_label文件下,产生了四种SyVCs对应的txt文件,其实这四个文件就是李珍老师github上给的四个txt文件。

    (2)查看标签是否与李珍老师给的一样,这里仅以一个被标记为0的api切片和一个被标记为1的api切片为例:

    1)标记为0的api切片

    2)标记为1的api切片

   ** 综上,生成了四种SyVCs切片文件,且都打了标签。下一步将进行切片的向量化。**
标签: 安全 python

本文转载自: https://blog.csdn.net/qq_55202378/article/details/127973104
版权归原作者 sliver呀 所有, 如有侵权,请联系我们删除。

“4、SySeVR复现——Generating slices”的评论:

还没有评论