厚莹艳
关键词 计算机软件 安全漏洞 动态分析 静态分析
1概述
1.1计算机软件安全漏洞的定义
在开发计算机软件的过程中,安全是最大的前提。计算机软件的安全性表现为保密性、完整性以及可用性,缺少这三个元素中的任意元素都是计算机软件漏洞产生的主要原因[1] 。访问控制、状态定义以及概念模糊是三种常见的计算机软件安全漏洞定义方式。访问控制主要表现在访问软件时控制证据和计算机发生冲突;状态漏洞主要受计算机系统的影响,包含授权和非授权两种状态;模糊概念的定义体现在软硬件设施以及技术程序等方面的不足。事实上,无论何种漏洞造成的影响都不可消除,只有对其进行检测,才能及时发现问题,避免产生风险。
1.2计算机软件安全漏洞的特点
1.2.1原发性
计算机安全漏洞属于操作系统的逻辑错误,错误一般存在于系统编写过程中且有着不易被发现和不可避免的特点[2] 。在研发操作系统的过程中,许多漏洞是由于设计人员的疏忽大意而出现,尽管看起来是一个小失误,但这些漏洞为众多网络黑客提供了可乘之机,他们会编写相关异常程序,抓住软件安全漏洞进而实现病毒植入。一般而言,计算机软件安全漏洞具备原发性的特征,即其会随着软件的使用而被发现。而病毒也具备一定的潜伏期,即其会随着漏洞的显现而逐渐被发现。尽管大多数用户会通过设置防火墙拦截病毒或者通过安装杀毒软件查杀病毒,但这都不能从根本上阻止病毒的入侵[3] 。
1.2.2延伸性
计算机软件安全漏洞的延伸性主要体现在日积月累的过程中,因为漏洞是长期存在的,随着计算机软件应用时间的延长,漏洞也会越来越多。如今,计算机软件在运行时一旦出现漏洞,大多数用户会通过打补丁的方式来处理漏洞。但在旧的漏洞被处理的过程中,也会产生新的漏洞,尽管可以采用系统更新以及升级来实现软件的优化进行漏洞修复,但系统在运行的过程中依旧会出现不同的逻辑错误[4] 。所以,这是一个循环延伸的过程,随着软件系统的升级漏洞也在不断升级,甚至会产生更新的安全漏洞,为此切实避免安全漏洞出现延伸情况,还需从根本下手。
1.2.3差异性
计算机软件种类繁多,质量参差不齐,应用领域存在差异。而计算机软件在运行的过程中,系统环境的差异与安全漏洞的出现有密切联系。如果程序员在程序编写时未能引起足够的重视,对内部程序不够了解,可能会在编写程序时假设一种环境来实现模拟运行,可一旦该假设得不到满足,就会产生相应冲突,出现安全漏洞。比如,软件设备和系统版本之间的差别会在某种程度上限制软件的运行和操作,因而系统在运行的过程中随着冲突的产生而出现安全漏洞,这种差异性也是不可避免的[5] 。
2计算机软件安全漏洞技术分析
计算机软件安全漏洞技术包含静态检测技术、动态监测技术、沙箱检测技术和内存映射技术( 见图1)。
2.1静态检测技术
静态检测一般由程序分析完成,即通过对程序的二进制代码以及源代码进行扫描分析,使用验证技术来检验软件程序是否符合实际需要。对计算机软件的安全漏洞进行静态分析,可以实现对不同监控环境的分别检测,能够大幅减少漏洞检测时间,准确发现源代码的泄漏问题。但计算机软件安全漏洞静态分析流程(图2)比较复杂,需要精准计算且在检测的过程当中只能对已知漏洞进行检测,对未知漏洞難以实现有效描述[6] 。
2.1.1静态分析
静态分析围绕软件程序的源代码进行扫描,可以提炼语法、关键词以及关键句,并根据具体含义进行具体分析。为了检验出疑问数据库中的已知漏洞,在检查时需要按照标准并结合语法模型加以说明,即通过规则处理器接收相关消息,并将接收方式转变为自动接收。在计算机停止运行的状态下,可以进行静态分析,优点是操作方便、反馈真实。
2.1.2程序验证
以计算机系统编程或者模块构建来对程序进行验证,采用了形式化和正确性检测方法的组合完成漏洞检验[7] 。模型检验的方式大致分为自动转换法和符号化检验法。其中,自动转换法反映的是从一个软件程序向等价于自动检测机器转化的过程,而符号化检验的基础就是语言公式的形式表达,并通过语言公式的形式判定结论,以此满足检验要求。
2.1.3定理证明
通过程序判定来实现对系统代码的分析和比较,需要以公式和曲式构造图为参考,且图中的每个条件对应相应节点。整个定理证明的过程比较复杂,因为其和曲式构造图的每一个等式都有不同的对应点,如果等式不成立,那么该软件程序难以满足曲式构造图的要求。
2.2动态检测技术
动态检测技术可以对程序运行时的变量参数以及资源空间进行监视跟踪,一旦在跟踪的过程中发现程序运行异常,进而确定漏洞存在。不过,在修复漏洞的过程中,可能会产生新的安全隐患,再次对系统构成威胁,因此动态检测要在软件运行的过程中实时占用相应的内存。
2.3沙箱检测技术
沙箱检测技术通过访问资源的限制来限定恶意攻击的来源或者链接,从而预防攻击行为。而且在应用沙箱检测技术的过程中,不需要改变操作系统的内核和应用程序,只需要预设针对性的链接访问,从而创建潜在的隔离环境[8] 。
2.4内存映射技术
内存映射技术可以使用NULL 结尾符字串覆盖内存,并给攻击者造成障碍使之无法使用NULL 末尾字符串转换低端的内存区域,或者只能将代码页映射在随机位置中。内存映射技术需要经常对操作系统进行修改,可以检查错误和防止地址跳转,但对新的代码攻击失效。
3计算机软件中安全漏洞的修复措施
(1)利用第三方软件定期升级系统
为了修复计算机系统漏洞,官方网站会及时发布相应的补丁程序。同时,我们也可以通过第三方软件,如360 安全卫士、金山杀毒软件等对系统进行扫描并实现补丁程序的自动安装。在日常使用过程中,无论在程序下载还是收发软件时都应当尽量避免错误程序植入软件,因此需要加强检测或者进行系统防火墙设置,防火墙能够限制外界用户对计算机进行不安全的访问和管理,同时阻止不明黑客的入侵以及时避免计算机开放性带来的影响[9] 。
(2)针对设计缺陷,实现安全保障
作为软件运行中最小的执行单位,编码可以通过原子化锁定方式预防漏洞。在指定的状态下,差额式可以调动各个软件的子系统,或者利用已运行文件和句柄描述的方式描述检测TOCTOU,从而阻止安全漏洞[10] 。而针对缓冲区安全漏洞,我们不仅可以通过对危险函数的检查判断来分析不安全函数来源,也可以选用安全版本替代漏洞,如strcat 版本可以全部替换为strncat 版本。当然,利用函数中的参数的个数以及控制平衡参数性能,也可以实现安全保障。
(3)提高安全使用意识,降低计算机风险
由于计算机软件漏洞具备原发性,所以在使用计算机的过程中无法避免出现漏洞。因此,我们只能够保护系统来降低漏洞带来的损失,在此过程中应该注意提高安全意识,加强日常使用维护,从而减小遭受攻击的可能性。
4结语