软件多元化技术概要 | 郑州计算机学校_郑州电脑学校_郑州电脑培训

11

01-2018

软件多元化技术概要

1 软件多元化介绍WcA郑州电脑培训学校
本章描述了软件多元化的基本概念,并解释了为何软件多元化对于保护运行于不可信任环境下的软件系统的重要性。
1.1 什么是软件多元化
软件多元化是指同一个软件的多个实例有不同的可执行二进制代码。对于黑客来说,每个实例具有同样的功能,但它们具有不同的二进制码以及运行流程。软件多元化可以防止黑客把从某个实例获得的信息应用于其它实例,这样黑客就很难开发出对整个软件所有实例都适用的通用破解方案,每个软件实例必须要单独破解。
1.2 为什么需要软件多元化
在当前开放性架构的计算系统中,用户可以控制他们的系统并且可以更改软件和进程。有些用户会试图分析软件保护机制,有些可能带有纯技术的好奇以外的恶意目的。
软件开发者为了保护未授权的软件拷贝或软件中的知识产权,通常需要防止软件被逆向工程。常用的加密算法,如AES、RSA、ECC,他们的设计初衷是专为在可信的实体之间交换加密的消息。加密和解密的运算在黑箱中进行,黑箱内部是安全的。攻击者只存在于受信任的实体之间,无法知道加密解密实体内部的信息和具体实现 。
攻击加密通信的终端
市场上有很多不同的代码保护技术,这些技术提供防止逆向工程和代码分析的功能。这些方案不管是否成功和是否复杂,大多数都无法对抗通用破解(破解一次,到处使用)。所谓通用破解指的是一旦能够成功的破解某个软件实例,那么就可以把类似的破解应用于同样软件的所有实例上。这在以前发生过无数次并给软件厂商造成了巨大的损失。通用破解的根本原因是目标软件的所有拷贝都有同样的二进制码,这样攻击者就可以成功的开发出通用的破解方案。
软件多元化是应对通用破解的一个十分有效的技术。它能够大大增加对被保护的应用软件的破解难度和破解所花费的时间。极端状况下,攻击者甚至必须要对每个客户端的二进制进行单独破解。软件多元化对于防止在开放环境下大量分发并安装的软件被盗版是十分有效的手段。这里的开放系统不仅包括windows PC,也包括移动操作系统比如Android和iOS。
1.3 软件多元化类型
软件多元化有两种类型:
• 数据多元化
• 代码多元化
如果要实现软件多元化,对于包含了密码学运算操作的应用程序,至少应该包含上述两种技术之一,完善的软件多元化应该是应用了上述两种技术的综合保护方案。
1.3.1 数据多元化
数据多元化是对抗通用破解的一种相对简单的办法。通过这种技术,同一个软件中使用的某些嵌入在代码里的数据会在不同的软件实例中变化。这个数据可以是某个软件实例中使用的加密数据库的密钥,也可以是其它要导入到应用程序的密钥的导入密钥。如果黑客破解了某个特定的软件实例,他不能把获得的密钥用于解密其它应用实例的加密信息。
要应用数据多元化,独特且个性化的数据值需要在编译或者部署的时候被注入到二进制文件中。
1.3.2 代码多元化
相对于数据多元化,代码多元化是一个对抗通用破解更为复杂和强大的保护技术。通常情况下,也比数据多元化更昂贵 。使用这种方法,每个或者每组软件实例有不同的二进制代码 。代码多元化通常是通过私有的或者商用的防破解技术实现,这些技术包括代码扰乱、代码签名、完整性保护、反调试、反寄存器快照、指令随机化和虚拟化。在大多数情况下,为了性能和简单性,只需要随机化软件的关键敏感部分(如加解密模块),但是对整个可执行文件的随机化会达到最佳的保护效果 。
1.4 挑战
软件多元化是把双刃剑,在给攻击者制造门槛防止盗版的同时,也增加了软件开发和维护的难度:
• 实施软件多元化相对昂贵并且会增加开发实施的难度。
• 对于大规模部署的软件实施软件多元化,软件的维护更加复杂。
假设某个具有数千软件实例的软件需要升级到新的版本。每个已经安装的软件实例都要兼容待更新的新版本,原有的多元化用户数据都要能够在不泄漏秘密的情况下转换,而且用户数据要保持一致。软件多元化要求开发者在软件规划和开发阶段付出巨大的努力。软件多元化的方案必须综合考虑软件的安装、升级、维护等各个方面。软件多元化方案的设计和实现需要综合考虑软件的各个阶段、各个方面。开发者在预算和开发周期方面,需要考虑实现软件多元化从开发到发布、升级的费用增加和周期延长。
2 实践原则
本章介绍了一些软件多元化方法,它们可以有效的保护应用程序安全。
2.1 总体最佳原则
如果您的系统包含敏感数据,比如许可证、个人信息、密码或者加密密钥。当它运行在不被信任的开放环境中,比如消费电子设备上时,您需要某种软件多元化作为您防破解方案的一部分。这会极大的增强您的程序防破解和盗版的安全性,尤其有助于防止通用破解。
就像在1.3.1中提到的,数据多元化是一个简单而有效的增加软件安全性的方法。它使得同样软件的不同实例里被处理的数据各不相同而且互相不兼容,没有办法从某个实例拷贝数据出来,用在另一个实例中。这种故意的反互操作性的保护可以有效的打击盗版,并获得对已部署实例更多的控制权。数据保护相对容易实现,所以在您的应用程序的安全性设计中应该是一个标准的组成部分。
就像在1.3.2中描述的,代码多元化是一个更复杂的解决方案,但它对通用破解提供了最好的保护,使得黑客对软件的破解非常昂贵和费时。您在考虑代码多元化时,应该考虑以下几个问题:
• 本产品准备用在软件多元化上的开支预算和开发人力预算。
• 对于维护已安装的多元化应用程序,要多复杂,准备花多少预算。
• 项目中多少代码要做多元化。
• 软件的应用实例都要做到代码多元化还是只需要按组实现应用实例组的多元化。
2.2 定期更新多元化代码
软件多元化可以有效地防止攻击。软件提供商主动定期更新安装在客户端的的安全软件,可以挫败黑客的破解企图。通过定期更换安全软件的多元化实例,攻击者只能放弃已经得到的分析结果,重新进行分析。最终攻击者破解软件所花费的劳动大大超过所获取的利益,攻击者就没用动力破解目标软件。
2.3 升级多元化的应用程序
由于新的二进制代码和应用实例中已有的数据有可能不兼容,所以升级大量的多元化应用程序实例是一个具有挑战性的事情。
以下技术有助于开发者更好的升级多元化应用程序:
• 把您的应用程序模块化,模块之间相互独立,可以很容易的更换,对模块单独进行多元化。
• 多元化的代码模块在导出和导入它们的内部状态时,应该以加密的形式进行操作。如果导出的状态在原来的版本和升级版本间保持不变,该软件可以被安全地替换为新的多元化代码模块。状态数据可以用一个对于每个软件实例都唯一的密钥进行保护。这是1.3.1中描述的数据多元化化的一种方式。
• 制定一种机制来检测两个应用实例是否使用相同或兼容的多元化数据实例(如相同的状态导出/导入密钥)。例如,一个应用程序可以返回一个数据多元化的标识符, 它可以用来标识某类使用兼容数据的应用程序实例 。
• 如果旧的模块兼容新的版本的状态数据,那么新的模块就可以简单地替换旧的模块,无需转换模块状态。
2.4 数字水印
软件多元化被证明是一种天然的实现软件水印的技术。软件水印,结合许可证跟踪,可用于打击软件盗版。
大多数的软件多元化技术基于保护一个随机的种子 – 从整个被保护实例产生一个小的数据值。软件的数字水印也可以通过从相同的种子产生的类似的代码模式来实现 。鲁棒的水印技术(例如某个特定的代码模式)可以识别应用程序的来源或许可信息。
3 whiteCryption软件多元化方案
whiteCryption在软件安全和白盒密码领域拥有超过20年的经验。whiteCryption研究开发的软件代码保护和数据保护技术是一种便捷的、有效的软件多元化全面解决方案。该公司的主要产品包括软件代码保护(SCP)和安全密钥箱(SKB)。本节简要介绍了SCP和SKB,并利用他们实现软件的多元化保护。
3.1 SCP简介
SCP是一个综合的代码保护解决方案,用于固化保护现代的软件应用程序。SCP的功能包括了:复杂和有效的代码混淆、完整性保护、反调试,设备绑定技术。SCP对应用程序代码的安全性保护达到了前所未有的高度。

SCP 保护流程
SCP可以保护任何符合标准的C / C ++ / Objective-C源代码,代码本身或编译工具一般不需要作改变。大多数的安全功能是自动应用的,可以通过一个简单的图形用户界面工具设置选项并执行保护操作。
WcA郑州电脑培训学校

WcA郑州电脑培训学校

3.2 SKB简介
SKB是一个C / C ++库,它提供了一套上层接口实现了通用的标准加密算法(如AES、RSA、ECC等)。whiteCryption的SKB库使用独特的白盒加密算法实现,而不是通常的黑盒加密算法(假设密码学算法的环境是安全而不可为外界所见)。白盒密码学算法是专门为不安全运算环境设计的,在任何时候都隐藏和保护加密密钥。 whiteCryption的SKB库在进行密码学运算时,所有的操作始终只使用加密的密码和受保护的算法。
SKB提供了一组加密算法以及全面的接口,集成了SKB的应用程序通过SKB API执行加密算法。

SKB overview
由于whiteCryption的SKB库设计上的鲁棒性,集成了SKB的应用程序可以安全地部署在不安全的环境中,如移动设备、平板电脑和台式电脑。在这些不安全的平台上,任何人都可以访问程序代码和设备内存,但是集成了SKB的应用程序可以在这些平台上保证密码学操作和通信的安全性。
3.3 whiteCryption软件多元化
whiteCryption软件多元化方案包含了数据多元化和代码多元化(见1.3):
• 数据多元化是通过SKB来实现的。每个SKB包都有一个导出密钥 – 一个嵌入到代码中的受保护的密钥。导出密钥用于加密SKB安全环境导出的其它密钥。只有具有相同导出密钥的应用程序实例可以直接交换加密的密钥。两个多元化实例可以通过比较它们的导出密钥标识符确定他们之间的兼容性。
• SCP和SKB都可以实现代码的多元化。每个SCP和SKB实例(或一组实例)都由一个随机的种子产生。whiteCryption的客户可以跟踪每个多元化的软件实例,从而就可以发现某个特定的软件实例是否被非法拷贝和传播。
3.4 whiteCryption软件多元化的优势
下面是whiteCryption软件多元化方案的主要优势:
• whiteCryption的SKB包可以提供多元化的二进制实现。它们的二进制不同,但它们之间的数据交换是兼容的,不同的多元化实例之间可以直接安全地交换数据。
• whiteCryption提供多元化的商业解决方案,比私有方案成本更低。商业化的成熟方案可以避免大的前期开发、测试和培训成本,实现快速部署。
• whiteCryption有能力迅速生产出大量多元化的产品包,可以满足客户迅速的大规模部署需求。
• whiteCryption可以根据客户的要求进行定制。whiteCryption技术架构的先进性使得我们比市场上其它供应商更加灵活快速的实现定制服务。
• whiteCryption的软件多元化和部署过程十分规范,脚本的每一步执行都有详细记录。整个流程是可追溯、可重复的。

该日志 2018年01月11日发表在郑州计算机学校分类下, 通告目前不可用,你可以至底部留下评论。
转载请注明: 软件多元化技术概要 | 郑州计算机学校_郑州电脑学校_郑州电脑培训