关键词:
工业软件
Java
第三方库
漏洞关联
漏洞验证
摘要:
工业软件漏洞严重影响工控设备的安全和正常的工业生产,进而引发严重的经济损失。使用Java开发的工业软件广泛采用第三方Java库(TPL)简化开发过程以加速产品交付,但TPLs的广泛使用也带来了严重的安全漏洞威胁。由于相邻版本间TPLs代码差异过小,且容易受到代码混淆技术的干扰,导致工业软件中TPL版本识别不够精确。此外,难以收集全面的漏洞数据库、并且缺乏深入的漏洞分析,漏洞检测结果中存在漏报和误报。针对TPL版本识别不精确和漏洞检测结果不可靠的问题,提出并实现了精确的TPL版本识别和可靠的漏洞检测技术,以提高工业软件的安全性。论文的主要贡献总结如下:
(1)针对工业软件中TPL版本识别精度不足的问题,提出了一种基于多粒度特征比较的方法。首先,根据TPL不同类的特征和类之间存在的依赖关系,构造带属性的类依赖图(ACDG),作为TPL的粗粒度特征。其次,通过基于图神经网络的方法比较ACDG的相似性,筛选出候选TPLs列表。进一步,为了确定TPL的确切版本,使用TPL的字符常量、方法的控制流图等特征作为细粒度特征,这些特征可以有效抵抗代码混淆技术的影响。最后,通过比较细粒度特征,在候选TPLs列表中选择代码相似度最高的作为TPL版本识别结果。在构造的大规模数据集中对该方法进行评估,方法在库和版本级识别的准确率分别为95.42%和73.35%,比现有最优工具提升了4.34%和4.63%。
(2)针对TPL中漏洞检测存在漏报和误报问题,提出了一种基于两阶段的漏洞检测方法。首先,根据公开的漏洞信息,构建TPLs和漏洞的映射关系数据库,通过(1)中识别的TPL版本信息,查询数据库并关联TPL的漏洞信息。其次,为了确保检测结果的可靠性,对关联的漏洞进行验证,通过静态分析TPL的函数调用关系,提取结构感知调用图,并判断是否存在对漏洞函数的调用,进而对漏洞进行验证。如果存在对漏洞函数的调用,根据漏洞补丁,比较TPL的漏洞函数与补丁前、后代码的相似度,判断TPL中是否存在补丁,确定漏洞验证结果。最后,在真实世界工业软件中收集了一个包含266个TPL和关联的1,203条CVE漏洞的数据集中对方法进行验证,该方法取得了71.2%的精确度和86.2%的召回率,远高于现有的其它漏洞检测方法。
(3)为了检测工业软件中易受攻击的TPLs,基于上述研究内容开发了工业软件安全检测与评估系统,旨在识别工业软件中存在的第三方Java库及漏洞信息。系统可以自动化地对工业软件进行TPLs提取,并对TPLs进行版本识别和漏洞检测,从而对工业软件安全进行评估。在对真实场景中对大规模工业软件进行检测,系统能够准确识别出TPLs版本和漏洞信息,完成安全检测与风险评估。