您的位置:首页 > 解决方案 > 克服Java代码篡改、逆向工程和盗窃漏洞
如今,越来越多的开发人员选择Java平台作为首选的开源开发环境,通过这种平台可以直接使用可公开获得的.class文件格式和简单的指令集。使用开放源码方法有许多优点,但这样编写的代码对于窥探是完全透明的。对于已开发软件中经过多年时间和投资形成的公司知识产权(IP),其屏障因此变得公开了。
Java开放源码风险和弱点
JVM是免费的 - 黑客可以使用商业反汇编程序查看代码,弄清JVM的工作方式 - 代码变得完全透明
Java .class是可公开获取的 - 黑客可使用简单的可用工具处理、修改或转换.class文件
更少的本机代码指令 - 黑客现在使用更少的指令(200而不是400),可以更快地分析代码以进行逆向工程
更好控制 - 黑客不需要深入到特定的硬件级别,可以更容易地查看和分析数据
执行摘要
由于具有平台独立性,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是开源的
Sun已经免费提供JVM的源代码。这使得黑客只需查看代码即可弄清虚拟机的工作方式。
Java .class文件格式是可公开获取的
如前所述,Java源代码被编译成字节码,而字节码存储在Java .class文件中。Java .class文件格式的规范是可公开获取的,因此有技术背景的任何人都能容易地编写可以处理、修改或转换.class文件的工具。
JVM是软件,而不是硬件
与需要理解特定处理器的专家使用的标准编程语言不同,JVM是一个应用程序,它如同微处理器一样运作,并使用操作系统和计算机硬件提供的内置功能。由于黑客不必深入到硬件级别,因此更容易取得对JVM的完全控制。
因此,例如在使用标准本机系统开发语言进行调试时,暂停处理器极为困难,需要具备处理器、调试功能及可用环调试器的专家知识。但是,由于JVM运行环境的源代码是可公开获取的,因此开发人员可以轻松地建立自己的虚拟机来完全控制虚拟处理器的各个方面。这样可以容易地分析运行环境中运行的每个应用程序。
Java的指令比本机代码少
然而,JVM代码易于进行反向工程的另一个原因是它具有比本地应用程序更少的指令。这是出于性能考虑。JVM的使用在应用程序和本机处理器之间增加了一个软件层,这会对性能产生负面影响。虽然现代处理器不断提高的执行速度最终将缓解这一问题,但这一问题仍然很明显。虚拟机开发人员提高执行速度的一种方法是使用比本机处理器汇编程序更小的字节码指令集。本机应用程序可能包含多达400条指令,而Java应用程序通常使用不超过200条的指令。更少的指令意味着黑客可以更快地分析代码以进行逆向工程。
这些特性使得虚拟机远比其它类型的应用程序更容易遭受逆向工程攻击。
第三方反汇编程序增加了漏洞
不仅是JVM本身容易遭受逆向工程攻击,商业和免费的Java字节码反汇编程序也越来越多,从而进一步简化了代码逆向工程的过程。
IDA和Eclipse字节码插件是众多Java字节码反汇编程序中的两种。作为商业产品,IDA是一种普遍的反汇编程序,可用于许多不同的处理器,包括80x86和MIPS。Eclipse字节码插件是免费软件。它能够反编译Java .class文件的字节码并以适当的顺序显示所有操作码指令。
尽管这些产品不大可能从字节码完美地恢复原始代码,但它们恢复的源代码将等同于原始代码,并且比字节码更具可读性。一旦恢复了源代码,攻击者可以容易地删除部分代码并将其非法地用于竞争对手的应用程序中,或在.class文件中定位打补丁。
为什么板载措施不足以防止逆向工程
大多数虚拟机都包含一些使逆向工程复杂化的功能。Java允许用户在JAR存档中提供的每个类上设置一个数字证书,以确保原始文件没有被更改。虽然这样做并无害处,但该功能相当容易清除,并且仅针对静态补丁方法提供保护,而静态补丁只是攻击场景中的一小部分。而且,这种方法并不能针对运行时应用于内存的补丁提供保护。
Java还通过虚拟机执行字节码验证器,该验证器在执行通过的字节码之前对其进行自动分析。这可以防止执行“奇怪”的代码,也使字节码注入变得更加困难。
然而,尽管这些措施给攻击者造成了困难,但对于充分保护知识产权还远远不够。
防止逆向工程攻击
开发人员通常用以防止.class文件静态分析和字节码反汇编的一种方法是封装,这种方法通过应用加密/解密完整文件来防止对类文件的分析。通过封装,开发人员将受保护文件的原始加载器更换为处理加密/解密的自定义加载器。加密使用将.class文件从标准Java .class格式更改为仅“密钥”所有者可读格式的算法来防止对这些文件的分析。然而,.class文件的字节码在一个内存位置中仍保持可读,在系统加载器尝试加载该类之前的时刻,通常可从该位置访问字节码。如果黑客能够找到那个内存位置,就可以访问原始状态的该类。
防止黑客攻击该内存位置需要第二种技术,称为混淆。混淆可产生一个更加复杂、难于理解并且与原始代码具有相同行为方式的代码版本。下面是一个简单的80x86汇编程序代码段,取自Windows二进制代码。
Sentinel:一种更简便的封装方式
SENTINEL LDK Envelope是一个自动文件包装器,通过文件加密和本机代码混淆提供针对软件逆向工程的强有力保护。这确保了嵌入软件中的算法、商业秘密和专业知识对于黑客是安全的。SENTINEL LDK通过将Java应用程序重新关联到硬件平台,提供了高度安全的知识产权保护。这迫使攻击者在破解受保护的Java应用程序时不仅需要对Java应用程序进行逆向工程,还需要对本机代码进行逆向工程。因此,攻击者必须更加富有经验才能破解已封装的Java代码。
SENTINEL LDK为受保护应用程序与保护密钥之间的通信提供安全通道,从而消除了中间人攻击。Java Envelope使用这种能力来防止黑客通过截取通信访问保护密钥发回的数据。
由于SENTINEL LDK是按请求在运行时解密文件,而不是一次将所有.class文件加载到虚拟机,因此可以防止黑客重建整个应用程序。
Sentinel Envelope 特性和优点
文件自动包装器 - 通过文件加密和本机代码混淆提供强有力的保护来防止软件逆向工程
将应用程序重新关联到硬件 - 应用程序通过保护密钥与与硬件紧密结合
安全通信通道 - SENTINEL HASP为受保护应用程序与保护密钥之间的通信提供安全通道,从而消除了中间人攻击。Java Envelope使用这种能力来防止黑客通过截取通信访问保护密钥发回的数据。
运行时解密 - 由于SENTINEL HASP是按请求在运行时解密文件,而不是一次将所有.class文件加载到虚拟机,因此可以防止黑客重建整个应用程序。
结论
虽然JVM为开发人员提供了编写一次应用程序即可在几乎任何平台上运行的能力,但这种体系结构具有使黑客易于对源代码进行逆向工程、篡改或盗窃的重大缺陷。众多的商业反汇编程序进一步简化了这一过程。而且虽然Java确实提供了一些安全措施,但包括的这些能力都不足以阻止攻击者。加密和混淆等技术通常用于减缓攻击,但仍然留有漏洞。封装将加密与本机代码混淆相结合来提供目前最强的保护,可以保护知识产权。通过使用SENTINEL HASP解决方案,您可以获得封装的诸多好处,而不必花费时间和精力来开发新的解决方案。
Sentinel软件货币化解决方案
SafeNet在为全世界的软件和技术供应商提供创新和可靠的软件许可、授权和管理解决方案方面拥有25年的行业经验。我们的Sentinel®软件货币化解决方案系列易于集成和使用,具有创新性并注重功能,对于任何规模、技术要求或组织结构的任何机构,都能满足其独特的许可证启用、执行和管理要求。客户只有使用SafeNet的产品才能够应对所有的反盗版、知识产权保护、许可证启用和许可证管理挑战,同时提高公司盈利能力、改进内部运营、维持竞争优势并巩固与客户及最终用户的关系。SafeNet在适应新的需求和引入新技术以应对不断变化的市场环境方面具有丰富的成功经验,我们在全球的25,000多家客户已经认识到选择Sentinel就意味着选择了在现在和未来自由开展业务的主动权。