在MacOS X和iOS中,ASLR随机分配了什么

Vic*_*nin 12 security macos ios osx-lion ios6

有没有人有文档的链接在最新的Mac OS(10.7)和iOS(6.0)的什么情况下,究竟什么是随机的?

我的意思是.我想看一个清单(类似的东西)

  • 代码段(在案例A,B,C中)

  • 堆栈(总是)

  • 数据段(从不)

优选地,每个物品具有多少比特的随机化.

我能找到的就是:"MacOS Lion实现完整的ASLR",而在其他地方"完全ASLR以不同的方式实现不同的操作系统",这显然不是很有用.

Tec*_*eks 18

您可以轻松生成您要查找的列表,如下所示:

int global_j = 0;

void main ()
{

    char *h = malloc(10);
    int j = 0;

    printf ("Globals are : %p, text is %p, stack is %p, heap is %p\n",
        &global_j, main, &j, h);

}
Run Code Online (Sandbox Code Playgroud)

在山狮上,这产生:

bash-3.2# ./a
Globals are : 0x10fa55020, text is 0x10fa54eb0, stack is 0x7fff501ab864, heap is 0x7f9b294000e0
bash-3.2# ./a
Globals are : 0x106bbe020, text is 0x106bbdeb0, stack is 0x7fff59042864, heap is 0x7f9752c000e0
bash-3.2# ./a
Globals are : 0x108673020, text is 0x108672eb0, stack is 0x7fff5758d864, heap is 0x7fecc34000e0
bash-3.2# ./a
Globals are : 0x1059d2020, text is 0x1059d1eb0, stack is 0x7fff5a22e864, heap is 0x7f8f81c000e0
Run Code Online (Sandbox Code Playgroud)

显示充足的随机对所有(注意,由于对准限制页内偏移量没有得到随机的,但你仍然得到一些16-20位的随机化,由4-5个十六进制数字,其变化暗示).

  • 内核:从Mountain Lion和iOS6开始,内核通过在加载时使用值vm_kernel_slide"滑动"来随机化.并非所有的vm页面都以这种方式滑动,但是大多数情况下这都是通过存储一些常量值(也可以通过系统调用#439,kas_info,在ML上读取但在iOS上不可读):Apple正努力保持随机化值秘密,并且在报告内核地址时不会泄漏它,所以jailbreakers将无法确定它们可以跳转到/覆盖的位置 - 这在大多数情况下适用于它们)

希望这可以帮助,

TG


Oce*_*lot 7

没有PIE:

可执行 - 已修复

数据 - 修正

堆 - 每次执行随机化

堆栈 - 固定

库 - 每个设备启动随机化

链接器 - 固定

使用PIE:

可执行 - 每次执行随机化

数据 - 每次执行随机化

堆 - 每次执行随机(更多熵)

堆栈 - 每次执行随机化

库 - 每个设备启动随机化

链接器 - 每次执行随机化