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 を使いまわしてる…はず(たぶん)