Archive for 十二月, 2014

某EXCEL漏洞样本shellcode分析

作者:椒图实验室

转载请注明出处:http://blog.jowto.com

起因

近日我得到一个EXCEL样本,据称是一个过所有杀软的0day,经过分析之后让我大失所望,这是一个2012年的老漏洞,根本不是0day。虽然没捡到0day,但是这个样本中的shellcode还是相当有特色的,确实可以绕过大多数的杀毒软件和主动防御。
下面就来分析一下这个EXCEL EXP所使用漏洞和shellcode技术。

漏洞分析

该漏洞是CVE-2012-0158,一个栈溢出漏洞,漏洞成因是MSCOMCTL.OCX在解析一个标志为Cobj的结构的时候直接使用文件内容的数据作为拷贝长度,导致拷贝数据的时候可以覆盖函数返回地址,造成了一个标准的栈溢出漏洞。

275C876D 55 push ebp
275C876E 8BEC mov ebp, esp
275C8770 51 push ecx
275C8771 53 push ebx
275C8772 8B5D 0C mov ebx, dword ptr [ebp+C]
275C8775 56 push esi
275C8776 33F6 xor 
阅读全文
Posted on 十二月 16, 2014 at 下午7:22 by admin · Permalink · Comments Closed
In: 未分类

某安全软件ROP防护分析笔记

作者:椒图实验室

转载请注明出处:http://blog.jowto.com

原理

ROP是用来绕过DEP防护的常用方法, 攻击者通常会利用ROP链将真正的ShellCode拷贝到一个具有可执行权限的内存处并执行。为了达到这个目的,攻击者会使用一些类似VirtualAlloc这样的API进行分配或修改内存的属性。而这些函数是有限的,并且最终都会进入内核,某安全软件通过在内核层拦截这些关键函数,在关键函数内根据从当前线程获取到的陷阱帧拿到返回用户层时的调用栈信息。通过对关键函数调用栈的每一层栈帧进行检查,以此来进行ROP检测。

实现

在关键函数内首先进行Stack Pivot检查
栈置换利用类似下面的指令序列

xchg eax, esp 
retn

检测方法:如果调用 关键函数时, esp 指针不在用户空间栈范围内,则说明进行了栈置换。
绕过栈置换方法:首先通过简单的ROP链来调整原栈空间,将 包含关键函数操作的ROP链 拷贝到原栈空间,此时再利用栈置换重新将esp指向调整后的原栈空间,继续执行ROP链,可绕过此处的栈置换检测。
检测代码实现:

if ( func_switch & STACK_PIVOT )            // 栈置换攻击防护
{                                       
      if ( _teb->FiberData < 0x10000 )
      {
        if 
阅读全文
Posted on 十二月 8, 2014 at 下午4:02 by admin · Permalink · Comments Closed
In: 未分类
友情链接