«Даже если вы нажмете на какую-то ссылку и введете логин и пароль то ничего такого не случится» — реклама браузера Яндекс. Как это работает и так ли это? Посмотрев эту рекламу мне конечно стало интересно, как Яндекс смог «победить» такую сложно решаемую проблему как кража паролей. Хочу отметить, что рассматривал я только одну из функций Яндекс Protect, а именно "Защита от кражи паролей".

Если совсем коротко, то принцип действия механизма защиты от кражи паролей в Яндекс браузере сводится к проверки значения поля input type=«password» перед отправкой формы на сервер. В этот момент значения этого поля сравнивается со значением сохраненных в браузере паролей(по информации от Яндекс сравниваются хэши паролей). При обнаружении совпадений выводится предупреждение пользователю. Идея в общем понятная, однако эффективность данного метода вызывает сомнения.
Во-первых
Такой метод точно не остановит создателей фишинговых сайтов, а просто заставит немного модернизировать код на страничке. Вариантов может быть много. Например, использовать другой input type — проверяется только type=password, поставить обработчик событий на поле ввода, читать содержимое скриптом и отправлять значения на сервер в фоне и еще можно придумать не мало подобного. В качестве эксперимента, я модернизировал поле input type=«password» по известному мне алгоритму перед отправкой, а на сервере восстанавливал его.
Во-вторых
Реализованный в Яндекс браузере метод открывает еще одну «дверцу» для злоумышленников. В силу того, что для работы данного механизма защиты, браузер сравнивает набранный пароль с сохраненными в браузере у злоумышленников появляется возможность реализовать перебор паролей в фоновом режиме просто разместив на сайте специально подготовленный скрипт. Такой скрипт должен поочередно заполнять скрытое от пользователя поле input type=«password» паролями из словаря и эмулировать отправку формы на сервер в ожидании срабатывания защиты. Срабатывание защиты и будет являться индикатором того, что пароль верный. Способ имеет ряд недостатков — для перебора большого количества паролей пользователь должен долго находится на зловредном сайте; неизвестно от какого ресурса подобранный пароль; у пользователя внезапно выскакивает окно с предупреждением, которое может его насторожить. Однако, все равно неприятная особенность.
Ну и в-третьих
На мой взгляд самая неприятна часть. Подобная реклама прививает пользователям чувство ложной защищенности, что по сути снижает уровень безопасности этих самых пользователей Яндекс браузера.

Комментарии (31)


  1. gene4000
    24.12.2015 11:33
    +1

    На сайте mail.ru это будет работать? Очень надеюсь, что именно в связи с этим неэтичным поведением майлрушного сайта Яндекс предложил решение.


    1. EugeneSukhov
      25.12.2015 10:09

      Полагаю, это была одна из причин появления данной фичи в Яндекс браузере.


  1. 23d
    24.12.2015 12:57
    +3

    Нельзя отрицать того, что хоть и слабая технология, но все же защищает от какой то части атак. А так, «театр безопасности» тема популярная.


    1. EugeneSukhov
      25.12.2015 10:12
      +1

      Мне приводили пример про бронежилет. Бронежилет не гарантирует безопасности, но это дополнительная защита. Но хочу отметить, когда бойцам дают бронежилет, им не говорят, что теперь они могут идти в атаку во весь рост и с ними «ничего такого не случится»» :)


  1. ivanych
    24.12.2015 13:46
    +2

    Поясните, пожалуйста, я не понял — от чего, собственно, эта защита? Типа, не дает какай-то неведомой силе заполнить поле пароля и отправить куда-то форму? А откуда эта сила знает пароль?


    1. kukutz
      24.12.2015 13:51
      +6

      Эта защита от фишинга. Браузер уточняет у пользователя, точно ли он хочет отдать свой пароль от хорошего сайта Х вот этому неизвестному сайту Y.


      1. ivanych
        24.12.2015 13:59

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


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


        1. kukutz
          24.12.2015 14:04

          Да, верно.


    1. EugeneSukhov
      24.12.2015 14:01

      Сила знает пароль(скорее его хэш) если он сохранен в хранилище паролей браузера. И да, она сравнивает его перед отправкой формы и останавливает отправку формы.


      1. ivanych
        24.12.2015 14:04
        +1

        Кукуц выше говорит другое.


  1. ComodoHacker
    24.12.2015 13:59
    +2

    Сделали бы POC страничку. Глядишь, Яндекс улучшит защиту. А так не обратят внимания.


    1. EugeneSukhov
      24.12.2015 14:05
      -1

      Яндекс в курсе.


    1. EugeneSukhov
      25.12.2015 10:23
      -1

      Живые примеры есть, были отправлены Яндексу, публиковать их в открытом доступе, считаю не совсем правильным решением. Хотя, полагаю, Яндекс не считает вышесказанное проблемой. Со мной они не связались, исправления которые они внесли не закрывают проблему. Вчера проверил, перебор пароля все равно возможен. По большому счету функцию защиты пароля надо убирать, так как она таковой не является, но на это они пойти не могут. Полагаю, причиной появления этой фичи явилась проблема с mail.ru и подсмотренный у Google Password Alert https://googleblog.blogspot.ru/2015/04/protect-your-google-account-with.html


  1. kukutz
    24.12.2015 14:03
    +9

    Здравствуйте.

    Спасибо, что обратили внимание на Яндекс.Браузер. Хочу немного прокомментировать.

    1. Конечно, этот метод имеет свои ограничения и поэтому не является единственным методом защиты от фишинга. У нас, конечно же, есть и база плохих, фишинговых сайтах, о которых мы предупредим пользователя ещё до захода на них. Но от части generic-атак, не рассчитанных прицельно на Яндекс.Браузер, этот метод может уберечь.

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

    Но от произвольно нарисованного контрола, не являющегося инпутом, это не убережет, конечно. От него вообще, кажется, может уберечь только если мы будем выводить input type=password в особом, уникальном для каждого отдельного пользователя, дизайне, а пользователь будет внимательно за этим следить и не вводить свой пароль никуда, кроме полей ввода такого особого дизайна.

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

    2. Перебор паролей через эту функцию сделать не получится, т.к. браузер отличает пользовательские события от эмуляции. Нам уже сообщали о возможности такой атаки в первой версии Яндекс.Браузера с этой возможностью и мы закрыли эту уязвимость и все похожие способы использовать нашу защиту для перебора в версии 15.12.

    Роман Иванов,
    Яндекс.Браузер


    1. EugeneSukhov
      24.12.2015 15:30
      +1

      Проверялось на версии 15.10.2454.3865 в конце октября, тогда же вам и сообщил.
      Хотелось бы услышать Ваш комментарий на третий пункт.


    1. tundrawolf_kiba
      24.12.2015 15:43

      Есть предложение добавить генератор паролей, если пользователь захочет сменить пароль после такого вопроса.


      1. kukutz
        24.12.2015 15:57
        +1

        Над этой идеей мы думаем среди других, спасибо.


    1. ComodoHacker
      24.12.2015 19:44
      +1

      может уберечь только если мы будем выводить input type=password в особом, уникальном для каждого отдельного пользователя, дизайне

      А разве фишеры не могут обойтись вообще без input type=password и полностью его эмулировать? Например принимать ввод в незаметный контрол, а эхо выводить по событиям в другой, поверх него?


      1. kukutz
        24.12.2015 20:41

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


        1. ComodoHacker
          25.12.2015 01:37

          Наверное, но я-то не об этом.


          1. kukutz
            25.12.2015 14:07

            А о чём?


            1. ComodoHacker
              25.12.2015 19:53

              О том, смогут ли фишеры обойти вашу защиту, нарисовав ровно то, что ожидает пользователь, но без type=password.

              Я просто во фронтенде не очень, поэтому интересуюсь.


              1. kukutz
                25.12.2015 21:10

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


                1. Serator
                  26.12.2015 04:14

                  А разве такого API сейчас нет? К примеру, SVG foreignObject, переданный в canvas. Но, в теории, можно и просто поверх поля для ввода пароля наложить слой с прозрачным полем для ввода. Другое дело, если бы пароль можно было ввести только в недоступном для страницы месте, аля поле для ввода адреса сайта. Это уже, как мне кажется, просто так не поделаешь.


                  1. kukutz
                    28.12.2015 00:28

                    > К примеру, SVG foreignObject, переданный в canvas.

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


                    1. Serator
                      28.12.2015 00:52

                      jsfiddle.net/Serator/dh86482v — вот пример того, что можно получить сейчас. Отработало с Fx'е, Chrome'е. EDGE выдал ошибку на запросе данных значения пикселя из изображения.


        1. vaslobas
          25.12.2015 06:05

          Будут фишинговые страницы смотреть на юзер-агент, если он принадлежит Яндекс-браузеру, то будут показывать «поле, фон у которого фиолетовый в оранжевую полоску». Гонка вооружений какая-то.


          1. kukutz
            25.12.2015 14:07

            Вы не поняли, что означает фраза «в уникальном для каждого отдельного пользователя дизайне».


    1. EugeneSukhov
      25.12.2015 10:07
      +1

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


      1. kukutz
        25.12.2015 14:08

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

        По перебору пишу вам в личку.


    1. EugeneSukhov
      25.12.2015 10:30

      Извините, Роман, я перепутал имя обращаясь к Вам. :)