(Translated by https://www.hiragana.jp/)
アドレス空間配置のランダム化 - Wikipedia

アドレス空間くうかん配置はいちのランダム

アドレス空間くうかん配置はいちのランダム英語えいご: address space layout randomization, ASLR)とは、重要じゅうようなデータ領域りょういき位置いち通常つうじょうプロセスアドレス空間くうかんにおける実行じっこうファイル基底きていライブラリヒープ、およびスタック位置いちふくまれる)を無作為むさくい配置はいちするコンピュータセキュリティ技術ぎじゅつである。

アドレス空間くうかんのランダムは、攻撃こうげきしゃ標的ひょうてきのアドレスを予測よそくすることをより困難こんなんにすることによって、あるしゅのセキュリティ攻撃こうげき妨害ぼうがいする。たとえば、return-to-libc攻撃こうげき実行じっこうこころみる攻撃こうげきしゃ実行じっこうされるコードの位置いち特定とくていしなければならず、スタックじょう注入ちゅうにゅうされたシェルコード実行じっこうこころみるほか攻撃こうげきしゃはまずスタックをつけなければならない。どちらの場合ばあいも、関連かんれんするメモリアドレスは攻撃こうげきしゃからかくされている。攻撃こうげきしゃはこれらの推測すいそくしなくてはならず推測すいそく失敗しっぱいすると通常つうじょうアプリケーションはクラッシュするため、回復かいふく不可能ふかのうである。

有効ゆうこうせい

編集へんしゅう

アドレス空間くうかん配置はいちのランダムはランダムにかれた領域りょういき攻撃こうげきしゃさがすことを困難こんなんにすることをねらったものである。探索たんさく空間くうかん増大ぞうだいすれば、そのぶんセキュリティも向上こうじょうする。したがって、アドレス空間くうかんのランダム無作為むさくいなオフセットない存在そんざいするエントロピーおおきくなるほど効果こうかてきである。エントロピーをおおきくするにはランダムおこなわれる仮想かそう記憶きおく領域りょういき空間くうかんりょうやすか、ランダムおこな時間じかん間隔かんかく短縮たんしゅくする。時間じかん間隔かんかく通常つうじょう可能かのうかぎちいさくなるよう実装じっそうされるので、ほとんどのシステムは仮想かそう記憶きおく領域りょういきりょうやさねばならない。

攻撃こうげきしゃはランダム対抗たいこうするために、攻撃こうげきくわえようとするすべての領域りょういき位置いち推測すいそく成功せいこうしなければならない。攻撃こうげきようのコードややくつデータをせるためのスタックやヒープのようなデータ領域りょういきについては、コードならばNOPスライド使用しよう、データならばコピーのかえしによって、攻撃こうげき可能かのう状態じょうたいやすことができる。領域りょういきがランダムされた結果けっかそれらの状態じょうたいのどれか1つになれば攻撃こうげき成功せいこうする。一方いっぽう基本きほんライブラリやメイン実行じっこうファイルのようなコード領域りょういきはその位置いち正確せいかく必要ひつようがある。しばしばこれらの領域りょういき混合こんごうされる。たとえばスタックフレームはスタックじょう注入ちゅうにゅうされ、ライブラリはそこをもどさきにされる。

まず、以下いか変数へんすう宣言せんげんする:

 
 
 
 
 
 
 
 
 
 

攻撃こうげきしゃ成功せいこうするかくりつ計算けいさんするために、試行しこう回数かいすう   はシグネチャベースのIPS、法的ほうてき規制きせい、その要因よういんによって中断ちゅうだんされることなく実行じっこうされると仮定かていする。ブルートフォースの場合ばあい、デーモンをさい起動きどうすることはできない。さらにどれだけおおくのビットが関係かんけいし、どれだけおおくのビットが1かいあたりの試行しこう攻撃こうげきされ、どれだけおおくのビット攻撃こうげきしなければならないビットがのこるかも算出さんしゅつしなければならない。

以下いかしき ビットのエントロピーにたいする かい試行しこうあたえられたとき、攻撃こうげき成功せいこうするかくりつあらわす。

 
 
 
 

おおくのシステムで、 すうせんからすうひゃくまん範囲はんいになりうる。現代げんだい 64ビットシステムじょうでは、これらの数値すうちすくなくともすうひゃくまんたっする。アドレスのランダムに16ビットを使用しようする2004ねん時点じてんの32ビットシステムについて、Shachamと共同きょうどう研究けんきゅうしゃ以下いかのようにべている。「…16ビットのアドレスランダムはブルートフォース攻撃こうげきによりすうふんれる」[1] この研究けんきゅうしゃ主張しゅちょう攻撃こうげきしゃおなじアプリケーションにたいしていかなる遅延ちえんもなくふくすうかい攻撃こうげきできる能力のうりょく依存いぞんしていることに注意ちゅういされたい。grsecurityふくまれているような、ASLRの適切てきせつ実装じっそうは、このようなブルートフォース攻撃こうげき不可能ふかのうにするいくつかの手法しゅほう提供ていきょうしている。ひとつの方法ほうほうは、ある一定いってい時間じかんない設定せっていされた回数かいすう以上いじょうクラッシュした実行じっこうファイルの実行じっこうさまたげることである。

一部いちぶのシステムはライブラリロード順序じゅんじょのランダム実装じっそうする。これはライブラリがロードされる順序じゅんじょをランダムする、ASLRのいち形態けいたいである。これにより供給きょうきゅうされるエントロピーはほとんどない。必要ひつようなライブラリ1つごとに供給きょうきゅうされるエントロピーのビットすう見積みつもりを以下いかしめす。これは可変かへんのライブラリサイズを考慮こうりょれていないため、実際じっさいられるエントロピーはもうすこおおきくなる。攻撃こうげきしゃ通常つうじょう1つのライブラリしか必要ひつようとしないことに注意ちゅういされたい。複数ふくすうライブラリの場合ばあい計算けいさんしきはより複雑ふくざつになるがこれも以下いかしめす。攻撃こうげきしゃが1つのライブラリしか使用しようしない場合ばあいは、複雑ふくざつしき として単純たんじゅんしたものであることに注意ちゅうい

 
 
 
 

これらの おおきなでも、ひくくなる傾向けいこうにある。もっとも重要じゅうようてんは、攻撃こうげきしゃ通常つうじょうC標準ひょうじゅんライブラリしか使つかえず、そのためしばしば 仮定かていできるということである。しかし、興味深きょうみぶかいことにライブラリのかずすくなくともここですうビットのエントロピーがられる。このようにライブラリロード順序じゅんじょのランダム仮想かそうメモリ領域りょういきアドレスのランダムわせることにより、すうビットの追加ついかエントロピーをられる可能かのうせいがある。これらの追加ついかビットはライブラリのみに適用てきようされ、のmmap()セグメントなどには適用てきようされないことに注意ちゅうい

エントロピーの削減さくげん

編集へんしゅう

攻撃こうげきしゃ単純たんじゅん情報じょうほう漏洩ろうえいから、攻撃こうげき1かいあたりの複数ふくすうビットエントロピー攻撃こうげきheap sprayingによる攻撃こうげきなど)まで、いくつかの方法ほうほう使つかってランダムされたアドレス空間くうかんあらわれるエントロピーを削減さくげんできる。これに対抗たいこうする手段しゅだんはほとんどない。

書式しょしき文字もじれつ攻撃こうげき使用しようしたメモリレイアウトにかんする情報じょうほう漏洩ろうえいがありうる。printf()のような書式しょしき文字もじれつ関数かんすう可変長かへんちょう引数ひきすうリスト使用しようして作業さぎょうおこなう。書式しょしき指定してい引数ひきすうリストがどのようにえるかを記述きじゅつする。引数ひきすうわたされる通常つうじょう方法ほうほうのために、各種かくしゅ書式しょしき指定していはスタックフレームの先頭せんとうちかくに移動いどうする。最終さいしゅうてきに、もどさきのポインタとスタックフレームポインタの抽出ちゅうしゅつ可能かのうであり、脆弱ぜいじゃくなライブラリのアドレスと既知きちのスタックフレームのアドレスがあらわれる。これにより攻撃こうげきしゃたいする障害しょうがいとしてのライブラリとスタックのランダム効果こうかはまったくなくなる。

スタックやヒープのエントロピーをらすこともできる。スタックは通常つうじょう16バイトの倍数ばいすう境界きょうかい配置はいちされなければならないので、ランダム間隔かんかくもそれよりちいさくはできない。さらにヒープはページ(通常つうじょう4096バイト)境界きょうかい配置はいちされなければならない。攻撃こうげきこころみるとき、重複じゅうふくした攻撃こうげきをこれらの境界きょうかいわせることが可能かのうである。NOPスライドをシェルコードの注入ちゅうにゅう使つかうことができ、system()へのもどりをこころみるときは文字もじれつ '/bin/sh' を任意にんい個数こすうのスラッシュの '////////bin/sh' にえることができる。削減さくげんされるビットすう間隔かんかく 攻撃こうげきたいして、ちょうど である。

このような減少げんしょうはスタックやヒープのデータりょうのために制限せいげんされる。たとえば、スタックは通常つうじょう8MB[2]制限せいげんされ、それよりもびて使つかわれることは、めったにない。これにより削減さくげん可能かのうなのは最大さいだい19ビットであるが、より保守ほしゅてき見積みつもりでは4-16KB[2]のスタックのものたいしておよそ 8-10ビットである。一方いっぽうヒープはメモリアロケータのいに制限せいげんされる。glibc場合ばあい、128KBをえるてはmmap()を使つかってつくられ、攻撃こうげきしゃのビット削減さくげんを5ビットに制限せいげんする。これはブルートフォースにたいする制限せいげん要因よういんでもある。おこなわれる攻撃こうげき回数かいすう削減さくげんすることはできるが、攻撃こうげきのサイズが十分じゅうぶんおおきくなると一部いちぶ環境かんきょうでのいは侵入しんにゅう検知けんちシステムたものになりうる。

PaXプロジェクトが最初さいしょに「ASLR」という造語ぞうご発明はつめいした。PaXはASLRの最初さいしょ設計せっけい実装じっそうを 2001ねん7がつ発行はっこうした。これは現在げんざいでももっと完全かんぜん実装じっそうであり、2002ねん10がつからはカーネルスタックのランダム提供ていきょうしている。PaXは実装じっそうくらべて、かくランダムされたレイアウトごとに最大さいだいのエントロピーをあたえる実装じっそうでありつづけている[3]

実装じっそう

編集へんしゅう

いくつかの主流しゅりゅうの、汎用はんよう目的もくてきのオペレーティングシステムがASLRを実装じっそうしている。

OpenBSDはASLRをサポートした(そしてデフォルトで有効ゆうこうにした)、最初さいしょ主流しゅりゅうのオペレーティングシステムの1つとなった[4]

Linuxよわ[5]かたちのASLRを、カーネルバージョン2.6.12からデフォルトで有効ゆうこうにした。PaXExec ShieldのLinuxカーネルにたいするパッチしゅうはより完全かんぜん実装じっそう提供ていきょうする。Adamantix、Alpine LinuxHardened Gentoo、およびHardened Linux From Scratchをふく各種かくしゅのLinuxディストリビューションはPaXのASLR実装じっそうをデフォルトでそなえている。

LinuxようExec Shieldパッチは16バイトの間隔かんかくじょうで19ビットのスタックエントロピーを供給きょうきゅうする。そして4096バイトの1ページ間隔かんかくじょうで8ビットのmmap()エントロピーを供給きょうきゅうする。これは524288とおりの位置いちがありうる8MBのひろさの領域りょういきにスタック基底きていく。そして256とおりの位置いちがありうる1MBのひろさの領域りょういきにmmap()基底きていく。

位置いち独立どくりつ実行じっこうファイル (PIE)機能きのうはメイン実行じっこうファイルバイナリのランダムな基底きていアドレスを2003ねんから実装じっそうする。これはメイン実行じっこうファイルにたいして、共有きょうゆうライブラリで使つかわれるものとおなじアドレスのランダムせい提供ていきょうする。PIEの機能きのうはネットワークに直接ちょくせつうデーモンにのみ使つかわれている - PIE機能きのうおな実行じっこうファイルでprelink機能きのう同時どうじ使つかうことができない。

prelinkツールは実行じっこうではなくprelinkにランダム実装じっそうする。なぜならば仕様しようによりprelink は、動的どうてきリンカがおこなわなければならなくなるまえにライブラリのさい配置はいちおこなうことで、プログラムをなんはしらせてもさい配置はいちが1かいしかおこなわれないようにすることが目的もくてきだからである。結果けっかとして、しんのアドレス空間くうかんランダムはprelinkの目的もくてきしてしまう。

Microsoft Windows

編集へんしゅう

マイクロソフトのWindows Vista後述こうじゅつとおり2008ねん3がつリリースのSP1から)、Windows Server 2008Windows 7、およびWindows Server 2008 R2は、ASLRが有効ゆうこうとなるよう特別とくべつにリンクされた実行じっこうファイルとダイナミックリンクライブラリについてのみではあるが、デフォルトでASLRを有効ゆうこうにしている[6]。これにはService Pack 1よりまえのWindows VistaじょうInternet Explorer 7ふくまれていなかった。ASLRとDEP両方りょうほうがアプリケーション互換ごかんせい目的もくてき無効むこうにされていた[7]Internet Explorer 8ふくむ、よりあたらしいバージョンはこれらの保護ほご有効ゆうこうにした。すべての実行じっこうファイルとライブラリで強制きょうせいてきにASLRを有効ゆうこうまたは無効むこうにするレジストリ設定せってい存在そんざいする。レジストリキー "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages" である[8]

ヒープスタック、プロセス環境かんきょうブロック、およびスレッド情報じょうほうブロック位置いちもランダムされる。シマンテックのセキュリティホワイトペーパーは、32ビットのWindows VistaにおけるASLRは期待きたいされるほど堅牢けんろうではない可能かのうせいがあると注意ちゅういしており、マイクロソフトはその実装じっそう弱点じゃくてんみとめている[9]

WehnTrust[10]やOzone[11]のようなホストベースの侵入しんにゅう検知けんちシステムも、ASLRをWindows XPWindows Server 2003オペレーティングシステムに提供ていきょうしている。しかし、これらの実装じっそう完全かんぜん詳細しょうさい公開こうかいされていない[12]

Solaris 11.1 よりサポートされた[13]

Appleは、Mac OS X v10.5(2007ねん10がつリリース)で、一部いちぶのライブラリオフセットのランダム導入どうにゅうした[14]。この実装じっそうは、ASLRがふせぐことを目的もくてきとした攻撃こうげきたいする完全かんぜん保護ほご提供ていきょうしない[15][16][17][18]

Mac OS X Lion 10.7(2011ねん7がつリリース)では、AppleはASLR実装じっそうをすべてのアプリケーションに拡大かくだいした。32ビットアプリケーションでも利用りようできるようになり(ヒープメモリ保護ほご同様どうよう)、64ビットと32ビットアプリケーションの攻撃こうげきたいするたいせい向上こうじょうした[19]

OS X Mountain Lion 10.8(2012ねん7がつリリース)以降いこうでは、システム起動きどうにカーネルだけでなく、kextやzoneをふくむシステム全体ぜんたいがランダムにさい配置はいちされる[20]

iOS (iPhone, iPod touch, iPad)

編集へんしゅう

Appleは、iOS 4.3(2011ねん4がつリリース)でASLRを導入どうにゅうした[21]

Android 4.0 Ice Cream Sandwichはシステムとサードパーティーのアプリケーションをメモリ管理かんり問題もんだい起因きいんする脆弱ぜいじゃくせい攻撃こうげきから保護ほごするためのASLRを提供ていきょうする。また、4.1においては位置いち独立どくりつ実行じっこうファイル (PIE) への対応たいおう追加ついかされた[22]

関連かんれん項目こうもく

編集へんしゅう

出典しゅってん

編集へんしゅう
  1. ^ On the Effectiveness of Address-Space Randomization,Shacham, H. and Page, M. and Pfaff, B. and Goh, E.J. and Modadugu, N. and Boneh, D,Proceedings of the 11th ACM conference on Computer and communications security,pp 298--307, 2004
  2. ^ a b RAM、ROM、フラッシュメモリなどのトランジスタメモリとキャッシュサイズおよびファイルサイズはK (10241)、M (10242)、G (10243)、…を2しん接頭せっとうとして使つかう。
  3. ^ Comparison of PaX to ExecShield and W^X
  4. ^ Theo De Raadt (2005ねん). “Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005”. 2009ねん8がつ26にち閲覧えつらん
  5. ^ http://www.tomshardware.com/reviews/pwn2own-mac-hack,2254-4.html
  6. ^ http://msdn.microsoft.com/en-us/library/bb430720.aspx
  7. ^ MS08-078 and the SDL”. The Security Development Lifecycle. Microsoft (2008ねん12月18にち). 2009ねん3がつ21にち閲覧えつらん
  8. ^ Windows® Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-735-62530-3
  9. ^ Ollie Whitehouse (2007ねん2がつ). “An Analysis of Address Space Layout Randomization on Windows Vista” (PDF). 2010ねん7がつ24にち閲覧えつらん
  10. ^ WehnTrust
  11. ^ Security Architects' Ozone
  12. ^ Address-Space Randomization for Windows Systems
  13. ^ アドレス空間くうかん配置はいちのランダム (ASLR)
  14. ^ Apple - Mac OS X - Security - Keeps safe from viruses and malware Archived 2011ねん5がつ25にち, at the Wayback Machine.
  15. ^ Quick Leopard Update | securosis.com
  16. ^ Matasano Chargen » A Roundup Of Leopard Security Features
  17. ^ Matasano Chargen » What We’ve Since Learned About Leopard Security Features
  18. ^ TippingPoint | DVLabs | New Leopard Security Features - Part I: ASLR
  19. ^ Apple - OS X Lion - Over 250 new features. Read about all of them.”. web.archive.org (2011ねん6がつ6にち). 2023ねん3がつ11にち閲覧えつらん
  20. ^ OS X Mountain Lion Core Technologies Overview June 2012”. Apple. 2023ねん3がつ11にち閲覧えつらん
  21. ^ Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows, Ars Technica, 11 March 2011
  22. ^ Android Security”. Android Developers. 2012ねん7がつ7にち閲覧えつらん

外部がいぶリンク

編集へんしゅう