「Return-to-libc攻撃」の版間の差分
提供: セキュリティ
(ページの作成:「<!-- vim: filetype=mediawiki --> Return-to-libc攻撃 とは、バッファオーバーランによってコールスタック上の[[リターンアドレ...」) |
|||
行1: | 行1: | ||
− | + | [[Return-to-libc攻撃]] とは、[[バッファオーバーラン]]によって'''コールスタック'''上の[[リターンアドレス]]を別の'''サブルーチン'''へのアドレスに書き換え、スタック乗の引数にあたる位置も書き換えることで、任意の'''サブルーチン'''を呼び出す、攻撃手法です。 | |
− | + | ||
− | + | ||
− | [[Return-to-libc攻撃]] とは、[[バッファオーバーラン]]によって | + | |
'''読み方''' | '''読み方''' | ||
行9: | 行6: | ||
== 概要 == | == 概要 == | ||
+ | [[Return-to-libc攻撃]] とは、[[バッファオーバーラン]]によって'''コールスタック'''上の[[リターンアドレス]]を別の'''サブルーチン'''へのアドレスに書き換え、スタック乗の引数にあたる位置も書き換えることで、任意の'''サブルーチン'''を呼び出す、攻撃手法です。 | ||
− | + | [[Unix]] 系のシステムは、 [[C言語]]のランタイムとして '''libc''' と呼ばれる共通ライブラリを利用します。 常にリンクされていて攻撃に使いやすい機能が多い '''libc''' をターゲットにすることが多くなっています。'''libc'''以外を呼び出す場合でも、 return-to-libc と呼びます。 | |
− | + | ||
− | [[Unix]] 系のシステムは、 [[C言語]]のランタイムとして | + | |
− | + | ||
== 防御方法 == | == 防御方法 == | ||
− | + | * '''Stack Smashing Protector''' (SSP) は、スタック内容の破壊を検出、破壊されたセグメントをフラッシュアウトすることで、この攻撃を防御できます。 | |
− | * | + | |
* [[アドレス空間配置のランダム化|ASLR]] は、 64ビットシステムでは、攻撃成功確率を低下させることができます。32ビットシステムでは、ASLR は、16ビット分(65536通り)のランダム化しか提供しないため、[[総当たり攻撃]]によりハッキングされる可能性があります。 | * [[アドレス空間配置のランダム化|ASLR]] は、 64ビットシステムでは、攻撃成功確率を低下させることができます。32ビットシステムでは、ASLR は、16ビット分(65536通り)のランダム化しか提供しないため、[[総当たり攻撃]]によりハッキングされる可能性があります。 | ||
* [[Return-to-libc攻撃]] に対して、[[データ実行防止]](DEP)で用いられる[[NXビット]] は、無力です。 | * [[Return-to-libc攻撃]] に対して、[[データ実行防止]](DEP)で用いられる[[NXビット]] は、無力です。 | ||
− | |||
− | |||
== 使い方 == | == 使い方 == | ||
− | + | GCC Stack Smashing Protector は、 -ftsack-protector-all のオプションで有効になります。 | |
− | + | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
gcc -fstack-protector-all foo.c | gcc -fstack-protector-all foo.c | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
− | + | * Stack Smashing Protector | |
− | * | + | |
* [[アドレス空間配置のランダム化]] (ASLR | * [[アドレス空間配置のランダム化]] (ASLR | ||
* [[データ実行防止]] (DEP) | * [[データ実行防止]] (DEP) | ||
** [[NXビット]] | ** [[NXビット]] | ||
+ | <!-- | ||
+ | vim: filetype=mediawiki | ||
+ | --> |
2015年9月22日 (火) 16:53時点における最新版
Return-to-libc攻撃 とは、バッファオーバーランによってコールスタック上のリターンアドレスを別のサブルーチンへのアドレスに書き換え、スタック乗の引数にあたる位置も書き換えることで、任意のサブルーチンを呼び出す、攻撃手法です。
読み方
- Return-to-libc攻撃
- りたーん とぅ りぶしー こうげき
概要
Return-to-libc攻撃 とは、バッファオーバーランによってコールスタック上のリターンアドレスを別のサブルーチンへのアドレスに書き換え、スタック乗の引数にあたる位置も書き換えることで、任意のサブルーチンを呼び出す、攻撃手法です。
Unix 系のシステムは、 C言語のランタイムとして libc と呼ばれる共通ライブラリを利用します。 常にリンクされていて攻撃に使いやすい機能が多い libc をターゲットにすることが多くなっています。libc以外を呼び出す場合でも、 return-to-libc と呼びます。
防御方法
- Stack Smashing Protector (SSP) は、スタック内容の破壊を検出、破壊されたセグメントをフラッシュアウトすることで、この攻撃を防御できます。
- ASLR は、 64ビットシステムでは、攻撃成功確率を低下させることができます。32ビットシステムでは、ASLR は、16ビット分(65536通り)のランダム化しか提供しないため、総当たり攻撃によりハッキングされる可能性があります。
- Return-to-libc攻撃 に対して、データ実行防止(DEP)で用いられるNXビット は、無力です。
使い方
GCC Stack Smashing Protector は、 -ftsack-protector-all のオプションで有効になります。
gcc -fstack-protector-all foo.c
関連項目
- Stack Smashing Protector
- アドレス空間配置のランダム化 (ASLR
- データ実行防止 (DEP)