4、SySeVR复现——Generating slices

目录

1、准备阶段

2、生成实验数据的CFG图

3、生成实验数据的PDG图

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

5、获取四种类型的SyVCs

6、提取SeVCs

7、获取漏洞的代码行号

8、给切片打标签

9、将标签写入切片


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切片文件,且都打了标签。下一步将进行切片的向量化。

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值