联系方式 Contact

北京市圣天地电子信息股份有限公司

地址:北京市海淀区知春路108号豪景大厦B座2003室

电话:010-62101353/63

传真:010-62101373

网址:www.infotide.cn

邮箱:service@tide.com.cn‍

点击这里给我发消息

搜索 Search
你的位置:首页 > 解决方案

Java程序保护迫在眉睫

2016/7/19 17:38:59点击:

摘要

   由于具有平台独立性,Java环境越来越受到开发人员的欢迎。然而,Java的开源代码、可公开获取的.class文件格式和简单的指令集使其暴露于窥探和敌对分析之下。随着各机构将它们的商业应用程序转向Java技术,其关键知识产权变得易于遭受逆向工程、篡改和盗窃。目前,源代码和字节码级别的.class文件加密和混淆是开发人员用于阻止逆向工程的两个主要措施,但漏洞仍然存在。 

本文探讨了Java代码漏洞的性质,现有解决方案的局限性,以及结合混淆与加密的Java代码全面封装如何成为保护关键算法和其它知识产权的理想解决方案。

Java应用程序正变得越来越普遍 

如今,全世界的IT公司都在一定程度上接受了Java。现在有无数的产品使用Java编写并用于Java平台,而不是Windows或UNIX平台。与其它编程语言相比,Java最重要的优点是平台独立性 - 这意味着它几乎可以在任何体系结构和操作系统上运行。Java并不将应用程序绑定到特定的硬件体系结构(如Intel或PowerPC),而是对所有体系结构都使用单一的代码库。软件开发人员先以使用预定义Java API软件包的Java语言编写程序, 然后使用Java编译器来编译这些程序。其成果是可在Java虚拟机(JVM)上执行的已编译字节码,Java虚拟机是用于执行Java程序的软件环境(如Java Runtime Environment)。用户仅在拥有JVM时才能运行Java程序;但许多平台都有JVM,这使得Java成为一种高度可移植语言。

Java极易遭受逆向工程 

虽然能够“编写一次,随处运行”(Write Once, Run Anywhere)是一个巨大的优势,但这种环境的架构方式使其远比本机应用程序更容易被黑客进行逆向工程。这意味着开发人员面临着失去知识产权的非常真实的危险。基于应用程序的虚拟机比本机应用程序更容易逆向工程的原因有很多:

Ø JVM是免费的 - 黑客可以使用商业反汇编程序查看代码,弄清JVM的工作方式 - 代码变得完全透明 

Ø Java .class是可公开获取的 - 黑客可使用简单的可用工具处理、修改或转换.class文件 

Ø 更少的本机代码指令 - 黑客现在使用更少的指令(200而不是400),可以更快地分析代码以进行逆向工程 

Ø 更好控制 - 黑客不需要深入到特定的硬件级别,可以更容易地查看和分析数据 

为什么板载措施不足以防止逆向工程 

大多数虚拟机都包含一些使逆向工程复杂化的功能。Java允许用户在JAR存档中提供的每个类上设置一个数字证书,以确保原始文件没有被更改。虽然这样做并无害处,但该功能相当容易清除,并且仅针对静态补丁方法提供保护,而静态补丁只是攻击场景中的一小部分。而且,这种方法并不能针对运行时应用于内存的补丁提供保护。 

Java还通过虚拟机执行字节码验证器,该验证器在执行通过的字节码之前对其进行自动分析。这可以防止执行“奇怪”的代码,也使字节码注入变得更加困难。 

然而,尽管这些措施给攻击者造成了困难,但对于充分保护知识产权还远远不够。

防止逆向工程攻击 

开发人员通常用以防止.class文件静态分析和字节码反汇编的一种方法是封装,这种方法通过应用加密/解密完整文件来防止对类文件的分析。通过封装,开发人员将受保护文件的原始加载器更换为处理加密/解密的自定义加载器。加密使用将.class文件从标准Java .class格式更改为仅“密钥”所有者可读格式的算法来防止对这些文件的分析。然而,.class文件的字节码在一个内存位置中仍保持可读,在系统加载器尝试加载该类之前的时刻,通常可从该位置访问字节码。如果黑客能够找到那个内存位置,就可以访问原始状态的该类。 

防止黑客攻击该内存位置需要第二种技术,称为混淆。混淆可产生一个更加复杂、难于理解并且与原始代码具有相同行为方式的代码版本。当使用了混淆时,攻击者必须制作特殊工具才能理解原始代码段,而这不是一件容易的事。 

有几种不同类型的混淆方法可用于指令集:程序员可以通过替换二进制代码中的所有字符串来混淆代码,这样就更加难以找到一个好的切入点来开始逆向工程攻击。他们可以通过插入指向垃圾代码的跳转并返回来迷惑攻击者,或混淆源代码或字节码。 

SafeNet Sentinel LDK Envelope:一种更简便的封装方式 

Sentinel LDK Envelope是一个自动文件包装器,通过文件加密和本机代码混淆提供针对软件逆向工程的强有力保护。这确保了嵌入软件中的算法、商业秘密和专业知识对于黑客是安全的。Sentinel LDK通过将Java应用程序重新关联到硬件平台,提供了高度安全的知识产权保护。这迫使攻击者在破解受保护的Java应用程序时不仅需要对Java应用程序进行逆向工程,还需要对本机代码进行逆向工程。因此,攻击者必须更加富有经验才能破解已封装的Java代码。 

Sentinel LDK为受保护应用程序与保护密钥之间的通信提供安全通道,从而消除了中间人攻击。Java Envelope使用这种能力来防止黑客通过截取通信访问保护密钥发回的数据。 

由于Sentinel LDK是按请求在运行时解密文件,而不是一次将所有.class文件加载到虚拟机,因此可以防止黑客重建整个应用程序。 

结论

虽然JVM为开发人员提供了编写一次应用程序即可在几乎任何平台上运行的能力,但这种体系结构具有使黑客易于对源代码进行逆向工程、篡改或盗窃的重大缺陷。众多的商业反汇编程序进一步简化了这一过程。而且虽然Java确实提供了一些安全措施,但包括的这些能力都不足以阻止攻击者。加密和混淆等技术通常用于减缓攻击,但仍然留有漏洞。封装将加密与本机代码混淆相结合来提供目前最强的保护,可以保护知识产权。通过使用Sentinel LDK解决方案,您可以获得封装的诸多好处,而不必花费时间和精力来开发新的解决方案。