リンカ・ローダと実行形式

ASLR(アドレス空間配置のランダム化)の目的として正しいものはどれか。

  1. Aスタックやヒープ、ライブラリなどの番地を実行のたびに変え、攻撃者が狙う番地を予測しにくくする
  2. Bメモリの番地をランダムに選んで、キャッシュのヒット率を上げる
  3. C使っていないメモリをランダムに解放して、空き容量を増やす
答えと解説を見る

正解:A. スタックやヒープ、ライブラリなどの番地を実行のたびに変え、攻撃者が狙う番地を予測しにくくする

バッファオーバーフローなどを悪用する攻撃では、ライブラリの関数やスタック上のデータの番地を知っていることが重要です。ASLRは、プロセスを起動するたびにスタック、ヒープ、共有ライブラリ、実行ファイルを置く番地をずらし、攻撃者が番地を決め打ちできないようにします。単独で完全に防げるわけではなく、書き込みと実行の分離などほかの対策と組み合わせて使います。

  • A. 正しい。攻撃を難しくする対策です。
  • B. 性能のための仕組みではありません。
  • C. メモリを解放する仕組みではありません。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. 実行ファイルをPIE(位置独立実行ファイル)として作る主な理由はどれか。
  2. プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
  3. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
  4. C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。
  5. 実行ファイルにstripコマンドを使ったときに起こることとして正しいものはどれか。