12

最新のMacOS(10.7)とiOS(6.0)の場合、どのような場合に正確にランダム化されるのか、ドキュメントへのリンクを持っている人はいますか?

つまり。リストを見たい(のような)

  • コードセグメント(ケースA、B、C)

  • スタック(常に)

  • ヒープ

  • データセグメント(決して)

できれば、それぞれが持つランダム化のビット数を使用します。

私が見つけることができるのは、「MacOS Lionは完全なASLRを実装する」、他の場所では「完全なASLRはさまざまなオペレーティングシステムに対してさまざまな方法で実装される」のようなものですが、これは明らかにあまり有益ではありません。

4

2 に答える 2

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

}

マウンテンライオンでは、これは次のようになります。

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

すべてに十分なランダム化を示しています(配置の制限により、ページ内のオフセットはランダム化されませんが、4〜5桁の16進数が変化することからわかるように、16〜20ビットのランダム化が得られます)。

  • カーネル:Mountain LionおよびiOS6の時点で、カーネルは、ロード時にvm_kernel_slideの値で「スライド」することによってランダム化されます。すべてのVMページがこのようにスライドするわけではありませんが、ほとんどの場合、これは一定の値を格納することで機能します(これは、MLではシステムコール#439、kas_infoでも読み取り可能ですが、iOSでは読み取り可能ではありません:Appleはランダム化を維持するのに苦労しています秘密を大切にし、カーネルアドレスを報告するときにそれを漏らさないので、ジェイルブレーカーはどこにジャンプ/上書きできるかを理解しません-これはほとんどの場合機能します)

お役に立てれば、

TG

于 2012-10-10T23:20:54.200 に答える
8

パイなし:

実行可能ファイル-修正済み

データ-修正済み

ヒープ-実行ごとにランダム化

スタック-修正済み

ライブラリ-デバイスの起動ごとにランダム化

リンカー-修正済み

PIEの場合:

実行可能ファイル-実行ごとにランダム化

データ-実行ごとにランダム化

ヒープ-実行ごとにランダム化(より多くのエントロピー)

スタック-実行ごとにランダム化

ライブラリ-デバイスの起動ごとにランダム化

リンカー-実行ごとにランダム化

于 2013-09-10T09:19:23.090 に答える