基于Windows的结构化异常处理漏洞利用技术
- 格式:pdf
- 大小:269.90 KB
- 文档页数:4
第九套1、对弱口令等登录信息的扫描主要包括基于字典攻击的扫描技术和基于穷举攻击的扫描技术。
2、SMTP(Simple Mail Transfer Protocol)协议是简单邮件传输协议,它的主要作用是将电子邮件发送到邮件服务器,属于电子邮件系统的重要协议。
国家信息安全漏洞共享平台CNVD是CNCERT联合国内重要信息系统单位、基础电信运营商、网络安全厂商、软件厂商和互联网企业建立的信息安全漏洞信息共享知识库;CVE是MITRE(麻省理工学院科研机构形成的非盈利公司)公司建立的;SecurityFocus的BugTraq邮件列表是整个安全社区重要的信息来源和技术讨论区,它几乎包含所有的漏洞信息;EDB 漏洞库是由十多位安全技术人员志愿维护的数据库3、数据执行保护DEP(Data Execute Prevention)技术可以设置内存堆栈区的代码为不可执行状态,从而防范溢出后代码的执行;地址空间分布随机化ASLR(Address Space Layout Randomization)是一项通过将系统关键地址随机化,从而使攻击者无法获得需要跳转的精确地址的技术;结构化异常处理覆盖保护SEHOP是微软针对SEH攻击提出的一种安全防护方案;GS Stack Protection技术是一项缓冲区溢出的检测防护技术4、在微软的软件安全开发声明周期SDL模型共包括13个阶段,其中第0阶段为准备阶段,第1阶段为项目启动阶段,第2阶段为定义需要遵守的安全设计原则,第3阶段为产品风险评估/5、漏洞利用的核心是利用程序漏洞去执行shellcode以便劫持进程的控制权/6、信息安全管理体系认证基于自愿的原则7、为客体分配访问权限是实施组织机构安全性策略的重要部分,最少特权的原则来自于当主体被赋予对客体进行访问的权限时所形成的复杂结构,这个原则规定主体只应当被授权访问那些完成其工作所需要的客体,换而言之,应当阻止主体访问那些工作内容不需要的客体,因此分配权限时依据的重要原则是:最少特权决定跟踪哪一种信息资产时,需要考虑名称、IP地址、MAC 地址、序列号、制造商名称、软件版本、物理位置、逻辑位置、控制实体等资产属性,而对于硬件资产的跟踪识别管理中,可以识别该资产的资产编号、MAC地址、产品序列号;不能有效识别该资产的属性是软件版本号。
Windows XP中的新型向量化异常处理 原名:New Vectored Exception Handling in Windows XP 作者:Matt Pietrek
到现在为止我已在Win32®平台上工作八年有余,在这期间里我积累了一些我所喜欢使用的Win32功能(从API层面上来说)。它们可以让我的编程生活更轻松,同时也让我更容易写出比较有用的工具。当我安装完Windows XP Beta(以前代号为“Whistler”)时,并没有指望能够看到许多新的API,结果却惊喜地发现我错了!在本月的专栏中,我就要讲述这些新增功能其中之一——向量化异常处理(Vectored Exception Handling)。
当运行我在1997年11月MSJ杂志Under The Hood专栏中介绍的PEDIFF程序时,我发现了向量化异常处理。你告诉PEDIFF两个不同版本DLL的路径,它就会返回这两个DLL导出的不同函数。这一次我比较了Windows 2000中的KERNEL32.DLL和Windows XP中的KERNEL32.DLL,结果发现了向量化异常处理。Windows XP中的KERNEL32.DLL中新增了许多API,但我一眼就注意到了AddVectoredExceptionHandler这个API。在最新的MSDN® Library中有这个API的文档,因此我也不需要挖掘这方面的信息了。
由于Beta 2版本中的WINBASE.H有一个问题,因此你需要安装Platform SDK RC1发行版才能编译本文中所讲的代码。
快速回顾结构化异常处理 到底什么是向量化异常处理,为什么要关注它呢?首先让我们来快速回顾一下通常的异常处理机制,这样你就会明白向量化异常处理与它之间的区别了。如果你使用的是像C++那样的支持异常处理的语言,你很可能已经知道Win32结构化异常处理(Structured Exception Handling,SEH)了。在C++中是使用try/catch语句或者是Microsoft C/C++编译器扩展的__try/__except语句来实现结构化异常处理的。关于SEH的内部工作机制,可以参考我在1997年1月的MSJ杂志
Windows异常处理流程作者:SoBeIt出处:/articles/200412/761.html日期:2005-01-06先来说说异常和中断的区别。
中断可在任何时候发生,与CPU正在执行什么指令无关,中断主要由I/O设备、处理器时钟或定时器等硬件引发,可以被允许或取消。
而异常是由于CPU执行了某些指令引起的,可以包括存储器存取违规、除0或者特定调试指令等,内核也将系统服务视为异常。
中断和异常更底层的区别是当广义上的中断(包括异常和硬件中断)发生时如果没有设置在服务寄存器(用命令号0xb向8259-1中断控制器0x20端口读出在服务寄存器1,用0xb向8259-2中断控制器的0xa0端口读出在服务寄存器2)相关的在服务位(每个在服务寄存器有8位,共对应IRQ 0-15)则为CPU的异常,否则为硬件中断。
下面是WINDOWS2000根据INTEL x86处理器的定义,将IDT中的前几项注册为对应的异常处理程序(不同的操作系统对此的实现标准是不一样的,这里给出的和其它一些资料不一样是因为这是windows的具体实现):中断号名字原因0x0 除法错误1、DIV和IDIV指令除02、除法结果溢出0x1 调试陷阱1、EFLAG的TF位置位2、执行到调试寄存器(DR0-DR4)设置的断点3、执行INT 1指令0x2 NMI中断将CPU的NMI输入引脚置位(该异常为硬件发生非屏蔽中断而保留)0x3 断点执行INT 3指令0x4 整数溢出执行INTO指令且OF位置位0x5 BOUND边界检查错误BOUND指令比较的值在给定范围外0x6 无效操作码指令无法识别0x7 协处理器不可用1、CR0的EM位置位时执行任何协处理器指令2、协处理器工作时执行了环境切换0x8 双重异常处理异常时发生另一个异常0x9 协处理器段超限浮点指令引用内存超过段尾0xA 无效任务段任务段包含的描述符无效(windows不使用TSS进行环境切换,所以发生该异常说明有其它问题)0xB 段不存在被引用的段被换出内存0xC 堆栈错误1、被引用内存超出堆栈段限制2、加载入SS寄存器的描述符的present位置00xD 一般保护性错误所有其它异常处理例程无法处理的异常0xE 页面错误1、访问的地址未被换入内存2、访问操作违反页保护规则0x10 协处理器出错CR0的EM位置位时执行W AIT或ESCape指令0x11 对齐检查错误对齐检查开启时(EFLAG对齐位置位)访问未对齐数据其它异常还包括获取系统启动时间服务int 0x2a、用户回调int 0x2b、系统服务int 0x2e、调试服务int 0x2d等系统用来实现自己功能的部分,都是通过异常的机制,触发方式就是执行相应的int指令。
Windows下二进制软件漏洞挖掘技术研究二进制软件漏洞自动挖掘技术一直是国外软件安全领域研究热点,各大研究机构每年都投入大量的资金、人力,试图提升漏洞挖掘的效率、准确性、覆盖率和速度,以期大量发现网络空间中主流操作系统、应用软件、网络协议等存在的未知漏洞,支撑其网络对抗行动。
然而现阶段流行的系统级的漏洞挖掘系统存在新系统适应慢、执行效率低等问题,因此进程级漏洞挖掘系统的研究成为一个亟待深入研究和解决的课题。
本文研究基于离线符号执行的Windows下二进制软件漏洞挖掘方法,本文主要研究内容及成果如下:(1)提出基于静态污点分析的缓冲区溢出危险函数粗定位方法。
针对典型缓冲区溢出漏洞如栈溢出漏洞、堆溢出漏洞,论文分析了这些漏洞在二进制层次的表现形式及行为特点,采用了静态污点分析方法来对程序内自定义的具有缓冲区溢出危险的函数进行粗定位,通过实验证明方法具有较高的准确率。
(2)提出基于离线符号执行的Windows下缓冲区溢出漏洞挖掘方法。
本文将静态分析与动态分析相结合,通过约简待测试用例中待分析的关键字段,提升离线符号执行约束收集有效性和效率。
同时,根据离线符号执行的特点,设计了基于离线符号执行的指定路径执行算法。
并在此基础上,根据Windows下堆栈结构的特点,提出了Windows平台下栈溢出漏洞和堆溢出漏洞的快速挖掘算法,实现了高效准确的缓冲区溢出漏洞挖掘方法。
(3)设计并实现了Windows下进程级漏洞挖掘系统SymbolicWin。
研究了基于离线符号执行的Windows下模糊测试工具FuzzWin结构并分析其缺陷。
设计了SymbolicWin漏洞挖掘系统,实现了有别于传统系统级别影子内存方法的污点分析与约束收集方法,并实现了针对堆溢出和栈溢出漏洞快速检测方法。
实验证明基于离线符号执行的进程级漏洞挖掘系统SymbolicWin能够实现Windows下缓冲区溢出漏洞的检测与挖掘。