LINUX.ORG.RU

Могут ли украсть SSL ключи, взломав nginx?

Смогут, если смогут запустить код в контексте nginx.

Кажется от такого сценария нельзя уберечься теоретически? Или можно?

Нельзя.

Именно поэтому говно на пыхе ни в коем случае нельзя запускать внутри веб-сервера или от имени того же пользователя.

Deleted
()

и nginx, и apache, и все остальные :)

Если процесс с одной стороны светит в сеть открытым портом, с другой стороны держит в памяти содержимое ключа или имеет доступ на чтение к файлу с ключом - то да, теоретически ключ могут упереть, если найдётся подходящая уязвимость

Harald ★★★★★
()

Конечно можно. :) Только придётся на сайте отказаться от ssl. :)

turtle_bazon ★★★★★
()
Ответ на: комментарий от Harald

Да, я понимаю, потому и задал вопрос. Но представим следующую архитектуру. nginx запускается под root и читает сертификаты. Потом он запускает worker, понижая привилегии, и он устанавливает соединение с клиентами. Когда ему нужно что-то подписать, то он отправляет данные по pipe родителю и получает в ответ подписаные данные. Сам сертификатом не владеет, в памяти не держит, пользователь доступа не имеет.

Так вот, может в nginx что-то подобное?

vertexua ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey

Ну можно сделать parent и много пар secure-worker/worker наделать

vertexua ★★★★★
() автор топика
Ответ на: комментарий от Deleted

nginx не умеет разделять привилегии? Как там в ssh делается, один процесс рабочий, другой с правами.

anonymous
()
Ответ на: комментарий от anonymous

Для работы SSL/TLS нужен ключ в памяти того процесса, который занимается подписями, шифрованием и т.п. Тут хоть заразделяйся - никуда от этого не уйти.

Deleted
()
Ответ на: комментарий от Deleted

Ну я сказал как исправить - шифровать в отдельном процессе который понимает только очень тривиальный и однозначный протокол

vertexua ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Для работы SSL/TLS нужен ключ в памяти того процесса, который занимается подписями, шифрованием и т.п. Тут хоть заразделяйся - никуда от этого не уйти.

Ну так что мешает передавать пакеты под шифрование в отдельный процесс? Или наоборот форкать отдельный низкопривилегированый процесс под пыхпых?

anonymous
()
Ответ на: комментарий от vertexua

Ну если ты считаешь, что потеря производительности стоит того - вперёд, пиши.

Deleted
()
Ответ на: комментарий от anonymous

Ну так что мешает передавать пакеты под шифрование в отдельный процесс? Или наоборот форкать отдельный низкопривилегированый процесс под пыхпых?

Дык... так и делаем! По сути, nginx и так ничего не умеет кроме обработки соединений (с клиентами, а так же с бэкэндами) и шифрования =).

Deleted
()
Ответ на: комментарий от vertexua

бинго! ты придумал шифрующий фронтенд прокси 8)

Deleted
()
Ответ на: комментарий от vertexua

vertexua

Да, я понимаю, потому и задал вопрос. Но представим следующую архитектуру. nginx запускается под root и читает сертификаты. Потом он запускает worker, понижая привилегии, и он устанавливает соединение с клиентами. Когда ему нужно что-то подписать, то он отправляет данные по pipe родителю и получает в ответ подписаные данные. Сам сертификатом не владеет, в памяти не держит, пользователь доступа не имеет.

Указанная возможность называется privilege separated key handling.

Она применяется в службах relayd, OpenSMTPD проекта OpenBSD:

  • relayd(8) now uses privilege separation for private keys. This acts as an additional mitigation to prevent leakage of the private keys from the processes doing SSL/TLS.
  • OpenSMTPD: Added RSA privilege separation support to prevent possible private key leakage.

vertexua

Так вот, может в nginx что-то подобное?

Про nginx нашел упоминание в комментариях к этому посту:

Could this method get introduced into other projects as well where crypto is used?
Of course it was easier to change OpenBSD-affilated projects but maybe other projects would be interested (nginx, dovecot, postfix) as well so maybe it's worth contacting upstream about it?

Yes, this could be used in other projects. As long as they are capable of using privilege separation, this technique will work just fine.

По всей видимости, указанная функция пока что не реализована в nginx.

Deleted
()
Ответ на: комментарий от Deleted

Ок, понятно, это в принципе ответ на мой вопрос. Просто достаточно очевидная фича

vertexua ★★★★★
() автор топика

Без проблем можно защититься, просто шифрованием должен заниматься кто-то другой. Например аппаратное решение. Естественно теоретически и там могут найти дырку, но кода там меньше и уязвимостей меньше.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.