アドレス空間(ASLR・64ビット)とは?プログラムが使えるメモリの番地の範囲

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

アドレス空間とは(全体像)

メモリには、データを置く場所ごとに「番地(アドレス)」が振られている。プログラムが使えるこの番地の全範囲がアドレス空間だ。番地が多いほど、より多くのメモリを扱える。

身近にたとえると、街の住所体系。番地の桁数(ビット数)が増えるほど、表せる住所が一気に増えて、大きな街を作れる。

押さえるのは、ビット数で扱える容量が決まること。そして、配置をわざとバラバラにして攻撃を防ぐASLRというしくみがあること。


詳しく:32/64ビットの容量差とASLRだけ覚えれば戦える

ここが記事の心臓部。まずビット数による容量差を見ましょう。

32ビットと64ビットの容量

種別理論上の最大実際の上限状況
32ビット2の32乗=約4GB約4GB古い世代
64ビット2の64乗=16EB48ビット=256TB現代の主流

ここで一番のひっかけが「64ビットは2の64乗(16EB)をそのまま実際に使える」という誤解。実際の上限は48ビット=256TB。これはハードウェアの実装上の判断で、それでも数十年は足りる広さだ。

次に、セキュリティのしくみASLR(Address Space Layout Randomization=配置のランダム化)。

ASLR(配置のランダム化)

項目内容
やることデータやライブラリの置き場所を毎回ランダムに変える
ねらい攻撃者が「ここを狙えば良い」と決め打ちできなくする
効果バッファオーバーフロー攻撃などをやりにくくする

ここで2つめのひっかけが「ASLRがあれば絶対安全」という誤解。配置を漏らす別の弱点と組み合わされると破られることがある。ASLRはあくまで守りの一枚で、DEP(データ領域でコードを動かせなくする)などと重ねて使う。

わかりやすく言い換えると

要するに、街の住所と防犯でイメージするとラクです。

32ビット … 番地が少ない小さな街(約4GB)

64ビット … 番地がけた違いに多い巨大な街(実用256TB)

ASLR … 自宅の住所を毎回ランダムに変える防犯。「あの家を狙う」と決め打ちさせない

つまり、「容量はビット数で決まる」「ASLRは配置ランダム化(でも万能ではない)」、この2点が試験の急所です。


試験のツボ

🔴 一番出る:32ビットと64ビットの容量差

①32ビットは約4GBまで

②64ビットは理論16EB・実用は48ビット=256TB(現代の主流)

🔴 次に出る:ASLR

①データやライブラリの配置を毎回ランダムに変えるしくみ

②攻撃者の決め打ちを防ぎ、バッファオーバーフロー攻撃などを緩和する

🟡 押さえると安定:ASLRは万能ではない/重ねて守る

①別の弱点と組み合わされると破られることがある

②DEPやスタックカナリアなどと重ねて使うのが現代の標準


よくある間違い

「64ビットは2の64乗(16EB)をそのまま実際に使える」→ ✗  実際の上限は48ビット=256TB。理論値と実用値は違う。

「ASLRさえあればどんな攻撃も絶対に防げる」→ ✗  配置を漏らす別の弱点と組み合わされると破られることがある。守りの一枚。

「32ビットでも数百TBのメモリを1つのプログラムで扱える」→ ✗  32ビットの上限は約4GB。大容量は64ビットが前提。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(32/64ビットの容量差)

📝 オリジナル問題 1 32ビットと64ビットの容量

アドレス空間の容量に関する次の記述のうち、正しいものはどれか。

  1. 32ビットも64ビットも扱える容量はまったく同じで、どちらも約4GBが上限だとされているものだ
  2. 32ビットは数百TBまで扱え、64ビットより大きな容量を扱えるものだとされているものである
  3. 32ビットは約4GBまで、64ビットは実用256TBで、いまの主流は64ビットのほうである
  4. アドレス空間の容量はビット数とは無関係で、いつも決まった一定の値だとされているものである
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

32ビットは約4GBまで、64ビットは理論16EB・実用は48ビット=256TBですね。容量はビット数で決まり、いまの主流は64ビットです。

選択肢1の「同じ容量」、選択肢2の「32ビットが大きい」、選択肢4の「ビット数と無関係」はどれも誤りですよ。

選択肢判定理由
132と64で容量がまるで違う
232ビットは約4GBが上限
34GB対256TB・主流は64ビット
4容量はビット数で決まる

オリジナル問題2(ASLR)

📝 オリジナル問題 2 ASLRのしくみ

ASLRに関する次の記述のうち、正しいものはどれか。

  1. ASLRは画面の明るさを自動で変える機能のことで、セキュリティとは無関係だとされている
  2. ASLRはデータやライブラリの配置を毎回ランダムに変え、攻撃者の決め打ちを防ぐしくみだ
  3. ASLRはメモリの容量を2倍に増やす機能のことで、配置とは関係がないものだとされている
  4. ASLRはプログラムの実行を必ず速くする機能で、攻撃の緩和とは関係がないものだとされる
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

ASLRは、データやライブラリの配置を毎回ランダムに変えて、攻撃者の決め打ちを防ぐしくみですね。これでバッファオーバーフロー攻撃などをやりにくくします。

選択肢1の「画面の明るさ」、選択肢3の「容量を2倍」、選択肢4の「必ず速くする」はどれも誤りですよ。

選択肢判定理由
1画面の明るさ調整ではない
2配置をランダム化し攻撃を防ぐ
3容量を増やす機能ではない
4速くする機能ではない

オリジナル問題3(64ビットの実用上限とASLRの限界)

📝 オリジナル問題 3 実用上限とASLRの限界

アドレス空間とASLRに関する次の記述のうち、正しいものはどれか。

  1. 64ビットの実用上限は256TBで、ASLRも別の弱点と組み合わされると破られることがある
  2. 64ビットは理論の16EBをそのまま使え、ASLRがあればどんな攻撃も絶対に防げるとされている
  3. 64ビットの上限は約4GBで、ASLRは配置を固定して必ず同じ場所に置くしくみだとされている
  4. 64ビットの上限は決まっておらず、ASLRはメモリを掃除する機能のことだとされているものだ
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

64ビットの実際の上限は48ビット=256TB(理論の16EBそのままではない)。ASLRも、配置を漏らす別の弱点と組み合わされると破られることがあるので、DEPなどと重ねて守りますね。

選択肢2の「16EBそのまま・絶対安全」、選択肢3の「上限4GB・配置固定」、選択肢4の「上限なし・掃除機能」はどれも誤りですよ。

選択肢判定理由
1実用256TB・ASLRは万能ではない
2実用は48ビット・ASLRは絶対安全ではない
3上限は256TB・ASLRは配置をランダム化
4上限はあり・掃除機能ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る