[ホーム] > [サイバー攻撃大辞典 トップ] > [フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃]


作成日:2020/09/18

フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃

フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃の説明


フォーマット文字列攻撃あるいは書式文字列攻撃とはprintf()、syslog()などの関数の引数の特性を悪用してメモリ内容を盗み見したり、悪意のコードを実行する攻撃手法。

printfの書式は以下のとおり。

printf(フォーマット文字列,引数1,引数2,引数3・・・・・);

以下に攻撃例を示す。

printf(buf);
というコードがありかつbuf(フォーマット文字列)はユーザにより入力される値とする。
この場合、悪意のユーザはbufにフォーマット文字列("%s"など)を入力することにより想定外のアドレスの内容を出力することができる。
bufにフォーマット文字列を入力することにより引数が不足するがエラーとはならない。
またprintfは引数の数が不定であるため、コンパイルの時点でも検出されない。

上記の例ではprintf("%s",buf);
とコーディングすべきである。


その他フォーマット文字列内のフォーマットパラメータとして

%n

がある。これを悪用することにより、悪意のコードを書き込める可能性がある。
(*)%nは何バイトのデータが書き出されたかの値を引数で指定した整数変数に書き込むフォーマットパラメータ




対策


・printf()などで%nは使用しない
・printf()、syslog()などの引数に、ユーザ入力値を使用しない。
ユーザ入力値を使用する必要がある場合は、フォーマットパラメータを含まないか、入力値のサイズなどのチェックを行う。
・コンパイラーによってはフォーマット文字列攻撃の脆弱性をチェックするオプションがある。







[ホーム] > [サイバー攻撃大辞典 トップ] > [フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃]


本サイト内掲載されている情報は、誰もその正当性は保証しません。独自の調査により判明した事項を記載しており、内容に誤りがある可能性があります。
内容により発生したいかなる損害は誰も補償しません。自己責任で参考として閲覧してください。
本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) securitychecklist.net 2015 - 2020