第五章 应用安全
- 1.漏洞概念和特点
- 2.软件漏洞利用及其防护
- 3.软件开发生命周期
- 4.软件安全监测技术
- 5.软件安全保护技术
- 6.恶意程序的传播方法
- 7.Web 应用威胁
- 8.Web 安全监测
1.漏洞概念和特点
1.软件漏洞的概念:硬件或者软件,协议等在系统配置或者安全策略上的缺点。
2.漏洞产生原因:
(1)软件设计开发运行阶段的疏漏
(2)软件技术和代码规模快速发展
(3)软件安全测试技术滞后
3.软件漏洞的特点:危害性大、影响广泛、存在长久性、隐蔽性
4.软件漏洞的分类:
(1)按照漏洞被利用的地点分类:
(2)本地利用漏洞:本地提权
(3)远程利用漏洞:通过网络发起攻击并利用漏洞
4.2.根据漏洞形成原因分类:
(1)输入验证错误漏洞:未对用户输入的数据检查合法性,使攻击者非法进入系统
(2)缓冲区溢出漏洞:向程序的缓冲区输入超出了缓冲区规定长度的数据,使得缓冲区溢出,破坏了程序的正常堆栈,从而执行别的命令。
(3)设计错误漏洞:开发设计时产生的漏洞
(4)意外情况处置错误漏洞:程序在实现逻辑中没有考虑到的一些意外情况,从而导致运行错误。
访问严重错误漏洞:程序的验证部分存在逻辑出错,导致攻击者可以绕过验证机制直接进入系统
(5)配置错误漏洞:应用配置出错导致的漏洞
(6)竞争条件漏洞:是程序是处理事件时的时序和同步方面存在缺陷,导致攻击者可利用存在的机会窗口来影响
(7)环境错误漏洞:环境变量的错误导致
(8)外部数据异常执行漏洞:攻击者在外部执行的数据被系统当做代码执行,典型有SQL注入和XSS等
4.3.根据生命周期不同阶段分类
(1)0day漏洞:处于未公开状态的漏洞,只有攻击者本人和小部分黑客团体在利用,厂商还不知情,没有人和网防范手段,危害极大
(2)1day漏洞:厂家刚发布漏洞补丁1天内的漏洞,通常指刚发布补丁不久的漏洞
(3)已公开漏洞:厂家发布了补丁,大部分用户打补丁,危害比较小
4.4.按照漏洞对系统安全的威胁后果分类:
(1)普通用户访问权限漏洞
(2)本地管理员权限漏洞
(3)远程管理员权限漏洞
(4)权限提升漏洞
(5)本地拒绝服务漏洞
(6)远程拒绝服务漏洞
(7)服务器信息泄露漏洞
(8)远程非授权文件存取漏洞
(9)读取受限文件漏洞
5.漏洞库:
(1)CVE:软件漏洞的行业标准
(2)BugTraq:安全信息网站
(3)NVD:美国国家漏洞数据库
(4)CNNVD:中国国家信息安全漏洞库
(5)CNVD:国家互联网应急中心
(6)其他漏洞库:EDB漏洞库、微软安全公告板和微软安全建议、绿盟科技的中文安全漏洞库、启明星辰的中文安全公告库
6.常见的软件漏洞:缓冲区溢出漏洞
7.函数调用中栈的布局:三个寄存器:
(1)指令寄存器(eip):存放一个指针,指针始终指向下一条命令(即将要被调用的函数)的地址,即返回地址。
(2)基址指针寄存器(ebp):存放一个指针,指针始终指向当前执行命令(正在被调用的函数)所对应栈的底部地址,即基地址,也称为栈帧底部指针
(3)栈指针寄存器(esp):存放一个指针,指针始终指向当前执行命令(正在被调用的函数)所对应栈帧的最新栈顶地址,也称为栈顶指针
8.格式化字符串漏洞:根据传入的格式化字符串获取可变参数的个数和类型
9.整数溢出漏洞:(无符号有符号两类)
(1)存储溢出:存储溢出是用另外一种数据类型来存储整型造成的
(2)运算溢出:对整型变量进行运算时没有考虑到边界范围,导致运算后数值范围超出存储空间。
(3)符号问题:一般长度变量用无符号
10.数组越界漏洞:主要软件漏洞,由不正确的数组造成。攻击者构造超出数组范围的索引值,就能对任意内存地址读写
11.写污点值到污点地址漏洞:一般存在于windows的驱动中,通过构造污点值和污点地址,利用这种漏洞改写系统内核的关键数据结构。其中污点值为可能引发漏洞的输入值,污点地址为触发漏洞的潜在地址
2.软件漏洞利用及其防护
1.概念:为了实现缓冲区溢出,给存在漏洞的程序输入特定参数,造成缓冲区溢出,攻击者将精心构造的溢出数据覆盖掉返回地址,程序执行返回地址时,会转向攻击者的shellcode,从而挟持进程的控制权。
2.漏洞利用技术:
(1)静态shellcode地址的利用技术:如果存在溢出漏洞的程序是系统每次开机自己加载的,那么系统启动时为其分配的内存地址一般是固定的,这是shellcode地址不变所以可以直接让shellcode栈帧中的静态地址覆盖返回地址。
(2)动态shellcode地址利用技术:由于有些漏洞程序存在于动态链接库中,每次加载都是动态的,因而下一次动态链接库被重新装载到内存时,栈帧也发生变化,而植入的shellcode代码起始地址发生了变化,这种情况需要将溢出发生时,覆盖的返回地址新写入的返回地址能够自动定位到shellcode起始地址。用esp寄存器可解决,也就是栈指针寄存器。
3.SEH攻击:指利用栈溢出或者漏洞,使用精心构造的数据覆盖掉SEH上面的某个函数或多个函数,从而控制EIP(控制程序执行流程)
4.防护技术
(1)栈保护技术(GS(Stack Protection))是一项缓冲区溢出的检测防护技术
(2)DEP:数据执行保护技术:DEP可设置内存堆栈中的代码不可执行,避免溢出后代码被执行。(分软件和硬件)
(3)ASLR:地址空间分布随机化是将关键地址随机化,让攻击者无法精准跳转地址
(4)SEH:是windows的异常处理机制的重要的数据结构链表,保护SEH函数不被非法利用。
(5)对SEH攻击的保护方案。
3.软件开发生命周期
1.软件开发生命周期
(1)软件开发生命周期:问题的定义与规划、需求分析、设计、编码、测试、运行维护(需设鞭策发尾)
(2)软件开发生命周期模型:
//瀑布模型:开发过程阶段进行,每个阶段明确定义产出物和验证准则,只有前一个阶段后才能进入下一阶段
//螺旋模型:总体和瀑布模型一样,只是增强了各个阶段的管理和控制。
//迭代模型:每一次迭代都能产生一个可发布的产品,这些产品作为最终产品的子集。
//快速原型模型:也成敏捷开发,它是根据客户的需要在很短时间内的课展示的产品模型,它可以只展现一部分,或最重要的部分,让观者可以直接看见整个系统
2.软件安全开发:
(1)建立安全威胁模型:让开发者全面了解软件受到的安全威胁,如何去减少安全威胁。
(2)威胁分类:机密性、可用性、完整性;更细分为身份欺骗,篡改数据,否认,信息泄露,拒绝服务,权限提升等
3.安全设计:在软件设计初期就必须要考虑安全策略、安全环境、威胁解决办法
(1)最小权限原则
(2)开放设计原则
(3)全面防御原则
(4)权限分开原则
(5)最少公用原则
(6)心理接受性
(7)代码重用性
(8)充分考虑运行环境
(9)生效防护
建立安全威胁模型、安全设计、安全编码、安全测试
4.微软的软件安全开发周期SDL:13个阶段
第0阶段:准备阶段
第1阶段:项目启动阶段
第2阶段:定义需耍遵守的安全设计原则
第3阶段:产品风险评估
第4阶段:风险分析
第5阶段:创建安全文档、安全配置工具
第6阶段:安全编码策略
第7阶段:安全测试策略
第8阶段:开发团队自身进行的全面安全分析监测
第9阶段:最终安全评审
第10阶段:组建安全响应团队制定安全响应计划
第 11 阶段:产品发布
第12 阶段:安全响应执行
4.软件安全监测技术
1.静态安全监测:词法分析、数据流分析、污点传播、符号执行、模型检查、定理证明
2.动态安全监测:模糊测试、智能模糊测试、动态污点分析
3.动静结合的安全监测:BitBlaze
5.软件安全保护技术
1.软件安全保护技术:
(1)注册信息验证技术
(2)软件防篡改技术
(3)代码混淆技术
(4)软件水印技术
(5)软件加壳技术
(6)反调试反跟踪技术
(7)代码混淆技术(词法转换、控制流转换、数据转换)
2.硬件技术的软件安全保护技术
(1)加密狗(常用)
(2)光盘保护技术
(3)专用的计算机接口卡
6.恶意程序的传播方法
1.恶意程序的分类
(1)单一功能病毒(文件感染型病毒、宏病毒、引导型病毒、部件型病毒)
(2)木马
(3)蠕虫恶意脚本
(4)综合型病毒
2.传播方法:
(1)网站挂马
(2)诱骗下载
(3)通过移动存储介质传播
(4)通过电子邮件和即时通信软件传播
(5)通过局域网传播
3.恶意程序的破坏功能
(1)浏览器配置被修改
(2)窃取用户密码账号等隐私信息
(3)实现远程控制
(4)破坏系统或网络的正常运行
4.恶意程序监测查杀技术:
特征码查杀、启发式查杀、虚拟机查杀、主动防御技术
7.Web 应用威胁
1.十大威胁:
(1)注入
(2)跨站脚本
(3)遭破坏的身份认证和会话管理
(4)不安全的直接对象引用
(5)伪造跨站请求
(6)安全配置错误
(7)不安全的加密存储
(8)没有限制的 URL访问
(9)传输层保护不足
(10)未验证的重定向和转发
2.Web 安全防护:
客户发安全防护、网络通信安全防护、服务器端安全防护
8.Web 安全监测
监测技术:
(1)黑盒检测:又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用
(2)白盒检测:也称为结构测试,主要用于检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。