论文部分内容阅读
程序的安全问题,是信息安全的一个重要方面。一方面,软件的复杂度和功能性提高,软件缺陷和漏洞的概率也大大增加,攻击技术也不断发展。另一方面,程序安全方面的研究也取得了长足的进展,研究者们提出了各种程序行为模型,抵御攻击的技术也在不断进步。现今的程序设计,大多采用了动态共享库技术。其目的是减少程序的大小,节省空间,提高效率,具有很高的灵活性。从进程的角度来看,共享库是一个重要组成部分。而由共享库引发的安全问题,也直接影响着程序自身的安全。不同于静态库,动态共享库并不是执行程序的一部分,而是根据执行需要来载入,其代码可以在多个程序中共享使用。在程序分析和建模阶段,动态链接使得问题变得复杂。如果在建模时采用了指令地址,而共享库的地址却无法确定下来,则只能对除共享库以外的程序代码进行分析和建模。当不采用指令地址时,对于模仿攻击则缺乏防备力量。
本文在对已有的程序安全方法的研究基础上,提出了一个动态共享库的保护方案。从程序自身的角度,来考虑其加载的共享库的安全验证问题,并在程序运行期间对库函数的调用合法性进行验证,确保程序的正确运行。在前期,通过对共享库文件进行数字签名,将签名保存在文件自身中,当程序载入共享库时验证其签名的正确性。而且,我们通过对目标代码的分析,记录下程序中每一次库函数调用的信息,在程序运行期,我们验证每一次库函数的调用合法性。相比以前的工作,我们将共享库的安全问题单独考虑。通过对共享库的数字签名和验证的方式,避免了一大类通过共享库注入来实现的攻击方法。而对库函数调用的动态监控,相比系统调用来说有更强的监控粒度,同时可以防御库函数重定向一类的攻击,如果攻击代码调用了库函数功能,监控也同样可以发现,因而限制了其攻击能力。