Heartbleed

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Статьи без источников (тип: не указан)

Heartbleed (CVE-2014-0160) — ошибка (переполнение буфера) в криптографическом программном обеспечении OpenSSL, позволяющая несанкционированно читать память на сервере или на клиенте, в том числе для извлечения закрытого ключа сервера. Информация об уязвимости была опубликована в апреле 2014 года, ошибка существовала с конца 2011 года.

На момент объявления об ошибке количество уязвимых веб-сайтов оценивалось в полмиллиона, это составляло около 17 % защищённых веб-сайтов Интернета.[1]





История

К:Википедия:Статьи без источников (тип: не указан)

Расширение Heartbeat для TLS и DTLS протоколов было предложено RFC 6520 в качестве стандарта в феврале 2012. Оно давало возможность проверять и поддерживать активными соединения без постоянного их возобновления. В 2011 один из авторов RFC, Робин Сеггельман, реализовал Heartbeat расширение для OpenSSL и захотел, чтобы результат его работы были включены в OpenSSL. Его изменения были проверены Стивеном Хэнсоном, одним из четырех основных разработчиков OpenSSL. Хэнсон не заметил проблем в реализации и добавил уязвимый код в репозиторий OpenSSL 31 декабря 2011. Уязвимость распространилась с OpenSSL 1.0.1 14 декабря 2012. Поддержка Heartbeat была включена по умолчанию, что и повлияло на распространение уязвимости.

Открытие

Официально о существовании ошибки Heartbleed сообщили 1 апреля 2014. Название Heartbleed было придумано инженером финской компании Codenomicon, занимающейся информационной безопасностью. Они же придумали логотип в виде кровоточащего сердца и создали сайт [heartbleed.com heartbleed.com], чтобы рассказать об уязвимости сообществу. Согласно Codenomicon, команда безопасности Google сообщила о Heartbleed в OpenSSL первой, но обе компании обнаружили уязвимость независимо друг от друга. Codenomicon объявила 3 апреля 2014 датой обнаружения бага и датой сообщения об этом Национальному Центру Компьютерной Безопасности Финляндии для отслеживания уязвимости. The Sydney Morning Herald опубликовали 15 апреля 2014 временную диаграмму открытия уязвимости, показывающую, что некоторые организации смогли устранить уязвимость до её публичного объявления. В некоторых случаях, не до конца понятно, как они её обнаружили.

Устранение уязвимости

Бодо Меллер и Адам Лэнгли из Google разработали патч, устраняющий Heartbleed. Стивен Хэнсон применил патч к OpenSSL 7 апреля 2014. Первая исправленная версия 1.0.1g была представлена в этот же день. По состоянию на 21 июня 2014, 309197 серверов остались уязвимыми.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 2714 дней]

Атака

Ошибка была в TLS Heartbeat, несложном расширении TLS. TLS — протокол представления данных поверх TCP или UDP, рассчитанный, однако, только на непрерывный поток данных. Если же обмен данными состоит из запросов и ответов, появляется возможность определять какую-то информацию по активности связи, да и после длинного простоя надо будет заново устанавливать TLS-соединение. Чтобы справиться с проблемой, компьютеры «перебрасываются» туда-сюда пакетом случайной длины, и этим поддерживают связь в активном состоянии и «зашумляют» канал.[2]

Чтобы сложнее было отличить «сердцебиение» от полезного трафика, пошли на хитрость: пакет состоит из контрольной строки и ничего не значащего «хвоста». Компьютер должен вернуть сообщение, состоящее из такой же строки и своей порции «шума». Длина контрольной строки задаётся 16-битным целым числом.[2] Если эта длина окажется больше, чем весь пакет, уязвимые версии OpenSSL читали память за пределами отведённого буфера (RFC предписывает не отвечать на такие пакеты). За пределами буфера могли встречаться различные ценные данные, в том числе (очень редко) закрытые ключи шифрования сервера, данные других соединений, содержащие идентификационные cookie и многое другое.[3]

Heartbleed осуществляется отправкой некорректно сформированного Heartbeat-запроса, в котором реальный размер строки очень мал, а число, символизирующее длину передаваемой строки, очень велико. Так можно получить в ответ от сервера больше всего скрытой информации. Таким образом, у жертвы возможно за один запрос узнать до 64 килобайт памяти, которая была ранее использована OpenSSL.

Heartbeat-запрос выглядит так: «Верни мне слово тест, которое состоит из 4 букв», и получает ответ «тест». Heartbleed-запрос выглядит иначе: «Верни мне слово „тест“, которое состоит из 500 букв», и получает ответ, состоящий из слова «тест» и еще 496 символов, лежащих у жертвы в активной памяти.

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

Patch

Проблема может быть решена игнорированием Heartbeat-запросов, которые хотят получить больше данных, чем длина передаваемой строки. В версии 1.0.1g OpenSSL добавлена проверка границ, которая предотвращает выход за пределы переданной строки. Например, был добавлен следующий тест, который отбрасывает некорректные Heartbeat запросы, предотвращая Heartbleed

if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */

Версии OpenSSL

Подверженные

  • OpenSSL 1.0.2-beta
  • OpenSSL 1.0.1 — OpenSSL 1.0.1f

Чтобы безопасно пользоваться уязвимой версией OpenSSL, её нужно компилировать с флагом –DOPENSSL_NO_HEARTBEATS.

Уязвимые исходники: t1_lib.c и d1_both.c.
Уязвимые функции: tls1_process_heartbeat() и dtls1_process_heartbeat()

Не подверженные

  • OpenSSL 1.0.2-beta2 (предстоящая)
  • OpenSSL 1.0.1g
  • OpenSSL 1.0.0 (и релизы ветви 1.0.0)
  • OpenSSL 0.9.8 (и релизы ветви 0.9.8)

Реакция

Системным администраторам рекомендуется либо использовать OpenSSL 1.0.1g, либо перекомпилировать библиотеку OpenSSL с ключом -DOPENSSL_NO_HEARTBEATS, отключая уязвимое расширение до тех пор, пока не представится возможным обновить ПО. Несмотря на то, что наложение патча решает проблему, запущенные приложения будут использовать подгруженный и ещё уязвимый код OpenSSL, пока каждое из приложений не будет перезапущено, позволяя подгрузить исправленный код. Так как все использованные уязвимой версией OpenSSL сертификаты и пароли могут считаться скомпрометированными, все закрытые ключи должны быть перевыпущены и все пароли сменены.

В день обнаружения уязвимости Tor Project выпустил уведомление, советующее всем желающим «надёжной анонимности или приватности в Интернете» «держаться подальше от Интернета несколько дней, пока всё не утрясётся».[4] Владельцы сайтов и платформ советуют своим пользователям сменить пароли.

Напишите отзыв о статье "Heartbleed"

Примечания

  1. Mutton, Paul [news.netcraft.com/archives/2014/04/08/half-a-million-widely-trusted-websites-vulnerable-to-heartbleed-bug.html Half a million widely trusted websites vulnerable to Heartbleed bug]. Netcraft (8 Апреля, 2014).
  2. 1 2 [tools.ietf.org/html/rfc6520 RFC 6520 - Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension]
  3. [arstechnica.com/security/2014/04/critical-crypto-bug-exposes-yahoo-mail-passwords-russian-roulette-style/ Critical crypto bug exposes Yahoo Mail, other passwords Russian roulette-style | Ars Technica]
  4. [blog.torproject.org/blog/openssl-bug-cve-2014-0160 OpenSSL bug CVE-2014-0160], Tor (7 Апреля, 2014).

См. также

  • OpenSSL
  • Bashdoor — сходный по опасности баг в bash
  • Badlock — опасная уязвимость в SMB

Ссылки

  • [heartbleed.com/ Summary and Q&A about the bug] (англ.).
  • [habrahabr.ru/post/218661/ Последствия OpenSSL HeartBleed]. Хабрахабр.
  • [heartbleed.ru/ Перевод сайта heartbleed.com] (рус).

Отрывок, характеризующий Heartbleed

В то же мгновение, как раздались первые звуки топота и крика, Петя, ударив свою лошадь и выпустив поводья, не слушая Денисова, кричавшего на него, поскакал вперед. Пете показалось, что вдруг совершенно, как середь дня, ярко рассвело в ту минуту, как послышался выстрел. Он подскакал к мосту. Впереди по дороге скакали казаки. На мосту он столкнулся с отставшим казаком и поскакал дальше. Впереди какие то люди, – должно быть, это были французы, – бежали с правой стороны дороги на левую. Один упал в грязь под ногами Петиной лошади.
У одной избы столпились казаки, что то делая. Из середины толпы послышался страшный крик. Петя подскакал к этой толпе, и первое, что он увидал, было бледное, с трясущейся нижней челюстью лицо француза, державшегося за древко направленной на него пики.
– Ура!.. Ребята… наши… – прокричал Петя и, дав поводья разгорячившейся лошади, поскакал вперед по улице.
Впереди слышны были выстрелы. Казаки, гусары и русские оборванные пленные, бежавшие с обеих сторон дороги, все громко и нескладно кричали что то. Молодцеватый, без шапки, с красным нахмуренным лицом, француз в синей шинели отбивался штыком от гусаров. Когда Петя подскакал, француз уже упал. Опять опоздал, мелькнуло в голове Пети, и он поскакал туда, откуда слышались частые выстрелы. Выстрелы раздавались на дворе того барского дома, на котором он был вчера ночью с Долоховым. Французы засели там за плетнем в густом, заросшем кустами саду и стреляли по казакам, столпившимся у ворот. Подъезжая к воротам, Петя в пороховом дыму увидал Долохова с бледным, зеленоватым лицом, кричавшего что то людям. «В объезд! Пехоту подождать!» – кричал он, в то время как Петя подъехал к нему.
– Подождать?.. Ураааа!.. – закричал Петя и, не медля ни одной минуты, поскакал к тому месту, откуда слышались выстрелы и где гуще был пороховой дым. Послышался залп, провизжали пустые и во что то шлепнувшие пули. Казаки и Долохов вскакали вслед за Петей в ворота дома. Французы в колеблющемся густом дыме одни бросали оружие и выбегали из кустов навстречу казакам, другие бежали под гору к пруду. Петя скакал на своей лошади вдоль по барскому двору и, вместо того чтобы держать поводья, странно и быстро махал обеими руками и все дальше и дальше сбивался с седла на одну сторону. Лошадь, набежав на тлевший в утреннем свето костер, уперлась, и Петя тяжело упал на мокрую землю. Казаки видели, как быстро задергались его руки и ноги, несмотря на то, что голова его не шевелилась. Пуля пробила ему голову.
Переговоривши с старшим французским офицером, который вышел к нему из за дома с платком на шпаге и объявил, что они сдаются, Долохов слез с лошади и подошел к неподвижно, с раскинутыми руками, лежавшему Пете.
– Готов, – сказал он, нахмурившись, и пошел в ворота навстречу ехавшему к нему Денисову.
– Убит?! – вскрикнул Денисов, увидав еще издалека то знакомое ему, несомненно безжизненное положение, в котором лежало тело Пети.
– Готов, – повторил Долохов, как будто выговаривание этого слова доставляло ему удовольствие, и быстро пошел к пленным, которых окружили спешившиеся казаки. – Брать не будем! – крикнул он Денисову.
Денисов не отвечал; он подъехал к Пете, слез с лошади и дрожащими руками повернул к себе запачканное кровью и грязью, уже побледневшее лицо Пети.
«Я привык что нибудь сладкое. Отличный изюм, берите весь», – вспомнилось ему. И казаки с удивлением оглянулись на звуки, похожие на собачий лай, с которыми Денисов быстро отвернулся, подошел к плетню и схватился за него.
В числе отбитых Денисовым и Долоховым русских пленных был Пьер Безухов.


О той партии пленных, в которой был Пьер, во время всего своего движения от Москвы, не было от французского начальства никакого нового распоряжения. Партия эта 22 го октября находилась уже не с теми войсками и обозами, с которыми она вышла из Москвы. Половина обоза с сухарями, который шел за ними первые переходы, была отбита казаками, другая половина уехала вперед; пеших кавалеристов, которые шли впереди, не было ни одного больше; они все исчезли. Артиллерия, которая первые переходы виднелась впереди, заменилась теперь огромным обозом маршала Жюно, конвоируемого вестфальцами. Сзади пленных ехал обоз кавалерийских вещей.
От Вязьмы французские войска, прежде шедшие тремя колоннами, шли теперь одной кучей. Те признаки беспорядка, которые заметил Пьер на первом привале из Москвы, теперь дошли до последней степени.
Дорога, по которой они шли, с обеих сторон была уложена мертвыми лошадьми; оборванные люди, отсталые от разных команд, беспрестанно переменяясь, то присоединялись, то опять отставали от шедшей колонны.
Несколько раз во время похода бывали фальшивые тревоги, и солдаты конвоя поднимали ружья, стреляли и бежали стремглав, давя друг друга, но потом опять собирались и бранили друг друга за напрасный страх.
Эти три сборища, шедшие вместе, – кавалерийское депо, депо пленных и обоз Жюно, – все еще составляли что то отдельное и цельное, хотя и то, и другое, и третье быстро таяло.
В депо, в котором было сто двадцать повозок сначала, теперь оставалось не больше шестидесяти; остальные были отбиты или брошены. Из обоза Жюно тоже было оставлено и отбито несколько повозок. Три повозки были разграблены набежавшими отсталыми солдатами из корпуса Даву. Из разговоров немцев Пьер слышал, что к этому обозу ставили караул больше, чем к пленным, и что один из их товарищей, солдат немец, был расстрелян по приказанию самого маршала за то, что у солдата нашли серебряную ложку, принадлежавшую маршалу.
Больше же всего из этих трех сборищ растаяло депо пленных. Из трехсот тридцати человек, вышедших из Москвы, теперь оставалось меньше ста. Пленные еще более, чем седла кавалерийского депо и чем обоз Жюно, тяготили конвоирующих солдат. Седла и ложки Жюно, они понимали, что могли для чего нибудь пригодиться, но для чего было голодным и холодным солдатам конвоя стоять на карауле и стеречь таких же холодных и голодных русских, которые мерли и отставали дорогой, которых было велено пристреливать, – это было не только непонятно, но и противно. И конвойные, как бы боясь в том горестном положении, в котором они сами находились, не отдаться бывшему в них чувству жалости к пленным и тем ухудшить свое положение, особенно мрачно и строго обращались с ними.
В Дорогобуже, в то время как, заперев пленных в конюшню, конвойные солдаты ушли грабить свои же магазины, несколько человек пленных солдат подкопались под стену и убежали, но были захвачены французами и расстреляны.
Прежний, введенный при выходе из Москвы, порядок, чтобы пленные офицеры шли отдельно от солдат, уже давно был уничтожен; все те, которые могли идти, шли вместе, и Пьер с третьего перехода уже соединился опять с Каратаевым и лиловой кривоногой собакой, которая избрала себе хозяином Каратаева.
С Каратаевым, на третий день выхода из Москвы, сделалась та лихорадка, от которой он лежал в московском гошпитале, и по мере того как Каратаев ослабевал, Пьер отдалялся от него. Пьер не знал отчего, но, с тех пор как Каратаев стал слабеть, Пьер должен был делать усилие над собой, чтобы подойти к нему. И подходя к нему и слушая те тихие стоны, с которыми Каратаев обыкновенно на привалах ложился, и чувствуя усилившийся теперь запах, который издавал от себя Каратаев, Пьер отходил от него подальше и не думал о нем.