赞
踩
软件面临的三大类威胁:软件自身的安全(软件漏洞)、恶意代码及软件侵权。
软件安全三大基本属性CIA:保密性、完整性、可用性。
软件安全防护的主要技术:软件安全属性的认知、系统安全工程、软件安全开发。
0day漏洞:已经被发现(有可能未被公开)但官方还没有相关补丁的漏洞。
1day漏洞:厂商发布安全补丁之后但大部分用户还未打补丁时的漏洞,此类漏洞还是有可利用性。
历史漏洞是指距离补丁发布日期已久且可利用性不高的漏洞。
漏洞的特点:持久性与时效性、广泛性与具体性、可利用性与隐蔽性。
软件漏洞成因分析:
1)计算机系统结构决定了漏洞的必然性
2)软件趋向大型化,第三方扩展增多
3)新技术、新应用产生之初即缺乏安全性考虑
4)软件使用场景更具威胁
5)对软件安全开发重视不够,软件开发者缺乏安全知识
计算机启动基本可以分为两个阶段:计算机初始化启动过程(从打开电源到操作系统启动之前)和操作系统启动过程。
PE文件
微软Windows环境下可执行文件的标准格式是PE (Portable Executable,可移植执行体)文件,其目的是为所有Windows平台设计统一的文件格式,即为Windows平台的应用软件提供良好的兼容性和扩展性。Windows系统中使用的可执行文件(如EXE、SCR)、库文件(如DLL、OCX、DRV)、驱动文件(如SYS、VXD)及对象文件(OBJ)等多种文件类型都采用PE文件格式。
木马可以分为:C/S结构、B/S结构和P2P结构。
缓冲区:程序中所使用的缓冲区可以是堆区和栈区,也可以是存放静态变量的数据区。
根据缓冲区利用的方法和缓冲区在内存中所属区域,其可分为栈溢出和堆溢出。
栈通常是指一种后进先出(Last In First Out, LIFO)的数据结构。
ESP:扩展栈指针(Extended Stack Pointer)寄存器,其存放的指针指向当前栈帧的栈顶。
EBP:扩展基址指针(Extended Base Pointer)寄存器,其存放的指针指向当前栈帧的栈底。
显然,ESP与EBP之间的空间即为当前栈帧空间。
EIP:扩展指令指针(Extended Instruction Pointer)寄存器,其存放的是指向下一条将要执行的指令。
RET:函数的返回地址,用于保存函数调用前指令的位置,以便函数返回时能恢复到调用前的代码区中继续执行指令。
在函数的栈帧中,局部变量是顺序排列的,局部变量下面紧跟着的是前栈帧EBP以及函数返回地址RET。
如果这些局部变量为数组,由于存在越界的漏洞,那么越界的数组元素将会覆盖相邻的局部变量,甚至覆盖前栈帧EBP以及函数返回地址RET,从而造成程序的异常。
现代操作系统中堆的数据结构一般包括堆块和堆表两类。
空闲双向链表freelist (简称空表)
空闲堆的块首中包含一对重要的指针:前向指针(flink)和后向指针(blink),用于将空闲堆块组织成双向链表。
堆管理系统的3类操作:堆块分配、堆块释放和堆块合并,归根到底都是对空链表的修改。分配就是将堆块从空表中“卸下”,释放就是把堆块“链入”空表;合并可以看成是把若干块先从空表中“卸下”,修改块首信息,然后把更新后的块“链入”空表。所有“卸下”和“链入”堆块的工作都发生在链表中,
如果能够修改链表结点的指针,在“卸下”和“链入”的过程中就有可能获得一次读写内存的机会。
DWORD Shoot
堆溢出利用的精髓就是用精心构造的数据去溢出覆盖下一个堆块的块首,使其改写块首中的前向指针(flink)和后向指针(blink),然后在分配、释放、合并等操作发生时伺机获得一次向内存任意地址写入任意数据的机会。
攻击者可以进而劫持进程,运行shellcode。
卸掉 空闲双向链表中阴影结点的操作:
把该结点的前向指针的内容赋给后项指针所指向位置的前向指针。
把该结点的后向指针的内容赋给前项指针所指向位置的后向指针。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。