openssl внутри chroot - PullRequest
       5

openssl внутри chroot

3 голосов
/ 21 декабря 2011

При попытке установить ssl-соединение изнутри chroot-тюрьмы я получаю следующую ошибку:

twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.

Я использую openssl 0.9.6 с pyopenssl, чтобы установить соединение ssl, и я использую библиотеку витой python для python 2.4 под Linux (centos 5.5).

После некоторого устранения неполадок я обнаружил, что openssl терпит неудачу, потому что он пытается прочитать файл / dev / random, и он терпит неудачу, потому что в chroot нет / dev / random. Я подтвердил, что если я создаю файл / dev / random внутри chroot, соединение будет успешным.

  • Я думал о монтировании файловой системы devfs, которая содержит файл / dev / random внутри моего chroot, но мое приложение и его системные администраторы имеют плохую привычку удалять корень chroot, не отключая сначала все.
  • Я думал о чтении из файла / dev / random перед выполнением chroot, но моя текущая настройка - вызывать chroot еще до того, как мой двоичный файл запущен, и изменение места, где происходит chroot, было бы слишком большим изменением. в приложении я не уверен, когда и как это можно сделать.
  • Я думал о запуске программы вне моей chroot-тюрьмы, которая просто читает из / dev / random и записывает в именованный файловый канал под названием / jail / dev / random, который доступен изнутри chroot-тюрьмы, но я не как запуск отдельного процесса только для того, чтобы получить доступ к источнику случайности. Также это кажется слишком сложным для простой инициализации openssl.

Как правильно инициализировать openssl, если у меня нет доступа к / dev / random из моей программы?

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Вы можете подделать случайные данные для openssl, например, командная строка openssl:

[root@quilt /]# openssl s_client -h
usage: s_client args
...
 -rand file:file:...
...

В любом случае openssl нуждается в источнике случайности, он не может быть защищен без случайного одноразового номера, например из википедии:

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

Без источника случайности, SSL / TLS может быть легко взломан.

Если вы беспокоитесь, что chroot/dev/ можно удалить, почему бы не создать только chroot/dev/random или chroot/dev/urandom intead монтирования целого dev?

[root@quilt /]# mknod /dev/random c 1 8
[root@quilt /]# mknod /dev/urandom c 1 9

Да, кстати, вы также хотите скопировать систему /etc/resolv.conf и, возможно, другие хосты, сервисы, эфиры и т. Д. ...

1 голос
/ 27 декабря 2014

Возможно, лучшим способом является привязка файлов устройств следующим образом:

# touch chroot/dev/random
# mount --bind /dev/random chroot/dev/random

и то же самое для урандома.

...