我想知道可执行文件是否支持常见的安全保护,例如NX标志,堆栈cookie或ASLR。似乎ASLR设置在操作系统级别,但您如何知道它已启用?在Windows上,某些可执行文件不支持ASLR,因此我想知道如何在Mac OS X上确定这一点。
答案 0 :(得分:0)
首先在OSX 10.6及以下did not randomize all regions of memory中使用ALSR。据我所知,ASLR已启用所有正在运行的可执行文件。这是非常容易来测试,只需启动一个调试器设置一个断点并记录堆栈上的任何内存地址。重新启动应用程序,查看该变量是否具有相同的内存地址。
我认为在OSX 10.7中他们开始随机化动态链接器。哪些linux,bsd甚至Windows系统已经做了很多年。
对于OSX,可以使用执行export DYLD_PRINT_SEGMENTS=1
然后运行命令来测试链接库ASLR。 TEXT内存区域是库的基址。对任何二进制文件运行此命令两次。如果两次执行之间的基地址不同,则应该责备ASLR的肮脏工作。
Stack cookies是一个完全不同的球赛。这是编译器级别的保护,将根据应用程序而有所不同。 GCC的现代版本应默认启用堆叠狂欢。您应该再次咨询调试器,以查看特定应用程序是否正在使用金丝雀。只需检查任何函数的堆栈帧,看看是否在本地声明的变量和返回地址之间插入了一个随机值。
就NX标志而言,您应该假设1999年之后制造的任何系统都使用这种简单的保护形式。但是,这是迄今为止最简单的保护,您可以绕过,只需返回libc或使用ROP链(因为aslr)。