Return-to-libc攻撃
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2015/10/10 16:18 UTC 版)
Return-to-libc攻撃とは、バッファオーバーランによってコールスタック上のリターンアドレスを別のサブルーチンへのアドレスへ書き換え、さらにスタック上の引数に当たる位置も書き換えることで、サブルーチンを呼び出させるコンピュータセキュリティの攻撃手法である。攻撃者は、悪意あるコードをプログラムに注入することなく、単に既存の関数を呼び出すだけで攻撃を行う。
Unix系システムでは、C言語ランタイムとして "libc
" という共有ライブラリが使われる(Windows でも該当するライブラリが存在する)。バッファオーバーランでは攻撃者は任意のコードに戻るように細工できるが、常にリンクされていて攻撃に使い易い機能が多く存在する libc
をターゲットとすることが多い(例えば、system()
は引数さえ正しく指定すれば、任意のプログラムを実行できる)。このため、全く別の場所を呼び出すようになっていても総称として "return-to-libc" と呼ぶ。
防御方法
スタックに実行コードを書き込むようなバッファオーバーランを利用した攻撃の場合と異なり、NXビットでスタック上のコード実行を防御しても、return-to-libc攻撃ではスタック上のコードを実行するわけではないので、防ぐことができない。Stack smashing protection は、スタック内容の破壊を検出したり、可能であれば破壊されたセグメントを復旧することで、この種の攻撃を防御できる。
ASLR (Address Space Layout Randomization) は、実行プログラムの各モジュールのコードが配置される位置をランダム化することで、狙い撃ちでコードを実行されることを防ぐ。ASLRは、特に64ビットシステム上での攻撃成功確率を劇的に低下させる。32ビットシステムでは、一般的には16ビット分のランダム化しか提供しないため(すなわち65536通り)、総当たり攻撃により分単位で攻撃を成功されてしまう可能性がある。
関連項目
参考文献
- Shacham, Hovav; Page, M.; Pfaff, B.; Goh, E.; Modadugo, N.; Boneh, D. “On the Effectiveness of Address-Space Randomization”. Proc. of CCS 2004
外部リンク
- Bypassing non-executable-stack during exploitation using return-to-libc by c0ntex at InfoSecWriters.com
|
Return-to-libc攻撃
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/22 07:15 UTC 版)
「バッファオーバーラン」の記事における「Return-to-libc攻撃」の解説
詳細は「Return-to-libc攻撃」を参照 既に述べたように、典型的なスタックベースのオーバーフロー攻撃では、本来データを格納すべき箇所にシェルコードやNOP命令のようなコードを置き、リターンアドレスを書き換えてこれらのコードにジャンプして、これらのコードを実行する必要があった。しかしW ⊕ {\displaystyle \oplus } Xが実装された実行環境ではデータを格納すべき箇所におけるコード実行を不許可としているので、こうしたオーバーフロー攻撃を仕掛ける事はできない。 そこでW ⊕ {\displaystyle \oplus } Xを回避する為に考案されたのがReturn-to-libc攻撃である。この攻撃では、リターンアドレスのジャンプ先をデータ格納箇所に書き換えるのではなく、標準Cライブラリ(libc)のような共有ライブラリ・DLLにジャンプするよう書き換える。こうしたライブラリはデータ格納箇所以外に置かれているので(W ⊕ {\displaystyle \oplus } Xが実装された環境においても)実行許可がある。そこで攻撃者はライブラリ内の関数を悪用して、攻撃を仕掛ける事ができる。 実行環境がASLRを実装していれば、libc等のライブラリの仮想アドレスはランダムに変わるので、攻撃者がジャンプ先をライブラリに落ちるようリターンアドレスを書き換えるのは困難になる。
※この「Return-to-libc攻撃」の解説は、「バッファオーバーラン」の解説の一部です。
「Return-to-libc攻撃」を含む「バッファオーバーラン」の記事については、「バッファオーバーラン」の概要を参照ください。
固有名詞の分類
標準Cライブラリ |
Strcpy Strlen Return-to-libc攻撃 GNU Cライブラリ Memset |
- return-to-libc攻撃のページへのリンク