Re: [patch] Add basic sanity checks to the syscall execution patch

From: Ingo Molnar
Date: Fri Sep 05 2008 - 12:53:14 EST



* pageexec@xxxxxxxxxxx <pageexec@xxxxxxxxxxx> wrote:

> > i think Linux is fundamentally different here as we have the source
> > code, and could apply the randomization technique i mentioned:
>
> how's that supposed to work for the binary distros, i.e., the majority
> of end users? [...]

it takes less than 10 minutes to build a full kernel on recent hardware.
Can be done in the background after install or so.

> [...] and who would look at all the bugreports from such kernels?

yes, in this area debuggability is in straight conflict. Since we can
assume that both attacker and owner has about the same level of access
to the system, making the kernel less accessible to an attacker makes it
less accessible/debuggable to the owner as well.

> > > > [ It would be nice to have a 'randomize instruction scheduling'
> > > > option for gcc, to make automated attacks that recognize specific
> > > > instruction patterns less reliable. ]
> >
> > and every box where it matters we could have a _per box_ randomized
> > kernel image in essence, with non-essential symbols thrown away, and
> > with a few checks inserted in random locations - inlined and in essence
> > unrecognizable from the general entropy of randomization.
> >
> > Not that a randomizing compiler which inserts true, hard to eliminate
> > entropy would be easy to implement. But once done, the cat and mouse
> > game is over and the needle is hidden in the hay-stack. At least as long
> > as transparent rootkits are involved.
> >
> > a successful attack that wants to disable the checks
>
> why do you assume that an attacker wants to do that? it's equally
> possible, and there's even academic research on this in addition to
> the underground cracking scene, that one simply hides the
> modifications from the checker.
>
> from marking your patched code as unreadable to executing it from a
> different place than what the checker checks, there're many ways to
> trick such checkers. as far as reality goes, it's never been game over
> ;).

well at least in the case of Linux we have a fairly good tally of what
kernel code is supposed to be executable at some given moment after
bootup, and can lock that list down permanently until the next reboot,
and give the list to the checker to verify every now and then? Such a
verification pass certainly wouldnt be cheap though: all kernel
pagetables have to be scanned and verified, plus all known code (a few
megabytes typically), and the key CPU data structures.

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/