1. 软件漏洞分析简述
1.1 漏洞的定义
漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。
1.1.1 漏洞在各时间阶段的名称
根据是否公开分为:未公开漏洞、已公开漏洞
根据漏洞是否发现分为:未知漏洞、已知漏洞
根据补丁和利用价值是否发布分为:0day漏洞、1day漏洞、历史漏洞
图1 漏洞在各时间阶段的名称1.2 漏洞的特点
- 持久性和时效性
持久性:随着时间的迁移,旧的漏洞会不断消失,新的漏洞会不断出现
时效性:当超过一定的时间限制,漏洞的威胁就会逐渐减少直至消失
- 可利用性和隐藏性
可利用性:攻击者能够利用漏洞对系统带来威胁和损失
隐蔽性:往往需要通过特殊的漏洞分析手段才能够发现
- 广泛性和具体性
广泛性:会影响到很大范围的软硬件设备
具体性:存在于具体的环境或者条件中
1.3 漏洞的影响
-
可以引发恶性的Web攻击事件,从而使得公民的权益受到伤害。例如:2011年12月21日,中国最大的程序员社区网站CSDN被爆出有超过600万用户的注册资料,尤其是用户口令遭泄露。
-
可以引发传播广泛的计算机病毒。随着互联网技术的发展,攻击者可以借助某个软件漏洞肆意传播恶意的病毒和文件。如在尼姆达,蓝宝石,冲击波和震荡波等事件中,攻击者利用现有的漏洞传播漏洞,给社会造成巨大损失。
-
可以引发后果严重的系统故障。如1962年,发射往金星的水手一号探测器在发射 293
秒后偏离了预定轨道。它的任务在 5
个星期后由成功发射的水手二号完成。这次失败的原因是一个程序员将某个公式转换成了计算机代码转错了,漏了一个下标。这个下标原本是半径
R 的第 N
次平滑时间导数值。由于缺少数据光滑化处理功能,制导系统把正常速度当成错误处理,并造成了修正不精确,最终探测器偏离航向的。 -
利用软件漏洞可以实现高级的可持续攻击。攻击者联合多个0day漏洞对重要的信息系统发起长时间攻击,如震网,火焰等病毒。
1.4 软件漏洞必然存在的原因
-
由于计算机基于冯诺依曼体系结构,所以决定了漏洞存在的必然性。
-
作为互联网基础的TCP/IP协议栈在设计之初主要源于互联互通和开放性。
-
新技术的出现增加了互联网的复杂性,增大了漏洞产生的概率。
-
软件开发的各个环节都是人为参与的,缺乏经验或者疏忽等都可能引发漏洞。
2. 软件漏洞分析技术概述
随着社会经济的发展,互联网也随之迅速的发展,软件已经充斥在我们生活的方方面面,为我们提供便利的同时也带来了安全隐患,因此软件漏洞分析技术的重要性不言而喻。软件漏洞分析技术主要分为:软件架构安全分析技术、源代码漏洞分析技术、二进制漏洞分析技术和运行系统漏洞分析技术四大类。图2.1说明各技术之间的关系。
图2.1 软件漏洞分析体系2.1 软件架构安全分析
软件架构是软件的“骨架”,是软件开发生命周期中代码编写的基础。在此阶段进行软件漏洞的分析具有指导性的意义,能够及时发现有问题的部分并进行修正,可以减少后期的维护和产生的危害。图2.2是软件架构安全分析的基本原理。
图2.2 软件架构安全分析原理目前,关于软件架构安全分析技术在国内外还处于探索和发展阶段,已形成的技术主要分为:形式化分析和工程化分析,具体如2.3。
图2.3 软件架构安全分析技术分类2.2 源代码漏洞分析
源代码漏洞分析主要是对高级语言编写的程序进行分析以发现漏洞。源代码作为软件的最初原型,其中的安全缺陷可能直接导致软件漏洞分产生,因此源代码漏洞分析显得尤为重要。目前源代码漏洞分析主要采用静态分析的方法,由于该方法不受程序的输入和运行环境等因素的影响,所以可能发现动态分析难以发现的软件漏洞。源代码漏洞分析一般包含源代码的模型提取,对历史漏洞、程序代码进行特征提取,静态的漏洞分析和结果分析等四个步骤,通过这四个步骤完成对源代码的漏洞分析,结构图如图2.4所示。
发布评论