From: Ingo Molnar <mingo@elte.hu>
To: Valdis.Kletnieks@vt.edu
Cc: Dan Rosenberg <drosenberg@vsecurity.com>,
Tony Luck <tony.luck@gmail.com>,
linux-kernel@vger.kernel.org, davej@redhat.com,
kees.cook@canonical.com, davem@davemloft.net, eranian@google.com,
torvalds@linux-foundation.org, adobriyan@gmail.com,
penberg@kernel.org, hpa@zytor.com,
Arjan van de Ven <arjan@infradead.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [BUG] perf: bogus correlation of kernel symbols
Date: Tue, 24 May 2011 06:06:24 +0200 [thread overview]
Message-ID: <20110524040624.GA1638@elte.hu> (raw)
In-Reply-To: <6733.1306202368@localhost>
* Valdis.Kletnieks@vt.edu <Valdis.Kletnieks@vt.edu> wrote:
> On Mon, 23 May 2011 12:49:02 +0200, Ingo Molnar said:
> > Well, since entropy does not get reduced on addition of independent variables
> > the right sequence is (pseudocode):
> >
> > rnd = entropy_cycles();
> > rnd += entropy_rdrand();
> > rnd += entropy_RTC();
> > rnd += entropy_system();
>
> I'm having trouble convincing myself that RTC and cycles are truly independent
> variables.... ;)
Generally the RTC stores absolute time in seconds (it stores the date), while
cycles start new when the CPU is reset.
So they are independent.
The question i think you are asking is whether the fact that we can observe
current values of them after bootup can be used to figure out their value:
> Consider the case of a fixed-frequency CPU - if you know the time since boot,
> and the current RTC, and the current cycle count, you can work backwards to
> find the RTC and cycle count at boot. [...]
Yes, you are correct, if you are local then the guessing the RTC to the second
is probably possible.
Guessing the cycle counter's value will be hard: see the natural noise it has
at a fixed instruction after bootup in the same-bzImage test i performed - with
no IRQs having executed at all yet ...
The RTC is still reasonably noisy to external attackers though.
> [...] I'm not sure that a variable clockspeed helps all that much - an
> attacker can perhaps find a way to force the highest/ lowest CPU speed - or
> the system may even helpfully do it for the attacker - I've seen plenty of
> misconfigured laptops that force lowest supported CPU clockspeed on battery
> rather than race-to-idle.
The tests i performed were on a fixed frequency system - the cycle counter was
still largely random during early bootup.
Others should try it too - i've attached a simple patch. Maybe my system has
more bootup noise than others.
> Having said that, the 13 bootup rdtsc values you list *seem* to have on the
> order of 24-28 bits of entropy, and only the lowest-order bit seems to be
> non-random (the low-order byte of the 13 values are 28, b6, 44, 54, dc, 78,
> 2c, 38, 02, 58, 76, 16, and be). So rdtsc appears to be good enough for what
> we want here...
Yeah. And for cases that the rdtsc might be predictable for some weird reason
(say it would be 0 on an old system with no RDTSC), the RTC would give some
minimal fallback seed to make the canary at least not remotely guessable.
Thanks,
Ingo
---
init/main.c | 6 ++++++
1 file changed, 6 insertions(+)
Index: linux/init/main.c
===================================================================
--- linux.orig/init/main.c
+++ linux/init/main.c
@@ -472,6 +472,12 @@ asmlinkage void __init start_kernel(void
*/
boot_init_stack_canary();
+ {
+ u64 cycles = get_cycles();
+
+ printk("RDTSC: %Ld / %08Lx\n", cycles, cycles);
+ }
+
cgroup_init_early();
local_irq_disable();
next prev parent reply other threads:[~2011-05-24 4:06 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1305292059.1949.0.camel@dan>
2011-05-13 13:29 ` [BUG] perf: bogus correlation of kernel symbols Dan Rosenberg
2011-05-16 15:35 ` Ingo Molnar
2011-05-16 16:14 ` Dan Rosenberg
2011-05-20 0:56 ` Dan Rosenberg
2011-05-20 12:07 ` Ingo Molnar
2011-05-20 12:54 ` Dan Rosenberg
2011-05-20 13:11 ` Ingo Molnar
2011-05-20 17:41 ` Dan Rosenberg
2011-05-20 18:14 ` Linus Torvalds
2011-05-20 18:27 ` Kees Cook
2011-05-20 18:34 ` Dan Rosenberg
2011-05-20 18:42 ` Ingo Molnar
2011-05-20 18:28 ` Ingo Molnar
2011-05-22 6:11 ` david
2011-05-20 18:35 ` Ingo Molnar
2011-05-22 18:45 ` Dan Rosenberg
[not found] ` <BANLkTik1SK_kWVvGsKk0SqdByQ5-0b5nFg@mail.gmail.com>
2011-05-23 0:25 ` Dan Rosenberg
2011-05-23 0:37 ` H. Peter Anvin
2011-05-23 10:49 ` Ingo Molnar
2011-05-23 19:02 ` Ray Lee
2011-05-23 19:35 ` Ingo Molnar
2011-05-24 1:59 ` Valdis.Kletnieks
2011-05-24 4:06 ` Ingo Molnar [this message]
2011-05-12 14:48 Stephane Eranian
2011-05-12 18:06 ` David Miller
2011-05-12 18:37 ` Dave Jones
2011-05-12 19:01 ` David Miller
2011-05-12 19:58 ` Pekka Enberg
2011-05-13 6:12 ` Kees Cook
2011-05-13 6:24 ` Pekka Enberg
2011-05-12 20:24 ` Alexey Dobriyan
2011-05-12 21:06 ` Ingo Molnar
2011-05-12 20:31 ` Linus Torvalds
2011-05-12 20:43 ` David Miller
2011-05-12 21:07 ` Stephane Eranian
2011-05-12 21:30 ` Stephane Eranian
2011-05-12 21:35 ` Ingo Molnar
2011-05-12 21:38 ` Stephane Eranian
2011-05-12 21:50 ` Ingo Molnar
2011-05-12 21:56 ` Stephane Eranian
2011-05-12 22:00 ` Ingo Molnar
2011-05-12 22:07 ` Dave Jones
2011-05-12 22:15 ` Stephane Eranian
2011-05-13 9:01 ` Ingo Molnar
2011-05-13 8:57 ` Ingo Molnar
2011-05-13 16:23 ` Andi Kleen
2011-05-17 12:17 ` Ingo Molnar
2011-05-12 21:36 ` Ingo Molnar
2011-05-12 21:41 ` Stephane Eranian
2011-05-12 21:54 ` Ingo Molnar
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=20110524040624.GA1638@elte.hu \
--to=mingo@elte.hu \
--cc=Valdis.Kletnieks@vt.edu \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=davej@redhat.com \
--cc=davem@davemloft.net \
--cc=drosenberg@vsecurity.com \
--cc=eranian@google.com \
--cc=hpa@zytor.com \
--cc=kees.cook@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penberg@kernel.org \
--cc=tony.luck@gmail.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.