From: "Stephan Müller" <smueller@chronox.de>
To: "Ondřej Bílka" <neleai@seznam.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Ted Ts'o" <tytso@mit.edu>, lkml <linux-kernel@vger.kernel.org>,
Jeff Liu <jeff.liu@oracle.com>, Kees Cook <keescook@chromium.org>
Subject: Re: [PATCH] avoid entropy starvation due to stack protection
Date: Sat, 15 Dec 2012 23:59:46 +0100 [thread overview]
Message-ID: <50CD00E2.5050104@chronox.de> (raw)
In-Reply-To: <20121215191549.GA11036@domone.kolej.mff.cuni.cz>
Am 15.12.2012 20:15, schrieb Ondřej Bílka:
> Why not use nonblocking pool and seed nonblocking pool only with half of
> collected entropy to get /dev/random in almost all practical scenarios
> nonblocking?
I would not recommend changing /dev/urandom. First, we would change the
characteristic of a kernel interface a lot of user space cryptographic
components rely on. According to Linus that is typically a no-go.
Moreover, the question can be raised, where do we pick the number of
50%, why not 30% or 70%, why (re)seeding it at all?
Also, let us assume we pick 50% and we leave the create_elf_tables
function as is (i.e. it pulls from get_random_bytes), I fear that we do
not win at all. Our discussed problem is the depletion of the entropy
via nonblocking_pool due to every execve() syscall requires 128 bits of
data from nonblocking_pool. Even if we seed nonblocking_pool more
rarely, we still deplete the entropy of the input_pool and thus deplete
the entropy we want for cryptographic purposes a particular user has.
Thus, my recommendation is to disconnect the system entropy requirements
from the user entropy requirements as much as possible. I am aware that
there are in-kernel cryptographic requirements that must seed itself via
the good entropy. And those users shall be rather left untouched -- i.e.
they should still call get_random_bytes.
But for users that do not require cryptographic strength, but a strength
against guessing of a random number on the local system for a decent
time (like the stack protection or ASLR), we can use a slightly less
perfect DRNG which is seeded with good entropy and never thereafter.
Ciao
Stephan
>
> On Thu, Dec 13, 2012 at 08:44:36AM +0100, Stephan Mueller wrote:
>> On 13.12.2012 01:43:21, +0100, Andrew Morton
>> <akpm@linux-foundation.org> wrote:
>>
>> Hi Andrew,
>>> On Tue, 11 Dec 2012 13:33:04 +0100
>>> Stephan Mueller<smueller@chronox.de> wrote:
>>>
>>>> Some time ago, I noticed the fact that for every newly
>>>> executed process, the function create_elf_tables requests 16 bytes of
>>>> randomness from get_random_bytes. This is easily visible when calling
>>>>
>>>> while [ 1 ]
>>>> do
>>>> cat /proc/sys/kernel/random/entropy_avail
>>>> sleep 1
>>>> done
>>> Please see
>>> http://ozlabs.org/~akpm/mmotm/broken-out/binfmt_elfc-use-get_random_int-to-fix-entropy-depleting.patch
>>>
>>> That patch is about one week from a mainline merge, btw.
>> Initially I was also thinking about get_random_int. But stack protection
>> depends on non-predictable numbers to ensure it cannot be defeated. As
>> get_random_int depends on MD5 which is assumed to be broken now, I
>> discarded the idea of using get_random_int.
>>
>> Moreover, please consider that get_cycles is an architecture-specific
>> function that on some architectures only returns 0 (For all
>> architectures where this is implemented, you have no guarantee that it
>> increments as a high-resolution timer). So, the quality of
>> get_random_int is questionable IMHO for the use as a stack protector.
>>
>> Also note, that other in-kernel users of get_random_bytes may be
>> converted to using the proposed kernel pool to avoid more entropy drainage.
>>
>> Please note that the suggested approach of fully seeding a deterministic
>> RNG never followed by a re-seeding is used elsewhere (e.g. the OpenSSL
>> RNG). Therefore, I think the suggested approach is viable.
>>
>> Ciao
>> Stephan
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2012-12-15 22:59 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-11 12:33 [PATCH] avoid entropy starvation due to stack protection Stephan Mueller
2012-12-12 10:48 ` Stephan Mueller
2012-12-13 0:43 ` Andrew Morton
2012-12-13 7:44 ` Stephan Mueller
2012-12-14 17:36 ` Stephan Mueller
2012-12-16 0:30 ` Theodore Ts'o
2012-12-16 12:46 ` Stephan Müller
2012-12-21 20:07 ` Ondřej Bílka
2012-12-22 19:29 ` Theodore Ts'o
2012-12-15 19:15 ` Ondřej Bílka
2012-12-15 22:59 ` Stephan Müller [this message]
2012-12-21 19:32 ` Ondřej Bílka
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=50CD00E2.5050104@chronox.de \
--to=smueller@chronox.de \
--cc=akpm@linux-foundation.org \
--cc=jeff.liu@oracle.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neleai@seznam.cz \
--cc=tytso@mit.edu \
/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.