Re: pgcrypto seeding problem when ssl=on
От | Tom Lane |
---|---|
Тема | Re: pgcrypto seeding problem when ssl=on |
Дата | |
Msg-id | 923.1356291915@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: pgcrypto seeding problem when ssl=on (Marko Kreen <markokr@gmail.com>) |
Ответы |
Re: pgcrypto seeding problem when ssl=on
|
Список | pgsql-hackers |
Marko Kreen <markokr@gmail.com> writes: > On Sat, Dec 22, 2012 at 9:20 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I'm not thrilled with the suggestion to do RAND_cleanup() after forking >> though, as that seems like it'll guarantee that each session starts out >> with only a minimal amount of entropy. > No, that's actually the right fix - that forces OpenSSL to do new reseed > with system randomness, thus making backend (including SSL_accept) > maximally disconnected from static pool in postmaster. I don't think that "maximal disconnectedness" is the deciding factor here, or even a very important factor. If we do RAND_cleanup() then each new session will be forced to suck entropy from /dev/urandom (immediately, if an SSL connection is attempted). This opens the door to quasi-denial-of-service attacks that bleed all the entropy out of the system, forcing long delays for new PRNG-using processes, Postgres or otherwise. And long delays are the *best case* scenario --- worst case, if the system lacks decent /dev/random support, is that new processes are starting up with highly correlated PRNG states. If such an approach were a good thing, the OpenSSL guys would have implemented it internally --- it'd be easy enough to do, just by forcing RAND_cleanup anytime getpid() reads differently than it did when the pool was set up. gettimeofday() might not be the very best way of changing the inherited PRNG state from child to child, but I think it's a more attractive solution than RAND_cleanup. > This also makes behaviour equal to current ssl=off and exec-backend > mode, which already do initial seeding in backend. No, it's not "equal", because when ssl=off seeding attempts won't happen immediately after fork and thus an attacker doesn't have such an easy way of draining entropy. If we do what you're suggesting, the attacker doesn't even need a valid database login to drain entropy --- he can just fire-and-forget NEGOTIATE_SSL startup packets. (The exec-backend case will have such issues anyway, but who thought Windows was a secure OS?) > If you decide against RAND_cleanup in backend and instead > do workarounds in backend or postmaster, then please > also to periodic RAND_cleanup in postmaster. This should > make harder to exploit weaknesses in reused slowly moving state. We could consider that, but it's not apparent to me that it has any real value. regards, tom lane
В списке pgsql-hackers по дате отправления: