存档

文章标签 ‘Windows’

时尚时尚最时尚的缓冲区溢出目标

2015年3月4日 没有评论

原文:《Modern Overflow Targets》 By Eric Wimberley,Nathan Harrison

翻译:taskiller

在当今的操作系统中,内存缺陷漏洞已经越来越难挖掘了,栈保护措施已经使原来的缓冲区溢出利用方法(将NOP块和shellcode写入到缓冲区中,并用缓冲区内的地址覆盖EIP所指向的地址)失效了。如果没有某种程度的信息泄露,在地址空间分布随机化(ASLR)和栈cookies的双重保护下,用传统方法实际上已经很难对远程系统执行有效的溢出攻击了。

不过,现在仍存在可被利用的栈输入/输出漏洞。本文描述了一些常用缓冲区溢出技术,这些技术不会触发栈的__stack_chk_fail保护,或至少到目前为止还有效的技术。本文我们不再利用新技术通过修改EIP来修改程序的执行流程,而是将精力集中到一系列新的目标中。同时,本文也会讨论GCC 4.6及之前版本中未出现在任何文档中的函数安全模式(function safety model)。

GCC ProPolice记录的异常

根据函数安全模型的ProPolice文档,以下情况不会被保护:

  • 无法被重新排序的结构体,以及函数中的指针是不安全的。

  • 将指针变量作为参数时是不安全的。

  • 动态分配字符串空间是不安全的。

  • 调用trampoline代码的函数是不安全的[……]

阅读全文

验证Windows内核漏洞的框架

2014年6月6日 没有评论

原文:http://h30499.www3.hp.com/t5/HP-Security-Research-Blog/Verifying-Windows-Kernel-Vulnerabilities/ba-p/6252649#.UyZi2T-Sy0f

翻译:徐文博

Pwn2Own大赛之后,HP的0day防御计划(Zero Day Initiative, ZDI) 并不要求研究者给我们提供相关攻击利用。ZDI的分析师对每个提交的案例进行评估,可能也会挑选一些进行全面的攻击利用。

在内核级的漏洞(操作系统本身或者硬件驱动)中,有一项就是我们常说的’任意写(write-what-where)’[1]。 为便于分析, 很有必要写个基本的框架,对给定的’任意写(write-what-where)’漏洞进行封装,并验证其对操作系统的利用。

要把任意的写操作转换为攻击利用,需要三个基本的步骤, 我们将来逐一介绍。

禁用Windows访问权限检查的负载

Windows访问控制系统的核心是nt!SeAccessCheck函数。它决定着我们是否有权访问操作系统中的对象(文件,进程等等)。

我们将采用的手法,于1992年由Greg Hoglund[2]首次提及, 2006年由John Heasman改进使用[3]。 这里将采用后者作为我们的起点。[……]

阅读全文

线程模型对比: Windows VS POSIX

2014年2月12日 没有评论

原文:http://software.intel.com/en-us/blogs/2006/10/19/why-windows-threads-are-better-than-posix-threads

翻译:徐文博

曾使用过POSIX线程(Pthreads)和Windows线程API, 我认为Windows线程具有更好的编程模型。虽然它们都能创建、销毁线程,并协调线程间的交互,但windows线程API更易使用并且设计优雅。这是多线程开发、维护者的思考视角。下面让我来举例说明。

简单的数据类型

在Pthreads中,每个对象均有其自己的数据类型(pthread_t, pthread_mutex_t, pthread_cond_t 等等)而在Windows线程中,仅有一种类型:HANDLE。这就意味着在Pthreads中,需要使用不同的函数来处理每种对象类型。阅读理解他人所写的Pthreads代码可能会比较简单,但这要求编程人员必须知道不同函数的参数个数、顺序以及类型。相反的,在Windows线程中,因为不同对象使用了同种数据类型,它们就有了统一的Create*函数和各自针对性的Release*函数。

或许使用单对象数据类型的最大好处就是仅需WaitForSingleObject函数就能阻塞那些等待某对象的线程。所以,不管代码是在等待线程、互斥量、信号量,还是事件,我们只需知道一组参数即可。与此相关联的函数WaitForMultipleObjects,同[……]

阅读全文