前言:
此刻姐妹们对“随机化算法论文”都比较注意,各位老铁们都想要剖析一些“随机化算法论文”的相关内容。那么小编也在网络上搜集了一些关于“随机化算法论文””的相关内容,希望你们能喜欢,朋友们一起来了解一下吧!BROP,即Blind Return Oriented Programming,于2014年在论文Hacking Blind中提出,作者是来自斯坦福大学的Andrea Bittau等人。BROP能够在无法获得二进制程序的情况下,基于远程服务崩溃与否(连接是否中断),进行ROP攻击获得shell,可用于开启了ASLR、NX和canaries的64位Linux。传统的ROP攻击需要攻击者通过逆向等手段,从二进制文件里提取可用的gadgets,而BROP在符合一定的前提条件下,无须获得二进制文件。其中,两个必要的条件是:第一,目标程序存在栈溢出漏洞,并且可以稳定触发;第二,目标进程在崩溃后会立即重启,并且重启后的进程内存不会重新随机化,这样即使目标机器开启了ASLR也没有影响。如果同时在编译时启用了PIE,则服务器必须是一个fork服务器,并且在重启时不使用execve。BROP攻击的主要阶段如下。(1)Stack reading:泄露canaries和返回地址,然后从返回地址可以推算出程序的加载地址,用于后续gadgets的扫描。泄露的方法是遍历所有256个数,每次溢出一个字节,根据程序是否崩溃来判断溢出值是否正确。就这样一个字节一个字节地泄露,直到获得完整的8字节canaries。用同样的方法泄露得到返回地址。(2)Blind ROP:这一阶段用于远程搜索gadgets,目标是将目标程序从内存写到socket,传回攻击者本地。? write()、puts()等函数都可以作为目标,函数调用可以通过syscall指令,也可以通过call指令,甚至是直接改变控制流跳转到PLT执行。另外,还需要一些修改寄存器的gadgets,可以在通用gadget里找到。? 同样地,搜索gadgets的思路也是基于溢出返回地址后判断程序是否崩溃。我们从上一步得到的加载地址开始,每次给返回地址加1,大多数时候这都是一个非法地址,导致程序崩溃。但某些时候,程序会被挂起,例如进入无限循环、sleep或者read,此时连接不会中断,我们将这些指令片段称为stop gadgets。将stop gadgets放到ROP链的最后,就可以防止程序崩溃,利于其他gadgets的搜索。举个例子,如果覆盖的返回地址是指令“pop rdi; ret”,那么它在ret的时候,从栈里弹出返回地址,就可能导致崩溃,但如果栈里放着stop gadget,那么程序就会挂起。? 有了stop gadgets,就可以搜索和判断gadgets的行为,从而推断某个gadgtes是否是我们需要的。(3)Build the exploit:利用得到的gadgets构造ROP,将程序从远程服务器的内存里传回来,BROP就转换成了普通的ROP攻击。由于BROP攻击的前提是程序在每次崩溃后会立即重启,并且重启后内存不会再次随机化,论文同时还提出了如下几种防御方案。(1)同时开启ASLR和PIE,并在程序重启时重新随机化内存地址空间以及canaries,例如复刻一个新进程并执行;(2)在程序发生段错误后延迟复刻新进程,降低攻击者的暴力枚举速度;(3)其他的一些通用ROP防御措施,例如控制流完整性CFI。
标签: #随机化算法论文