Як виправити помилку Heartbleed (CVE-2014-0160) у OpenSSL?


152

На сьогоднішній день виявлено помилку у OpenSSL , що впливає на версії 1.0.1через 1.0.1f(включно) та 1.0.2-beta.

Починаючи з Ubuntu 12.04, ми всі вразливі до цієї помилки. Щоб виправити цю вразливість, постраждалі користувачі повинні оновити до OpenSSL 1.0.1g.

Як кожен постраждалий користувач може застосувати це оновлення зараз ?


Чи маєте ви впливову версію openssl?
Брайам

У мене виправлена ​​версія 1.0.1-4ubuntu5.12, і я перезапустив службу apache, але тестування filippo.io/Heartbleed на своєму сайті все ще говорить про те, що я вразливий Будь-яка ідея чому?

1
@Mat я не знаю, що тестує цей сайт, але, можливо, він виявляє, що ви використовуєте старий ключ. Оскільки ключ, можливо, просочився, його потрібно відновити.
Жиль

1
Ви дійсно не хочете оновлювати OpenSSL для оптових продажів нових версій, це неймовірний біль. Набагато простіше - просто встановити оновлений пакет, який виправляє проблему: ubuntu.com/usn/usn-2165-1
sarnold

Ви перезапустили свої послуги після оновлення?
Аксель

Відповіді:


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: Що це таке та які варіанти його пом’якшення? на Serverfault.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 ключі сервера , а потім оцінити, чи ваші ключі просочилися, і в такому випадку зловмисники можуть отримати конфіденційну інформацію з ваших серверів.


23
Не впевнений, що це працює на Ubuntu 12.04.4 LTS. Після повного оновлення openssl versionнадає OpenSSL 1.0.1 14 Mar 2012. Це не виправлена ​​версія, правда? Або я його неправильно читаю?
Пол Кантрелл

7
Що робити з Ubuntu 13.04? Немає оновлених
Opensl

20
У Ubuntu 12.04 навіть фіксований OpenSSL відображає версію 1.0.1 14 Mar 2012. Прочитайте відповідь crimi, щоб дізнатись, чи встановлена ​​ваша установка.
дан

7
Дякую, @dan! Відновлення відповіді @ crimi тут: якщо ти біжиш dpkg -l | grep ' openssl 'і отримуєш, 1.0.1-4ubuntu5.12то ти добрий.
Пол Кантрелл

20
Виправлення та перезапуск недостатньо. Вам потрібно відновити ключі та оцінити, чи ваші ключі просочені, а також інший конфіденційний матеріал. Див. Наприклад, Чи означає Heartbleed нові сертифікати для кожного SSL-сервера?
Жиль

71

Клоп відомий як Heartbleed .

Я вразливий?

Як правило, на вас впливає, якщо ви запустили якийсь сервер, для якого в якийсь момент створили ключ SSL. Більшість кінцевих споживачів не впливають (безпосередньо); принаймні Firefox та Chrome не використовують OpenSSL. SSH не зачіпається. На розподіл пакетів Ubuntu не впливає (він покладається на підписи GPG).

Ви вразливі, якщо запускаєте будь-який сервер, що використовує версії OpenSSL 1.0–1.0.1f (крім звичайних версій, які були виправлені з моменту виявлення помилки). Уражені версії Ubuntu складають 11.10 онієричних до 14.04 надійних попередніх релізів. Це помилка реалізації, а не недолік у протоколі, тому впливають лише програми, які використовують бібліотеку OpenSSL. Якщо у вас є програма, пов'язана зі старою версією 0.9.x OpenSSL, це не впливає. Тільки програми, які використовують бібліотеку OpenSSL для реалізації протоколу SSL; програми, які використовують OpenSSL для інших речей, це не впливає.

Якщо ви запустили вразливий сервер, що піддається впливу Інтернету, вважайте, що це порушено, якщо у ваших журналах не з’являється зв’язок з моменту оголошення 2014-04-07. (Це передбачає, що вразливість не використовувалася до її оголошення.) Якщо ваш сервер був відкритий лише внутрішньо, то чи потрібно змінювати ключі, буде залежати від того, які інші заходи безпеки виконуються.

Який вплив?

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

Одним із найважливіших фрагментів даних, який зловмисник може отримати, є приватний ключ сервера SSL. За допомогою цих даних зловмисник може представити себе за ваш сервер.

Як відновити на сервері?

  1. Перенесіть всі сервери, які постраждали, офлайн Поки вони працюють, вони потенційно витікають критичні дані.

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

  3. Створіть нові ключі . Це необхідно, тому що помилка, можливо, дозволила зловмиснику отримати старий приватний ключ. Дотримуйтесь тієї ж процедури, яку ви використовували спочатку.

    • Якщо ви використовуєте сертифікати, підписані органом із сертифікації, надішліть свої нові відкриті ключі у свій ЦА. Отримавши новий сертифікат, встановіть його на свій сервер.
    • Якщо ви використовуєте самопідписані сертифікати, встановіть їх на свій сервер.
    • Так чи інакше, переміщуйте старі ключі та сертифікати (але не видаляйте їх, просто переконайтеся, що вони більше не використовуються).
  4. Тепер, коли у вас є нові безкомпромісні ключі, ви можете повернути свій сервер в Інтернет .

  5. Скасуйте старі сертифікати.

  6. Оцінка пошкоджень : будь-які дані, що потрапили в пам'ять процесу, що обслуговує з'єднання SSL, потенційно можуть просочитися. Це може включати паролі користувачів та інші конфіденційні дані. Потрібно оцінити, якими були ці дані.

    • Якщо ви працюєте з сервісом, який дозволяє перевірити паролі, то паролі користувачів, які підключились трохи раніше, ніж було оголошено про вразливість, слід вважати компрометованими. (Трохи раніше, оскільки пароль певний час може залишитися невикористаним у пам'яті.) Перевірте свої журнали та змініть паролі будь-якого зачепленого користувача.
    • Також недійсні всі файли cookie сеансу, оскільки вони можуть бути порушені.
    • Клієнтські сертифікати не ставлять під загрозу.
    • Будь-які дані, якими було обмінено трохи раніше, ніж вразливість, можливо, залишилися в пам’яті сервера і тому можуть потрапити до зловмисника.
    • Якщо хтось записав старе з’єднання SSL та отримав ключі вашого сервера, він тепер може розшифрувати свою стенограму. (Якщо не було забезпечено PFS - якщо ви не знаєте, це не було.)

Як відновити клієнта?

Є лише кілька ситуацій, в яких впливають клієнтські програми. Проблема на стороні сервера полягає в тому, що кожен може підключитися до сервера та використовувати помилку. Для використання клієнта необхідно виконати три умови:

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

Якщо ви це робили між 2014-04-07 вечором UTC та оновленням своєї бібліотеки OpenSSL, вважайте, що будь-які дані, що знаходяться в пам’яті клієнтського процесу, були порушені.

Список літератури


4
Я не вірю "Це стосується лише серверної частини з'єднань SSL / TLS". openssl.org/news/secadv_20140407.txt говорить, що він може виявити секрети або від клієнта, або з сервера. ubuntu.com/usn/usn-2165-1 погоджується. Шанси, що ви використовуєте клієнтські сертифікати під час підключення до шкідливого сервера, невеликі, але можливість існує.
armb

@armb Ви добре зазначаєте. Навіть не важливо, чи використовуються клієнтські сертифікати, витік даних не пов'язаний з використанням сертифікатів. Я заручився допомогою професіоналів .
Жиль

Клієнтські сертифікати - це випадок, коли ви просочуєтеся приватні ключі, але так, паролі, файли cookie авторизації тощо можуть просочитися в будь-якому випадку. Однак із типовим використанням клієнта на основі OpenSSL, наприклад, curl або wget, у вас не було б секретів для інших сайтів у пам’яті під час підключення до шкідливого сервера, тому в такому випадку я думаю, що єдиним витоком було б, якби ви дали клієнтові секрети очікуючи надання їх законному сайту, і Heartbleed просочив їх під час рукостискання, перш ніж перевірка сертифікату виявить, що ви не підключені до потрібного сайту.
armb

1
@Gilles Можливо, вам будуть цікаві відповіді на те, які клієнти виявляються вразливими до Heartbleed? . Мені вдалося набрати "цікаву" пам'ять у nginx (проксі-режим), wget, посиланнях та інших.
Лекенштейн

1
@ MuhamedHuseinbašić Пакет opensslмістить інструменти командного рядка. Він не використовується програмами, які використовують бібліотеку OpenSSL для реалізації протоколу SSL (наприклад, Apache). Але вам слід просто застосувати оновлення безпеки дистрибутива.
Жиль

40

Щоб побачити, яка версія OpenSSL встановлена ​​на запуску Ubuntu:

dpkg -l | grep openssl

Якщо ви бачите наступний вихід версії, слід включити патч для CVE-2014-0160.

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

Переглядаючи https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12 , він показує, які типи помилок виправлені:

...
 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
...

2
Я оновив і отримав версію 5.12, але цей інструмент все ще говорить мені, що я вразливий filippo.io/Heartbleed Думки?
toxaq

3
Я перевірив наші оновлені сервери на цій стороні, і це мені сказало, що я не впливаю. Ви перезавантажили систему чи принаймні впевнені, що всі необхідні процеси були перезапущені?
crimi

3
Після оновлення OPENSSL все, що мені довелося зробити, це перезапустити службу apache, але витончена не допомогла . Мені довелося піти і перезапустити, використовуючиsudo service apache2 restart
Том Герт,

1
Я щойно знайшов причину своєї вразливості: у мене був встановлений mod-spdy-beta. Після вилучення та перезапуску apache всі тести вже зелені.
Андреас Рот

3
Оновлення opensslне виправляє такі програми, як Apache, Nginx або postfix. Вам потрібно оновити libssl1.0.0та перезапустити їх, як пояснено в інших публікаціях.
tnj

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

См. Цю публікацію в блозі .

Зауваження: Як зазначено в публікації в блозі, це рішення не дозволить виправити "сервер Nginx та Apache, які мають бути перекомпільовані з джерелами open.1L".


2
Як правило, Ubuntu не надає нову версію upstream, але виправляє версії для всіх підтримуваних версій, щоб звести зміни до мінімуму.
Флоріан Дієш

1
Примітка. Переконайтесь, що перезавантажте сервер після оновлення OpenSSL. Apache і Nginx підняли нову грузу, і вразливість була закрита.
dAngelov

6
Хе, тепер, коли я задію час, щоб прочитати деталі цієї публікації, я ще більше переживаю - завантажувати тарбол з якогось випадкового місця з Інтернету, розпаковувати та виконувати його частини як корінь - просто необачна поведінка. Було б трохи краще, якби підписи тарболу були завантажені та перевірені, але переконатися, що перевірка вами підписів була підписана правою клавішею, сама по собі є складним питанням. Дистрибуції вже спрямовані на те, щоб забезпечити безпечне володіння тарботами та пластирами. Дякую.
sarnold

2
це може бути хорошою ідеєю компілювати з джерела ЗАРАЗ і встановити новішу пізніше від apt, таким чином ваш більш безпечний, ніж не швидше на старіших версіях ubuntu так чи інакше мої два центи
nwgat

2
@sarnold openssl.org не здається випадковим місцем для завантаження джерела для openssl. Canonical має зробити це непотрібним, але openssl.org повинен стати авторитетним верхом для роботи.
Rustavore

12

Для тих, хто не хоче робити оновлення пакету на всій сервері. Я сьогодні прочитав купу цих посібників і apt-get upgrade openssl=== apt-get upgradeце стосуватиметься всіх виправлень безпеки, необхідних вашій машині. Чудово, якщо ви явно десь не спираєтесь на стару версію пакета.

Це мінімальна дія, необхідна для Ubuntu 12.04 LTS під керуванням Apache 2:

  • Перейдіть за цією адресою і доведіть, що у вас є вразливість. Вам слід використовувати Пряму зовнішню адресу вашого веб-сервера. Якщо ви використовуєте балансир вантажу (наприклад, ELB), можливо, ви не контактуєте безпосередньо зі своїм веб-сервером.

  • Запустіть наступний 1 вкладиш, щоб оновити пакети та перезапустити. Так, я бачив, як усі довідники говорили, що ви повинні мати часову позначку пізніше 4 квітня 2014 року, але мені здається, це не так.

    apt-get update && apt-get install openssl libssl1.0.0 && /etc/init.d/ перезапуск

  • Переконайтеся, що у вас встановлені відповідні версії пакетів та ще раз перевірте свій веб-сервер на наявність уразливості.

Ключові пакети такі: я визначив цю інформацію за допомогою команди нижче, після чого відредагував крихітку (вам не потрібно знати про стан моїх машин).

$ 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НЕ повинен містити вразливість. Переконайтеся, що це так, знову зайшовши на веб-сайт нижче та протестуючи веб-сервер.

http://filippo.io/Heartbleed/


2
Використання зовнішнього сайту для підтвердження вразливості на сервері здається мені неправильним підходом.
Rinzwind

Зовнішні сценарії тестування на вразливість в цей час стають все більш звичними. Він робить саме те, що робить внутрішній скрипт, з'єднання тільки починається від зовнішнього веб-сервера. Ви можете подивитися на таких сайтах, як WhiteHatSecurity.com, на прикладі програми, яка ініціює всі з'єднання віддалено. Є випадки, коли це не пролітає, наприклад, тестування вразливості мережі, але для тестування веб-сервера, спрямованого вперед (який, як правило, буде сервером SSL), це майже ідеально.
Адріан

Навіщо встановлювати пакет, якщо він оновлюється?
Брайам

1
apt-get install openssl libssl1.0.0зробив це для мене. Запуск openssl version -aтепер показує:built on: Mon Apr 7 20:33:29 UTC 2014
Тофер

"Зовнішні сценарії тестування на вразливість стають все більш звичними в наші дні", що відкриває можливість того, що зовнішній сайт зловживає моєю системою: все, що їм потрібно знати, виходить з ладу і зламати мою систему, перш ніж я її виправити. Ні, це не правильний шлях. (і так, я розміщую власні сайти з apache та openssl).
Rinzwind

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. Потім перезапустіть пошкоджені служби.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.