Todos os processos possuem o mesmo stack_canary?

1

No kernel do Linux, stack_canary é o mecanismo de proteção da pilha.

Este valor é gerado por boot_init_stack_canary() . ( /init/main.c )

boot_init_stack_canary() gera aleatoriamente stack_canary de get_random_bytes() .

E este valor canário é referenciado na estrutura da tarefa ( struct task ) e é salvo no registro de gs do segmento.

Quando um processo é gerado, o processo obtém stack_canary do segmento gs .

Se stack_canary não for atualizado novamente, todos os processos terão o mesmo valor stack_canary ?

Caso contrário, existem métodos de geração diferentes?

    
por Tylor Yoo 07.09.2016 / 09:39

1 resposta

3

O canário da pilha é inicializado com um valor aleatório sempre que uma estrutura da tarefa é duplicada; veja dup_task_struct() in kernel/fork.c (e em particular linha 380 na versão 4.7). Assim, cada processo bifurcado obtém um canário aleatório, o que significa que existe uma muito alta probabilidade de que cada processo tenha um canário diferente (e mais importante, você não pode prever o canário da pilha de outro processo).

boot_init_stack_canary() garante que a primeira "tarefa" (o kernel) tenha um canário de pilha. Esse canário não é reutilizado para processos.

    
por 07.09.2016 / 12:02