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

メモリのページに「書き込み可能」と「実行可能」を同時には許さない(W^X、書き込みと実行の分離)ことで防ぎやすくなる攻撃はどれか。

  1. Aパスワードを総当たりで試す攻撃
  2. B大量の通信を送ってサーバを止める攻撃
  3. Cスタックなどのデータ領域に攻撃用の機械語を書き込み、そこへ飛ばして実行させる攻撃
答えと解説を見る

正解:C. スタックなどのデータ領域に攻撃用の機械語を書き込み、そこへ飛ばして実行させる攻撃

昔の攻撃では、バッファオーバーフローでスタックに機械語を書き込み、戻り先をそこへ向けて実行させる方法がよく使われました。CPUのページテーブルには実行禁止のビット(NXビットなど)があり、OSがスタックやヒープ、.dataを実行禁止に、.textを書き込み禁止にすれば、この方法は使えなくなります。JITコンパイラのように実行中にコードを作る場合は、書き込みと実行の権限を切り替えて使います。

  • A. パスワードの総当たりはメモリの権限と関係ありません。
  • B. 通信の量による攻撃はメモリの権限では防げません。
  • C. 正しい。書けた場所は実行できなくなります。
この分野を解く 分野ページへ

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

  1. Linuxの共有ライブラリで、libfoo.so.1の「.1」のようなsonameのバージョン番号を上げるのは、一般にどのようなときか。
  2. Linuxでlddコマンドを実行ファイルに使うと分かることはどれか。
  3. 主なOSで使われる実行ファイルの形式の組み合わせとして正しいものはどれか。
  4. 再帰が深くなりすぎてスタックの上限を超えたとき、Linuxなどで一般に起こることとして正しいものはどれか。
  5. C言語で、初期値を書かない局所変数とグローバル変数の、使い始めたときの値について正しいものはどれか。