目录
二、小工具(Gadgets):它们是什么?为什么它们很危险?
当开发人员向攻击者提供工具时,开发人员如何防止攻击者控制程序?什么是代码重用攻击? Arm架构如何抵御这些漏洞?人们如何在他们的代码中使用这些架构安全特性?这些功能有多有效?它们值得增加代码大小吗?
在这篇博文中,我们将回答这些问题,并演示现代编译器如何完成所有繁重的工作!
一、代码重用攻击历史
攻击一个软件曾经就像找到一个缓冲区溢出漏洞一样简单,用要执行的任意代码填充缓冲区并替换返回地址以指向这个新代码的开头。幸运的是,我们现在防止内存区域既可写又可执行,攻击者要么不能覆盖现有的代码,要么不能执行他们注入的代码。
攻击者没有感到不安,他们继续寻找漏洞,并发现了代码重用攻击。这些攻击依赖于将程序中已经存在的几个小代码片段链接在一起。仍然有必要通过一些缓冲区溢出漏洞开始攻击,但不需要注入新的代码。
假设一个程序在服务器上以root身份运行。一旦控制了执行流,攻击者就可以将一系列小工具串在一起,其中每个操作都使用提升的特权进行操作。如果攻击者能发起shell,他们就赢了。
为了让这篇博文的其余部分有意义,我们需要首先讨论一下什么是小工具(gadget),以及它们为什么危险。