Уязвимость в пакете OpenSSL, вскрывшаяся ровно неделю назад, породила настоящий вал публикаций не только в айтишной, но и в популярной прессе. К несчастью, ошибка оказалась нетривиальной, так что в попытке упростить, донести смысл случившегося до обывателя СМИ нагородили опасной ерунды — бумерангом вернувшейся в околокомпьютерную среду. Поскольку проблема так ещё и не устранена, стоит внести ясность. Давайте зададим самые важные вопросы и попробуем дать на них простые правдивые ответы.
И первым вопросом, конечно, будет такой: насколько в действительности опасен баг под названием Heartbleed? Брюс Шнайер, признанный эксперт по криптографии и обычно весьма осторожный в оценках человек, написал буквально следующее: по шкале от 1 до 10 это 11 баллов. Катастрофическая ошибка.
Вопрос второй: в чём она заключается, что именно составляет проблему? Библиотека OpenSSL содержит набор функций, реализующих криптографические протоколы SSL и (что фактически то же самое) TLS. Они помогают скрыть содержимое передаваемых через интернет-соединение данных от посторонних глаз. К примеру, всякий раз, когда в адресной строке браузера светится «HTTPS», это означает, что ваше соединение с веб-сервером защищено с помощью SSL/TLS.
Важно понимать, что OpenSSL — не единственная библиотека, реализующая функции SSL/TLS, но самая популярная. Ведь она развивается под свободной лицензией, так что большинство веб-серверов использует именно её. Важно также, что не все версии OpenSSL содержат ошибку Heartbleed: лишь около полумиллиона серверов эксплуатируют библиотеку уязвимых версий 1.0.1 и 1.0.2beta, тогда как более ранние и более поздние её варианты ошибки не содержат.
Суть проблемы в том, что сервер не проверяет корректность некоторых запросов, поступающих от клиентов. Установив соединение, клиент (не человек, конечно, а программное обеспечение) периодически обращается к серверу с просьбой подтвердить, что соединение ещё не разорвано (эта функция называется heartbeat — «биение сердца»). В ответ сервер должен вернуть некоторый небольшой объём данных, причём количество их определяет сам клиент.
Так вот, если клиент запросит больше данных, чем отправил, дефективная OpenSSL его запрос всё равно удовлетворит — и пришлёт ему кусок из оперативной памяти длиной вплоть до 64 килобайт (отсюда название ошибки: heartbleed — «кровоточащее сердце»). В куске этом, понятное дело, могут находиться сведения, к данному клиенту отношения не имеющие, — например, пароли и логины пользователей, недавно подключившихся к серверу, а также секретный криптоключ, который сервер использует для шифрования соединений.
Отсюда — вопрос и ответ номер три: чем опасна Heartbleed? Владея вышеозначенной информацией, злоумышленник в силах организовать, в частности, прослушку чужих сеансов связи с данным сервером и заглянуть в чужие аккаунты. Поскольку многие сетяне используют один и тот же пароль на нескольких сайтах, а мультифакторная авторизация по-прежнему непопулярна (то есть в подавляющем большинстве случаев для прохода в закрытую зону достаточно знания логина и пароля), можно попробовать применить украденные о пользователе сведения на других веб-ресурсах.
Впрочем, проблема шире: та же ошибка найдена и в роутерах, и в файерволах, и в IP-телефонах. А полных масштабов катастрофы не знает вообще никто — ведь OpenSSL работает не только на серверах, но и на клиентских устройствах, а также может быть интегрирована в приложения. Так, например, Google подтвердила, что ОС Android версии 4.1.1 («миллионы устройств») подвержена ошибке. Как злоумышленники смогут её использовать — не совсем ясно, но очевидно, что атака должна быть направлена на смартфон, планшетку или конкретные приложения в них.
…Что выводит нас на четвёртый вопрос: использовали ли уже дыру против рядовых сетян? И вот тут впервые появляется неопределённость. Вплоть до минувших выходных доминировали оптимисты: считалось, что практическая опасность Heartbleed чрезмерно раздута, воспользоваться ею «в полевых условиях» крайне сложно, если возможно вообще. Однако после того, как компания Cloudflare (та самая) объявила открытый конкурс на взлом своего сервера и его один за другим, применяя только Heartbleed, хакнули четыре раза (первым, кстати, был наш соотечественник Фёдор Индутный), возобладала пессимистическая версия. К выходным же подоспели и данные о том, что зафиксированы первые реальные атаки против веб-сервисов, подверженных ошибке (списки интернет-узлов, владельцы которых поленились озадачиться обновлением OpenSSL, уже гуляют по Сети). Теперь эксперты ждут появления автоматических инструментов для эксплуатации Heartbleed, после чего, как полагают, счёт жертвам пойдёт на миллионы.
Таким образом, вопрос, знали ли о Heartbleed заранее спецслужбы (то же АНБ, к примеру), кажется несущественным. Даже если и знали, то по крайней мере не воровали деньги с чужих счетов, не крали интимные фотографии, не отбирали аккаунты. Больше интересно, остались ли какие-то следы прошлых взломов. Если кто-то действительно знал о Heartbleed до 7 апреля 2014 года, знал и пытался это использовать, то в логах атакованных серверов могли остаться зацепки. Но на этот счёт мнения расходятся. Шнайер, например, считает, что следов такие атаки не оставляют. Многие другие специалисты уверены, что следы остаются, и даже нашли минимум один в логах осени прошлого года.
Поэтому — вопрос пятый: что делать? Самый популярный совет — менять пароли немедленно — одновременно и самый вредный. Ведь если администратор сервера ошибку не исправил, смена пароля не поможет! Его могут украсть так же легко — и даже хуже того: его украдут с большей вероятностью, потому что он засветится в оперативной памяти сервера, когда вы будете его менять. Так вот: если Google, Microsoft, Yahoo!, Deutsche Bank, PayPal и некоторые другие (примерно каждый десятый) озаботились обновлением версии OpenSSL и отзывом старых (возможно скомпрометированных) сертификатов (упоминавшиеся выше тайные криптоключи, несколько упрощая, это часть сертификата сайта — его «удостоверения личности»: браузер проверяет такое удостоверение при подключении и подсвечивает адрес зелёным, если проверка прошла успешно), то сотни тысяч других веб-ресурсов ничего не исправляли. Так что сетяне сейчас стали заложниками своих любимых сайтов.
Что касается мобильных устройств и приложений, с ними проще. Их по крайней мере можно проверить самому с помощью как минимум одной программы-сканера: Heartbleed Scanner от Bluebox. И обновить операционную систему, обновить или удалить уязвимые приложения.
Менять ли пароли к веб-сайтам? Да, но только после того, как вы увидите явное оповещение от администратора конкретного веб-ресурса: мы устранили проблему или ей не подвержены, меняйте! Правильным же поведением в случае, если администрация молчит, будет воздержаться от посещения данного конкретного сайта. Ваш пароль не засветится в памяти сервера — а значит, вы снизите риск того, что его украдут.
И прежде, чем поставить точку, давайте разберём ещё пару косвенных вопросов. Опровергает ли случившееся известное утверждение, что пользователи свободного программного обеспечения более защищены от ошибок, чем пользователи проприетарного софта? Отнюдь. Действительно, внести коррективы в свободный код может практически каждый желающий — и именно так в OpenSSL и появилась ошибка Heartbleed: в предновогодние денёчки конца 2011-го некто немец Роберт Зегельман добавил в OpenSSL новые фишки, но не заметил, что одну из переменных оставил непроверенной… Проверяющие ошибку тоже пропустили — и так она попала в релиз, состоявшийся весной 2012-го. Лишь два года спустя кто-то обнаружил её, изучая исходники OpenSSL.
Плохо? Да. Однако представьте, сколько времени та же ошибка оставалась бы неизвестной широкой публике, если бы OpenSSL была проприетарной, то есть имела исходные тексты, доступные только разработчику! И сколько пришлось бы ждать заплатку!
А вот с вопросом, не была ли Heartbleed внедрена умышленно, ещё предстоит разобраться. Кто такой Роберт Зегельман? 31-летний немецкий учёный, одна из работ которого — ирония судьбы! — посвящена защите интернет-коммуникаций. Кто помогал ему писать тот код, кто его проверял, не было ли там подозрительных обстоятельств? Эта часть истории пока остаётся ненаписанной.