基于字节码相似度的javac编译器安全风险检测方法

文档序号:36002848发布日期:2023-11-16 17:05阅读:58来源:国知局
基于字节码相似度的javac编译器安全风险检测方法

本发明涉及android软件供应链安全区域,具体为基于字节码相似度的javac编译器安全风险检测方法。


背景技术:

1、软件供应链安全可以定义为软件生产的整个过程中如编码过程、工具、设备、供应商以及最终交付渠道等所共同面临的安全问题。目前软件供应链由于开源和云原生时代的到来越来越趋于复杂化和多样化,软件供应链安全风险不断加剧,已成为网络空间攻防对抗的焦点,对关键基础设施和重要信息系统安全有着直接的影响。编译器安全也涉及到软件供应链的安全性。攻击者可能在编译器的开发、分发或安装过程中进行恶意篡改,从而在生成的可执行文件中插入恶意代码。针对软件供应链上游开发工具进行攻击的安全事件较少,但一旦攻击成功,却可能影响上亿用户。android应用程序的主要由java语言编写,javac作为最常用的java编译器,发现和解决与之相关的安全漏洞和威胁十分重要。

2、检查编译器是否存在风险可以通过对比由javac生成的二进制文件与理论应生成的二进制文件的相似性来判断。假设源文件a的编译文件为a1,经过待检测编译器编译出来的文件为a2,对比a1与a2的差异,排除版本等因素,识别语义相似性,若不相似,则说明经过该编译器编译出来的可执行文件存在错误,进一步证明编译器存在安全风险。

3、现有的相似检测方法大多是基于源代码的,这些方法在检测语义时往往存在局限性。在java程序中,源代码在编译后被转换成类文件(即class文件)。这些类文件包含字节码,字节码指示源代码字节码的执行过程和方法调用信息,也就是说java字节码比源代码本身更多地反映了源代码的语义性质,所以在字节码层面研究更具有准确性。近年来,随着神经网络在各个领域的取得的成功应用,二进制文件的相似性研究领域也开始关注神经网络的使用方法,在提取字节码的特征时不再依赖人工标记,而是利用word2vec等词向量模型,准确率得到了提升。


技术实现思路

1、(一)解决的技术问题

2、本发明的目的是提供基于字节码相似度的javac编译器安全风险检测方法。在java开发环境中,可能存在恶意插件或恶意扩展,它们可能会以某种方式修改编译器的行为或进行其他恶意操作。本发明通过比较编译文件的字节码,可以检测编译器是否存在安全风险。

3、(二)技术方案

4、为实现上述目的,本发明提供如下技术方案:基于字节码相似度的javac编译器安全风险检测方法,具体按照以下步骤实施:

5、步骤1,源代码经过编译产生.class文件,选择一个开源的大型的java项目,形成class文件库;

6、步骤2,将class文件转化为文本文件,得到最终的语料库;

7、步骤3,把语料库输入到词嵌入模型训练,得到训练后的词向量模型,输入待检测样本即可提取特征;

8、步骤4,基于门控循环单元构建孪生神经网络模型,该网络模型有4个模块分别用来提取词向量特征、提取序列中向量的前后关联信息和相似性对比;

9、步骤5,设定阈值为x,由步骤4得出的概率值大于阈值时,说明由待检测编译器生成的可执行文件与期望可执行文件一致;当概率值小于阈值时,说明由待检测编译器生成的可执行文件在编译阶段被篡改,则待检测编译器存在安全风险。

10、进一步地,所述步骤1具体为:选择任意一个大型的java开源项目,目的是为了获取尽可能多的操作码数据;使用javac或者其它辅助工具,其它辅助工具包括intelli jidea、eclipse、ant,将java项目编译为字节码文件,即class文件;将所有class文件置于同一目录下,得到字节码文件,即class文件库。

11、进一步地,所述步骤2具体为:经过步骤1得到了class文件库,再使用反编译工具,将字节码文件从二进制形式转换为文本形式文件,遍历java项目中的每个字节码指令文件,通过正则匹配定位文件中的所有操作码序列,并全部提取出来,存放到txt文本中;其中操作码序列中的每个操作码以空格隔开,操作码序列之间以换行符隔开,形成了语料库。

12、进一步地,所述步骤4具体为:

13、步骤4.1,转换模块:输入成对的操作码序列,通过预训练的词向量模型将操作码序列转换为固定维度的向量;

14、步骤4.2,基于门控循环单元模块,即为gru模块,gru模块用于接收转换模块传输的固定维度的向量,该模块能够提取序列中向量的前后关联信息,并且将最后时刻的输出数据作为下一模块的输入;

15、步骤4.3,自注意模块:注意力层被创建并应用于基于门控循环单元层的输出序列上;这将为每个输入序列生成一个注意力权重向量,以便模型关注重要的部分;

16、步骤4.4,相似比较模块:相似度比较模块由连接层结合两个全连接层组成,每个全连接层与上层之间嵌入批归一化层和随机失活层;连接层将步骤4.3的输出的向量对进行拼接,得到新向量长度为两个向量的长度之和,然后连接后续的两个全连层;全连层的本质是将特征空间线性变换到另一个特征空间,所以它目的是通过非线性变化提取特征之间的关联,并映射到输出空间上;神经元数量为1的全连层连接输出层,通过sigmoid函数得出[0,1]区间的概率值,定义相似对为1,非相似对为0;sigmoid是常用的激活函数,可以将数值映射到[0,1]区间内,用于描述信息通过的多少。

17、(三)有益效果

18、与现有技术相比,本发明的有益效果如下:

19、本发明在字节码层面对二进制文件进行审查和验证,以确保编译器没有注入恶意代码。利用词向量模型提取特征输入到孪生神经网络进行不断训练,最终判断出两个二进制文件的相似性,以确定编译器是否存在安全问题。目前对编译器安全性研究较少,本发明具有一定的前瞻性。



技术特征:

1.基于字节码相似度的javac编译器安全风险检测方法,其特征在于,具体按照以下步骤实施:

2.根据权利要求1所述的基于字节码相似度的javac编译器安全风险检测方法,其特征在于,所述步骤1具体为:选择任意一个大型的java开源项目,目的是为了获取尽可能多的操作码数据;使用javac或者其它辅助工具,其它辅助工具包括intellijidea、eclipse、ant,将java项目编译为字节码文件,即class文件;将所有class文件置于同一目录下,得到字节码文件,即class文件库。

3.根据权利要求1所述的基于字节码相似度的javac编译器安全风险检测方法,其特征在于,所述步骤2具体为:经过步骤1得到了class文件库,再使用反编译工具,将字节码文件从二进制形式转换为文本形式文件,遍历java项目中的每个字节码指令文件,通过正则匹配定位文件中的所有操作码序列,并全部提取出来,存放到txt文本中;其中操作码序列中的每个操作码以空格隔开,操作码序列之间以换行符隔开,形成了语料库。

4.根据权利要求1所述的基于字节码相似度的javac编译器安全风险检测方法,其特征在于,所述步骤4具体为:


技术总结
本发明公开了基于字节码相似度的javac编译器安全风险检测方法,具体按照以下步骤实施:步骤1,源代码经过编译产生.class文件,选择一个开源的大型的Java项目,形成class文件库;步骤2,将class文件转化为文本文件,得到最终的语料库;步骤3,输入待检测样本即可提取特征;步骤4,提取序列中向量的前后关联信息和相似性对比;步骤5,设定阈值为X,由步骤4得出的概率值大于阈值时,说明由待检测编译器生成的可执行文件与期望可执行文件一致。利用词向量模型提取特征输入到孪生神经网络进行不断训练,最终判断出两个二进制文件的相似性,以确定编译器是否存在安全问题。

技术研发人员:王一川,段馨薇,黑新宏,赵琛,朱磊,姬文江
受保护的技术使用者:西安理工大学
技术研发日:
技术公布日:2024/1/16
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1