大概四、五年前,看过陈皓的酷壳上面的一篇文章,上面有一句话我一直记得,是关于学习技术的心得和态度的。

要了解技术就一定需要了解整个计算机的技术历史发展和进化路线。因为,你要朝着球运动的轨迹去,而不是朝着球的位置去,要知道球的运动轨迹,你就需要知道它历史上是怎么跑的。

我觉得对于漏洞利用技术来说也是这样,现有的技术由于历史积攒的原因变的复杂和难以理解,但是如果能追根溯源从源头入手就能够看到由最简单的形态逐步变繁杂的过程。也就可以在追随技术的发展轨迹的过程中理解技术的本质了。

Windows下漏洞缓解措施的主线就是 无-->DEP-->ASLR 这么一个过程,其实主要的攻防技术变化都是围绕着这个主线展开的。

1.蛮荒时期

在Windows XP SP2之前是不存在任何的漏洞缓解措施的,自然而然攻击者的目光放在了在栈上执行代码这一条路上。这一时期的shellcode也是放到栈上的,攻击者考虑的问题主要是栈的地址是不定的,由此产生了跳板技术。使用类似于jmp esp之类的跳板指令实现在栈上执行代码。

  • 主要问题:栈地址不固定
  • 解决方法:使用跳板语句

此外,攻击者发现有时候因为栈中的局部变量覆盖会触发异常,而处理异常的SEH结构就储存在栈中,通过溢出就可以覆盖掉。

  • 主要问题:溢出会触发异常
  • 解决方法:覆盖SEH结构

对于C++对象的漏洞来说的话,通过溢出相邻对象的虚表就可以伪造虚函数指针从而实现任意代码执行。可是堆的地址也不是你想分配到哪就能分配到哪的,换句话说就是不可控的。为了使这个地址可被预知,诞生了堆喷射技术。其实堆喷射在本质上和栈跳板解决的是同一个问题

  • 主要问题:堆的分配地址不固定
  • 解决办法:堆喷到固定地址

2.2004年8月DEP出现

DEP数据执行保护在2004于xp sp2上首次出现,断绝了在栈及堆上执行代码的可能。DEP是一种进程单位的保护措施,一旦一个进程启用,那么就不存在可执行的模块。作为一种漏洞缓解措施DEP的威力是巨大的,从根本上改变了漏洞利用的思路。为了能够执行代码一种思想引用自Linux下的ret2libc的技术诞生了,即使用程序中的代码来分配一个可执行的内存或是执行一些功能。就目前为止(只有DEP保护),所有的dll上的gadgets地址都是不变的。如果是为了在不同系统版本间通用,那么就避免使用系统的dll中的指令,全部使用程序的dll和模块中的指令。通过执行gadgets构成的指令链实现能够在内存执行代码的目的,比如分配一块可读可写可执行的内存,然后复制shellcode进去并执行,或者直接把shellcode所处的内存设为可以执行的,这些操作都可以通过简单的调用两三个api来实现。

  • 主要问题:栈内存不可执行
  • 解决方法:通过构造ROP构造出可以执行的内存块

这时利用SEH的思路是不受影响的,但是首先你得能覆盖的到。

对于C++漏洞来说,在04年之前使用的在堆上伪造虚表的方法就行不通了。因为堆是不可以执行的,在这种情况下,诞生了结合ROP与构造伪虚表结合的思路。总的来说,这种思路是在ROP需要控制栈而堆溢出根本碰不到栈的情况下诞生的,通过把伪造的虚函数地址指定为xchg eax esp的地址,导致把esp(栈)转换到指定的内存空间上(由于触发这种类型的漏洞时,eax必定可控),在堆上布置rop链。而指定的内存空间可以由堆喷来实现目的。

  • 主要问题:堆内存不可执行导致构造的伪虚函数得不到执行
  • 解决方法:通过替换栈到堆上,并通过堆喷到指定的地址,在堆中布置好rop地址。

3.2007年1月ASLR出现

2007年Windows Vista系统引入对ASLR特性的支持,ASLR地址空间随机化会导致系统每次重新启动后所有模块加载的基地址都不相同。同时也会对堆栈的分配起始地址进行随机化,并且TEB和PEB也不存在固定的地址了。但是ASLR是一种以模块为单位的缓解措施,如果有一个进程中有某一个模块不支持ASLR,那么这个模块的加载基地址就不会发生变化。

  • 主要问题:模块地址随机化,导致ROP指令的地址无法确定
  • 解决方法:找到没有开启ASLR的模块,使用其中的指令作为ROP

对于C++类漏洞来说,基本的利用方法保持不变,但是要配合使用一个可以泄漏地址的漏洞进行组合利用才能最终达成目的。比如在IE浏览器中就存在这样的利用方式,通过泄漏对象的虚表地址来计算出模块地址从而绕过ASLR,可以计算出ROP指令的地址实现利用。

  • 主要问题:要构造ROP的指令地址受到ASLR的影响不能确定
  • 解决方法:通过一个可以泄漏地址的漏洞组合利用,实现bypass ASLR

个人理解的Windows漏洞利用技术发展史的更多相关文章

  1. Windows漏洞利用技术概述

    Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...

  2. Linux环境下常见漏洞利用技术(培训ppt+实例+exp)

    记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...

  3. Windows漏洞利用 ms17-010

    漏洞名称 SMB 远程命令执行漏洞(ms17-010) 漏洞描述 继2016年 8 月份黑客组织 Shadow Brokers 放出第一批 NSA “方程式小组”内部黑客工具后,2017 年 4 月 ...

  4. Windows 漏洞利用开发

    第一阶段:简单栈溢出 分析栈溢出原理 寻找溢出点,了解pattern_create和pattern_offset计算溢出点的原理 寻找JMP ESP跳板,分析利用JMP ESP跳板劫持程序流的原理 编 ...

  5. Windows漏洞利用与防护(2015.8)

    Windows平台下的漏洞利用与防护 0x00 概述 在过去的二十几年,Windows作为网络安全的主战场之一,攻于防的较量从未停息过.内存破坏漏洞作为研究的重点之一,经历了很多的发展也沉淀了前辈们许 ...

  6. Android内核漏洞利用技术实战:环境搭建&栈溢出实战

    前言 Android的内核采用的是 Linux 内核,所以在Android内核中进行漏洞利用其实和在 一般的 x86平台下的 linux 内核中进行利用差不多.主要区别在于 Android 下使用的是 ...

  7. Linux下的堆伪造漏洞利用技术(new unlink)

    感觉markdown的文件格式看起来更清晰一些就写成附加的形式了.Download 更正:这种利用方式不叫House of Mind,是我搞混了.

  8. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  9. Linux堆溢出漏洞利用之unlink

    Linux堆溢出漏洞利用之unlink 作者:走位@阿里聚安全 0 前言 之前我们深入了解了glibc malloc的运行机制(文章链接请看文末▼),下面就让我们开始真正的堆溢出漏洞利用学习吧.说实话 ...

随机推荐

  1. bzoj 4332 FFT型的快速幂(需要强有力的推导公式能力)

     有n个小朋友,m颗糖,你要把所有糖果分给这些小朋友. 规则第 i 个小朋友没有糖果,那么他之后的小朋友都没有糖果..如果一个小朋友分到了 xx 个糖果,那么的他的权值是 f(x) = ox^2 +  ...

  2. linux基础命令之sed

    什么是sed? sed是一个流编辑器,英文全名为stream editor,流的意思就是能处理文件或者通过管    道传输来的数据.主要针对行,也就是行编辑.默认是不编辑文件的,处理时,把当前    ...

  3. 又一家药企IPO被拒,原因竟然是……

    版权所有,未经授权不得转载,QQ:231469242 导读 近日,中国证监会官网发布公告,河南润弘制药首发未IPO能通过,成为今年第4家IPO被否的制药企业.中国证监会拒绝润弘制药的原因是润弘制药产品 ...

  4. java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  5. [洛谷P3292] [SCOI2016]幸运数字

    洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...

  6. 当今最流行的Web项目管理工具精选

    代码管理 以前各种开源项目的代码都是通过博客和个人网页来发布的.这种分享方式并不是最容易的一种,也不便于他人对代码做出贡献.下面是几个管理项目代码的工具,不管对于个人开发者还是团队开发者来说,它们都是 ...

  7. 美轮美奂!9款设计独特的jQuery/CSS3全新应用插件(下拉菜单、动画、图表、导航等)

    今天要为大家分享9款设计非常独特的jQuery/CSS3全新应用插件,插件包含菜单.jQuery焦点图.jQuery表单.jQuery图片特效等.下面大家一起来看看吧. 1.jQuery水晶样式下拉导 ...

  8. 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口, ...

  9. 个人集群部署hadoop 2.7 + hive 2.1

    环境:centos 6.6 x64 (学习用3节点) 软件:jdk 1.7 + hadoop 2.7.3 + hive 2.1.1 环境准备: 1.安装必要工具 yum -y install open ...

  10. Python文件操作-文件的增删改查

    需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...