当前位置: 首页 > news >正文

面向返回编程ROP问题及挑战

像我们描述的执行权限等功能已经使执行任意代码变得越来越困难。这意味着攻击者使用其他方法,比如面向返回编程(ROP)。ROP利用了许多现代系统中软件堆栈的规模。攻击者分析系统中的软件,寻找小工具(gadgets)。小工具是一段有用的代码片段,通常以函数返回结束,例如:

这段代码提供了一个用于将两个寄存器相加的工具。通过扫描所有可用的库,攻击者可以构建一个小工具库。这些小工具实际上是存在于可执行区域内的现有合法代码,这意味着它们不受执行权限等保护机制的影响。攻击者将一系列小工具串联起来,形成实质上是一个由现有代码片段构成的新程序。 ROP攻击是有效的,因为它由现有合法代码组成,因此不会受到执行权限或从可写内存执行的检查的限制。

对于攻击者来说,找到小工具并创建生成新程序所需的序列是耗时的。然而,这个过程可以自动化,并且可以被重复使用来攻击多个系统。地址空间布局随机化(ASLR)可以帮助防止自动化和多次攻击的实施。 ASLR的原理是程序开始时,在stack、mmap以及堆区处分配随机大小的空间,但程序不使用这段空间。但它会导致程序每次执行时后续的栈位置发生变化。ASLR的目的是将程序的堆栈地址和动态链接库的加载地址进行一定的随机化。这样,即使攻击者部署了shellcode并可以控制跳转,由于shellcode所在地址未知,依然很难执行shellcode。

我们正常的程序中,一般都是在进入函数的时候,将返回地址(LR寄存器)做了一个压栈的操作,函数返回之前,再将LR从栈中还原。 

ROP的模型,就是修改栈中LR的值,使其按照攻击者预设的flow返回. 攻击者将一串gadget串在一起,形成一个有效的由现有代码片段组成的新程序。

http://www.lryc.cn/news/330733.html

相关文章:

  • vscode shadertoy插件,非常方便的glsl着色器编写工具
  • 网络请求避坑,私有网络请求(Private Network Access)
  • AVL树和红黑树
  • 多线程入门
  • #!/bin/sh和#!/bin/bash的区别
  • 腾讯云(CVM)托管进行权限维持
  • STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
  • DS3231SN
  • tsconfig.json文件翻译
  • 树状数组学习笔记
  • 【bugfix】如何解决svg到线上显示空白或者svg的viewBox为空
  • docker基础学习指令
  • 回溯大学生活
  • Android Fence机制
  • sa-token非Web上下文无法获取Request
  • tomcat 常见优化方案
  • 前端导出文本内容为csv文件,excel乱码
  • 36---USB HUB电路设计
  • FPGA在深度学习领域的应用的优势
  • Windows Edge 兼容性问题修复 基本解决方案
  • 【Servlet】服务器内部转发以及客户端重定向
  • 是否有替代U盘,可安全交换的医院文件摆渡方案?
  • Java设计模式详解:单例模式
  • Pointnet++改进即插即用系列:全网首发OREPA在线重新参数化卷积,替代普通卷积 |即插即用,提升特征提取模块性能
  • XRDP登录ubuntu桌面闪退问题
  • 【Node】使用Node.js构建简单的静态页面生成器
  • AI智能客服机器人是什么?对企业重要吗?
  • InfluxDB2的数据查询示例
  • CSS基础语法-黑马跟课笔记-供记录与查询
  • 「PHP系列」PHP数组排序及运用场景