Как исправить ошибку Heartbleed (CVE-2014-0160) в OpenSSL?

151

На сегодняшний день обнаружена ошибка в OpenSSL , влияющая на версии 1.0.1 through 1.0.1f ( включительно) и 1.0.2-beta .

Поскольку Ubuntu 12.04, мы все уязвимы для этой ошибки. Чтобы исправить эту уязвимость, затронутые пользователи должны обновиться до OpenSSL 1.0.1g .

Как каждый затронутый пользователь может применить это обновление now ?

    
задан Lucio 07.04.2014 в 22:17
источник

6 ответов

141

Обновления безопасности доступны для 12.04, 12.10, 13.10 и 14.04 см. Уведомление о безопасности Ubuntu USN-2165-1 .

Итак, сначала вам нужно применить доступные обновления безопасности, например, запустив

sudo apt-get update
sudo apt-get upgrade

из командной строки.

Не забудьте перезапустить службы (HTTP, SMTP и т. д.), которые используют уязвимую версию OpenSSL, в противном случае вы все еще уязвимы. См. Также Heartbleed: что это такое и что параметры для его устранения? на сервере Server.fm.com.

Следующая команда показывает (после обновления) все службы, которые необходимо перезапустить:

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

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

    
ответ дан Florian Diesch 07.04.2014 в 22:46
источник
71

Баг известен как Heartbleed .

Я уязвим?

Как правило, это зависит от того, запущен ли какой-либо сервер, на котором вы создали ключ SSL в какой-то момент. Большинство конечных пользователей не затронуты (напрямую); по крайней мере Firefox и Chrome не используют OpenSSL. SSH не влияет. Распределение пакетов Ubuntu не затрагивается (оно зависит от подписей GPG).

Вы уязвимы, если вы запускаете любой сервер, который использует OpenSSL версии 1.0-1.0.1f (за исключением конечно версий, которые были исправлены с момента обнаружения ошибки). Затронутые версии Ubuntu составляют 11,10 однократных до 14,04 надежных предварительных выпусков. Это ошибка реализации, а не ошибка в протоколе, поэтому затрагиваются только программы, использующие библиотеку OpenSSL. Если у вас есть программа, связанная со старой версией OpenSSL версии 0.9.x, это не влияет. Это касается только программ, использующих библиотеку OpenSSL для реализации протокола SSL; программы, которые используют OpenSSL для других вещей, не затрагиваются.

Если вы запустили уязвимый сервер, открытый в Интернете, считайте его скомпрометированным, если в вашем журнале нет соединения с момента объявления в 2014-04-07. (Это предполагает, что уязвимость не была использована до его объявления.) Если ваш сервер был открыт только внутри страны, нужно ли вам менять ключи, будет зависеть от того, какие другие меры безопасности существуют.

Какое влияние?

Ошибка позволяет любому клиенту , который может подключиться к вашему серверу SSL, чтобы получить около 64 КБ памяти с сервера. Клиент не должен быть аутентифицирован каким-либо образом. Повторяя атаку, клиент может сбрасывать разные части памяти при последовательных попытках.

Одна из критических частей данных, которую злоумышленник может получить, - это закрытый ключ сервера SSL. С помощью этих данных злоумышленник может выдавать себя за ваш сервер.

Как восстановить на сервере?

  1. Отключить все уязвимые серверы в автономном режиме. Пока они работают, они потенциально могут протекать критически важные данные.

  2. Обновите пакет libssl1.0.0 и убедитесь, что все затронутые серверы перезагружены.
    Вы можете проверить, продолжают ли затронутые процессы работать с '' grep 'libssl. (deleted)' / proc / / maps '

  3. Создать новые ключи . Это необходимо, потому что ошибка могла позволить злоумышленнику получить старый закрытый ключ. Следуйте той же самой процедуре, которую вы использовали вначале.

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

  5. Отменить старые сертификаты.

  6. Оценка ущерба : любые данные, хранящиеся в памяти процесса, поддерживающего SSL-соединения, могут быть утечки. Это может включать пароли пользователей и другие конфиденциальные данные. Вы должны оценить, какими были эти данные.

    • Если вы используете службу, которая разрешает аутентификацию по паролю, то пароли пользователей, которые подключались с момента, когда была объявлена ​​уязвимость, должны считаться скомпрометированными. (Немного раньше, потому что на некоторое время пароль может остаться неиспользуемым в памяти.) Проверьте свои журналы и измените пароли любого затронутого пользователя.
    • Также недействительны все файлы cookie сеанса, поскольку они могут быть скомпрометированы.
    • Клиентские сертификаты не подвергаются риску.
    • Любые данные, которые были обменены с небольшим до того, как уязвимость, возможно, осталась в памяти сервера и, возможно, были утечены злоумышленнику.
    • Если кто-то записал старое SSL-соединение и извлек ключи вашего сервера, он теперь может расшифровать свою стенограмму. (Если бы PFS не было обеспечено - если вы этого не знаете, это не так.)

Как мне восстановить клиент?

Есть только несколько ситуаций, в которых затронуты клиентские приложения. Проблема на стороне сервера заключается в том, что каждый может подключиться к серверу и использовать ошибку. Чтобы использовать клиента, необходимо выполнить три условия:

  • Клиентская программа использовала баггированную версию библиотеки OpenSSL для реализации протокола SSL.
  • Клиент подключен к вредоносному серверу. (Например, если вы подключились к поставщику электронной почты, это не вызывает беспокойства.) Это должно было произойти после того, как владелец сервера узнал об этой уязвимости, поэтому предположительно после 2014-04-07.
  • Клиентский процесс имел конфиденциальные данные в памяти, которые не были совместно использованы сервером. (Так что если вы просто запустили wget , чтобы загрузить файл, утечки данных не было.)

Если вы сделали это между UTC 2014-04-07 и обновлением библиотеки OpenSSL, рассмотрите любые данные, которые были в памяти клиентского процесса, чтобы быть скомпрометированы.

Ссылки

ответ дан Gilles 08.04.2014 в 10:02
40

Чтобы узнать, какая версия OpenSSL установлена ​​на запуске Ubuntu:

dpkg -l | grep openssl

Если вы видите выход следующей версии, следует добавить патч для CVE-2014-0160.

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

Глядя на Ссылка , он показывает, какие ошибки исправлены:

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...
    
ответ дан crimi 08.04.2014 в 06:40
17

Если ваши apt-get репозитории не содержат предварительно скомпилированную версию 1.0.1g OpenSSL , поэтому просто загружайте источники с официального сайта и компилируйте их.

Ниже одной командной строки для компиляции и установки последней версии openssl.

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

Заменить старый двоичный файл openssl новым с помощью символической ссылки.

sudo ln -sf /usr/local/ssl/bin/openssl 'which openssl'

Вы все хороши!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

Cf this сообщение в блоге .

NB: Как указано в сообщении в блоге, это обходное решение не будет исправлять «сервер Nginx и Apache, которые должны быть перекомпилированы с 1.0.1g источниками openSSL».

    
ответ дан Quentin Rousseau 08.04.2014 в 02:18
12

Для тех, кто не хочет обновлять серверный пакет. Сегодня я прочитал кучу этих руководств и apt-get upgrade openssl === apt-get upgrade , это применит все исправления безопасности, требуемые вашей машиной. Замечательно, если вы явно не используете старую версию пакета.

Это минимальное действие, требуемое для Ubuntu 12.04 LTS, выполняющего Apache 2:

  • Перейдите в этот адрес и убедитесь, что у вас есть эта уязвимость. Вы должны использовать ПРЯМОЙ ВНЕШНИЙ АДРЕС ВАШЕГО WEB-СЕРВЕРА. Если вы используете loadbalancer (например, ELB), вы можете напрямую связаться с вашим веб-сервером.

  • Запустите следующие 1 лайнер для обновления пакетов и перезагрузки. Да, я видел, как все гиды говорили, что вы должны иметь отметку времени позже 4 апреля 2014 года, похоже, это не так.

    apt-get update & amp; & amp; & amp; apt-get install openssl libssl1.0.0 & amp; & amp; & amp; & amp; /etc/init.d/apache2 restart

  • Убедитесь, что у вас установлены соответствующие версии пакетов и еще раз проверьте ваш веб-сервер на наличие этой уязвимости.

Ключевыми пакетами являются следующие: я определил эту информацию, используя команду ниже, а затем отредактировал прокрутку (вам не нужно знать о состоянии моих машин).

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12 НЕ должен содержать уязвимость. Убедитесь, что это происходит, снова перейдя на сайт ниже и протестировав ваш веб-сервер.

Ссылка

    
ответ дан Adrian 08.04.2014 в 21:56
11

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

Вы должны проверить, чтобы у вас не было пакетов на удержание, таких как libssl.

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

Чтобы обновить эти apt-mark unhold libssl1.0.0 (например). Затем обновите: apt-get upgrade -V . Затем перезапустите соответствующие службы.     

ответ дан Domino 08.04.2014 в 17:51

Ознакомьтесь с другими вопросами по меткам