论文部分内容阅读
随着软件产业的迅速发展和网络的日益普及,软件产品的安全问题受到越来越多的关注。分析并设计好的研究方法对于提高软件的安全性具有重要意义。代码攻击与代码保护是软件安全领域中两个对立的方面。一方面,一些源代码(如Java字节码)由于自身的特点,很难抵御逆向工程攻击;另一方面,对于代码攻击的研究也从反面促进软件安全技术的发展。由于现代软件的复杂性和开放性,安全需求的实现变得越来越困难。事实表明大多数软件安全问题都是因为采用传统的软件开发过程而产生的,而不是缺乏安全领域的知识和经验。因此,找到一种好的针对安全需求的开发方法也是非常有意义的。本文采用面向方面编程(AOP)的原理和技术,针对代码攻击、代码保护和安全软件工程这三类重要的涉及软件安全的主题进行了深入研究和分析,并取得了如下的研究成果:1.提出了一种混淆代码攻击的方法。在这种攻击方法中,所有的操作都是在字节码级别上完成的,而不必获取目标程序的源代码,从而使得代码混淆失去意义。事实表明这种攻击方法非常直接且成本低廉,但却行之有效。同时,我们还提出了若干建议以抵抗这种新的攻击。2.发现了加密技术在保护J2EE应用时存在的两个问题,即编译失效问题和服务器检测问题。一个调用加密字节码的类在进行编译时会引起编译失效问题,具体表现为编译期异常;服务器在加载加密类之前会对其字节码文件格式进行检查,这将引起服务器运行期异常,称为服务器检测问题。3.编译失效问题和服务器检测问题的本质都是由于被调用的字节码文件因为加密而遭到破坏引起的。为了解决这两个问题,我们提出了密文封装技术,它可以构造出一个合法的字节码密文文件。4.提出了一个面向方面的安全框架。我们以访问控制为例,提出了一个解决代码纠缠和扩散的方法。通过对这种方法的提炼和泛化,包括安全领域模型泛化、部署泛化和安全机制的泛化,最后导出了一个更为通用的旨在解决所有安全领域需求的框架。5.提出了一个软件工程的最佳实践方案,它明确了软件开发过程中安全专家和一般开发人员的职责分工,即:涉及安全逻辑领域的部分由安全专家来实现,而业务逻辑部分可仍由开发人员来实现,最后利用AOP技术对这两部分领域实现进行绑定。这种方法增强了软件开发过程的可控性,降低了开发风险和成本。