모든 프로세스에 동일한 stack_canary가 있습니까?

모든 프로세스에 동일한 stack_canary가 있습니까?

Linux 커널에서는 stack_canary스택 보호 메커니즘 중 하나입니다.

값은 에 의해 생성됩니다 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()첫 번째 "작업"(커널)에 스택 카나리아가 있는지 확인하세요. 이 카나리아는 프로세스에서 재사용되지 않습니다.

관련 정보