[ホーム] >
[サイバー攻撃大辞典 トップ] > [フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃]
作成日:2020/09/18
フォーマット文字列攻撃あるいは書式文字列攻撃とはprintf()、syslog()などの関数の引数の特性を悪用してメモリ内容を盗み見したり、悪意のコードを実行する攻撃手法。
printfの書式は以下のとおり。
printf(フォーマット文字列,引数1,引数2,引数3・・・・・);
以下に攻撃例を示す。
printf(buf);
というコードがありかつbuf(フォーマット文字列)はユーザにより入力される値とする。
この場合、悪意のユーザはbufにフォーマット文字列("%s"など)を入力することにより想定外のアドレスの内容を出力することができる。
bufにフォーマット文字列を入力することにより引数が不足するがエラーとはならない。
またprintfは引数の数が不定であるため、コンパイルの時点でも検出されない。
上記の例ではprintf("%s",buf);
とコーディングすべきである。
その他フォーマット文字列内のフォーマットパラメータとして
%n
がある。これを悪用することにより、悪意のコードを書き込める可能性がある。
(*)%nは何バイトのデータが書き出されたかの値を引数で指定した整数変数に書き込むフォーマットパラメータ
[ホーム] >
[サイバー攻撃大辞典 トップ] > [フォーマット文字列攻撃(Format string attack)| 書式文字列攻撃]