Heartbleed: что это такое и какие есть варианты для его смягчения?

204

Это канонический вопрос о понимании и устранении проблемы безопасности Heartbleed.

Что такое CVE-2014-0160 АКА "Heartbleed"? В чем причина, какие ОС и версии OpenSSL уязвимы, каковы симптомы, существуют ли какие-либо методы для обнаружения успешного эксплойта?

Как я могу проверить, не повреждена ли моя система? Как можно устранить эту уязвимость? Должен ли я быть обеспокоен тем, что мои ключи или другие личные данные были скомпрометированы? Какие еще побочные эффекты мне следует беспокоить?

Иаков
источник
14
Смягчение последствий Heartbleed включает в себя больше, чем просто новые ключи . (Ссылка на мой ответ по информационной безопасности StackExchange)
scuzzy-delta
Я слышу вас, но я думаю, что EEAA довольно подробно рассмотрело это ниже.
MadHatter
Я согласен: это отличный ответ, но heartbleed.com прилагает огромные усилия, чтобы указать, что существуют соображения помимо новых пар ключей - например, принудительное изменение пароля и аннулирование сеанса.
Scuzzy-Delta
1
@ scuzzy-delta - хорошая мысль. Я сделал свой ответ CW сейчас, так что не стесняйтесь редактировать / улучшать его с этой информацией.
EEAA
3
Лучший пример того, что это такое - (неудивительно) XKCD: xkcd.com/1354
Уэйн Вернер

Ответы:

118

Во-первых , прежде чем волноваться, убедитесь, что вы понимаете, действительно ли эта уязвимость применима к вам. Если у вас есть сервер, но на самом деле никогда не было приложений, использующих TLS, то это не является приоритетной задачей для вас. Если, с другой стороны, у вас когда-либо были приложения с поддержкой TLS, тогда вас ждет угощение. Читать дальше:

Что именно представляет собой CVE-2014-0160 aka «Heartbleed»?

Это большой беспорядок, вот что это такое. Короче говоря, в OpenSSL версий 1.0.1 - 1.0.1f была обнаружена уязвимость, позволяющая использовать ее удаленно, с помощью которой злоумышленник может считывать определенные части системной памяти. Это те части, которые содержат конфиденциальные данные, такие как закрытые ключи, общие ключи, пароли и ценные корпоративные данные.

Ошибка была независимо обнаружена Нилом Мехта из Google Security (21 марта 2014 г.) и финской компанией по тестированию ИТ-безопасности Codenomicon (2 апреля 2014 г.).

В чем причина?

Ну, ошибочный код в OpenSSL. Вот коммит, который представил уязвимость, и вот коммит, который исправил уязвимость. Ошибка обнаружилась в декабре 2011 года и была исправлена ​​сегодня, 7 апреля 2014 года.

Ошибка также может рассматриваться как признак более серьезной проблемы. Две связанные проблемы: (1) какой процесс используется, чтобы гарантировать, что ошибочный код не введен в базу кода, и (2) почему протоколы и расширения настолько сложны и трудны для тестирования. Пункт (1) - это проблема управления и процесса с OpenSSL и многими другими проектами. Многие разработчики просто сопротивляются таким практикам, как проверка кода, анализ и сканирование. Пункт (2) обсуждается в рабочей группе IETF по TLS. См. Heartbleed / сложность протокола .

Был ли ошибочно вставлен ошибочный код?

Я не буду размышлять о том, действительно ли это было ошибкой или, возможно, был добавлен фрагмент кода от имени плохого актера. Однако, человек, который разработал код для OpenSSL, утверждает, что он был непреднамеренным. См. Человек, который ввел серьезный недостаток безопасности «Heartbleed» отрицает, что он вставил его намеренно .

Какие ОС и версии OpenSSL уязвимы?

Как упомянуто выше, любая операционная система, которая использует, или приложение, которое связано с OpenSSL 1.0.1 до 1.0.1f.

Каковы симптомы, существуют ли какие-либо методы для обнаружения успешного использования?

Это страшная часть. Насколько нам известно, не существует известного способа определить, была ли эта уязвимость использована. Теоретически возможно, что в ближайшее время будут выпущены сигнатуры IDS, которые могут обнаружить этот эксплойт, но на момент написания они недоступны.

Существуют свидетельства того, что Heartbleed активно эксплуатировался в условиях дикой природы уже в ноябре 2013 года. См. EFF Wild in the Heart: были ли разведывательные агентства, использующие Heartbleed в ноябре 2013 года? И Bloomberg сообщает, что АНБ применило эксплойт вскоре после того, как была обнаружена уязвимость. Посмотрите, что АНБ сказал, что эксплуатирует ошибку Heartbleed для разведки в течение многих лет . Однако разведывательное сообщество США отрицает претензии Bloomberg. Смотрите IC на записи .

Как я могу проверить, не повреждена ли моя система?

Если вы поддерживаете OpenSSL в своей системе, вы можете просто выполнить openssl version:

$ openssl version
OpenSSL 1.0.1g 7 Apr 2014

Если распределение поддерживает OpenSSL, то вы , вероятно , не может определить версию OpenSSL из - за спины Patching с помощью opensslкоманды или информацию о пакете (например, apt-get, dpkg, yumили rpm). Процесс обратного исправления, используемый большинством (всеми?) Дистрибутивами, использует только базовый номер версии (например, «1.0.1e»); и не включает эффективную версию безопасности (например, «1.0.1g»).

У Супер пользователя есть открытый вопрос, чтобы определить эффективную версию безопасности для OpenSSL и других пакетов, когда пакеты возвращаются. К сожалению, нет полезных ответов (кроме как проверить сайт дистрибутива). См. Определить эффективную версию безопасности, когда сталкиваются с Backpatching ?

Практическое правило: если вы когда-либо устанавливали одну из уязвимых версий и когда-либо запускали программы или службы, связанные с OpenSSL для поддержки TLS, то вы уязвимы.

Где я могу найти программу для проверки на уязвимость?

В течение нескольких часов после объявления Heartbleed несколько человек в Интернете опубликовали общедоступные веб-приложения, которые предположительно можно было использовать для проверки сервера на наличие этой уязвимости. На момент написания этой статьи я не рассматривал ни одного из них, поэтому я не буду больше публиковать их заявки. Их можно относительно легко найти с помощью предпочитаемой вами поисковой системы.

Как эта уязвимость смягчается?

Обновите версию до незащищенной и сбросьте или повторно защитите уязвимые данные. Как отмечено на сайте Heartbleed , соответствующие шаги ответа в широком смысле:

  1. Патч уязвимых систем.
  2. Восстановить новые закрытые ключи.
  3. Отправьте новый CSR в свой CA.
  4. Получите и установите новый подписанный сертификат.
  5. Неправильные ключи сеанса и куки
  6. Сбросить пароли и общие секреты
  7. Отменить старые сертификаты.

Более подробный анализ и ответ см. В разделе Что должен делать оператор веб-сайта в отношении эксплойта Heartbleed OpenSSL? на бирже стека безопасности.

Должен ли я быть обеспокоен тем, что мои ключи или другие личные данные были скомпрометированы? Какие еще побочные эффекты мне следует беспокоить?

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

Вскоре после того, как уязвимость была обнаружена, Cloudfare предложила проверить, можно ли на практике восстановить личный ключ сервера. В соревнованиях независимо друг от друга победили Федор Индутный и Илкка Маттила. См. «Вызов из сердца» .

Где я могу найти больше информации?

Ссылка дамп, для тех, кто ищет более подробную информацию:


Довольно подробный график событий раскрытия можно найти на графике раскрытия Heartbleed: кто знал, что и когда .


Если вы программист и интересуетесь различными хитростями программирования, такими как обнаружение атаки Heartbleed с помощью msg_cbобратного вызова OpenSSL , см. Рекомендацию по безопасности OpenSSL 2014047 .

user145545
источник
42
+1 за ШУТ. ВНИЗ. ТВОЙ. СЕРВЕРЫ. * - Если вы делаете НИЧЕГО, где SSL действительно важен, отключите его, пока не решите проблему. Также не забудьте установить новые сертификаты (с новыми ключами ) после того, как вы исправите свои серверы - повторное использование старых ключей (которые могли быть скомпрометированы)
разрушает
29
ТАКЖЕ - перезапустите все сервисы, которые ссылаются на библиотеки OpenSSL. Обновление OpenSSL без перезапуска ваших демонов - это то же самое, что вообще не обновлять.
EEAA
14
Действительно - после любого серьезного патча (например, OpenSSL) я считаю хорошим правилом просто перезагрузить компьютер, чтобы убедиться, что вы ничего не пропустили.
voretaq7
5
Один из тестеров был с открытым исходным кодом: github.com/FiloSottile/Heartbleed
Riking
3
@EEAA, «отключите ваши серверы» не означает, что вы должны отключить питание. Это означает отключение (или переконфигурирование для отключения ssl / tls) apache или любой другой службы, выполняющей обслуживание.
psusi
42

Простое объяснение ошибки XKCD:

XKCD 1354

200_success
источник
36

Ubuntu 12.04, 12.10 и 13.10

Ubuntu выпустила USN-2165-1 , в котором говорится, что обновленные пакеты теперь доступны в архивах. Выполните следующие две команды, чтобы получить исправление.

sudo apt-get update
sudo apt-get upgrade

Ubuntu 14.04

Я загрузил пакет Debian, содержащий новую версию (1.0.1g), в PPA, который я настроил для этой цели. Эти три команды добавят мой PPA в вашу систему, обновят список доступных пакетов и обновят все:

sudo add-apt-repository ppa:george-edison55/openssl-heartbleed-fix
sudo apt-get update
sudo apt-get upgrade

Примечание: PPA также предоставляет пакеты для Ubuntu 12.04 и 13.10, на тот случай, если вы предпочитаете запустить новую версию (1.0.1g), а не просто использовать исправленные версии в архивах.

Ubuntu 10.04

Это версия LTS, версия сервера все еще поддерживается и получает обновления безопасности. Но эта уязвимость не повлияла на пакет openssl стандартной установки ubuntu 10.04, потому что версия ниже 1.0.1.

Настольная версия достигла конца срока службы и нуждается в обновлении / переустановке.

Ubuntu 13.04 и другие устаревшие версии

У Ubuntu 13.04 был очень короткий цикл поддержки, который вы не могли ожидать. Он уже достиг конца жизни и больше не получает обновлений безопасности. Надо было давно модернизировать. Если это все еще кто-то использует, пожалуйста, обновите сейчас, либо с нуля, либо его можно обновить неразрушающим до 13.10, следуя этой простой процедуре: http://www.tecmint.com/upgrade-ubuntu-13-04-raring-ringtail -to-ubuntu-13-10-saucy-salamander / После обновления система получает патч с сердечным кровом с 13.10.

Для всех других устаревших версий Ubuntu это означает, что в основном необходима новая установка.

Убедитесь, что патч был применен

По сути, запустите openssl version -aи убедитесь, что дата сборки - 7 апреля 2014 года или позже, но смотрите больше здесь .

перезагрузка

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

Натан Осман
источник
Я не могу говорить о других версиях, но, кажется, есть исправление, доступное для точного (12.04). Хотя я не могу с уверенностью сказать, что это устраняет уязвимость, по крайней мере, она была скомпилирована после соответствующего commit ( Mon Apr 7 20:31:55 UTC 2014).
Calrion
@Calrion: патч для OpenSSL или пакет Debian для OpenSSL? OpenSSL уже исправлен и выпущен новый выпуск.
Натан Осман
что будет с существующими соединениями во время обновления openssl? они будут отброшены?
Пдева
2
Это зависит от того, какой веб-сервер вы используете и как вы обновляете. При этом я не буду беспокоиться об удалении существующих подключений, поскольку они используют уязвимую версию.
Натан Осман
14

RedHat 6.5 и CentOS 6.5

Они уязвимы. В сообщении RedHat RHSA-2014-0376 говорится, что доступны исправленные библиотеки, и любой пострадавший должен выполнить обновление при первой же возможности.

На момент написания этой статьи у CentOS еще не было фиксированной версии, но публикация Каранбира Сингха в CentOS-announce говорит, что они выпустили обновленную версию openssl ( openssl-1.0.1e-16.el6_5.4.0.1обратите внимание на последние четыре цифры, которые важны), которая имеет эксплуатируемый TLS. Команда отключена, и ее можно безопасно применять, так как она будет перезаписана фиксированной версией, когда она будет выпущена.

Временно исправленная версия, похоже, еще не попала на все зеркала, но находится в основном хранилище по адресу http://mirror.centos.org/centos/6/updates/x86_64/Packages/ (и аналогично для i686).

Редактировать : как говорит Иэн, теперь, кажется, есть полностью исправленная версия для C6.5, и она, кажется, торопливо развернулась вокруг зеркал. Прямо yum updateполучил это для моих серверов; это openssl-1.0.1e-16.el6_5.7.

Версии RH6 и C6 до 6.5

Они не уязвимы. Согласно этой рекомендации от Red Hat ,

Эта проблема не затрагивала версии openssl, поставляемые с Red Hat Enterprise Linux 5 и Red Hat Enterprise Linux 6.4 и более ранними версиями.

Публикация Каранбира Сингха в CentOS-анонсе в равной степени очевидна в отношении версий:

Ранее сегодня мы узнали о серьезной проблеме в openssl, поставляемой в CentOS-6.5.

Безумный Шляпник
источник
Разве lists.centos.org/pipermail/centos-announce/2014-April/… не является выпуском исправления?
user619714
13

Debian Wheezy

Debian выполнил DSA-2896-1, и исправленные библиотеки доступны здесь . Сценарий оболочки доступен здесь .

1. Патч

Репозиторий Apt-get был обновлен, поэтому теперь исправленные библиотеки доступны через apt-get update && apt-get upgrade

apt-get upgrade libssl1.0.0 openssl

В качестве альтернативы (не рекомендуется) пакеты могут быть обновлены вручную:

wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/openssl_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl-dev_1.0.1e-2+deb7u5_amd64.deb

dpkg -i openssl_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl-dev_1.0.1e-2+deb7u5_amd64.deb

2. Перезагрузите сервер / сервисы

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

3. Проверьте версию OpenSSL

love@server:~$ openssl version
OpenSSL 1.0.1e 11 Feb 2013
love@server:~$ dpkg -l libssl1.0.0
||/ Name                    Version          Architecture     Description
+++-=======================-================-================-====================================================
ii  libssl1.0.0                 1.0.1e-2+deb7u6  amd64            SSL shared libraries
jacksoncage
источник
1
Если вы получаете обновления, wheezy/securityто с вами все будет хорошо apt-get update && apt-get upgrade. Или использовать интерактивный менеджер пакетов только обновить пакеты openssl, libssl1.0.0, libssl1.0.0-dbgи libssl-dev(как установлено в вашей системе).
CVn
использование apt-get не решает проблему для меня - все еще показывает OpenSSL 1.0.1e 11 февраля 2013
user568829
Спасибо @ michael-kjorling, когда я это сделал, он был недоступен, но это самый безопасный и правильный способ обновления.
Джексонкейдж
2
@ user568829 после применения патча версия openssl все равно будет отображаться OpenSSL 1.0.1e 11 Feb 2013как патч называется 1.0.1e-2. Вы можете проверить, dpkg -l opensslи он должен показать версию1.0.1e-2+deb7u6
Jacksoncage
2
Я бы предложил перезапустить хост после обновления OpenSSL не потому, что это строго необходимо, а для уверенности, что по крайней мере все, что загружает библиотеки OpenSSL динамически, используют новую версию. (Статически связанный другой вопрос.) Тем не менее, я признаю, что некоторые серверы не могут быть легко перезагружены во всех ситуациях, когда перезапуск службы может быть приемлемым.
CVn
9

Я хотел бы отметить, что закрытые ключи - не единственные активы, которые следует считать скомпрометированными. Ошибка может привести к утечке любой памяти, работающей в том же адресном пространстве (т. Е. В том же процессе), что и OpenSSL. Поэтому, если вы запускаете серверный процесс, в котором уязвимая версия OpenSSL статически или динамически связана, любая часть информации, которую этот процесс когда-либо обрабатывал , включая пароли, номера кредитных карт и другие личные данные, должна считаться потенциально скомпрометированной.

200_success
источник
9

FreeBSD 10.0 или openssl из портов

Команда безопасности FreeBSD выпустила рекомендацию относительно CVE-2014-0160 (он же «Heartbleed») и: FreeBSD-SA-14: 06.openssl

  1. Обновление FreeBSD

    • Обновление FreeBSD через бинарный патч

      Системы с RELEASE-версией FreeBSD на платформах i386 или amd64 могут быть обновлены с помощью утилиты freebsd-update (8):

      # freebsd-update fetch
      # freebsd-update install
      
    • Обновление FreeBSD из исходников

      1. Загрузите соответствующий патч из расположенного ниже расположения и проверьте отсоединенную подпись PGP, используя вашу утилиту PGP.

        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch
        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch.asc
        # gpg --verify openssl-10.patch.asc
        
      2. Выполните следующие команды как root:

        # cd /usr/src
        # patch < /path/to/patch
        
      3. Перекомпилируйте операционную систему

        используя компиляция системы и installworld , как описано в Руководстве FreeBSD .

  2. Обновите порт openssl с минимальной версией 1.0.1_10

  3. Перезапустите все демоны, используя библиотеку, или перезагрузите систему

  4. Действуйте так, как будто ваша система была взломана, переиздайте все ваши ssl-ключи и / или сертификаты и потенциально утечку информации (см. Более общий ответ EEAA ).

FreeBSD 9.x и FreeBSD 8.x

Эти системы являются не уязвимы к Heartbleed вопроса по умолчанию, как и полагается на старой версии 0.9.x из OpenSSL библиотеки, если вы не установили OpenSSL из портов (см наверх).

Если эти системы не уязвимы для проблемы Heartbleed , возможно, было бы разумно обновить вашу систему скорее раньше, чем позже, из-за другой локальной уязвимости (см. FreeBSD-SA-14: 06.openssl и раздел «FreeBSD 10.0» вверху ):

Локальный злоумышленник может отслеживать процесс подписания и может восстановить ключ подписи. [CVE-2014-0076]

Примечание :

В оригинальном сообщении Heartbleed FreeBSD 8.4 и 9.1 перечислены как потенциально уязвимые. Это не так из-за отсутствия расширения Heartbeat (по умолчанию библиотека OpenBSL FreeBSD версии 0.9.x).

Ouki
источник
3

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

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

Выпуск готовой ВМ находится здесь . Это в формате VMX.

Слова предупреждения

Этот скрипт и виртуальная машина будут показывать только текущее состояние ваших систем. Вполне возможно, что когда-то в прошлом ваши системы находились в уязвимом состоянии и могли подвергаться злоупотреблениям.

Нечто, отображаемое здесь, определенно является приоритетом для исправления, но это не освобождает вас от применения обновлений и изменения всех ваших ключей.

Тим Бригам
источник
Я только что получил письмо от Snapt, их это. БОЛО (Будь начеку) !
Джейкоб
2

Amazon Linux (дистрибутив Linux используется в Amazon EC2)

https://aws.amazon.com/amazon-linux-ami/security-bulletins/ALAS-2014-320/

Обзор проблемы: Обнаружена пропущенная проверка границ в том, как OpenSSL обрабатывает пакеты расширения пульса TLS. Этот недостаток можно использовать для обнаружения до 64 КБ памяти от подключенного клиента или сервера.

Затронутые версии: любой Amazon Linux AMI, на котором установлен openssl 1.0.1, любой Amazon Linux AMI 2013.03 или более поздней версии и любой Amazon Linux AMI, обновленный до 2013.03 или более поздней версии. OpenSSL по умолчанию устанавливается на Amazon Linux AMI.

Затронутые пакеты: openssl

Исправление проблемы: Запустите yum update openssl, чтобы обновить вашу систему. После установки нового пакета необходимо либо вручную перезапустить все службы, использующие openssl, либо перезагрузить ваш экземпляр. Хотя новый пакет все еще называется openssl-1.0.1e, он содержит исправление для CVE-2014-0160.

Новые пакеты: i686:

openssl-1.0.1e-37.66.amzn1.i686

openssl-static-1.0.1e-37.66.amzn1.i686

openssl-perl-1.0.1e-37.66.amzn1.i686

openssl-devel-1.0.1e-37.66.amzn1.i686

openssl-debuginfo-1.0.1e-37.66.amzn1.i686

x86_64:

openssl-devel-1.0.1e-37.66.amzn1.x86_64

openssl-1.0.1e-37.66.amzn1.x86_64

openssl-debuginfo-1.0.1e-37.66.amzn1.x86_64

openssl-perl-1.0.1e-37.66.amzn1.x86_64

openssl-static-1.0.1e-37.66.amzn1.x86_64
Гаррет МакДейд
источник