На этой неделе Google с гордостью представила новое расширение для браузера Chrome под названием Password Alert. Оно было призвано обезопасить пользователей от кражи их паролей фишинговыми сайтами.
Фишинг – одна из самых популярных и успешных систем кражи паролей. Жертва получает электронное письмо, которое выглядит, как настоящее письмо от его любимого сервиса (например, Gmail). В письме каким-либо образом обосновывается необходимость срочно зайти на сайт системы, и даётся ссылка на сайт. Пользователь проходит по ссылке и на сайте системы вводит свои логин и пароль.
Суть атаки в том, что пользователь по ссылке попадает не на сайт системы, а на сайт злоумышленника, который выглядит точь-в-точь, как нужный. Таким образом злоумышленник получает логин и пароль пользователя.
По задумке разработчиков защиты от фишинга, Password Alert хранит хэш от пароля к учётной записи Gmail. Если пользователь вводит пароль с таким хэшом на каком-то другом сайте, расширение трубит тревогу, показывая всплывающее окно с предупреждением.
На следующий же после публикации блогозаписи день Пол Мур, специалист по безопасности из Великобритании, обнаружил до смешного простой способ для злоумышленника отключить предупреждение. Дело в том, что Password Alert встраивало код для показа окна в обычный DOM. Нижеследующий код удаляет оттуда окно с предупреждением:
<script type="text/javascript">
setInterval(function() {
if(document.getElementById("warning_banner")) {
document.getElementById("warning_banner").remove();
}
}, 5);
</script>
Оперативно среагировав на заявление Мура, разработчики обновили расширение. Теперь оно показывало баннер, пользуясь интерфейсом браузера, а не DOM. Но на них нашлась проруха и на этот раз.
Немного поколдовав, Мур понял, что расширение проверяет ввод пароля, фильтруя ввод с клавиатуры, который происходит после полной загрузки страницы. Если после ввода каждого символа пароля перезагружать страницу, расширение будет получать только по одному символу, поэтому оно не сможет отследить факт ввода пароля в текстовое поле.
Ввиду этого, Password Alert, хотя и будет полезным, но ни в коем случае не станет панацеей. По мнению хитрого исследователя, такого плана защиту невозможно сделать без серьёзной переработки схемы работы браузера или системы ввода паролей.
Комментарии (25)
mwizard
04.05.2015 05:57+3Зачем так сложно? Расширение настолько глупое, что банального iframe достаточно: jsfiddle.
Первый блок — максимально наивный фишинг, обычное поле для ввода пароля, расширение его ловит.
Если то же самое засунуть в iframe — второй блок, то уже не ловит.
Я не предполагал, что оно настолько просто сдастся, поэтому сначала я сделал несколько iframe, которые подменяют друг друга на ходу, таким образом весь пароль на каком-то из них не вводится — третий блок, но, как оказалось, это был даже перебор.
maaGames
04.05.2015 07:39Не пользуюсь хромом, поэтому не знаю визуальных особенностей его работы, но, разве, если перезагружать страницу после каждого символа, то она не будет мерцать и выглядеть подозрительно?
Myshov
04.05.2015 13:00Вот еще одна веская причина для глобального перехода на https
SlavikF
04.05.2015 20:11Ну сделать фишинговую страницу на supersecure.gymail.com не сильно сложней, чем на http.
А сертификаты нынче раздают бесплатно…Gendalph
04.05.2015 20:41certificate pinning for the win!
KivApple
04.05.2015 20:55Pinning спасёт, если подменить accounts.google.com. Более того, поддельный сертификат просто не дадут, потому что злоумышленник не сможет подтвердить владение доменом. Но ведь можно создать accounts.google123.com (или какой домен будет свободен) — невнимательный пользователь не заметит разницы.
KivApple
04.05.2015 20:58Фишингом занимаются не для развлечения, а ради заработка. А раз так, то вполне нормальны начальные вложения (всё равно придётся покупать домен и оплачивать хостинг). А раз так, то сертификат можно и купить — бесплатность не особо то спасёт от профессионалов. Вопрос в том, будут ли давать сертификаты на домены, похожие сайты на популярные сервисов.
VDG
Любой LastPass защитит от фишинга — если домен неправильный, то поля просто не заполнятся.
bondbig
А если DNS подменён? Например в общественном месте или уязвимый роутер.
Это я к тому, что просто «домен неправильный» вовсе не достаточно.
KivApple
А от этого спасёт SSL, который используют хотя бы на странице авторизации все более-менее серьёзные сайты.
bondbig
Вот только если пользователь обратит внимание, что https отсутствует, а вместо него простой http. Чего 96% простых людей не заметит.
KivApple
А тут уже нужна разъяснительная работа с пользователями. К счастью, большинство браузеров наличие HTTPS стараются показать очень заметно. Соответственно, стоит на форме авторизации добавить большую картинку-скриншот и красную надпись «Проверьте, что зелёный замочек на месте прежде, чем вводить пароль». Многие пользователи не помнят адрес сайта (и каждый раз заходят, как в анекдотах, вбивая поисковый запрос в поисковик), поэтому не станут проверять правильность адреса, а вот наличие пиктограммы проверить легко. К тому же злоумышленнику будет труднее получить сертификат на домен слишком похожий на популярный сайт, так что наличие индикатора HTTPS отсеет множество атак.
bondbig
Вот мы и вернулись к тому, что слабое звено — всегда человек. Технические средства — лишь вспомогательные инструменты.
Sadler
Или перевести всё на HTTPS и отказаться от HTTP, тогда никаких индикаторов не понадобится. Mozilla недавно что-то такое заявляли.
bondbig
Старый-добрый фишинг никуда от этого не денется.
Sadler
Лично мне фишинг никак не мешает, я отвечал только насчёт индикатора HTTPS.
GamePad64
Тогда с помощью HSTS можно сделать сайт https-only, а доменное имя подписать через DNSSEC.
bondbig
Это-то что поменяет? Если условный Василий Петрович наберет в браузере www.mysecretsite.ru, а ему придет подменённый ответ от DNS-сервера, что сайт имеет ip 2.2.2.2 (вместо положенных 1.1.1.1)? Кто выполнит HSTS? Правильно, никто.
GamePad64
Я же специально ссылку на DNSSEC привёл. Если ему придёт подменённый ответ, то после браузер сообщит об ошибке после того, как не сможет проверить подпись.
mayorovp
Это если DNSSEC вообще проверяется. Когда я пытался играться с BIND, я обнаружил, что не могу попасть на очень многие сайты в инете — попросту из-за неверных подписей.
Но ведь при дефолтной настройке все эти сайты браузером открывались!
a553
HSTS Preload немного поможет.
Gendalph
certificate pinning +HSTS +HSTS preload и/или https everywhere +password manager = нужно не только подделать DNS но и сертификат, иначе менеджер паролей (напр. KeePass) не отдаст пароль.
Да, много технологий и всевозможных «но», и тем не менее я считаю этот сетап достаточно безопасным.
lexore
В LastPass адрес сайта сохраняется вместе с http://, https://