[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: linux /dev/random initialization CVE-2018-1108



Eugene Berdnikov -> debian-russian@lists.debian.org  @ Mon, 17 Dec 2018 23:22:51 +0300:

 > On Mon, Dec 17, 2018 at 10:05:55PM +0300, Artem Chuprina wrote:
 >> Eugene Berdnikov -> debian-russian@lists.debian.org @ Mon, 17 Dec 2018
 >> 18:48> > Пришлось уже позаменять syslog-ng на rsyslog, потому что первый
 >> вызывает
 >>  >  getrandom() ДО того, как свалить в бэкграунд (правда, к нему и другие
 >>  >  претензии были). Хорошо что sshd так не делает, иначе на серверах
 >>  >  пришлось бы его под inetd переводить.
 >> 
 >> Вот интересно, а зачем syslog-ng понадобилась настоящая энтропия? Чему
 >> ему urandom не угодил?

 >  Насколько я разбираюсь в медицине, он как раз urandom и читает.
 >  Вот что написано в мане random(7):

 >    *  The  Linux-specific  getrandom(2) system call, available since Linux
 >       3.17.  This system call provides access either to the same source as
 >       /dev/urandom (called the urandom source in this page) or to the same
 >       source as /dev/random (called the random source in this page).   The
 >       default  is  the  urandom  source;  the random source is selected by
 >       specifying the GRND_RANDOM flag to the  system  call.   (The  geten‐
 >       tropy(3) function provides a slightly more portable interface on top
 >       of getrandom(2).)

 >  А вот что делает syslog-ng, фрагмент трассы, который я отправил в BT:
 > ------------------------------------------------------------------------
 > 1501 22:44:00 getrandom("\x74\x78\x56\x35\x28\xad\x52\xd2\xcb\x51\xb1\x30\xc7\x67\x14\x26\x01\xa4\x2d\xa0\x30\x1d\xad\x09\x9e\xe3\x2c\x4e\x07\x55\x0d\x29", 32, 0) = 32 <322.583360>

 >  Got with "strace -Tt", means reading of 32 random bytes tooks 322 seconds.
 > ------------------------------------------------------------------------
 >  Флаги здесь, как видно, нулевые, в то время как GRND_NONBLOCK = 1,
 >  GRND_RANDOM = 2. Так что именно urandom он и читает, и блокируется
 >  на нём на 5 минут.

Как интересно... Хотя, если по уму, то urandom'у бы тоже сначала набрать
энтропию, и только потом уже раскручивать псевдорандомизацию. А
прикапывать ее между перезагрузками чревато тем же боком. Так-то
считается, что urandom — псевдослучайный, но с криптографическим
качеством. А значит, должен иметь в виду криптографическую модель угроз.

 >>  >  Зато появился новый квест: писать программы так, чтобы они рандомные
 >>  >  битики получали асинхронно, в отдельном треде. Рядом с резолвером.
 >> 
 >> Опять-таки, если им нужна настоящая энтропия, то им ее все равно
 >> дожидаться.

 >  Да, это правильно, но теперь нужно понимать, что этом сисколе можно крепко
 >  зависнуть, а это может быть критично. Для syslog-ng квест выглядит так:
 >  автор должен был догадаться, что сначала нужно создать сокет в /dev/log
 >  и сказать ему listen(), иначе некоторые сервисы (например, sshd) не захотят
 >  запускаться и процесс загрузки встанет. Так что просто сделать костыль,
 >  принудительно отправив syslog-ng в бэкграуд -- не получится. Я пробовал,
 >  на SysV-init. Возможно, с systemd результат будет иной, но проблема
 >  имеется, для других утилит она может проявляться иначе.

Да, одна проблема раскрыла наличие другой. Ну что ж, бывает...


Reply to: