Месяц поиска уязвимостей в Яндекс.Браузере
Сегодня Яндекс вместе с организаторами конференции ZeroNights запускает конкурс по поиску уязвимостей в Яндекс.Браузере. Его участники смогут не только помочь миллионам пользователей, но и побороться за вполне материальные призы.
Публиковать пост на Хабрахабре только ради анонса конкурса было бы слишком скучно, поэтому я совмещу полезное с полезным и расскажу вам, почему наша команда внедряет в браузер дополнительные технологии защиты (например, проксирование трафика открытого wi-fi), а не ограничивается лишь закрытием уязвимостей. Было бы интересно обсудить с вами наше видение.
Конкурс
Уверен, читатели Хабра согласятся, что безопасность это не конечный результат, а процесс постоянного поиска и исправления проблем. Какую бы защиту вы не разработали, рано или поздно ее кто-то пробьет. И чем больше у вашего продукта пользователей, тем чаще защиту будут испытывать на прочность.
В этой ситуации было бы неправильно игнорировать опыт и знания сторонних специалистов. Конкурс, о котором далее пойдет речь, это первая попытка нашей команды Браузера организовать такую совместную работу, поэтому будем благодарны вам за отзывы и помощь. И если все получится, и браузер в результате станет безопаснее, то мы продолжим эту практику, а в перспективе включим Яндекс.Браузер и в постоянную программу «Охота за ошибками».
С 26 октября по 20 ноября любой исследователь может попробовать найти уязвимость в Яндекс.Браузере и сообщить нам о ней через специальную форму. Среди всех участников конкурса будут выбраны трое победителей, которые пришлют наиболее критичные и неожиданные уязвимости. В качестве наград они получат 500, 300 и 150 тыс. рублей в зависимости от призового места. Объявление победителей будет происходить на «хакерской конференции» ZeroNights 26 ноября в Москве.
Более подробно правила описаны здесь.
Что нужно искать:
— Возможность обхода защиты в общественных сетях Wi-Fi, а именно создания незащищённого подключения в открытой сети Wi-Fi либо перехвата/модификации HTTP-трафика.
— Возможность обхода защиты паролей, а именно получения пароля пользователя, совпадающего с паролем от Яндекса, в обход предупреждения о вводе пароля от Яндекса на другом сайте. (Принимаются только методы обхода защиты при вводе паролей через стандартные веб-формы HTML вида <input type=password>
.)
— Возможность обхода защиты паролей путём подбора пароля от Яндекса.
— Возможность удалённого выполнения кода (remote code execution) через Use-After-Free, Integer Overflow, Stack/Heap Based Overflow, Memory Corruption и т.д.
— Возможность обхода Same Origin Policy (SOP), а именно выполнения Universal XSS (UXSS), обхода SOP через Cache-Timing, а также Browser-API уязвимость.
— Возможность обхода Content Security Policy (CSP) за исключением обхода CSP через расширения браузера или подмену HTTP-заголовков.
— Ошибки в реализации SSL\TLS, проверке сертификатов, проведении SSL-Strip с сохранением статуса защищённого соединения у ресурcа.
— Возможность запускать старые версии плагинов без подтверждения пользователем (click-to-play bypass).
— Удалённый отказ в обслуживании (Remote DoS) через JS или HTML.
В списке областей, где мы рекомендуем искать проблемы, вы можете заметить две наши новые технологии: шифрование открытого wi-fi и защита паролей от фишинга. В следующем разделе поста я постараюсь объяснить, почему мы внедряем такие механизмы и считаем эту практику важной.
Как защищать людей?
Совсем недавно Яндекс.Браузеру исполнилось три года. За это время продукт оброс возможностями (если будет интересно, перечислю их в комментариях), стал популярнее (второй по популярности десктопный браузер в России как по нашей Метрике, так и по данным Liveinternet.ru). Наша работа над безопасностью также претерпела изменения. В первое время от нас требовались лишь регулярно перевозить весь свой багаж технологий и доработок на более свежий Chromium (кстати, вопреки расхожему мнению, уже тогда мы умели бэкпортить к себе критичные исправления из новых версий Chromium). Этого вполне хватало, ведь мошенники и разработчики malware ориентировались на другие, более распространенные в те времена, браузеры. Но со временем все изменилось.
Вскоре мы узнали, каково быть целью для мошенников. Все началось с быстрого роста количества обращений в поддержку с жалобами на встроенную в браузер рекламу (до 30% от всех обращений). Как вы уже могли догадаться, причиной большинства проблем были вредоносные расширения, чьи создатели «признали» Яндекс.Браузер. К сожалению, это было понятно далеко не всем. Многие пользователи обвиняли нас в монетизации подобным способом и удаляли браузер. Поверьте, это обидно. Но мы решили не обижаться, а работать над защитой. И это принесло свои плоды. Подробнее об этой истории мы рассказывали здесь. Но самое главное в ней то, что она во многом определила одно из направлений развития Яндекс.Бразуера.
Безопасность пользователей браузера (да и многих других продуктов) зависит не только от наличия в нем уязвимостей, но и от внешних условий. Даже если у вас идеальный непробиваемый продукт (да, это фантастика), многие пользователи все равно станут жертвами мошенников, просто потому что их могут обмануть, или их данные могут идти через незащищенный канал связи, или по многим другим причинам, за которые разработчик не отвечает. Что делать в этой ситуации?
Каждый разработчик волен выбирать, как относиться к внешним причинам. Мы для себя решили, что если у нашего продукта возникают проблемы с безопасностью, то их надо решать в любом случае. Причем решать на уровне продукта и дополнительных средств защиты. Рассказывать людям о проблемах и основах безопасности тоже нужно, но этого недостаточно. Думаю, вы согласитесь, что знания распространяются слишком медленно. А вот списание денег с карты происходит почти мгновенно.
Защита Wi-Fi и паролей в Яндекс.Браузере — это и есть те самые дополнительные средства защиты. О защите открытого Wi-Fi я рассказывал на Хабре в прошлый раз. Браузер автоматически шифрует и пропускает через прокси весь HTTP-трафик, когда пользователь подключается к незащищенной точке.
Защита паролей направлена на борьбу с фишингом. Уже известные нам фишинг-сайты достаточно давно блокируются в браузере через SafeBrowsing. Но это не решает проблему в полной мере — новые сайты создаются очень быстро и порой успевают навредить до попадания в черный список. Защита паролей от фишинга — это наш первый «подход к снаряду» в решении проблемы. Суть достаточно простая. Если человек вводит пароль от популярного сайта (например, ВКонтакте) на сторонней странице, то Яндекс.Браузер предупредит его об этом риске (а заодно и заблокирует отправку данных до явного подтверждения). Сами пароли не обязательно хранить в браузере — технология запомнит и будет сравнивать лишь их хэши.
Было бы интересно узнать мнение сообщества. А тем, кто захочет принять участие в конкурсе, желаем удачи в поиске!