埋め込めるコード量が小さい場合の対処
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/22 07:15 UTC 版)
「バッファオーバーラン」の記事における「埋め込めるコード量が小さい場合の対処」の解説
関数gに埋め込む攻撃用の文字列は「NOPスレッド+シェルコード+戻りアドレスの繰り返し」という形をしており、gのリターンアドレスが「戻りアドレスの繰り返し」の部分に落ちない限り攻撃は成功しないので、関数gに攻撃用文字列を埋め込む箇所とgのリターンアドレスとが(仮想アドレス空間上で)あまりに近い場合は、攻撃に必要な長さのシェルコードを埋め込めないという問題が攻撃者に生じる。 しかし攻撃者が攻撃の標的となるマシンの環境変数を設定できる状況下では、攻撃者はこの問題を回避した攻撃が可能である。標的マシンでプロセスが実行される際には、そのプロセスの仮想アドレス空間に環境変数が読み込まれるので、攻撃者が事前に標的マシンの環境変数に「NOPスレッド+シェルコード」を書き込んでおけば、プロセスの仮想アドレスに「NOPスレッド+シェルコード」ができあがる事になる。プロセス中で関数gが実行された際、攻撃者は攻撃用文字列をgに入力して、リターンアドレスをそのNOPスレッドに書き換えれば攻撃が成功する事になる。 より確実な攻撃方法として、攻撃プログラムhの中に環境変数を読み込む関数(getenv()等)を用いるものもある。
※この「埋め込めるコード量が小さい場合の対処」の解説は、「バッファオーバーラン」の解説の一部です。
「埋め込めるコード量が小さい場合の対処」を含む「バッファオーバーラン」の記事については、「バッファオーバーラン」の概要を参照ください。
- 埋め込めるコード量が小さい場合の対処のページへのリンク