すべてのプロセスに同じstack_canaryがありますか?

すべてのプロセスに同じstack_canaryがありますか?

Linuxカーネルでは、stack_canaryスタック保護メカニズムの1つです。

値はによって生成されますboot_init_stack_canary()。 ( /init/main.c)

boot_init_stack_canary()stack_canaryからランダムに生成されますget_random_bytes()

そして、このカナリア値は作業構造(struct task)で参照され、gsセグメントレジスタに格納されます。

プロセスが作成されると、セグメントstack_canaryから取得されます。gs

これ以上更新されない場合は、stack_canaryすべてのプロセスで同じ値になりますかstack_canary

それ以外の場合、生成する他の方法はありますか?

答え1

作業構造がコピーされるたびに、スタックカナリアは任意の値に初期化されます。dup_task_struct()存在するkernel/fork.c(特に380ラインバージョン4.7)。したがって、各分岐プロセスにはランダムなカナリアがあります。非常に各プロセスが異なるカナリアを持つ可能性が高い(より重要なのは、他のプロセスのスタックカナリアを予測できないことです)。

boot_init_stack_canary()最初の「作業」(カーネル)にスタックカナリアがあることを確認してください。このカナリアはプロセスで再利用されません。

関連情報