【问题标题】:What exactly is randomized with ASLR in MacOS X and iOS在 MacOS X 和 iOS 中,ASLR 究竟是随机的
【发布时间】:2012-10-10 16:24:15
【问题描述】:

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

我的意思是。我想看一个列表(类似)

  • 代码段(在 A、B、C 的情况下)

  • 堆栈(始终)

  • 数据段(从不)

最好是每个事物有多少位随机化。

我能找到的只是:“MacOS Lion 实现了完整的 ASLR”,而在其他地方,“完整的 ASLR 以不同的方式针对不同的操作系统实现”,显然信息量不大。

【问题讨论】:

    标签: ios macos security osx-lion ios6


    【解决方案1】:

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

    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);
    
    }
    

    在美洲狮身上,这会产生:

    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
    

    全部显示充分的随机化(请注意,由于对齐限制,页面内的偏移量不会随机化,但您仍然会获得一些 16-20 位随机化,正如 4-5 个十六进制数字的变化所暗示的那样) .

    • 内核:从 Mountain Lion 和 iOS6 开始,内核是通过在加载时以 vm_kernel_slide 的值“滑动”它来随机化的。并非所有 vm 页面都以这种方式滑动,但在大多数情况下,这是通过存储一些常量值来工作的(这也可以通过系统调用 #439,kas_info,在 ML 但在 iOS 上读取:Apple 正在努力保持随机化值秘密,并且在报告内核地址时不会泄漏它,因此越狱者不会弄清楚他们可以跳转到/覆盖的位置 - 这对他们来说大部分时间都有效)

    希望这会有所帮助,

    TG

    【讨论】:

    • 几年后,Apple 推出了系统完整性保护功能。 ElCapitan 之后的系统禁用 kas_info 系统调用,所以不要依赖它。 (我认为在 ElCapitan 上禁用 kas_info 是有问题的,但它肯定在 Sierra 上被禁用,直到你禁用 SIP;然后你可以使用 kas_info
    【解决方案2】:

    没有 PIE:

    可执行 - 已修复

    数据 - 固定

    堆 - 每次执行随机化

    堆栈 - 固定

    库 - 每个设备启动时随机化

    链接器 - 已修复

    使用 PIE:

    可执行 - 每次执行随机化

    数据 - 每次执行随机化

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

    堆栈 - 每次执行随机化

    库 - 每个设备启动时随机化

    链接器 - 每次执行随机化

    【讨论】:

    • 我在 Monterey(macOS 12.1,x86_64)上做了一个快速测试,看起来通过malloc 分配的小额分配不是在-fno-pie 下随机分配的。然而,非常大的分配(100MB+)似乎是随机的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2017-04-25
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多