canary を推測されたら終わり
狙ったメモリを出力しちゃうようなバグがあるとやばい
一番ひどい(便利な)情報源が glibc の中に
extern char **__libc_argv;
void __fortify_fail (msg)
const char *msg;
{
/* The loop is added only to keep gcc happy. */
while (1)
__libc_message (2, "*** %s ***: %s terminated\n",
msg, __libc_argv[0] ?: "<unknown>");
__libc_argv は stack を指してるので stack overflow してる時は
書き換えられる場合があり、 __libc_argv[0] に canary のアドレスを指定してやれば
*** stack smashing detected ***: <canaryの値> terminated
などと大変攻撃側に親切な死に方をしてくれる
まぁその後即死するからこれだけなら問題無いとも言えるけど
connection ごとに fork とかしてるプログラムだと
同じ canary を使いまわしてる…はず(たぶん)