competition-vd/README_V2.md

5.8 KiB
Raw Permalink Blame History

我们小组采用python语言解决赛题一漏洞严重等级CVSS研判

文件结构


以下为对python文件的作用的具体解释:
所有代码包含于文件cvss_project中
在cvss_project文件中,共有五部分:数据集部分(data_1),数据分析部分(pictures,data_process.py),训练好的模型(Changed_ESC_random_forest_model.joblib,Changed_ISC_gbt_model.joblib等共六个模型),训练模型的python代码(one_hot_changed.py,one_hot_unchanged等),以及真正用来预测cvss分数的代码部分(final.py)
第一部分:
data_1:包含赛题中给定的标准数据集,以及需要预测的测试集
第二部分:
pictures:通过观察数据集以及查阅官方文档,发现决定cvss分数的几个指标似乎可以拆开来看.也就是说我可以将这个大任务分成几个板块.部分板块合乎常理,即对用户设备以及系统可以造成的伤害越高,威胁就越大,那么,理所当然地,它的评分就应该越高.pictures文件中,有各指标的关系初解.jpg,用图解的方式,清晰解释数据分析的结果
data_process.py:通过pyecharts中的有关动态折线图的库,将数据间的关系可视化.
第三部分:
Changed_ESC_random_forest_model.joblib:以AV,AC,PR,UI,S(changed)为特征,以exploitabilityScore为输出构建的随机森林模型
Changed_ISC_gbt_model.joblib:以C,I,A,S(changed)为特征,以impactScore为输出构建的GBDT模型
Changed_BSC_linear_regression_model.joblib:以exploitabilityScore,impactScore,S(changed)为特征,以baseScore为输出构建的线性回归模型
Unchanged_ESC_random_forest_model:以AV,AC,PR,UI,S(unchanged)为特征,以exploitabilityScore为输出构建的随机森林模型
Unchanged_ISC_random_forest_model.joblib:以C,I,A,S(unchanged)为特征,以impactScore为输出构建的随机森林模型
Unchanged_BSC_linear_regression_model.joblib:以exploitabilityScore,impactScore,S(unchanged)为特征,以baseScore为输出构建的线性回归模型
第四部分:
one_hot_changed.py:用来训练数据集中S为changed的数据,将字符串部分的特征用独热编码编码后,再作为特征输入,同时还以数据集中的impactScore和exploitabilityScore为特征,以baseScore为输出构建线性回归模型
one_hot_unchanged.py:用来训练数据集中S为unchanged的数据,将字符串部分的特征用独热编码编码后,再作为特征输入,同时还以数据集中的impactScore和exploitabilityScore为特征,以baseScore为输出构建线性回归模型
linear_regression.py:以数据集中的impactScore和exploitabilityScore为特征,以baseScore为输出构建线性回归模型(此为没有考虑数据集中Scope特征的废案)
find_optimal_b.py:通过穷举,来找到最你和模型的偏置项b(穷举后,没有找到合适的偏置项b,为废案)
第五部分:
final.py:最终cvss评分预测部分的代码,只要向data_1文件导入一个名为"your_data.json",格式与赛题提供的训练集json数据格式一致的数据集,即可对数据集数据进行预测(对赛题提供的SIR_test_set.json数据集预测,均方根误差约为0.0585),需要注意的是,如果数据集格式文件格式,文件名称,数据格式有误,可能导致程序无法成功运行.

如何配置运行环境


确保python版本为3.12
若想python代码成功运行,要确保安装以下python库:
pytorch	2.4.0
pytorch-cuda	11.4
pandas	2.2.2
numpy	1.26.4
scikit-learn	1.5.1
joblib	1.4.2
pyecharts		2.0.6	
matplotlib		3.9.2

如何得到期望效果


在输入数据前,你需要知道的是,我们以SIR_train_set.json数据集中数据为输入,构建出此模型,所以你想要预测的数据文件格式务必为json,且数据格式应如SIR_train_set.json数据集中数据格式一致,训练集中一份数据如下:

{ "CVE_ID": "CVE-2018-20847", "Issue_Url_old": "https://github.com/uclouvain/openjpeg/issues/431", "Issue_Url_new": "https://github.com/uclouvain/openjpeg/issues/431", "Repo_new": "uclouvain/openjpeg", "Issue_Created_At": "2014-11-14T19:45:14Z", "description": "Heap buffer overflow in opj_tcd_init_decode_tile. Originally reported on Google Code with ID NUMBERTAG ERRORTAG Reported by mayeut URLTAG on NUMBERTAG", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "severity": "HIGH", "baseScore": 8.8, "impactScore": 5.9, "exploitabilityScore": 2.8 }, 一份数据中其他键对最终结果影响不大,唯有vectorString键与其所对应的值在最终评分预测结果影响较大.保证vectorString正确,即确保vectorString对应值包含"AV","AC","PR","UI","S","C","I","A"八个指标. 务必确保vectorString对应值包含"AV","AC","PR","UI","S","C","I","A"八个指标! 务必确保vectorString对应值包含"AV","AC","PR","UI","S","C","I","A"八个指标!! 务必确保vectorString对应值包含"AV","AC","PR","UI","S","C","I","A"八个指标!!! 重要的事情说三遍. 除了vectorString,还请确保数据集中包含最终输出,程序中设置了读取数据中的输出值的功能(以便打印预测值与实际值,并计算均方根误差),所以如果数据集中缺少输出,会导致程序无法运行. 务必确保数据集中包含输出值! 务必确保数据集中包含输出值!! 务必确保数据集中包含输出值!!! 重要的事情说三遍.

程序中包含打印所有预测值与实际值的功能,可选择性地将这部分代码注释掉.