Жизнь после Heartbleed: как обезопасить себя в интернете

Технологии
автор: Андрей Васильков  11 апреля 2014

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

Из-за уязвимости Heartbleed под ударом оказались серверы популярных сайтов, компьютеры удалённых пользователей и сетевые устройства сложнее хаба. Компания Cisco представила впечатляющий список оборудования, который подвержен данной ошибке. Другие фирмы сейчас либо готовят аналогичные списки, либо просто игнорируют проблему.

Игровой сайт mmdoc.ru остаётся уязвимым спустя четыре дня после выхода патча (скриншот сайта possible.lv).

Игровой сайт mmdoc.ru остаётся уязвимым спустя четыре дня после выхода патча (скриншот сайта possible.lv).

Даже после выхода патча многие узлы в сети останутся уязвимыми неопределённо долго. Авторизация на сайтах и в почте, использование онлайн-банкинга и интернет-магазинов — всё это теперь крайне рискованно. Пользователям следует перестать полагаться исключительно на репутацию брендов и начать самим предпринимать активные шаги. Вот краткий перечень того, как можно повысить свою безопасность:

  • проверить домашний роутер по спискам уязвимого оборудования, обновить прошивку (если она вышла после седьмого апреля) или отключить удалённое администрирование;
  • выполнять проверку наличия незакрытой уязвимости Heartbleed на всех сайтах, работающих по протоколу HTTPS, перед их посещением;
  • сгенерировать стойкие пароли. Их не обязательно хранить или помнить: есть проверенный способ, о котором написано ниже;
  • сменить все пароли (а также секретные вопросы для их восстановления);
  • перейти (где это технически возможно) на двухфакторную авторизацию.

Теперь обо всех перечисленных этапах подробнее.

Когда стало известно об уязвимости Heratbleed, владельцы сайтов поспешили перейти на исправленную версию пакета OpenSSL и перевыпустили скомпрометировавший себя цифровой сертификат SSL. К сожалению, столь разумно пока среагировали лишь единицы.

Помимо слегка перегруженного сайта Possible, ещё одна форма для проверки любого сайта представлена здесь. Реализована она далеко не идеально — требует прямого указания порта (обычно это 443) и грешит ложноположительными результатами.

Проверка наличия уязвимости Heartlbeed на сайте магазина Google Play (скриншот сайта filippo.io).

Проверка наличия уязвимости Heartlbeed на сайте магазина Google Play
(скриншот сайта filippo.io).

Косвенно убедиться в том, что на конкретном сайте проблема была устранена, можно по дате выдачи его сертификата. Он должен быть сгенерирован после седьмого апреля этого года — дня публикации патча. Сделать такую проверку можно на специализированном веб-сервисе. Просто введите имя сайта и… скорее всего, вы убедитесь, что он до сих пор уязвим к данному виду атаки.

Проверка наличия уязвимости Heartlbeed на сайте Facebook (скриншот сайта lastpass.com).

Проверка наличия уязвимости Heartlbeed на сайте Facebook (скриншот сайта lastpass.com).

Более продвинутая методика тестирования сайта работает на сайте SSL Labs. Недавно в неё была добавлена отдельная проверка на уязвимость Heartbleed.

Проверка сайта дополнений для браузера Firefox (скриншот сайта ssllabs.com).

Проверка сайта дополнений для браузера Firefox (скриншот сайта ssllabs.com).

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

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

Брелок — устройство, позволяющее потерять все ключи одновременно.

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

Главный недостаток метода заключается в том, что, забыв мастер-пароль или повредив базу, пользователь лишается доступа сразу ко всему. Аналогично, в случае удачной атаки на зашифрованный контейнер, такая программа позволяет скомпрометировать все ваши пароли сразу.

К тому же надёжность большинства менеджеров паролей довольно сомнительна. Они сами часто содержат ошибки в реализации криптографических схем или вовсе дублируют данные в открытом виде, забывая удалять их из оперативной памяти и временных файлов. Например, во время аудита программы LastPass 2.0.20 специалисты Sophos обнаружили, что все пароли браузера Internet Explorer сохраняются в дампе памяти.

Не хранить, а творить!

Между тем существует универсальный способ превратить легко запоминающийся и даже очевидный пароль в стойкий ко взлому. Основан он на свойствах хеш-функций и весьма удобен в повседневной практике.

Лёгкий пароль должен содержать какую-то очевидную переменную часть. Например, имя сайта. Помимо неё, надо добавить что-то уникальное и постоянное, называемое «солью». Пусть в нашем примере это будет число сорок два. Выбираем любую хеш-функцию (как вариант — MD5) и вычисляем её, подставляя в качестве исходных данных наш «солёный» пароль.

Таким образом примитивный пароль «vk.com42» превращается в стойкий «EE61518029FF5AF634C1A867B064D600», а «twitter.com42» — преобразуется в «28D1FF535970D9927B099BB0897677CF». Именно эти последовательности из тридцати двух символов и следует использовать для доступа на сайты «ВКонтакте» и Twitter соответственно.

Запоминать их нет смысла, так как легко вспомнить сам метод получения. Нужный пароль отображается сразу после ввода комбинации [имя_сайта + соль] в любом хеш-калькуляторе и переносится через буфер обмена (который потом сразу очищается вручную).

Вычисление хеш-функции MD5 произвольной строки (скриншот).

Вычисление хеш-функции MD5 произвольной строки (скриншот).

Для Windows это может быть бесплатный DAMN Hash Calculator, а для Android — Hash Droid. Кроме того, существуют онлайн-сервисы вычисления хеш-функций строки или файла через простейшую форму на сайте.

Веб-сервис для вычисления хэш-функции MD5 (скриншот сайта onlinemd5.com/).

Веб-сервис для вычисления хеш-функции MD5 (скриншот сайта onlinemd5.com/).

Примечание: Старайтесь использовать только цифры и символы латиницы. Буквы кириллицы имеют разные коды в национальных кодировках. Содержащие их пароли будут по-разному обрабатываться другими хеш-калькуляторами.

Дополнительно можно повысить стойкость таких паролей, внеся в них некоторые модификации. Например, удалить последний знак, поменять местами два первых, использовать одну хеш-функцию и сокращать результат до размера другой… Вариантов масса. Каким будете пользоваться именно вы, узнать практически невозможно.

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

Двухфакторная схема авторизации подразумевает, что, помимо пароля, легитимный пользователь предоставляет для входа в систему что-то ещё. Это может быть аппаратный ключ, биометрические данные или дополнительный пароль, отправляемый ему после ввода первого по другому каналу связи (например, в СМС).

Именно таким образом уже работает большинство платёжных систем. Есть надежда, что уязвимость Heartbleed простимулирует более широкое внедрение двухфакторных схем аутентификации, обратит внимание пользователей на современные методы защиты данных и поспособствует оздоровлению интернета в целом.

Поделиться
Поделиться
Tweet
Google
 
Читайте также
Ошибку OpenSSL Heartbleed обнаружили и в роутерах
Ошибку OpenSSL Heartbleed обнаружили и в роутерах
Ошибка в пакете OpenSSL поставила под удар 2/3 серверов
Ошибка в пакете OpenSSL поставила под удар 2/3 серверов
Google не может закрыть уязвимость на 70% мобильных устройств с ОС Android
Google не может закрыть уязвимость на 70% мобильных устройств с ОС Android
  • Olban

    «Именно эти последовательности из тридцати двух символов и следует использовать для доступа на сайты «ВКонтакте» и Twitter соответственно» — ну вот и стали известны самые популярные пароли для соцсетей :-)

    • Андрей Васильков

      Речь шла о примере. В общей схеме только при использовании функции MD5 получаем множество вероятных паролей 2^128 (чуть больше трёхсот сорока ундециллионов). Особо параноидальные могут применять SHA-512 — лишь бы пароли такой длины разрешались.

  • kue

    А в это время в открытом ПО появляются все новые, очень удачные ошибки.. )

    • Sporadea

      … а в закрытом ПО их даже не исправляют :-)

  • Maxim Naguchev

    Это очень плохой пример метода генерации паролей. Подобрать такой пароль проще пареной репы. Достаточно перебрать все варианты «соли» (у вас всего два символа) помноженное на количество способов конкатенации «соли» и имени домена. Очевидных способов два — соль+домен или домен+соль. Ну пусть их будет даже 100. Пусть вы используете не MD5 а другую хеш-функцию. Их популярных и реализованных в калькуляторах и библитеках максимум шутк 20 можно насчитать. Все равно перебор будет очень-очень быстрым. Всего-то 64*2*100*20 = 256000 возможных вариантов (64 — это примерное количество возможных буквенно-символьно-цифровых символов для использовали в соли, что используются в base64).

    Но есть хороший способ генерации паролей.

    Берете очень надежную соль, например, E*lVj0aeEWm4. Ее надо выучить наизусть!

    Изобретаете алгоритм по которому преобразуете соль в зависимости от домена. Его тоже надо выучить наизусть.

    Например:
    1) вторую букву домена ставите третьей в соль, первую букву домена добавляете в конец в верхнем регистре
    2) в конец добавляете перевернутую наоборот зону домена, плюс количество символов в зоне
    3) если домен в гео-зоне (ru, jp, us, fr, me и т.д.), до в начало добавляете к паролю плюс +
    в других случаях добавляете (com, net, pro, asia, travel и т.д.) скобку (

    для facebook.com
    (E*alVj0aeEWm4Fmoc3

    для mail.ru
    +E*alVj0aeEWm4Mur2

    Сама по себе соль уже неплохой пароль. А количество и сложность извращений с алгоритмом зависит только от вашей фантазии. Более того, не нужны никакие калькуляторы хешей, все можно сделать на бумаге, а при должной сноровке и просто в голове, что особенно акутально, если надо использовать с мобильника или с чужого компьютера.

    • Андрей Васильков

      «Достаточно перебрать все варианты «соли»»
      И как же вы это сделаете?
      В своих расчётах Вы исходите из изначально неверных предпосылок.
      Число вариантов «соли» в общем случае бесконечно.
      Количество символов в ней и их расположение может быть любым. Два знака в конце — просто пример.
      Самих хэш-функций существуют десятки.
      Полное имя домена использовать необязательно.
      На этапе создания пароля и хэша могут применяться дополнительные модификации (например, добавить/удалить N символов или переставить определённые местами).
      В итоге множество возможных исходных паролей получается заведомо больше множества хэшей (число вариантов которых достаточно велико, но всё же конечно).
      Более того, из-за возможных модификаций результат может вовсе не принадлежать множеству всех хешей. Например, если он не совпадает со стандартной длиной свёртки (степени двойки, начиная от трёх).

      Учить наизусть случайный набор символов (как это предлагаете сделать Вы) стоит лишь для того, чтобы потешить свою паранойю или потренировать память. Гораздо надёжнее в смысле запоминания (и столь же безопасно) применять понятный его создателю алгоритм генерации стойких паролей. Число вариантов ограничивается лишь фантазией, а усложнять — не всегда значит делать лучше.

      • Maxim Naguchev

        >Число вариантов «соли» в общем случае бесконечно.
        >Количество символов в ней и их расположение может быть любым.
        > Два знака в конце — просто пример.

        Это плохой пример. Если уж вы рекомендуете соль, то двайте не два знака, тем более только цифры. Неопытные читатели могут понять вас буквально. Давайте стойкую к брутфорсу и к словарному перебору случайную соль. Тогда это фактически будет то же, что предложил я.

        > Самих хэш-функций существуют десятки.

        Да, десятки. А сколько из этих десятков реализованы в виде библиотек и в различных калькуляторах, так что любой сможет при необходимости высчитать этот хеш? Если какую-то экзотическую хеш-функцию невозможно посчитать, потому что ни один калькулятор его не поддерживает или надо самому садиться и писать его реализацию, то какой от этого толк? Практическое применение будет невозможно или крайне сложно и неудобно.
        Так что моя оценка в 20 популярных хеш-функций — это, как говорится, оценка сверху.

        > На этапе создания пароля и хэша могут применяться дополнительные
        > модификации (например, добавить/удалить N символов или переставить
        > определённые местами).

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

        > В итоге множество возможных исходных паролей получается заведомо
        > больше множества хэшей

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

        > Учить наизусть случайный набор символов (как это предлагаете сделать
        > Вы)
        стоит лишь для того, чтобы потешить свою паранойю или
        > потренировать
        память.

        Это Вам в раздел «Вредные советы» надо публиковать. Без случайного и достаточно длинного набора символов (битов) стойких паролей не бывает.

        > Гораздо надёжнее в смысле запоминания (и столь же безопасно)
        > применять
        понятный его создателю алгоритм генерации стойких паролей.

        В этом я с Вами полностью согласен. И Вы и я предложили алгоритм генерации легкий для запоминания. Ваш проще запомнить, мой более стойкий, но учить наизусть надо больше. Без этого никак. Даже для менеджера паролей надо генерировать и запоминать стойкий мастер-пароль. Еще один плюс моего способа — отсутствие необходимости в калькуляторе хеша, что может пригодиться в «полевых» условиях.

  • Evang

    Зачем же тут использовать криптографические алгоритмы хеширования? Применение base64 к любой строке длиной от 6 символов (и удаление с конца знаков «=») даёт вполне стойкий пароль из символов разного регистра и цифр. ;-)

  • spider.az

    А зачем, если у вас все в порядке, тогда боятся нечего http://internetbillboard.ru/

Хостинг "ИТ-ГРАД"
© ООО "Компьютерра-Онлайн", 1997-2018
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.
«Партнер Рамблера» Почта защищена сервером "СПАМОРЕЗ" Хостинг "Fornex"