返回导向编程

科技工作者之家 2020-11-17

面向返回编程(英语:Return-Oriented Programming,缩写:ROP)是计算机安全漏洞利用技术,该技术允许攻击者在安全防御的情况下执行代码,如不可执行的内存和代码签名。

简介攻击者控制堆栈调用以劫持程序控制流并执行针对性的机器语言指令序列(称为Gadgets)。 每一段gadget通常结束于return指令,并位于共享库代码中的子程序。系列调用这些代码,攻击者可以在拥有更简单攻击防范的程序内执行任意操作。

背景堆栈溢出攻击ROP是一种高级的堆栈溢出攻击。这类攻击往往利用操作堆栈调用时的程序漏洞,通常是缓冲区溢出。在缓冲区溢出中,在将数据存入内存前未能正确检查适当范围的函数会收到多于正常承受范围的数据,如果数据将写入栈,多余的数据会溢出为函数变量分配的空间并覆盖替换返回地址(return address)。在原本用以重定向控制流并返回给调用者的地址被覆盖替换后,控制流将改写到新分配的地址。

标准的缓冲区溢出攻击,攻击者只需要写出针对堆栈部分的代码(有效载荷)。直到1990年代后期,主流操作系统没有为该类攻击作出任何防范,微软直到2004年才提供了缓冲区溢出保护。操作系统最终使用数据执行保护技术来修补这个漏洞,该技术标记内存数据不可执行。 启用数据执行保护,机器将拒绝执行任何内存中user级别可写区域的代码。该技术的硬件支持不久用以加强该防范。

漏洞利用漏洞利用(英语:Exploit,本意为“利用”)是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权(使自己编写的代码越过具有漏洞的程序的限制,从而获得运行权限)。在英语中,本词也是名词,表示为了利用漏洞而编写的攻击程序,即漏洞利用程序。

经常还可以看到名为ExploitMe的程序。这样的程序是故意编写的具有安全漏洞的程序,通常是为了练习写Exploit程序。

数据执行保护数据执行保护,简称“DEP”,英文全称为“Data Execution Prevention”,是一组在存储器上运行额外检查的硬件和软件技术,有助于防止恶意程序码在系统上运行。

数据执行保护(DEP)是一项安全性功能,可协助避免病毒与其他安全性威胁所造成的损害。

计算机程序预留了一部分计算机存储器供数据使用,另一部分则供程序的指令使用。黑客可以尝试以欺骗手法让程序运行放置在计算机存储器中的有害数据,并将其视为指令。此时黑客便可以获取对您计算机的控制权。

DEP可透过监视程序来协助保护计算机,确保程序能够安全地使用计算机存储器。如果DEP发现有某程序正尝试运行数据用存储器区块中的指令,DEP便会关闭该程序并通知您。1

本词条内容贡献者为:

李航 - 副教授 - 西南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。