DEP和ASLR的原理与破解介绍
一、什么是DEP?
数据执行保护(DEP)(Data Execution Prevention) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。在 Microsoft Windows XP Service Pack 2及以上版本的Windows中,由硬件和软件一起强制实施 DEP。

支持 DEP 的 CPU 利用一种叫做“No eXecute 不执行”的技术识别标记出来的区域。如果发现当前执行的代码没有明确标记为可执行(例如程序执行后由病毒溢出到代码执行区的那部分代码),则禁止其执行,那么利用溢出攻击的病毒或网络攻击就无法利用溢出进行破坏了。如果 CPU 不支持 DEP,Windows 会以软件方式模拟出 DEP 的部分功能。

DEP(Data execution protect)数据执行保护,这个功能需要操作系统和硬件的共同支持才可以生效。DEP的原理就是在系统的内存页中设置了一个标志位,标示这个内存页的属性(可执行)。

在硬件上这个工作就交给了CPU来完成,intel CPU在内存页中设置了XD标志位,amd CPU在内存页中设置了NX标志位,都标志了内存页的执行权限。

在操作系统方面,windows xp sp2从开始支持DEP的功能,但是必须将操作系统运行在PAE(Physical address extension)模式下,即使用硬件的这个标志位。

WINXP SP2 默认 /NOEXECUTE = OPTIN;DEP只是对一些必须的windows程序和服务起效。
WIN2K3 SP1默认 /NOEXECUTE = OPTOUT;DEP对所有的windows程序和服务起效,除非是用户自己排除的程序。

二、什么是ASLR?
ASLR是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。(虚拟地址)此技术需要操作系统和软件相配合。PE头文件中会设置 IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE标示来说明其支持 ASLR。

ASLR(Address space layout randomization)windows系统中运行的同一个程序其模块加载的地址空间是随机的,也是防止恶意代码攻击的一种手段。(纯系统级别的实现)我们自己编写的程序或者链接库,可以通过设置一个链接选项,Project Property -> Configuration Properties -> Linker -> Advanced -> Randomized Base Address,来设置是否支持ASLR?

在linux中使用此技术后,杀死某程序后重新开启,地址换。

在windows中使用此技术后,杀死进程后重新开启,地址不换,重启才会改变。

绕过DEP的方法
直接利用程序中没有ASLR特性的模块,寻找能够利用的汇编指令,xchg eax, esp retn, pop ebx retn等等,找到这些特殊的指令,接下来就是构造一个适合这些指令使用的栈数据了,这个执行过程就利用原来模块的执行内存,我们的栈数据也仍然是作为数据使用,不会被DEP检测到。

比如WinExec、system已经在程序中被调用,我们只需要将调用处的地址拿过来,放到ret语句中,并配置好适当的参数。这种方式非常巧妙,都不需要写入一堆代码到内存中,但是前提是你需要使用的API原来程序中都有。

调用参数 覆盖方向—> /bin/sh
虚假的返回地址
返回地址 system函数的入口地址
EBP上层函数堆栈基址 溢出的变量覆盖区域,
在这里填充适当的数据,

作为system函数的参数。

(调用其他的API也是类似)

异常处理代码入口地址
(如果函数设置异常处理)

局部变量

有了上面执行API的条件,我们就可以利用以下方法,改变进程或者内存页的DEP属性。

1、通过调用API赋予内存可执行的权限,包括VirtualAlloc HeapCreate等函数,可以改变内存页的执行属性。

2、通过调用API取消系统对本进程的DEP检测,SetProcessDEPPolicy,但是使用这个函数需要满足条件:

操作系统是vista sp1、winxp sp3、win2k8

操作系统DEP的模式设置为OPTIN OPTOUT,如果是AlwaysON就没有办法了。

3、通过NT!NTSetInformationProcess函数关闭本进程的DEP检测,nt5.1都可以实现,vista版本也可以,但是vista sp1之后就不行了。

4、通过WriteProcessMemory把执行代码写入到可执行的内存页中。

DEP和ASLR的原理与破解介绍相关推荐

  1. php mysql 编程原理_PHP开发的原理及优势介绍

    原标题:PHP开发的原理及优势介绍 在目前的网站开发语言中,比较常用的主要有:PHP.ASP ..NET.JSP等,使用最广泛的要数PHP语言了. PHP一种通用开源脚本语言.语法吸收了C语言.Jav ...

  2. ARKit从入门到精通(2)-ARKit工作原理及流程介绍

    转载请注明出处:ARKit从入门到精通(2)-ARKit工作原理及流程介绍 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARKit工作原理 1.3.1-ARSCNView ...

  3. Nginx工作原理及相关介绍

    Nginx工作原理及相关介绍 一.Nginx工作原理与模块介绍 1.Nginx基本工作原理 NGINX以高性能的负载均衡器,缓存,和web服务器闻名.Nginx由内核和模块组成,其中,内核的设计非常微 ...

  4. Linux系统和程序中的DEP和ASLR保护机制

    2014年,OpenSSL加密库中的一个缓冲区溢出漏洞被公开.该缺陷被称为"心脏出血".它使受欢迎的在线服务和软件平台的数亿用户暴露于易受攻击的OpenSSL软件版本中.于是操作系 ...

  5. JDBC简介及原理和使用介绍

    JDBC简介及原理和使用介绍 JDBC简介 jdbc概述 ​ Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据 ...

  6. 光电耦合器原理及应用介绍

    转至: http://www.elecfans.com/baike/bandaoti/bandaotiqijian/20100301174262.html 光电耦合器原理及应用介绍 一. 光电耦合器原 ...

  7. 云小课|MRS基础原理之MapReduce介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...

  8. DI的概念和实现原理—Spring系列介绍

    DI的概念和实现原理-Spring系列介绍 DI和AOP是Spring中的两个核心概念,要学习DI和AOP,首先就需要了解清楚什么是DI,什么是AOP,这篇文章会讲解一下DI的概念和实现原理,不足之处 ...

  9. Kafka部署、原理和使用介绍

    Kafka简介及Kafka部署.原理和使用介绍 Kafka简介 定义 Kafka是一种消息队列,是一个分布式的基于发布/订阅模式的,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理.既然是消 ...

最新文章

  1. 数据库设计中的9大常见错误
  2. Linux离线时间设置(NTP)
  3. C#学习之Reflection
  4. 最近参加的CTF的预赛预演练习题
  5. PostgreSQL体系结构和基本操作
  6. html转义 在线,HTML转义工具 [Javascript版]
  7. 一个问题引发的连环血案
  8. c语言课程设计题目 吃豆子,C语言吃豆子游戏
  9. java 输出_java输入输出小结
  10. 第11章 UART串口通信 练习题
  11. 无法连接数据库2003-cant connect to Mysql server on ‘localhost’(10038)
  12. 我的世界空岛服务器修改地形,我的世界空岛制作教程 特别地形制作
  13. 点击改变文本框选择内容,Jquery datatables 重新加载数据
  14. 大学学嵌入式技术的优势
  15. TEEOS的实例-在线支付系统
  16. 移动分销平台是什么鬼?
  17. 白帽子讲Web安全学习之浏览器
  18. 前端面试题(背题中)
  19. 浅谈![CDATA[ ]]
  20. 黑镜2.0wordpress卡片式主题,设计素材教程网站模版

热门文章

  1. 生活不复杂,简简单单就好
  2. 如何一键快速批量查询快递信息
  3. 二叉排序树(查找树)的平均查找长度
  4. 程序员生存观察:为什么非要谈理想?我就想挣点钱
  5. 苹果手机移动信号测试软件,同样是苹果手机,为何别人的信号很好,你却很差?检测方法在这里...
  6. 学习记录:一步一个脚印
  7. Java串口编程学习1-环境配置(64位Win7)
  8. 2022京东最新Android面试真题解析,腾讯T3亲自教你
  9. c语言指令ASCA,吉林大学C语言习题.doc
  10. 美服疯狂坦克辅助瞄准外挂C#版开发(四)程序使用说明和完成源代码及其下载