Heartbleed: как надежно и портативно проверить версию OpenSSL?

Heartbleed: как надежно и портативно проверить версию OpenSSL?

Я искал надежный и портативный способ проверки версии OpenSSL на GNU/Linux и других системах, чтобы пользователи могли легко узнать, следует ли им обновить свой SSL из-за ошибки Heartbleed.

Я думал, что это будет легко, но быстро столкнулся с проблемой в Ubuntu 12.04 LTS с последней версией OpenSSL 1.0.1g:

openssl версия -a

Я ожидал увидеть полную версию, но вместо этого получил это:

OpenSSL 1.0.1 14 марта 2012 г.
построено: Вт июн 4 07:26:06 UTC 2013
Платформа: [...]

К моему неприятному удивлению, буква версии не отображается. Никаких f, никаких g, просто "1.0.1" и все. Перечисленные даты также не помогают обнаружить (не)уязвимую версию.

Разница между 1.0.1 (af) и 1.0.1g имеет решающее значение.

Вопросы:

  • Какой надежный способ проверить версию, желательно кросс-дистрибутивный?
  • Почему вообще не отображается буква версии? Я не смог проверить это ни на чем другом, кроме Ubuntu 12.04 LTS.

Другие также сообщают о таком поведении. Несколько примеров:

Вот некоторые (специфичные для дистрибутива) предложения:

  • Ubuntu и Debian: apt-cache policy opensslи apt-cache policy libssl1.0.0. Сравните номера версий с пакетами здесь:http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl(спасибо @znmeb в твиттере) иyum info openssl-libs

Проверка наличия старой версии OpenSSL:

Оказывается, обновления пакета OpenSSL в Ubuntu и Debian не всегда достаточно. Вам также следует обновить пакет libssl1.0.0, а затем проверить, openssl version -aуказывает ли built on: Mon Apr 7 20:33:29 UTC 2014.

решение1

Судя по дате, отображаемой вашей версией OpenSSL, похоже, что выявляютсятам отображается полная версия.

Open SSL 1.0.1 был выпущен 14 марта 2012 г.. 1.0.1a был выпущен 19 апреля 2012 года.

Итак, я собираюсь пойти дальше и утверждать, что openssl version -aэто правильный, кросс-дистрибутивный способ отображения полной версии OpenSSL, установленной в системе. Кажется, это работает для всех дистрибутивов Linux, к которым у меня есть доступ, иэто метод, предложенный в документации OpenSSL на help.ubuntu.com, а также. Ubuntu LTS 12.04 поставляется с vanilla OpenSSL v1.0.1, версией, которая выглядит как сокращенная версия из-за отсутствия следующей буквы.

Сказав это, кажется, что естьглавныйошибка в Ubuntu (или в том, как они упаковывают OpenSSL), которая openssl version -aпродолжает возвращать оригинальную версию 1.0.1 от 14 марта 2012 года, независимо от того, был ли OpenSSL обновлен до какой-либо из новых версий. И, как и в большинстве случаев, когда идет дождь, он льет как из ведра.

Ubuntu — не единственный крупный дистрибутив, который привык портировать обновления в OpenSSL (или другие пакеты), а не полагаться на обновления и нумерацию версий, которые все знают. В случае OpenSSL, где буквенные номера версий представляют только исправления ошибок и обновления безопасности, это кажется почти непостижимым, но мне сообщили, что это может быть связано сПроверено FIPSплагин основные дистрибутивы Linux поставляются с OpenSSL. Из-за требований к повторной проверке, которая срабатывает из-за любого изменения, даже изменения, закрывающего дыры в безопасности, он заблокирован по версии.

Например, в Debian исправленная версия отображает номер версии 1.0.1e-2+deb7u5вместо номера версии в исходной ветке разработки 1.0.1g.

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

решение2

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

У вас может быть код, сообщающий номер версии, которая, как известно, уязвима,но сам код не уязвим. А обратный вариант — скрытно уязвимый код — может быть еще хуже!

Многие поставщики, которые объединяют продукты с открытым исходным кодом, такие как OpenSSL и OpenSSH, выборочно модифицируют срочные исправления в более старой версии кода, чтобы сохранить стабильность и предсказуемость API. Это особенно верно для «долгосрочных релизов» и платформ-приложений.

Но поставщики, которые делают это молча (не добавляя свой собственный суффикс строки версии), рискуют вызвать ложные срабатывания в сканерах уязвимостей (и запутать пользователей). Поэтому, чтобы сделать это прозрачным и проверяемым, некоторые поставщики добавляют свои собственные строки к основной версии пакета. И Debian (OpenSSL), и FreeBSD (в OpenSSH, через VersionAddendumдирективу sshd_config) иногда делают это.

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

Итак, это может выглядеть так:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

... Несмотря на тоэто было исправлено:

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

С такими вещами вам будет лучше, если выне доверяйте номеру версии.

решение3

К сожалению, я не уверен, что там естьявляетсякроссплатформенный способ сделать это.Как я обсуждаю в своем блогеверсия OpenSSL, отображаемая в Ubuntu 12.04, ОСТАЕТСЯ 1.0.1 после обновления до исправленной версии.

ТОЛЬКО для Ubuntu 12.04: вы можете узнать, обновлена ​​ли ваша версия, если выполняются все нижеперечисленные условия:

  1. dpkg -s openssl | grep Versionпоказывает версию 1.0.1-4ubuntu5.12 или более позднюю.
  2. dpkg -s libssl1.0.0 | grep Versionпоказывает версию 1.0.1-4ubuntu5.12 или более позднюю.
  3. openssl version -aпоказывает дату «постройки» 7 апреля 2014 года или позже.

Спасибо @danny за дополнительную информацию.

решение4

Тестируют ли эти скрипты все службы или толькоHTTPS?Насколько мне известно,PostgreSQLуязвим, но это всего лишь слухи, пока не произойдет реальная атака.

EстьметасплоитСкрипт доступен для использования.

https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a

Вы можете ввести это (проверено с помощьюGnuWin32OpenSSL binary версии 1.0.1.6, от 2014-01-14), или просто используйте скрипт в комментарии ниже. Это точнее и проще!

s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state

После подключения введите B, и вы увидите на уязвимом хосте, и вас не отключит:

B

HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
0000 - 18 03 03 00 3d                                    ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
read R BLOCK

Вы получите ответ сердцебиения, похожий на этот.

На пропатченном хосте вы увидите ответ, аналогичный приведенному ниже, и будете отключены:

Введите B.

HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   [email protected]...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47                                    ....G

Источник:

Также есть следующие инструменты:

Связанный контент