本文主要是介绍代码重用攻击及栈溢出攻击,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
攻击一个软件曾经就像找到一个缓冲区溢出漏洞一样简单,用要执行的任意代码填充缓冲区并替换返回地址以指向这个新代码的开头。幸运的是,我们现在防止内存区域既可写又可执行,攻击者要么不能覆盖现有的代码,要么不能执行他们注入的代码。 攻击者没有感到不安,他们继续寻找漏洞,并发现了代码重用攻击。这些攻击依赖于将程序中已经存在的几个小代码片段链接在一起。仍然有必要通过一些缓冲区溢出漏洞开始攻击,但不需要注入新的代码。 假设一个程序在服务器上以root身份运行。一旦控制了执行流,攻击者就可以将一系列小工具串在一起,其中每个操作都使用提升的特权进行操作。如果攻击者能发起shell,他们就赢了。
小工具是结束于间接分支的指令序列,即branch到存储在寄存器中的地址的指令。在AArch64指令集中,这些指令是:
BR <Rn>
BLR <RN>
RET (BR LR)
一种最古老的攻击形式之一是栈溢出(stack smashing)。栈溢出的基本形式涉及恶意软件将新的操作码写入内存,然后尝试执行已写入的内存。这个过程在这里进行了说明:
这篇关于代码重用攻击及栈溢出攻击的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!