论文部分内容阅读
随着信息技术的高速发展,第三次科技革命带领人类进入信息时代,普及的信息技术使得世界成为“地球村”,改变了人类传统的生产、生活及通信方式。然而,信息产业在迅猛发展、空前繁荣的同时也带来了负面影响——由于技术和成本的原因,人们仅仅关注于计算机和网络的可用性,从设计到实现均没有考虑安全因素,事实证明这给信息基础设施带来了各种安全隐患。软件是信息基础设施的灵魂,软件设计由于安全性欠缺的历史原因和功能需求日益复杂的现实原因,经常发生各种故障和失效,给社会和用户带来巨大损失。软件测试是对软件进行人工或自动分析,检验其能否满足设计需求的过程;通过静态的源代码分析以及动态的目标码运行来判断软件是否具备预期的功能和性质。安全属于软件的非功能属性,软件测试可以发现、定位进而排除软件的安全隐患。因此,软件测试是保证软件安全的关键技术,也是软件在开发和维护中必要的安全手段。本文所指的软件测试与分析主要是从“发现”的角度出发,利用测试技术,去寻找软件中潜在的或者未公开的性质,特别是导致安全隐患的因素。从安全性分析的角度来说,本文的软件测试围绕恶意代码检测、漏洞定位、代码冗余简化、基于用户行为习惯的主机安全加固等四个关键技术展开,结合软件的静态分析和动态分析,进行了有针对性的研究和系统开发实现,并取得了一定成果,具体包括:1.针对传统的恶意代码检测方法漏报率高且运行效率低、很大程度依赖于人工检测的问题,本文研究并实现了基于图编辑距离的恶意代码检测系统。通过静态分析技术将恶意代码抽象为函数调用图,采用图的编辑距离作为恶意代码间相似度的评估标准,因此恶意代码的分类识别就转化为在已建立的恶意代码图数据库中搜索最小编辑距离邻居图的问题。为了提高检测速度,引入了函数对应的汇编指令集和多路优势点树的高维索引算法等一系列优化方案。实验证明,该方案可有效识别恶意代码的变种,且兼顾了检测的准确性和运行效率。2.基于大型软件开发过程的复杂性、节点之间的相互关系往往构成一个复杂的协作关系网络的现实,本文提出一种基于复杂网络思想的新思路用于补丁比对和漏洞定位。将大型软件的函数调用图看做一个复杂网络系统,用多维复杂网络系统级特征量去描述软件的结构特征,生成软件的复杂网络结构签名,作为软件间相似度评估的依据;进而可进行原文件和补丁文件之间的比对,通过复杂网络中连通集团的递归分裂和回溯可初步定位漏洞的函数级位置;进一步使用控制流程图级的补丁比对技术,定位漏洞的精确位置。该方法采用“软件网络观”的思想,是补丁比对和漏洞定位的一种新尝试。3.现有代码优化方法一般都侧重于时间效率的提高而非代码量的缩减,且通用性不高,本文从软件静态分析的角度出发,提出并实现了指定功能的代码冗余简化测试方法。基于软件的源代码或中间代码,通过程序依赖图研究被测对象的程序分支、变量之间的依赖和关联关系,建立一种通用的冗余代码定位测试方法。与常见的代码优化技术侧重于时间效率的提高相比较,本文基于源代码和目标代码对最终目标代码的代码量进行了压缩,测试分析全面,不受源码所用语言和是否具有源码的限制。4.针对传统的恶意代码检测只考虑代码自身行为,而不考虑作为主体的用户的使用场景,研究并实现了基于动态知识库的用户行为安全辅助系统。本文在对进程行为进行动态分析的基础上,还分析了用户的使用习惯;通过攻击树模型和贝叶斯算法判定未知文件的恶意性,对用户获取文件的来源地进行安全权值统计,通过更新知识库和动态学习最终形成对主机安全的评估值;从而给用户行为提供实时安全性判定,提高用户主机的安全防护水平,加固主机安全。这是将用户行为和软件行为相结合来判定文件安全和辅助用户安全使用主机的新方法。