什么是代码重用攻击?
代码重用攻击(Code Reuse Attack, CRA)是一种利用现有的合法代码片段来执行恶意行为的攻击方法。由于现代操作系统和处理器通常会采用数据执行保护(DEP)等安全机制,直接在堆栈或堆上执行注入的恶意代码变得困难。代码重用攻击通过拼接或链接现有的代码片段来实现恶意目的,从而绕过这些安全机制。
常见的代码重用攻击技术包括:
- 返回导向编程(Return-Oriented Programming, ROP):利用程序中现有的小片段代码(称为“gadget”),每个 gadget 以返回指令结尾,通过构建特定的返回地址序列来执行复杂的恶意操作。
- 跳转导向编程(Jump-Oriented Programming, JOP):类似于 ROP,但利用的是跳转指令而不是返回指令。
ROP 攻击示例
以下是一个通过 ROP 攻击实现 execve("/bin/sh", NULL, NULL)
的示例。这个示例的目的是在没有直接执行注入代码的情况下,利用现有的代码片段来执行一个 shell。