面向私有化部署离线环境的Java代码保护方法及系统与流程

摘要: 本技术属于计算机软件安全与数据保护,特别涉及一种面向私有化部署离线环境的java代码保护方法及系统。背景技术:1、随着企业级软件私有化部署模式的普及,越来越多的...
面向私有化部署离线环境的Java代码保护方法及系统与流程

本技术属于计算机软件安全与数据保护,特别涉及一种面向私有化部署离线环境的java代码保护方法及系统。

背景技术:

1、随着企业级软件私有化部署模式的普及,越来越多的核心java业务代码直接交付到用户侧服务器运行,代码面临被反编译、逆向破解,非法篡改的风险。当前主流的java代码保护方案通常采用字节码加密+自定义类加载的方式,仅在类加载阶段完成解密,运行时仍然依赖jvm内存存储明文秘钥和明文字节码,此类方案存在两个关键漏洞:

2、1.反序列化攻击风险,攻击者通过java原生反序列化机制,对内存中的自己定义类加载器、加密核心业务类发起反序列化攻击,绕过字节码加密保护直接获取明文代码;

3、2.非法agent字节码窃取风险,即使防护了反序列化路径,攻击者仍可通过注入非法java代理注册转换器,拦截自定义类加载解密过程窃取明文字节码。

4、现有防护手段大多仅针对单一层做阻断,未实现多层纵深防护,且秘钥集中存储,容易被整体提取,无法满足私有化场景对核心代码的高安全防护要求。

技术实现思路

1、为解决传统方案秘钥易泄漏、反序列化防护不全、非法代理拦截窃取风险高的问题,本技术采用的技术方案是:

2、1.秘钥分片拆分存储,核心业务代码加密后将解密秘钥拆分为两片,通过一种防破解攻击的内存保护机制实现秘钥分片在独立外部文件和native层的隔离存储,任意单独分片无法还原完整的秘钥;

3、2.离线指纹授权,通过采集计算机环境硬件特征生成指纹签名和证书,在启动时提取硬件指纹信息与离线授权文件比对认证,绑定运行环境,规避通过公有云在线授权被劫持的风险和服务转移环境使用的风险;

4、3.运行时方法级动态解密,在目标服务器运行产品,通过一种混合架构下的动态链接库安全加载装置,实现对jar包的完整性校验,并基于自定义的类加载器实现了按需解密类字节码,运行完成自动销毁,大幅降低字节码内存驻留时间,且全程无完整明文秘钥持久化存储;

5、4.反序列化与序列化拦截,在启动时通过代理注入注册序列化和反序列化监视器,对核心业务和自定义类加载器的序列化与反序列实施拦截;阻断序列化攻击;

6、5.实施java agent白名单校验机制,通过扫描注入的代理,校验到非法类转换器时实施自动退出策略或者移除非法java agent的类转换器,规避第三方恶意注入代码窃取字节码和破坏业务逻辑。

7、本技术提供了一种面向私有化部署离线环境的java代码保护方法,包括:

8、使用密钥对核心业务类的字节码文件进行加密;

9、将所述密钥拆分为至少两个密钥分片,并将拆分后的密钥分别存储于外部文件及native层的受保护区域中;

10、在本地运行时采集部署环境的硬件指纹,并基于本地预存的离线授权文件验证当前环境是否具备运行权限;

11、若具备运行权限,则在native层读取所述密钥分片并合并还原得到完整密钥;

12、基于java自定义类加载器,在调用加密的核心业务方法时,使用所述完整密钥对加密字节码文件进行按需解密执行,并在方法执行完成后清除内存中的明文数据。

13、可选的,所述将所述密钥拆分为至少两个密钥分片,并将拆分后的密钥分别存储于外部文件及native层的受保护区域中,包括:

14、使用预设的秘密共享算法将所述密钥拆分为至少两个分片;

15、对拆分后的密钥分片分别进行混淆运算;

16、将混淆后的第一密钥分片存储于所述外部文件中,将混淆后的第二密钥分片以及编译流水线id存储于所述native层的受保护区域中。

17、可选的,所述在native层读取所述密钥分片并合并还原得到完整密钥,包括:

18、从所述外部文件和native层的受保护区域中分别读取所述第一密钥分片和第二密钥分片,并进行解混淆运算以还原分片原始值;

19、使用所述秘密共享算法对还原的分片原始值进行合并得到密钥原文;

20、将所述密钥原文与存储于native层受保护区域中的编译流水线id拼接,生成用于解密的完整密钥。

21、可选的,所述离线授权文件的生成步骤包括:

22、在目标部署服务器上采集硬件特征,并对采集的硬件特征进行哈希运算及拼接,生成服务器唯一的硬件指纹;

23、生成非对称加密密钥对,使用私钥对所述硬件指纹进行签名,生成包含签名信息的离线授权文件,并将公钥作为认证证书预存储在目标部署服务器的指定路径中。

24、可选的,所述基于本地预存的离线授权文件验证当前环境是否具备运行权限的步骤,包括:

25、读取本地预存的离线授权文件及公钥证书,所述离线授权文件包含使用私钥对所述硬件指纹进行签名生成的授权信息;

26、在native层调用所述公钥证书对所述授权信息进行验签,若验签通过则判定具备运行权限。

27、可选的,在合并还原得到完整密钥之后,在所述基于java自定义类加载器,在调用加密的核心业务方法时,使用所述完整密钥对加密字节码文件进行按需解密执行的步骤之前,还包括以下步骤:

28、在自定义类加载器中重写writereplace方法和readresolve方法,以在尝试对核心业务类或自定义类加载器进行序列化或反序列化操作时抛出异常;

29、动态注入java agent,获取instrumentation实例并注册自定义安全防护监视器;

30、通过所述安全防护监视器拦截java反序列化核心入口类的方法,在方法起始位置插入校验逻辑,当检测到对核心业务类或自定义加密类加载器的反序列化操作时,抛出异常。

31、可选的,在具备运行权限之后,在native层读取所述密钥分片并合并还原得到完整密钥的步骤之前,还包括以下步骤:

32、扫描并校验已注入到当前jvm中的java代理的类转换器;

33、获取预先存储的合法类转换器的签名信息,并基于所述签名信息对当前扫描到的类转换器进行验证;

34、若验证结果为存在非法类转换器,则终止当前程序运行或通过反射机制移除所述非法类转换器。

35、基于同一发明构思,本技术还提供了一种面向私有化部署离线环境的java代码保护系统,包括:

36、代码加密模块,用于使用密钥对核心业务类的字节码文件进行加密;

37、密钥分片存储模块,用于将所述密钥拆分为至少两个密钥分片,并将拆分后的密钥分别存储于外部文件及native层的受保护区域中;

38、环境授权模块,用于在本地运行时采集部署环境的硬件指纹,并基于本地预存的离线授权文件验证当前环境是否具备运行权限;

39、动态解密模块,用于若具备运行权限,则在native层读取所述密钥分片并合并还原得到完整密钥;

40、运行执行模块,用于基于java自定义类加载器,在调用加密的核心业务方法时,使用所述完整密钥对加密字节码文件进行按需解密执行,并在方法执行完成后清除内存中的明文数据。

41、再一方面,本技术还提供了一种电子设备,包括:至少一个处理器和存储器;

42、所述存储器,用于存储一个或多个程序;

43、当所述一个或多个程序被所述一个或多个处理器执行时,实现如上述所述的一种面向私有化部署离线环境的java代码保护方法。

44、再一方面,本技术还提供了一种计算机可读存储介质,其上存有计算机程序,所述计算机程序被执行时,实现如上述所述的一种面向私有化部署离线环境的java代码保护方法。

45、与现有技术相比,本技术具有如下优点:

46、本技术提供了一种面向私有化部署离线环境的java代码保护方法及系统,包括:使用密钥对核心业务类的字节码文件进行加密;将所述密钥拆分为至少两个密钥分片,并将拆分后的密钥分别存储于外部文件及native层的受保护区域中;在本地运行时采集部署环境的硬件指纹,并基于本地预存的离线授权文件验证当前环境是否具备运行权限;若具备运行权限,则在native层读取所述密钥分片并合并还原得到完整密钥;基于java自定义类加载器,在调用加密的核心业务方法时,使用所述完整密钥对加密字节码文件进行按需解密执行,并在方法执行完成后清除内存中的明文数据。

47、有益效果为:

48、1.相比传统全java层加密方案,明文秘钥泄漏风险降低90%以上;

49、2.能够有效拦截已知的基于序列化和反序列化与非法代理注入的字节码窃取攻击防护覆盖率接近100%;

50、3.对原有核心业务无侵入,正常业务运行性能无明显影响。

51、本技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术而了解。本技术的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获得。