基于加密锁的指挥信息系统软件防护问题研究

2015-11-01 10:09:26余祥李强何海洋
指挥与控制学报 2015年4期
关键词:攻击者校验代码

余祥 李强 何海洋

指挥信息系统是以军事科学为基础,以军事指挥体系为构建框架,以指挥控制人员为核心,以提高指挥控制效能为目标,采用计算机技术、信息技术等,将各种指挥控制手段与指挥人员有机地结合起来,实现指挥信息的采集、收集、传递、处理和显示,实现指挥决策的科学化的人–机系统[1].指挥信息系统软件的安全与否关乎整个指挥信息系统的安全,以至于整个指挥决策的成败.指挥信息系统软件一旦被破解,将给指挥机构带来巨大损失.因此,对指挥信息系统软件采取一定的保护措施,防止或延迟敌方对被保护软件的攻击,是非常迫切的研究课题.软件保护技术就是为了防止非法用户通过逆向工程、篡改、反编译等技术来非法使用软件、敏感数据及软件版权等,而对软件采取的多种保护技术的综合技术[2].软件保护技术对软件安全的作用日益突出,逐渐成为软件安全性的最后一道防线.

目前,对软件的恶意攻击主要通过3种方式:逆向分析(Reserve Analysis)、代码篡改(Code Tamper)和软件盗版(Software Piracy)[3].针对上述攻击方式,许多软件保护技术被提出用于保护软件的安全,典型的技术包括以下几种:

混淆技术:将原始程序P转换成新的程序P’.P与P’相比具有相同的外部行为,并且代码安全性能更强[4].攻击者将P’恢复成P所耗费的时间多于将P转换成P’的时间.

防篡改技术:通过检查软件程序是否被非法修改,检测篡改后,软件中的防篡改算法会执行相应的反制措施.防篡改技术主要有两种实现策略,一是采取相应机制增加篡改程序的难度,提高篡改者攻击程序的成本;二是检测篡改事件并采取应对措施[5],比如,导致程序非正常运行等.

软件水印技术:通常分为水印(watermark)和指纹(fingerprint)两个方面.两者统称为软件水印,即不被感知地嵌入在软件中的一段具有标识意义的信息[5].在必要的时候,可以从软件中提取出这些特定的标识信息证明软件的版权或是追溯软件非法扩散的途径.

基于硬件的保护技术:通过一些可信硬件给数据、代码或可执行文件提供一个安全的环境,使被保护的软件免于被逆向分析,不被篡改,或阻止代码剽窃事件的发生[4].目前最常用的方法就是将加密锁与软件进行绑定并一起发布.

随着软件攻击技术的快速发展,单纯利用一种软件保护技术已难以实现软件的有效保护,为此,本文将混淆技术与加密锁保护技术相结合,提出一种基于加密锁的指挥信息系统软件保护的方法,将软件关键代码进行隔离,并替换为加密锁中虚拟机执行系统中的指令在加密锁中执行,同时利用加密锁对软件关键数据进行加密并定时校验,有效确保软件安全.

1 加密锁保护原理

加密锁是为了防止软件非法使用与程序进行绑定的硬件设备,其设计思想是:如果一个程序只是一大堆比特的话,复制它是很容易的一件事情,但是复制物理设备的难度就会大许多,成本也会非常高.要想让程序运行,加密锁就必须插在用户的计算机上,这使得程序能够周期地检查它,确保正确的加密锁一直被连在机器上面.程序会不断地检查加密锁,如果没有收到正确响应的话,就会停止运行或使用其它方式惩罚用户,基于加密锁的软件保护的原理流程图如1所示.

图1 基于加密锁的软件保护原理流程图

2 基于加密锁的软件保护方案

本文在设计软件保护方法时,考虑到指挥信息系统软件的重要性,通过加密锁进行内嵌加密和代码隔离的方法来保护软件,同时在程序中调用加密锁时,采用一定的代码混淆技术进一步提高破解的难度,提高软件的安全行.

软件保护后的运行流程如图2所示.软件运行时,检查加密锁的插入状态,确认加密锁插入后,获取加密锁的序列号并从加密锁中读取存储的密钥,在软件中进行校验,检查加密锁是否和软件、计算机是一一对应的关系,通过校验后,软件设置定时器(一般在5s以内)继续正常运行,在运行到代码隔离的部分时调用加密锁执行隔离的关键算法并将结果返回给软件以继续运行,定时器触发后,继续检查加密锁的有效性校验,通过则继续运行,否则提示用户插入正确的加密锁并重试,直至通过校验或用户放弃校验退出软件.

2.1 内嵌加密

内嵌加密需要有软件的源程序,通过在源程序中调用加密锁API函数检查加密锁有效性的方式保护软件.这种加密方式灵活性好,隐蔽性高,加密强度较高.然而要最大程度发挥其保护能力,需要取决于具体的实施过程.

通过内嵌加密将软件、计算机和加密锁进行一一绑定,确保每台运行指挥信息系统软件的机器只能在连接对应的加密锁的情况下才能正常运行软件.通过获取计算机硬件特征信息(如CPU序列号、硬盘序列号或网卡MAC地址等)计算得出机器特征码,并将此特征码通过加密算法(如MD5算法或RSA算法)加密后存储在加密锁中作为密钥,同时考虑到加密锁自身具有全球唯一的序列号,在软件中写入加密锁序列号的校验代码,使加密锁与软件进行一一绑定.如此相当于在加密锁中存储了2个密钥,一个是计算机的硬件特征信息,一个是加密锁全球唯一序列号,通过加密锁序列号的校验和计算机硬件特征信息的校验,有效防止了一个加密锁在多台计算机上使用和一套软件在多台计算机使用的问题,进一步提高了软件的安全性.

内嵌加密中调用函数库的程度决定了被保护软件的整体安全水平.内嵌加密可以调用加密锁厂商提供的API函数,并嵌入到软件代码中,也可以根据驱动程序自己编写对应的调用函数.例如调用API函数库中的加解密函数对软件源代码中的部分数据实时进行加解密,示例如下.

图2 软件保护后运行流程图

另外,也可以利用加密锁中的存储区进行数据验证.在加密锁中存储运行计算机的硬件特征信息,并在运行过程中进行校验,校验不通过则软件停止运行.校验可以在源代码的多处进行,这样与锁的交互会增多,更体现加密锁的效果.计算机的硬件特征信息可以在软件发布前通过加密锁厂商提供的工具写入加密锁,也可以在软件第1次运行时通过软件写入加密锁,校验示例如下.

2.2 代码隔离

代码隔离最初是T Maude等人于1984年提出来的[6],是指从目标程序中“切分”出关键代码片段,通过隐藏程序解释执行过程到硬件中的一种软件保护方法.通过代码隔离即将软件中最重要的算法移植到加密锁内,可以将软件与加密锁捆绑为一个整体,从而有效地保护软件.由于代码隔离后对软件运行的速度会有一定的影响,因此,隔离的代码应该是软件中的关键算法,这是整个加密方案的基础,且隔离的代码算法的复杂度对加密强度有着决定性的影响.代码隔离原理示意图如3所示.

图3 代码隔离原理示意图

具体步骤如下:

1)将预移植到锁内的代码写成加密锁可执行的编译语言代码;

2)使用加密锁对应的编译器编译改写后的代码,并将编译生成的文件通过工具写入到加密锁中;

3)在软件源代码中调用已写入加密锁中的算法.

3 加密锁中的代码混淆

不同的加密锁对软件的加密强度有影响,相同的加密锁使用不同的处理方式也会使软件的加密强度产生很大的差别.对调用加密锁的代码进行一定的混淆处理可以有效地提高软件的加密强度,增加破解的难度或延迟破解的时间.通过增加迷惑语句,同时根据加密锁本身的特点使用一些编程技巧可以有效增加软件攻击者分析软件调用加密锁的难度,使程序难于理解.

1)减少出错提示信息:将出错信息不直接显示给用户,而是通过间接的方式呈现出来.因为这些提示信息很可能导致攻击者直接深入到软件保护的核心.例如,当发现到软件遭受攻击后,先不给出提示信息,而是在设置一个定时器并进行一定的标记,定时器触发后使软件停止工作,或者假装软件正常运行,但实际上却在数据中增加了无用信息.例如:

2)加入复杂的循环和死循环,增加软件攻击者分析程序执行顺序和结构的难度,让软件攻击者难以跟踪,发现加密点.例如:

3)随机地效验和读写加密锁.使软件攻击者难以理解程序的结构和执行规律.随机性是软件加密的重要思想,通过随机性打乱软件的惯性处理流程,可以有效增加程序的复杂度,增加逆向分析软件和复制或模拟加密锁的难度.例如:

4)把调用加密锁和判断程序是否继续执行的语句分开,即得到调用加密锁的返回值后不立即对程序执行状态进行判断,而是在二者之间加入一段其他无关的代码.

5)加入无用的读写,效验加密锁的语句或其他无效代码.

6)在加密锁内写入读出无效数据.

4 结论

单一的软件保护技术容易被攻击者所破解,通过多种保护技术结合共同保护软件可以有效地提高攻击者的攻击代价,而以软件为载体和以硬件为载体相结合的方法能够在性能和成本上达到一个最佳的平衡.本文提出的基于加密锁的指挥信息系统软件保护方法,将机器码加密和代码隔离相结合,能有效提高软件攻击者的攻击代价,提高软件的安全性.该方法已在多个项目软件中得到了使用,自去年初以来软件运行良好,没有发现软件非法扩散或被攻击的情况,证明本方法在保护软件安全方面起到了积极作用.

指挥信息系统软件保护不仅仅是一个技术问题,而且关系到指挥控制能否通畅以及最终作战效能的发挥,其最终的解决不仅需要依靠技术手段,更需要严格的法规制度来保障.

猜你喜欢
攻击者校验代码
基于微分博弈的追逃问题最优策略设计
自动化学报(2021年8期)2021-09-28 07:20:18
创世代码
动漫星空(2018年11期)2018-10-26 02:24:02
创世代码
动漫星空(2018年2期)2018-10-26 02:11:00
创世代码
动漫星空(2018年9期)2018-10-26 01:16:48
创世代码
动漫星空(2018年5期)2018-10-26 01:15:02
正面迎接批判
爱你(2018年16期)2018-06-21 03:28:44
炉温均匀性校验在铸锻企业的应用
有限次重复博弈下的网络攻击行为研究
大型电动机高阻抗差动保护稳定校验研究
电测与仪表(2015年1期)2015-04-09 12:03:02
基于加窗插值FFT的PMU校验方法