Address Space Layout Randomization

--なぜSafariだったのですか。IEやFirefoxでなかったのは?

簡単なことです。Mac上のSafariの方が攻撃が簡単だからです。Windows上のいくつかの技術は攻撃を成功させるのを難しくしていますが、Macではそういうことはしていません。Macをハッキングする方がずっと簡単です。曲芸をして、Windows上で見られる耐攻撃措置を相手にする必要がないからです。

これは、対象となるプログラムではなくオペレーティングシステムの問題です。Mac上のFirefoxも比較的簡単です。その下にあるOSに、攻撃に対抗する仕組みが組み込まれていないからです。

(参照:10 questions for MacBook hacker Dino Dai Zovi

私が使ったSafariに対する攻撃では、コードをプロセスに埋め込むと、そのコードの場所を正確に知ることができます。ランダム化されたりはしません。そこにジャンプすれば、コードはそこにあり、そこから実行することができます。Windowsでは、コードは現れるかもしれませんが、それがどこにあるか分かりません。コードの場所にたどり着いたとしても、実行できません。これら2つの障害は、Macにはないものです。

3つすべてのブラウザ(Safari、IE、Firefox)にバグがあるのは明らかです。コードを実行できるセキュリティホールがあちこちにあります。しかし、それは公式の片側の辺に過ぎません。もう一方の辺には、それを悪用するということがあります。Mac OS Xでは、そこにほとんど障害がありません。

何だかんだで ASLR (Address Space Layout Randomization) は役立ってるんだのぅ *1.ということは,もし仮にこのコンテストで使用される OS が Windows XP だったり *2Firefox が Visual C++ 6.0 や Visual C++ .NET 2003 でコンパイル (というかリンク) されていたりしだすと,だんだん話が違ってくるわけか.

Mac OS is fine, there's no need to worry like you.



「Mac の OS は平気。キミみたいに心配する必要はないんだ」

追記: Mac OS X の ASLR とか NX-bit

詳しくはないんですが,軽く検索してみるとこういう話が.

This is already present to an extent in today's Leopard Server, which runs some services, such as the Apache web server, as 64-bit processes. Using the vmmap command reveals that no memory allocated by these 64-bit apps is both writable and executable. On 32-bit Intel systems, while no memory is marked as both writable and executable, the legacy x86 processor design does not enforce the permissions bits, but 64-bit CPUs do. This feature prevents exploits from injecting malicious executable code into memory and tricking the app to run it as it if were its own instructions.

Another security weakness in the x86 architecture solved in the move to 64-bits is the use of registers for function call arguments. This makes exploits using return-into-libc techniques much more difficult. On 32-bit x86, function arguments are passed directly on the stack, so when an attacker has overwritten the stack segment, they can completely control the arguments passed to a function that they cause the compromised program to "return into," according to a security researcher.

The move to 64-bits also greatly enhances the Address Space Layout Randomization (ASLR) techniques used to secure Leopard. Currently, 32-bit binaries are restricted to a relatively small 4GB allocation, making it easier to predict useful addresses for malicious code to target. Additionally, Leopard keeps dyld, Mac OS X's dynamic loader (responsible for loading all of the frameworks, dylibs, and bundles needed by a process) in the same known location, making it relatively trivial to bypass the existing ASLR.

With the much larger address space available to 64-bit binaries, Snow Leopard's ASLR will make it possible to hide the location of loaded code like a needle in a haystack, thwarting the efforts of malicious attackers to maintain predictable targets for controlling the code and data loaded into memory. Without knowing what addresses to target, the "vast majority of these exploits will fail," the security expert explained.

追記2

107 名前: 名刺は切らしておりまして [sage] 投稿日: 2009/03/24(火) 14:08:03 ID:iCro0TNF
WikipediaにはMac OS XはNXビットをサポートしてると書いてある
ttp://en.wikipedia.org/wiki/Executable_space_protection#Mac_OS_X
このプレゼンによるとライブラリアドレスのランダム化もやっているようだ
ttp://trailofbits.files.wordpress.com/2009/03/macosxploitation_source2009.pdf
108 名前: 名刺は切らしておりまして [sage] 投稿日: 2009/03/24(火) 14:12:34 ID:iCro0TNF
>>107の下のプレゼンは今回のハッキングコンテストの後で書かれたようで
Mac OS Xのセキュリティを他のOSと比較しているので非常に参考になる
109 名前: 名刺は切らしておりまして [sage] 投稿日: 2009/03/24(火) 14:36:53 ID:iCro0TNF
ざっとまとめると
・VistaとLinuxはヒープとスタックの両方が実行不可だが、
 Mac OS Xはスタックのみ実行不可でヒープに書き込んだプログラムは実行可能
・VistaとLinuxはライブラリ、ヒープ、スタックの位置を動的にランダムに変えているが
 Mac OS Xはライブラリのみをインストール/アップデート時にランダム化するだけ

後で突っ込まれないように念のため付け加えておくと
・Linuxでも32bit版ではPAEを有効にしたカーネルでないとスタックは実行不可にならない。
 ほとんどのディストリビューションはデフォルトでPAE無効のカーネルをインストールする
・Linuxでprelinkを有効にしておくと、ライブラリ位置が変化するのは
 Mac OS Xと同様にインストール/アップデート時のみになる(手動で更新も可能)
 prelinkが有効になっているかどうかはディストリビューションによってまちまち

後で調べてみるか.

*1:相対的に何もやっていない OS を目立たさせるという意味でも

*2:XP SP2 でも NX-bit は期待できるけど