Я искал надежный и портативный способ проверки версии 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.
Другие также сообщают об этом поведении. Несколько примеров:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Некоторые (специфичные для дистрибутива) предложения, появляющиеся в:
- 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 все еще резидентной:
- Это не совсем надежно, но вы можете попробовать
lsof -n | grep ssl | grep DEL
. См. Heartbleed: как надежно и мобильно проверить версию OpenSSL? почему это может не сработать для вас.
Оказывается, что обновления пакета OpenSSL в Ubuntu и Debian не всегда достаточно. Вам также следует обновить пакет libssl1.0.0 и -then- check, если openssl version -a
указывает built on: Mon Apr 7 20:33:29 UTC 2014
.
[root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013
apt-cache policy openssl
и он ответил:Installed: 1.0.1-4ubuntu5.12
это 1.0.1g, только что выпущенный Ubuntu для 12.04 LTS. Я вышел из системы и вернулся обратно. Могу ли я проверить что-нибудь еще?Ответы:
На основании отображаемой версии 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 с нумерацией версий этого дистрибутива, чтобы определить, работают ли на ваших серверах уязвимая версия или нет.
источник
openssl version -a
это не переносимый метод (по крайней мере, не переносимый для Ubuntu). Я проверил,apt-cache policy openssl
и он ответил:Installed: 1.0.1-4ubuntu5.12
это 1.0.1g, выпущенный Ubuntu для 12.04 LTS. Я вышел из системы и вернулся, прежде чем проверять.After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features.
ничего не получится, если отказаться от вышестоящей схемы управления версиями; Бэкпортирование обновлений по существу аналогично использованию обновленной версии, поскольку обновление в любом случае включает только безопасность и исправление ошибок. То, что он делает, - это запутывает вещи и не дает нам возможности проверить версию OpenSSL в разных дистрибутивах Linux.Если вы хотите что-то действительно кроссплатформенное, проверьте наличие самой уязвимости, а не полагайтесь на номера версий.
Возможно, у вас есть код, сообщающий номер версии, который, как известно, уязвим, но реальный код не уязвим . И наоборот - тихо уязвимый код - может быть еще хуже!
Многие поставщики, которые объединяют продукты с открытым исходным кодом, такие как OpenSSL и OpenSSH, будут выборочно модифицировать срочные исправления к более старой версии кода, чтобы поддерживать стабильность и предсказуемость API. Это особенно актуально для платформ "долгосрочного выпуска" и устройств.
Но поставщики, которые делают это молча (без добавления собственного строкового суффикса версии), рискуют вызвать ложные срабатывания в сканерах уязвимостей (и вводят пользователей в заблуждение). Таким образом, чтобы сделать это прозрачным и проверяемым, некоторые поставщики добавляют свои собственные строки к основной версии пакета. И Debian (OpenSSL), и FreeBSD (в OpenSSH через
VersionAddendum
директиву sshd_config) иногда делают это.Производители, которые этого не делают, вероятно, делают это, чтобы свести к минимуму вероятность поломки из-за множества прямых и косвенных способов, которыми другие программы проверяют номера версий.
Так это может выглядеть так:
... хотя это было исправлено :
С такими вещами в игре вам будет лучше, если вы не будете доверять номеру версии.
источник
К сожалению, я не уверен, что есть кроссплатформенный способ сделать это. Как я обсуждаю в блоге , версия OpenSSL отображается в Ubuntu 12.04 REMAINS 1.0.1 после обновления до фиксированной версии.
ТОЛЬКО для Ubuntu 12.04 вы можете узнать, были ли вы обновлены, если все из приведенного ниже верно:
dpkg -s openssl | grep Version
показывает версию 1.0.1-4ubuntu5.12 или более позднюю.dpkg -s libssl1.0.0 | grep Version
показывает версию 1.0.1-4ubuntu5.12 или более позднюю.openssl version -a
показывает дату постройки 7 апреля 2014 года или позже.Спасибо @danny за дополнительную информацию.
источник
1.0.1-4ubuntu5.12
ТОЛЬКО для Ubuntu 12.04 LTS. Если вы используете Ubuntu 12.10, вы должны увидеть хотя бы версию,1.0.1c-3ubuntu2.7
а если вы используете 13.10, то она должна быть как минимум версией1.0.1e-3ubuntu1.2
, согласно источнику: ubuntu.com/usn/usn-2165-1libssl1.0.0
явное обновление в Ubuntu. Если вы видите дату сборки до 7 апреля 2014 года, даже если версия openssl выглядит правильно (1.0.1-4ubuntu5.12
для Ubuntu 12.04), вы, вероятно, все еще уязвимы.openssl version -a
может не потребоваться дата сборки 7 апреля, поскольку исправление переносится в более старые выпуски.Дайте следующую попытку. Он извлечет все строки из крипто- библиотеки, с которой связан ssh. Он производит более одной строки вывода, но при необходимости может быть преобразован в 1 строку.
производит
например, на Gentoo до появления
приведенная выше команда приводит к
после
Ой, до сих пор нет g.
источник
[...] part of OpenSSL 1.0.1 14 Mar 2012
, так же, какopenssl version -a
и. Это трюк, который может работать в других случаях, хотя!Проверяет ли какой-либо из этих сценариев все службы или только HTTPS ? AFAIK , PostgreSQL уязвим, но это только слух, пока не всплывет атака в дикой природе.
Существует сценарий metasploit, доступный для использования.
Вы можете напечатать это (протестировано с GnuWin32 OpenSSL бинарная версия 1.0.1.6, от 2014-01-14), или просто использовать скрипт в комментарии ниже этого. Это точнее и проще!
После подключения введите B, и вы увидите на уязвимом хосте, и вы не будете отключены:
Вы получите ответ сердцебиения, похожий на этот.
На пропатченном хосте вы увидите ответ, аналогичный приведенному ниже, и вы будете отключены:
Введите B
Источник:
Есть также эти инструменты:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
источник
Для Ubuntu вы можете использовать:
И сравните с http://www.ubuntu.com/usn/usn-2165-1/ . После перезагрузки (!!!) вы можете проверить с помощью
http://possible.lv/tools/hb
.источник
Вам лучше обновиться до последней версии OpenSSL OpenSSL 1.0.1j.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
источник
Я нашел этот скрипт в devcentral :
Замените
example.com
на имя или IP-адрес сервера, который вы хотите проверить.Вернется,
"safe"
если ваш сервер в порядке или"server extension "heartbeat" (id=15)"
если нет.Это зависит не от номера версии, а от перечисления расширения сервера, вызывающего проблему, поэтому оно должно быть защищено от shenanigans версии библиотеки.
Машина вы работаете
openssl s_client
на должны быть с помощью OpenSSL 1.0.1 или более поздней версии для того , чтобы это работало.источник
openssl s_client
ДОЛЖНА использовать OpenSSL 1.0.1 или новее, чтобы это работало. Если вы запустите эту команду на машине с 0.9.8 или 1.0.0, она всегда сообщит «Безопасно», даже для уязвимых серверов .