From: Ingo Molnar <mingo@elte.hu>
To: Matt Mackall <mpm@selenic.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Arjan van de Ven <arjan@infradead.org>, Jake Edge <jake@lwn.net>,
security@kernel.org,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
James Morris <jmorris@namei.org>,
linux-security-module@vger.kernel.org,
Eric Paris <eparis@redhat.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
Roland McGrath <roland@redhat.com>,
mingo@redhat.com, Andrew Morton <akpm@linux-foundation.org>,
Greg KH <greg@kroah.com>, Dave Jones <davej@redhat.com>
Subject: Re: [Security] [PATCH] proc: avoid information leaks to non-privileged processes
Date: Thu, 7 May 2009 20:41:36 +0200 [thread overview]
Message-ID: <20090507184136.GB30659@elte.hu> (raw)
In-Reply-To: <20090507181434.GL31071@waste.org>
* Matt Mackall <mpm@selenic.com> wrote:
> > As i mentioned it in the previous mail, i'd _really_ like to
> > hear your thread model and attack vector description. Does this
> > overhead justify the threat? Your change will only result in
> > get_random_int() not being considered fast anymore.
>
> My threat model is that someone more clever and with a lot more
> expertise attacking systems than either you or me will be able to
> leverage the extreme weakness of this hash (O(1) attacks against
> the *full* version!) into an attack that incrementally exposes the
> hidden RNG state. I've asked a couple such people whether they
> think that's likely, and they've said yes.
My question was whether the variant laced with the cycle counter
could be exposable.
I'd say that's almost impossible physically, in all but the most
trivial cases. Yes, you can do it with a static PRNG and a static
pool, but neither pool is static in reality (irqs are coming in all
the time) nor is the cycle counter static. The cycle counter will
mix in things like cache miss delays.
You need a really, really fast probe and a really quiet system to
pull off a statistical attack like that. In all other realistic
cases you have to play catch-up with the current state of the pool,
trying to guess it. And even if you have a reasonably good idea
about it, there's no _guarantee_ that your guess about the pool's
state is when a critical context you'd like to attack seeds its ASLR
or whatever other secret state.
> In fact, it's been known for over a decade that reduced-round MD4
> such as ours is *not one way* and that preimages (aka our hidden
> state) can be found in less than an hour on a *mid-90s era PC*:
>
> http://citeseer.ist.psu.edu/old/182935.html
But that is completely inapposite to the PRNG i posted. Getting to
preimage in a static MD4 hash where you have a reasonable number of
probes right after the unknown result is possible.
Eliminating cycle counter noise out of a _static_ secret permutated
via a PRNG is probably also possible, if the probe can be done
faster than the natural noise level of the cycle counter is.
_Combining_ the two and attacking _that_ (combined with the addition
of jiffies and a kernel stack address) - seems close to impossible
to me. You'd have to guess the precise cycle counter value at the
point of the hashing, and your samples wont help with that. They
might give an estimation, but that's really what ASLR is about: the
moment an attack isnt 100% sure, other measures (such as crash
monitoring) can save the day.
The really serious attackers avoid uncertainty like the plague.
It's the same reason why three letter agencies rather drop slam-dunk
court cases than expose their sources and methods. A failed attack
against a system exposes the attack and since the attack failed,
there's no way to erase traces of the attack.
Furthermore, ASLR is mostly about changing the dynamics of worm
attacks via the network. If an attack has only a 10% chance to
succeed, that might break the propagation dynamics of a worm. So
just a handful of bits are enough there.
> Combine that with greatly improved techniques for attacking hashes
> in the MD4 family in the last five years and you're probably
> looking at less than a second of CPU time. Combine that with the
> fact that we're using the hash in a feedback mode, and things only
> get easier.
>
> On the question of 'what if we add in the TSC?', I'd first say (a)
> we can't and shouldn't assume a TSC is available, though we
> certainly should use it if it is. Second I'd say that there are
> numerous timing attacks that have been done that suggest that
> guessing the TSC can be done with useful probability. For
> instance, see the branch prediction attacks against AES and RSA.
That is something completely different again, and i'm not sure
whether you are trolling here or not...
Branch prediction attacks against AES and RSA are _completely
different_ and the TSC connection is only there in name. They are
about using timing as a _sample_ of the secret state and its effects
on runtime.
Here the TSC is taken once, and mixed. _This_ TSC is not taken ever
again, nor saved. There's no statistical method to recover it! You
might know it up to a certain precision if you are lucky and can run
right after the call, but a couple of bits of true randomness will
be there for sure. In most cases more than a coupleof bits - an exec
takes 200-300 usecs and you have to run on that same CPU - so to get
a sample you have to go back almost 1 million TSC cycles ... That's
20 bits of TSC space.
Ingo
next prev parent reply other threads:[~2009-05-07 18:44 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-04 18:51 Jake Edge
2009-05-04 19:00 ` [Security] " Linus Torvalds
2009-05-04 19:51 ` Arjan van de Ven
2009-05-04 20:20 ` Eric W. Biederman
2009-05-04 22:24 ` Linus Torvalds
2009-05-04 23:26 ` Arjan van de Ven
2009-05-04 23:54 ` Linus Torvalds
2009-05-05 7:51 ` Eric W. Biederman
2009-05-05 15:17 ` Linus Torvalds
2009-05-05 15:35 ` Linus Torvalds
2009-05-05 16:18 ` Matt Mackall
2009-05-05 16:10 ` Matt Mackall
2009-05-05 5:50 ` Matt Mackall
2009-05-05 6:31 ` Ingo Molnar
2009-05-05 8:14 ` Eric W. Biederman
2009-05-05 19:52 ` Ingo Molnar
2009-05-05 20:22 ` Matt Mackall
2009-05-05 21:20 ` Eric W. Biederman
2009-05-06 10:33 ` Ingo Molnar
2009-05-06 10:30 ` Ingo Molnar
2009-05-06 16:25 ` Matt Mackall
2009-05-06 16:48 ` Linus Torvalds
2009-05-06 17:57 ` Matt Mackall
2009-05-07 0:50 ` Matt Mackall
2009-05-07 15:02 ` Ingo Molnar
2009-05-07 18:14 ` Matt Mackall
2009-05-07 18:21 ` Ingo Molnar
2009-05-07 18:41 ` Ingo Molnar [this message]
2009-05-07 19:24 ` Matt Mackall
2009-05-07 15:16 ` Florian Weimer
2009-05-07 16:55 ` Matt Mackall
2009-05-07 17:53 ` Linus Torvalds
2009-05-07 18:42 ` Matt Mackall
2009-05-06 20:09 ` [patch] random: make get_random_int() more random Ingo Molnar
2009-05-06 20:41 ` Matt Mackall
2009-05-06 20:51 ` Ingo Molnar
2009-05-06 21:10 ` Matt Mackall
2009-05-06 21:24 ` Ingo Molnar
2009-05-14 22:47 ` Jake Edge
2009-05-14 22:55 ` [Security] " Linus Torvalds
2009-05-15 13:47 ` Ingo Molnar
2009-05-15 15:10 ` Jake Edge
2009-05-16 10:00 ` Willy Tarreau
2009-05-16 10:39 ` Ingo Molnar
2009-05-16 12:02 ` Eric W. Biederman
2009-05-16 14:00 ` Michael S. Zick
2009-05-16 14:28 ` Michael S. Zick
2009-05-16 14:57 ` Arjan van de Ven
2009-05-16 15:09 ` Michael S. Zick
2009-05-16 14:32 ` Matt Mackall
2009-05-16 13:58 ` Willy Tarreau
2009-05-16 15:23 ` Linus Torvalds
2009-05-16 15:47 ` Willy Tarreau
2009-05-16 15:54 ` Oliver Neukum
2009-05-16 16:05 ` Linus Torvalds
2009-05-16 16:17 ` Linus Torvalds
2009-05-15 1:16 ` Américo Wang
2009-05-06 20:25 ` [Security] [PATCH] proc: avoid information leaks to non-privileged processes Ingo Molnar
2009-05-06 20:52 ` Matt Mackall
2009-05-05 8:58 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090507184136.GB30659@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=arjan@infradead.org \
--cc=davej@redhat.com \
--cc=ebiederm@xmission.com \
--cc=eparis@redhat.com \
--cc=greg@kroah.com \
--cc=jake@lwn.net \
--cc=jmorris@namei.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mpm@selenic.com \
--cc=roland@redhat.com \
--cc=security@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®