Bug Classes/Stack overflow

From Linux Kernel Security Subsystem
Jump to navigation Jump to search

Details

The traditional bug results in the stack buffer being written past the end of the stack frame, which allows the saved instruction pointer to be overwritten in order to gain execution control. Other attacks could stay within the stack frame, manipulating local variables ("data only" attacks). Some attacks allow for arbitrary offsets between kernel stacks to be written.

Examples

  • half-nelson.c This uses stack offsets, rather than the traditional buffer overflow.

Mitigations

  • stack canaries (e.g. gcc's -fstack-protector and -fstack-protector-strong)
  • guard pages (e.g. GRKERNSEC_KSTACKOVERFLOW)
  • alloca checking (e.g. PAX_MEMORY_STACKLEAK)
  • kernel stack location randomization
  • shadow stacks