  While address space layout randomization (ASLR) has been extensively studied
for user-space programs, the corresponding OS kernel's KASLR support remains
very limited, making the kernel vulnerable to just-in-time (JIT)
return-oriented programming (ROP) attacks. Furthermore, commodity OSs such as
Linux restrict their KASLR range to 32 bits due to architectural constraints
(e.g., x86-64 only supports 32-bit immediate operands for most instructions),
which makes them vulnerable to even unsophisticated brute-force ROP attacks due
to low entropy. Most in-kernel pointers remain static, exacerbating the problem
when pointers are leaked.
  Adelie, our kernel defense mechanism, overcomes KASLR limitations, increases
KASLR entropy, and makes successful ROP attacks on the Linux kernel much harder
to achieve. First, Adelie enables the position-independent code (PIC) model so
that the kernel and its modules can be placed anywhere in the 64-bit virtual
address space, at any distance apart from each other. Second, Adelie implements
stack re-randomization and address encryption on modules. Finally, Adelie
enables efficient continuous KASLR for modules by using the PIC model to make
it (almost) impossible to inject ROP gadgets through these modules regardless
of gadget's origin.
  Since device drivers (typically compiled as modules) are often developed by
third parties and are typically less tested than core OS parts, they are also
often more vulnerable. By fully re-randomizing device drivers, the last two
contributions together prevent most JIT ROP attacks since vulnerable modules
are very likely to be a starting point of an attack. Furthermore, some OS
instances in virtualized environments are specifically designated to run device
drivers, where drivers are the primary target of JIT ROP attacks. Our
evaluation shows high efficiency of Adelie's approach.
  [full abstract is in the paper]
